**Show HN:** 「人間1+エージェント1=ゼロから作るブラウザ(20 K行のコード)」

2026/01/27 22:13

**Show HN:** 「人間1+エージェント1=ゼロから作るブラウザ(20 K行のコード)」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

単一の開発者が1つのLLMエージェント(Codex)と協力し、約72時間で軽量かつ最小限のHTML/CSSブラウザを構築しました。使用したライブラリはオペレーティングシステムに付属するものだけで、サードパーティ製のRustクレートは一切利用していません。結果として得られたコードベースは 20,150行前後で72ファイル にわたり、各ファイルは 1,000行以下 です。Windows、macOS、およびLinux(X11)をサポートし、

platform/
内のプラットフォーム固有モジュールがレンダリング、ウィンドウ管理、スケーリング、ヘッドレス操作を処理します。

ブラウザは X11/cURL を介してサイトを取得 し、HTML/CSS をレンダリングし、スクリーンショットを撮取、リンクをクリック、スクロール、および戻る機能を備えています。開発は人間がLLMエージェントを操作することで推進され、多くのコードは最小限の介入で自動生成されました。回帰テストとエンドツーエンドテストでは、レンダリングされたスクリーンショットをベースライン画像と比較し、パフォーマンス改善やクラッシュハンドリングロジックが補完されています。

すべてのプラットフォーム向けバイナリリリースは GitHub CI を通じて自動的にビルドされます(詳細は

https://github.com/embedding-shapes/one-agent-one-browser/releases
参照)。このプロジェクトは、1人の人間 + 1つのLLMエージェント が数週間かけて多くのエージェントを使うよりも高速に機能するブラウザを生成できることを示しています。開発者ごとに専用エージェントを割り当てることでスケーリングが可能であること、そして複数のエージェントを追加することで本当に自律的なコーディング効率が向上するかどうかを問い直しています。リポジトリの最新コミットは
e2556016a5aa504ecafd5577c1366854ffd0e280
です。

本文

2026‑01‑27


一人の人間 + 一つのエージェント = スクラッチから作るブラウザ

ちょっとした遊びとして、HTML と CSS(JavaScript は除く)を描画できる「シンプルな」ブラウザを1週間で数百万トークンと数百万行のソースコードで作り上げてみよう、と決めました。完成すればさらに VC から投資を受けられるかもしれません。

ところが、より良いもの――人間の脳――を思い出しました!
機械よりも物事を調整し考えるのに長けているので、一つの人間の脳と一つの LLM エージェントの頭脳で何かをハックできないか試してみることにしました。

Linux/X11 上で様々なサイトを同時に実行する one‑agent‑one‑browser のデモ動画

上記は単なる .webm ビデオのように見えるかもしれませんが、実際には極めて高度で精巧なブラウザをビデオファイルとしてピクセル化してエンコードしたものです。驚きです。

要件

  • 3 日間で作成する
  • Rust のサードパーティライブラリ/依存関係は一切使用しない
  • OS に標準装備されているものなら何でも OK
  • Windows、macOS、および主要な Linux ディストリビューションで動作させる
  • 少なくとも自分のブログと Hacker News を表示できれば十分(簡単に見えるか?)
  • コードベースは常にビルド可能であること
  • 人間が読めるようにする。コード品質は最優先ではない

開発ジャーナル

Day 1 – スタート

ブラウザを「スクラッチ」から作るため、まずは「Hello World」を描画できるものを構築しました。その後ネストタグ、スクリーンショット機能、HTML/CSS の仕様(エージェントが実際には使わなかった :|)を追加。スクリーンショットでベースライン画像と比較する回帰/E2E テストも開始。リンククリックは楽しみのために加えました。

Codex と約 1 日を共にした結果、X11 と cURL を経由してウェブサイトを取得・描画できるものが出来上がりでした。Cargo.lock は空で、総行数は約 7,500 行。ファイルごとに 1,000 行未満という要件も満たしています。

Day 2 – 進化

テスト実行時にウィンドウを生成されるのが面倒だったので

--headless
フラグを追加。ウィンドウリサイズ、互換性問題、パフォーマンス改善、フォント/文字描画も向上させました。ワークフローは「サイトを選び、JavaScript なしでスクリーンショットを共有し、Codex に指示に従って再現してもらう」だけでした。多くの場合エージェントは自動的に作業を完了し、終了通知が来ると確認しました。

Day 3 – ポリッシュ&クロスプラットフォーム(+Day 4)

大幅な変更と新機能追加:回帰テスト増設、パフォーマンス修正、クラッシュ対策、スクロールサポート(本当にブラウザ!)、デモ用のデバッグログ、戻るボタン対応。3 日目末には macOS サポートを実装し、ウィンドウを開けてテストが通った状態に。次に同じ手順で Windows を追加しました。

Day 4 – ポリッシュ&CI

さらに洗練させつつ CI を各プラットフォームでパスさせました。ビルド済みのバイナリは CI 上からダウンロード可能です(72 時間以内に完了)。

約 3 日間(約 70 時間)後の成果

以下がその完成品です——約 20,000 行、最初のコミットから最後まで 72 時間で作成:

X11 上で動く one‑agent‑one‑browser のスクリーンショット

自分でビルドしてみることもできます(Rust の依存関係は一切ないので超高速)。
https://github.com/embedding-shapes/one-agent-one-browser/releases

リポジトリをクローンしてビルドし、試してみてください。完璧ではありません―「良い」とは言えませんが、動作し、一人の人間と一つのエージェントでブラウザをスクラッチから作れたことを示しています。

コード行数

$ git rev-parse HEAD
e2556016a5aa504ecafd5577c1366854ffd0e280

$ cloc src --by-file
      72 text files.
      72 unique files.
       0 files ignored.

github.com/AlDanial/cloc v 2.06  T=0.06 s (1172.5 files/s, 373824.0 lines/s)
-----------------------------------------------------------------------------------
File                                            blank        comment           code
-----------------------------------------------------------------------------------
src/layout/flex.rs                                 96              0            994
src/layout/inline.rs                               85              0            933
src/layout/mod.rs                                  82              0            910
src/browser.rs                                     78              0            867
src/platform/macos/painter.rs                      96              0            765
src/platform/x11/cairo.rs                          77              0            713
src/platform/windows/painter.rs                    88              0            689
src/bin/render-test.rs                             87              0            666
src/style/builder.rs                               83              0            663
src/platform/windows/d2d.rs                        53              0            595
src/platform/windows/windowed.rs                   72              0            591
src/style/declarations.rs                          18              0            547
src/image.rs                                       81              0            533
src/platform/macos/windowed.rs                     80              2            519
src/net/winhttp.rs                                 61              2            500
src/platform/x11/mod.rs                            56              2            487
src/css.rs                                        103            346            423
src/html.rs                                        58              0            413
src/platform/x11/painter.rs                        48              0            407
src/platform/x11/scale.rs                          57              3            346
src/layout/table.rs                                39              1            340
src/platform/x11/xft.rs                            35              0            338
src/style/parse.rs                                 34              0            311
src/win/wic.rs                                     39              8            305
src/style/mod.rs                                   26              0            292
src/style/computer.rs                              35              0            279
src/platform/x11/xlib.rs                           32              0            278
src/layout/floats.rs                               31              0            265
src/resources.rs                                   36              0            238
src/css_media.rs                                   36              1            232
src/debug.rs                                       32              0            227
src/platform/windows/dwrite.rs                     20              0            222
src/render.rs                                      18              0            196
src/style/custom_properties.rs                     34              0            186
src/platform/windows/scale.rs                      28              0            184
src/url.rs                                         32              0            173
src/layout/helpers.rs                              12              0            172
src/net/curl.rs                                    31              0            171
src/platform/macos/svg.rs                          35              0            171
src/browser/url_loader.rs                          17              0            166
src/platform/windows/gdi.rs                        17              0            165
src/platform/windows/scaled.rs                     16              0            159
src/platform/macos/scaled.rs                       16              0            158
src/layout/svg_xml.rs                               9              0            152
src/win/com.rs                                     26              0            152
src/png.rs                                         27              0            146
src/layout/replaced.rs                             15              0            131
src/net/pool.rs                                    18              0            129
src/platform/macos/scale.rs                        17              0            124
src/style/selectors.rs                             18              0            123
src/style/length.rs                                17              0            121
src/cli.rs                                         15              0            112
src/platform/windows/headless.rs                   20              0            112
src/platform/macos/headless.rs                     19              0            109
src/bin/fetch-resource.rs                          14              0            101
src/geom.rs                                        10              0            101
src/browser/render_helpers.rs                      11              0            100
src/dom.rs                                         11              0            100
src/style/background.rs                            15              0            100
src/layout/tests.rs                                 7              0             85
src/platform/windows/d3d11.rs                      14              0             83
src/win/stream.rs                                  10              0             63
src/platform/windows/svg.rs                        13              0             54
src/main.rs                                         4              0             33
src/platform/mod.rs                                 6              0             28
src/app.rs                                          5              0             25
src/lib.rs                                          1              0             20
src/platform/windows/mod.rs                         2              0             19
src/net/mod.rs                                      4              0             16
src/platform/macos/mod.rs                           2              0             14
src/platform/windows/wstr.rs                        0              0              5
src/win/mod.rs                                      0              0              3
-----------------------------------------------------------------------------------
SUM:                                             2440            365          20150
-----------------------------------------------------------------------------------

学び

  • 一人の人間が一つのエージェントを使う方が、数千のエージェントを使うよりはるかに効果的。
  • エージェントは1つのコードベースで何時間も作業し、野心的なプロジェクトで実際に進捗できる。
  • これは複数人にも拡張可能だと考えられる――各自がエージェントを持てば、どんな成果が出せるか想像してみてください!
  • 時には遅い方が速く、そして良い結果になる。
  • エージェントを操作する人間の質が、エージェントの仕組みや設定より重要である可能性もある――この点はまだ検証段階。

もし「数百のエージェントを数週間使う」より「一人と一つのエージェント」で同等かそれ以上の結果が出せるなら、質問に対する答え

「問題に対してもっと多くのエージェントを投入すれば自律的なコーディングはスケールできるか?」
は期待よりも楽観的ではない結論になるでしょう。

同じ日のほかのニュース

一覧に戻る →

2026/01/28 4:20

Chrome Canary でテキスト拡大・縮小のサポートをお試しください。

## 日本語訳: --- ## 要約 Chrome Canary は、ウェブページ上でオペレーティングシステムのテキストサイズ設定を尊重するようブラウザに指示する新しいメタタグ `<meta name="text‑scale">` の利用をユーザーが選択できるようになりました。 この機能はまだ実験的で、オプトインフラグによって制御されています。 2024 年夏に CSS Working Group に提案され、CSS Fonts 5 仕様に追加されたもので、サイトがシステムテキストスケーリングを尊重するよう設計されていることを示します。 モバイルユーザーの約三分の一(Android 約 37%、iOS 約 34%)が OS テキストサイズを調整していますが、ほとんどのブラウザはこれらの設定を無視しています。 Safari と Chrome はスキップし、Firefox for Android はページズームを使用します。 グローバルサポートを有効にするとデスクトップレイアウトが壊れる可能性があります(例:フォントサイズが倍になると LinkedIn のページが崩れます)。 したがって慎重な実装が必要です。 **開発者向けベストプラクティスチェックリスト:** 1. **初期 CSS `font-size` を上書きしないでください。** デフォルトを medium(約 16 px)に設定するか、パーセンテージ値を使用します。 2. **コンテンツ要素にはフォント相対単位(em, rem)のみを使用してください。** 必要がない限り、マージン・パディング・ギャップには使用しません。 3. **開発者ツールで 320 px ビューポートに 200 % テキストスケールをシミュレートし、`env(preferred-text-scale)` 関数を使ってテストしてください。** 未解決の質問があります:大きな見出しは本文より低い倍率で拡大すべきでしょうか(例:32 px → 64 px)? ブラウザは今年後半に `<meta name="text‑scale">` をサポートする可能性がありますが、他のエンジンについては確認されたタイムラインはありません。 追加議論とドキュメントは CSS Day 2026(6 月)で予定されています。 広く採用されれば、デザインを壊すことなくアクセシビリティ設定に対応できるようになります—ただしレイアウトの崩れを防ぐためにスペーシング単位を管理する必要があります。

2026/01/28 5:35

タイムステーション・エミュレータ

## Japanese Translation: > ## 要約 > タイムステーションエミュレーターは、スマートフォンやタブレットを低周波ラジオ送信機に変換し、ほとんどの原子時計や腕時計の同期に使用できる時間信号を放送します。NTP スタイルのアルゴリズムを用いて ±24 h のオフセットを許容し、自動的に夏時間変更と DUT1 うるう秒補正(適宜)を適用することで、BPC、DCF77、JJY、MSF、および WWVB の5つの公式局をエミュレートします。ツールは WebAssembly を介してブラウザ上で完全に動作し、インストールやデータ収集は不要です。また、44.1 kHz PCM 出力以上の DAC サポートがあれば十分です。 > > パフォーマンスは内蔵スピーカーで最も優れています。有線ヘッドホンでも動作しますが、Bluetooth やオーディオフィーバー機器では搬送波のサブハーモニック変調に必要な高周波共振子を歪めることがあります。2024 年初頭時点で iOS の Safari と Android の Firefox は不具合があり、機能しません。ユーザーは希望する局を選択し時計パラメータを設定した後、電話のスピーカーを時計のアンテナに近づけます。音声波形は、搬送波周波数のサブハーモニック変調によって実際のタイムステーション放送を模倣する RF ノイズを生成するよう設計されています。 > > エミュレーターは最大ボリュームで再生すると永久的な聴覚障害を引き起こす可能性があるため、スピーカーを直接聞くことを避けるよう警告します。ホストサイトは <https://timestation.pages.dev/> であり、そのソースコード(Unicode とアイコン資産を含む)は MIT ライセンスに準拠し、適切な帰属要件が課されています。

2026/01/28 3:57

レナート・ポッタリングとクリスチャン・ブラウナーは新しい会社を設立しました。

## Japanese Translation: まとめはすでにKey Pointsリストと完全に一致しているため、変更の必要はありません。