世界を動かす技術を、日本語で。

Show HN: 人間1人 + エージェント1つ = 20,000行のコードでゼロから作るブラウザ

概要

本記事は、 人間一人LLMエージェント一体 で、ゼロから HTML/CSSレンダリング専用ブラウザ を約3日間で構築した体験記です。 サードパーティRustライブラリ不使用、主要OS対応など独自の制約下での開発過程を紹介します。 開発フロー、苦労、成果物、気づき を簡潔にまとめています。 実際のコード行数や リポジトリ情報 も記載しています。 最終的に「 一人+一エージェント」の生産性について考察しています。

たった一人と一つのエージェントでブラウザを作る挑戦記

  • 目的 :HTMLとCSSをレンダリングできる シンプルなブラウザ を、一週間で数百万トークン・数百万行のコード生成を目指して開発
  • 動機 :VC投資獲得を狙ったが、「 人間の脳 は機械より優秀」と再認識し、LLMエージェントと協力する方針に
  • デモ :.webm動画形式で動作を披露、本質は 動画化された高度なブラウザ の証明
  • 開発環境 :Linux/X11上で動作、最終的に Windows・macOS・Linux 対応

開発要件

  • 3日間 で開発完了
  • サードパーティRustライブラリ完全禁止
  • OS標準提供のもののみ利用可能
  • 主要3OS対応 (Windows, macOS, Linux)
  • 最低限のWebサイト表示 (自身のブログ、Hacker News)
  • 常にビルド可能 なコードベース
  • 人間が読める コード(ただし品質は二の次)

Day 1:基礎部分の構築

  • "Hello World"描画 からスタート
  • ネストタグ対応スクリーンショット機能 追加
  • HTML/CSS仕様書 作成(エージェントは未活用)
  • 回帰テスト・E2Eテスト 導入
  • リンククリック機能 追加
  • Codex と協働し、X11とcURLでWebサイト取得・描画
  • Cargo.lock空、約7500行のコード、ファイルごとに1000行未満遵守

Day 2:機能拡張・安定化

  • --headlessフラグ 追加、テスト時のウィンドウ表示抑制
  • ウィンドウリサイズ・互換性・パフォーマンス 改善
  • フォント/テキスト描画強化
  • 作業フロー :Webサイトを選び、JavaScript無しのスクショをエージェントに渡して再現指示
  • 人間は進捗確認のみ、大半はエージェントが自律作業

Day 3〜4:磨き上げとクロスプラットフォーム対応

  • 大規模な新機能追加・回帰テスト増強
  • パフォーマンス・クラッシュ修正
  • スクロール・デバッグログ・バックボタン 対応
  • macOS/Windowsサポート 実装、テストも通過
  • CI(継続的インテグレーション) で3OS対応を確認しリリース
  • 72時間以内 に全開発を完遂

実装結果・コード統計

  • 約2万行のRustコード、72ファイル
  • 主要ファイル例
    • src/layout/flex.rs:994行
    • src/layout/inline.rs:933行
    • src/browser.rs:867行
  • リポジトリ : https://github.com/embedding-shapes/one-agent-one-browser/releases 誰でもクローン・ビルド・試用可能

気づき・考察

  • 「人間一人+エージェント一体」 の方が、 多人数・多エージェント構成 より効率的な場合も
  • 一つのコードベース を一エージェントが長時間担当することで、野心的なプロジェクトも進む
  • 複数人+各自エージェント 体制なら、さらに大規模な成果も期待
  • 「遅いことが結果的に速い」 こともある
  • 人間側の力量が最重要 で、エージェントの設定よりも影響大
  • 何百ものエージェントを投入しても、一人+一エージェントの方が結果が良い場合があると示唆

関連リンク

  • Simon Willisonによる関連記事 : https://simonwillison.net/2026/Jan/27/one-human-one-agent-on...

この挑戦は、現代のAI開発現場において「 人間の創造力とAIの実装力」が組み合わさることの可能性や、効率的な開発体制のヒントを与えます。

Hackerたちの意見

自分にいくつかルールを決めたんだ。3日間で、サードパーティのRustクレートは使わない、一般的なOSライブラリは使っていい、X11/Windows/macOSをサポートしなきゃいけない、そしていくつかのウェブサイトをレンダリングできるようにするってね。3日後には、約20K行で動くようになったよ。ブラウザエンジン自体とX11で約14K行、WindowsとmacOSのサポートが6K行って感じ。ソースコードとCIでビルドしたバイナリはここにあるから、試してみたい人はどうぞ: https://github.com/embedding-shapes/one-agent-one-browser

それは素晴らしい制約だね。

Claudeのコード使った?どれくらいトークン消費した?費用はどれくらい?どのモデル使ったの?

すごく印象的だね!20年でここまで来たのは驚きだ。2000年代初頭にkhtml/konquerorに(ほんの少しだけ)貢献してたけど、あの頃は半分動くエンジンを作るのですら、すごく手間がかかった。基本的なレンダリングを少しでも正しくするのに、何ヶ月もかかってたからね(当時のウェブはもっと小さかったし)。エージェントコーディングに加えて、この特定のタスクにはcss-spec/html-spec/web-platform-testsを機械可読のテストスイートとして使うのがすごく役立つと思う。エージェントは実際の仕様に対して検証できるから。昔は、オープンソースのリファレンスとしてGeckoがあったけど、実際には「標準」はIEがやってることだったから、何週間もかけて実装しても、結局はどのサイトもIEの癖に合わせてコーディングされてるのを発見することが多かった、笑。GoogleやApple、他の貢献者たちは、そういう面で規律をもたらしてくれたね。

これはCursorのFastRenderよりもずっと良いデモだね。サイズも小さいし(Rustで20,000行に対して約160万行)、依存関係も少ない(画像やテキストをレンダリングするためのシステムライブラリだけ)。コードも結構読みやすいよ。例えば、これがflexboxの実装だよ: https://github.com/embedding-shapes/one-agent-one-browser/bl... それから、ブログをレンダリングしてるスクリーンショットもあるよ - https://bsky.app/profile/simonwillison.net/post/3mdg2oo6bms2... レイアウトやCSSのグラデーションも上手く処理できてるし、SVGのフィードアイコンもレンダリングできてるけど、PNG画像はレンダリングできなかった。HTML+CSSをレンダリングするブラウザを作るのが、マスパラレルエージェントのセットアップを示すのにぴったりだと思ったんだけど、数千行のコードで一人のコーディングエージェントが生産的に達成するのは無理だと思ってた。結果的に、間違ってたみたい!

人間とエージェントの組み合わせは絶対に大きな違いを生むと思うよ。Claudeが完全に脱線しても、適切なエージェントのセットアップで戻ってこれるのをよく見るけど、気づかないと軌道修正に時間がかかるんだ。今、Claudeが取り組んでるプロジェクトがあって、もっと自分をループから外すセットアップをテストしてるんだ。そこが難しい部分だからね。エージェントに出力を増やさせるのは「簡単」だけど、それをトークンに使う意欲に合わせてスケールさせるのは難しい。大体こんな感じになったよ(特別なことはないけど):

  • 現在の状態を評価して、複数の指標にスコアを割り当てる評価者を動かす。
  • あるスコアが閾値を超えたら、自動的にテストスイートを拡張する。
  • スコアが閾値を下回ったら、「リサーチエージェント」を生成して、スコアが期待に届かない理由を調査させる。
  • リサーチエージェントがレポートを提出し、それが実装エージェントに渡される。
  • メインエージェントがスコアリングを再実行し、指標の一つ以上で改善が見られなければ、そのコミットは破棄され、何を試みたか、なぜ失敗したかのメモが残される。正しくするには少し試行錯誤が必要だけど(例えば「テストスイートが間違ってる」って早い段階で出てきて、メインエージェントは「問題のある」テストを削除するためにテストスイートを見直すように言われそうになった)、こんな風に分けることでClaudeがもっと賢いことをしてくれるようになるんだ。コミットを捨てるのは過激に感じるけど、もしかしたらコミット -> 評価 -> 再実行を少し繰り返してから最終判断するオプションもありかも。今のところ、これがスケールしやすい気がする。無駄が少なくなるしね。こういうエージェントを開発者として扱うよりも、出力が100倍高いと考えた方がいいと思う。安価で使い捨てのコードはワークフローを変えるはずだ。だから、これはブラウザを作る良い方法のデモとしては優れているけど、面白さは少し減るね。FastRenderのようなものが可能だと示されたから、同じように野心的なプロジェクトに取り組む人が増えると思うけど、スコアリングや評価にもっと考慮が入るだろうね。コードのサイズや依存関係についても。

僕は、Embedding Shapesが自分の手で物事を進めて実際に作ったのがすごく好き。最近の例ではこれほどのスケールで証明されたことはないと思う。Hacker Newsがその中心にいるのを見るのは最高だね、笑。 > 「HTML+CSSをレンダリングするブラウザを作る」というのは、マッシブに並列なエージェントのセットアップを示すための完璧なタスクだと思った。なぜなら、数千行のコードで一人のコーディングエージェントが生産的に達成できるものではなかったから。結果的に、僕は間違ってた!未来や現在の技術者たちが、これをゴリアテ対ダビデの物語として目撃するのか気になる。2万ドルで1人と1エージェントが、500万ドルの160万行のコードのブラウザに勝つなんて、当時の巨大なAIユーザーや先駆者たちのAIの使い方に対する考え方を変えたね。最近ドキュメンタリーをいくつか見たけど、なんでかこの全体についてのドキュメンタリーが未来に作られる気がする。でも、ますますAIが完全なブラックボックスのように感じてきてる。誰もどうやってやるか分からないけど、みんなで実験してみて、何がうまくいくか見てる感じ(例えば、1人1エージェント > 多くのエージェントで人間が介在しないっていう確かな証拠があるように)。2026年に1ヶ月経った今、今年中にこのブラックボックスについてもっと知るための他の実験や証拠が出てくるかもしれない。サイモン、もし2026年の予測スレッドを毎月か四半期ごとに読んで、AIについてどれだけの人が間違ってたか、正しかったかを見れたら面白いね。

大半の人が、エンジニアリングの観点から見ると、これはCursorの「ブラウザ」よりもずっと優れているって同意すると思う。あまり多くはできないけど、うまくやってるからね。これが示しているのは、「エージェントを効果的に使う」ことが、問題にトークンを投げつけて何が出てくるか見るよりもずっと重要だということ。僕自身、いくつかの小さなバイブコーディングプロジェクトをコードを見ずに完全に削除しちゃったことがある。なぜなら、コードが生成された2日後には、間違った問題を解決しようとしていたり、間違ったアプローチを使っていることに気づくことがよくあるから。コーディングエージェントはそんなこと気にしない。おそらく、君が頼んだことを何でもやってくれるだけだから。アイデアを検証するために使う価値がある場合もあるけど、最初に間違った道に進むと、逆に自分を深い穴に追い込むことになることが多い。

この投稿は、同じテーマの他の多くのものよりもずっと面白いよ。何を作ったかではなく、どうやって作ったかが重要だからね。このテーマにはたくさんのノイズがあって、大半はそのものや著者に焦点を当てているように見えるけど、プロセスや制約、結果に注目するべきだと思う。

ありがとう、すごく嬉しいよ。こういう記事の著者として(もしかしたらそのきっかけになったかもしれない)、自分もその罪を犯しているし、Cursorが実際に何を作ったのか、彼らが「成功」と考えているものを理解しようと深く掘り下げるにつれて、全てがますます意味をなさなくなっていったんだ。だから、ステップバックしてプロセスの中で実際に何が難しいのか、出力に何が悪いのかを見る方が追求する価値があると思ったんだ。

すごい仕事だね。アクセシビリティを実装するために、Rustの依存関係なしで何が必要か考えたことはある?WindowsとmacOSでは、それぞれUI AutomationとCocoaのNSAccessibilityプロトコルを実装するのは簡単なんだけど、Unix/X11では、選択肢はこんな感じだと思う:

  1. 新しいD-Bus実装をゼロから作ってAT-SPIを実装する。
  2. D-BusのCライブラリ(GLib、libdbus、またはsdbus)のいずれかを使ってAT-SPIを実装する。
  3. GTKを使うか、もしくはQtを使う。

試してみたけど、レンダリングがかなりカオスだったよ。HTMLタグ内のテキストそのものに近い感じで、サイズや色、画面上の配置がバラバラだった。これが不公平に聞こえるかもしれないけど、ブラウザだと主張するなら、リンクが一貫して青くて下線が引かれているかどうかで評価できると思う(実際には、時々青くて時々下線が引かれていて、明確なパターンがないからね。標準のテキストと異なるフォーマットがなければ、未実装の機能だと受け入れたかもしれない)。レンダリングの一部はWindowsでサポートされていないかもしれないし、戻るボタンは確実にそうだね。批判を正当化したいなら、「人間一人とエージェントなしのブラウザ」って投稿を作って、コンテンツに見えるものを正規表現で取り出してランダムにフォーマットするべきかも。ダウンロードしたバイナリは、Hacker Newsのホームページやsimonwのブログでは確実にパフォーマンスが良かったよ。

これは本当に基本的なブラウザだね。独立したものとして作られたというよりは、https://cursor.com/blog/scaling-agentsへの返答として作られた感じ。だから、彼らとほぼ同じことができて、行数が少なければ、目的は達成できてる :) > リンクが常に青くて下線が引かれているかどうかを評価できるんだ。そう、このブラウザには普通のブラウザのような「デフォルトスタイルシート」がないんだ。たぶんそれを追加すべきだったけど、ブラウザがウェブをどう見せるべきかというより、ウェブからウェブサイトをレンダリングすることに興味があったんだ。 > 一部のレンダリングがWindowsでサポートされていないかもしれないけど、戻るボタンは確実にそうだね。うーん、Windows 11では戻るボタンはちゃんと動くはずだよ、昨晩試したばかりだから。もしかしてWindows 10を使ってるの?自分では試してないけど、動くはずだけど、それが理由かもね。

これはクールなプロジェクトだね。サイモンのブログをレンダリングすることが、AIが作る「ウェブブラウザ」の第一の目標になるだろう。でも、ここからブラウザになるにはまだ遠いから、それほど印象的ではないね。基本的なレンダラーを書くのは本当に難しくないし、その実験の努力と少ない行数にマッチしてる。これは70年代から書かれてきた無数のグラフィカルツールキットに似てる。Servoには「AIの貢献を受け入れない」というポリシーがあるのは知ってるけど、AIによって欠けているAPIが実装され、WPTテストが通るServoのフォークにはもっと感心するだろうな。たぶん市場性は低いけど。例えばWebTransportみたいなものを追加してみて。最近のAPIだから、仕様はちゃんと書かれているはずだし、良いテストスイートもあるよ。

機能はさておき、こういうコードベースのセキュリティ監査を見てみたいな。「セキュリティ」と「脆弱性」で記事やこのディスカッションスレッドを検索したけど、マッチするものは見つからなかった。Rustで書かれているのが助けになっていると思うけど、言語が提供する保証にどの程度頼れるのかな?(Rustについてはほとんど何も知らないけど。)

Cursorのブラウザ実装が本当に「ゼロから」なのかどうかに関係なく、エージェントを使ってブラウザをゼロから実装している人たちがいるのは、Cursorの投稿のおかげだと思うと面白いね。言い換えれば、ひねくれた面白い方法で、このブラウザはCursorのエージェントのおかげで存在している。これがAIの安全性について考えるべき方法だね!

20,000行のコードでライブラリなしにブラウザが作れるなんて、全然想像できないんだけど。zlibだけで12,000行、freetypeは30,000行、stb_truetypeは5,000行だよね。なんか計算が合ってない気がする。何か見落としてる?これってOSに描画を呼び出してるだけなの?

「(JSはなしだけど)これは機能だよ」