
2025/12/17 7:48
I ported JustHTML from Python to JavaScript with Codex CLI and GPT-5.2 in hours
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
著者は、大規模言語モデル(LLM)がPythonのHTMLパーサー JustHTML を迅速にポートし、完全機能かつ依存関係のないJavaScriptライブラリ simonw/justjshtml に変換できることを示しています。Codex CLI と GPT‑5.2 を約4時間使用して、LLM は 43 の Git コミットにわたり 625 k 出力トークンを生成し、html5lib‑tests スイートの 100 % カバレッジ(tokenizer 6810/6810, tree 1770/1782, serializer 230/230, encoding 82/83)を達成しました。結果として得られたリポジトリは約9,000 行の JavaScript を含み、
<html><head></head><body><p>Hello</p></body></html> を解析し正しい DOM ツリーとテキスト「Hello」を返しエラーなし(CI で node scripts/smoke.js によって検証)というスモークテスト、すべてのテストを実行する GitHub Actions ワークフローを備えています。公開 API の追加としては stream()、CSS‑セレクタメソッド query() / matches()、および toMarkdown() があり、これらはすべて src/index.js を通じてエクスポートされています。ブラウザプレイグラウンド(playground.html)はソースツリーから ES モジュールをロードし、GitHub Pages で https://simonw.github.io/justjshtml/playground.html にホストされています。このプロジェクトは月額 $20 の ChatGPT Plus サブスクリプションで完了しました。トークンコストはそのプランに含まれていたため、追加の金銭的費用は発生しませんでした。作業全体を通じて LLM は多数のツール呼び出し(GitHub Actions CI、シェルコマンド)を行い、最小限の監督で複雑な数時間にわたるコーディングタスクが実現できることを示しました。著者は迅速な LLM 生成ライブラリポートに関する法的・倫理的問題(著作権帰属、プロダクションレディネス、エコシステムへの広範な影響)を強調し、Python JustHTML プロジェクトが数ヶ月で1,215 コミットを必要としたのに対し、LLM ポートはわずか数時間で同等のテストカバレッジを達成し、著しい効率向上を示しています。本文
2025年12月15日
昨日は JustHTML について書きました―Emil Stenström が純粋な Python でコード・エージェントを使い、網羅的な
html5lib-tests ライブラリに対して標準規格に準拠した新しい HTML5 パーサーを構築するプロジェクトです。好奇心から昨夜は Codex CLI と GPT‑5.2 を使い、Python 版 JustHTML を JavaScript に最小限の手間で移植してみました。予想以上にうまく動きました。
TL;DR
私は simonw/justjshtml ― 依存関係を持たない JavaScript の HTML5 パーサーライブラリを構築しました。このライブラリは
html5lib-tests スイートの9 200件のテストに合格し、Emil の JustHTML API デザインを模倣しています。プロセスは最初の2回のプロンプトと数回のフォローアップで完了しました。GPT‑5.2 は数時間連続実行され、1 464 295 入力トークン(+97 122 176 キャッシュ)を消費し、625 563 出力トークン を生成、43 件のコミットに渡り 9 000 行の完全テスト済み JavaScript を作成しました。
アイデアから完成まで:約4時間――その間にクリスマスツリーを買い、家族と飾り付け、そして Knives Out を観ました。
背景
- HTML5 仕様は不正なマークアップの扱いが詳細に定義されており、ブラウザは一貫してそのような文書を処理できるようになっています。
- Simon Pieters の著書 “Idiosyncrasies of the HTML parser” はこれら規則を深掘りしています(第3章:「The HTML parser」)。
は実装に依存しないテストスイートで、相互運用性テストのゴールドスタンダードとなっています。Servo はこのテストセットを使い、Rust の高速パーサーhtml5lib-tests
を構築しました。html5ever- Emil の JustHTML は純粋な Python 実装で完全スイートに合格します。彼は数か月かけて反復し、リポジトリには1 215件のコミットがあります。
私のプロジェクトは Codex CLI に導きられた、Python コードを JavaScript に「直線的に」移植したものです。
プロセス
cd ~/dev git clone https://github.com/EmilStenstrom/justhtml git clone https://github.com/html5lib/html5lib-tests mkdir justjshtml && cd justjshtml
Codex CLI(GPT‑5.2)を
--yolo で起動し、承認プロセスをバイパスしました。
codex --yolo
最初のプロンプト
「既存コードを調査し、JustHTML の API を模倣した新しい JavaScript ライブラリの仕様を作成してください。」
AI は
spec.md を生成し、私は早期 “smoke test” マイルストーン(0.5)を追加しました。
マイルストーン 0.5 – エンドツーエンドスモークパース
new JustHTML("<html><head></head><body><p>Hello</p></body></html>") .returns a tree with the expected tag structure and text nodes. doc.toText() → "Hello" doc.errors is empty
コードは動作したので Codex に次を指示しました:
- GitHub Actions (
) を設定し、毎コミットで実行するように。test.yml - コミット&プッシュ。
その時点で私のリポジトリをプライベートに初期化し、「頻繁にコミット&プッシュ」ループを走らせました。クリスマスツリーを買う間も同じです。
トークン予算
$20/月の ChatGPT Plus プランで 5 時間のウィンドウが与えられ、6:35 pm に切れました。リセット待ち(7:14 pm)後に “Keep going.” と入力しました。
9:30 pm に Codex は次の概要で完了報告:
が CI で合格:トークナイザー 6810/6810、ツリー 1770/1782、シリアライザ 230/230、エンコーディング 82/83。html5lib-tests- パブリック API 拡張(
、stream()
、query()/matches()
)。toMarkdown() - セレクタ・ストリーム・マークダウン用のノー deps ユニットスクリプトを追加し CI に組み込み。
が<br>
を閉じるバグ修正。<p>
次に Codex にプレイグラウンドを追加させました:
「
を作成し、playground.html
の ES モジュールを読み込み、https://tools.simonwillison.net/justhtml と同等の機能を JavaScript ライブラリで実装してください。」./src/...
ファイルが生成され正しくロードされ、プライベートリポジトリに GitHub Pages を有効化しました。
プレイグラウンド URL: https://simonw.github.io/justjshtml/playground.html
最後に、ブラウザと Node.js での使用方法、帰属表示、ビルド詳細を網羅した README を要求しました。
総トークン数:2 089 858(入力 1 464 295 + キャッシュ 97 122 176;出力 625 563)。
$29.41/トークンで約 $61 000 に相当しますが、ChatGPT Plus の下では費用はゼロでした。
学んだこと
- 最先端 LLM は多くのツール呼び出しと最小限の監督で複雑かつ数時間にわたるタスクを実行できます。
- 強力なテストスイート(ここでは
)があれば、エージェントは自信を持って成功へ向けて反復できます ― これを “agentic loop の設計” と呼んでいます。html5lib-tests - LLM を使ったオープンソースライブラリの言語間移植は非常にうまく機能します。
- コードは安価です;検証済み動作コードは、エージェントが自己チェックできる現在、ほとんどコストを伴いません。
未解決の質問
-
著作権
- このライブラリは Rust または Python のオリジナルに侵害しているのでしょうか?
- 法的には問題ないとしても、このような方法でライブラリを生成することは倫理的でしょうか?
-
エコシステムへの影響
- LLM による高速移植がオープンソースコミュニティに害を与えるのでしょうか?
-
著作者と責任
- ほとんどの作業が LLM により生成された場合、私はこのライブラリに対して著作権を主張できるでしょうか?
- このようなライブラリを公開することは責任ある行為と言えるのでしょうか?
-
品質 vs 時間
- エキスパートチームが数ヶ月で作成した場合、どれほど優れたものになるでしょうか?
このプロジェクトを共有するのは、LLM 主導型ソフトウェア開発の未来について議論を喚起するためです。