
2026/04/05 21:43
**AIで築いた三か月、欲しがり続けた八年**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要
著者は3か月間で約250時間を費やし、パーサー・フォーマッタ・PerfettoSQL拡張機能・ウェブプレイグラウンドを含むSQLite開発ツールセット syntaqlite を構築しました。MaxプランのClaude Codeを使用して、AIは明白な機能を高速化し、500件以上のテストを迅速に生成しました。しかし、最初のAI出力は「スパゲッティ」状態のC/Pythonコードであり、著者は保守性とモジュール性を高めるために完全にRustへ書き換えました。
AIは日常的なコーディングタスクでは有効でしたが、高レベルのアーキテクチャや設計判断、エディタプラグイン・WASMプレイグラウンド・ドキュメントといった非直感的拡張に苦戦しました。「バイブコーディング」の1か月間で、著者はプロジェクトのメンタルモデルを失い、設計選択を先延ばしにし、依存性のあるプロンプトループに陥りました。AIには履歴的文脈がないため、生成後すぐにリファクタリングを行いコードを理解可能な状態に保つ必要がありました。
公開APIは、AIが客観的な可用性や開発者満足度の指標を提供できなかったために損傷し、大規模な手動クリーニングが必要となりました。これらの挫折にもかかわらず、最終リリース(0.1)はAI生成ベースラインから完全に書き直した後、3月中旬にローンチされました。
著者は、AIコーディングエージェントが実装タスクの乗数化ツールとして機能できる一方で、アーキテクチャと設計における人間の判断を置き換えることはできないと主張しています。彼はコミュニティに対し、単なるスクリプトではなく、AIツールで構築された完全なソフトウェアの正直かつ詳細なケーススタディを共有するよう呼び掛けています。これにより組織がAIが付加価値を提供する領域と熟練した監督が不可欠な領域を理解できるようになることを期待しています。
本文
8年間、SQLite で作業するための高品質な開発ツールセットを欲しがっていました。
SQLite が業界にとって重要(¹)という事実から、誰も本当に良い開発者体験を構築していないことに長らく疑問を抱いてきました²。
数週間前、3か月間にわたり約 250 時間の労力を夜間・週末・休暇日に費やした結果、ついに synt‑aqlite(GitHub)をリリースしました³。
この実現ができた主な理由は AI コーディングエージェントのおかげだと考えています⁴。
今後の取り組み
私は synt‑aqlite を作る過程で AI がどこで役立ち、どこで逆に害を及ぼしたかを体系的に分析します。
プロジェクトと自身の背景を整理し、この経験がどれだけ一般化できるか独自に評価していただけますように。
主張ごとにプロジェクトジャーナル、コードトランスクリプト、コミット履歴から裏付けを示します⁵。
なぜ必要だったのか
Perfetto での作業では、パフォーマンストレースをクエリするための SQLite ベース言語 PerfettoSQL を保守しています。
Google 内部には約 10 万行の PerfettoSQL があり、多くのチームが利用しています。
ユーザーがツールに期待するもの(フォーマッタ、リンター、エディタ拡張機能など)が増えると、オープンソースから SQLite のツールを取り込もうとしても、信頼性・速度・柔軟性が足りず失望しました。
既存のツールは PerfettoSQL に適応できないか、単に「最重要課題」ではありませんでした。
私は高校時代に多くのオープンソースプロジェクトを手掛けていました⁷ が大学時代にはやる気が失われ、メンテナンス(バグ triage、クラッシュ調査、ドキュメント作成、コミュニティ構築)という責任感から離れました。
しかし「自分の好きなことを他者と共有できる自由」というオープンソースへの渇望は消えませんでした。SQLite 開発ツールプロジェクトは常に頭に浮かんでいましたが、難易度と単調さの両面で先延ばしになっていました。
難しい点と退屈な点
個人的時間を投資するなら Perfetto だけでなく、すべての SQLite ユーザーに対応したいと考えました。
つまり SQL を「SQLite と同じ」方式で解析する必要があります。
言語指向ツールの核はパーサです。ソースコードを「parse tree」に変換し、それを基盤にフォーマッタやリンターが構築されます。
SQLite は正式な仕様書も API も持たず、実装では parse tree 自体を生成しません⁹!
そのため SQLite のソースから必要部分だけを抽出し、自分でパーサを作るしかありません。
C 言語で密度の高いコードベースを理解するのは極めて困難です。バーチャルテーブル API など数日かけて把握しましたが、全体のパーサスタックを掴むのは骨の折れる作業でした。
SQLite の言語には 400 以上の規則があり、それぞれを parse tree のノードにマッピングする必要があります。
ルール自体は繰り返し作業ですが、テスト作成・デバッグ・バグ triage も伴います。
この点で「副プロジェクトとしては難しすぎる」「動機維持が困難」「数か月投資する価値がない」と思い、アイデアは消えてしまいました¹²。
実際にどうしたか
2025 年初頭から Aider → Roo Code → Claude Code(7 月以降)を使用してきました。
しかし 2025 年末にはモデルの品質が大幅に向上しました¹³。
Perfetto で頻繁に発生する問題は信頼できるパーサがあれば簡単に解決できます。
クリスマス休暇中に「Claude Code Max プラン(£200/月)だけで完全に AI に委ねてみる」と決め、1 月を通じて実装しました。
結果として C で SQLite ソースから抽出したパーサ、上位層のフォーマッタ、PerfettoSQL 拡張機能、Web プレイグラウンドという構成が完成しました。
しかし詳細レビューではコードベースが「スパゲティ」状態でした¹⁴。Python の抽出パイプラインは散在し、ファイルが数千行に膨れ上がり、非常に脆弱でした。
解決策として、全体を捨てて Rust で再構築しました¹⁵。C の欠点(高レベルコンポーネントの実装難易度)と分散言語の不便さを克服できるはずです。また、自身の役割も「意思決定全責任」を取る形に変え、設計の前段階で固い方針を設定し、変更ごとに徹底レビュー・問題即解消・AI 出力自動検証(lint, validation, テスト)へ投資しました¹⁶。
2 月にはコア機能が整い、3 月中旬に 0.1 リリースへ至りました。最終段階ではテスト検証、エディタ拡張、パッケージング、ドキュメントを追加しました。
本当に語りたいこと
AI がなければ起こらない出来事と、使い続けることで自分に与えた負担です。
AI がプロジェクトの存在理由であり、完成度の根源
慣性克服
「大きな新規プロジェクトに対して先延ばしが強い」という自らの弱点を、AI は技術的疑問や不安を具体化した問題へと転換しました。
「SQLite の解析方法を理解する」ではなく、「AI にアプローチを提案させてそれを破壊・再構築してみる」――最初の一歩が踏めば、以降はずっと楽になります¹⁸。
コード生成速度
AI は「関数を書け」「クラス設計を実装できる」タスクで自分より速く、将来読む人にとって直感的なスタイルでコードを出力します。
標準化は多くのコードで有効ですが、synt‑aqlite の抽出パイプラインやパーサ設計では逆に害があり、最終的には自分で設計する必要がありました。
リファクタリング
AI が生成したコードを頻繁にリファクタリングしないとコードベースは理解不能になります。
vibe‑coding 期間中は十分に行わず、全体を捨てる羽目になりました。
再構築時には「ugly か?」という質問でリファクタリングをルーチン化しました。
教育助手
Wadler‑Lindig の pretty printing(²³)や Rust ツールチェーン、VS Code エクステンション API など、自分が触れたことのない領域でも AI が実践的なレッスンを提供し、学習曲線を大幅に短縮しました。
単独で作るよりも多くを実装
AI はエディタ拡張・Python バインディング・WASM プレイグラウンド・ドキュメントサイト・複数エコシステム向けパッケージングといった「重要だが必須ではない」機能も手軽に実装できました。
UX への思考時間を確保し、ユーザー体験の質(エラーメッセージ、フォーマット出力、CLI フラグ)にも注力できます。
AI のコスト
アディクション
AI を「スロットマシン」と例えると、プロンプトを送るたびに成功か失敗が決まります。
夜遅くまで「もう一回だけ」試す癖がつき、時間的損失も増えました²⁸–³₀。
コードベースへの疎外
コードの詳細を忘れると、エージェントに対して曖昧な指示しかできず、誤解が生じます。
「FooClass を X に変える」ではなく、「Bar をするものを X に変更」という長い説明が必要になり、AI が間違える確率も上がります。
遅延設計
リファクタリングコストが低いため「後でやろう」と言い訳しやすく、結果としてコードベースは混乱したままです。
vibe‑coding 期間中に多くの設計を遅らせたことで、最終的には全体を書き直さざるを得ませんでした。
時間感覚の欠如
AI は「コードベースがある状態」を把握するだけで、時間経過や歴史を理解しません。
そのため同じミスを繰り返すか、新たな罠に陥るリスクがあります。人間の経験と歴史的文脈は不可欠です。
相対性
AI が有効・無効になる場面は一貫しています。
| 状況 | AI の効果 |
|---|---|
| 既存知識がある | 優秀。出力を即レビューし、速い進捗が得られる。 |
| 説明できるが未経験 | 良好だが注意深く管理する必要がある。例:Wadler‑Lindig でフォーマッタを学ぶ。 |
| 何も想像できない | 有害に。設計探索の際は AI に頼りすぎず、まず自分で考えるべき。 |
実装には明確な答えがある一方で、設計や API の「良さ」には客観的基準が無く、AI は苦戦します。synt‑aqlite の公開 API もその典型です。
結論
8 年間の長期プロジェクトを数か月で実現できたのは AI が大きく寄与しました。しかし成功物語ではなく、vibe‑coding による失敗と再構築が含まれます。
AI は「実装」の乗算器に優れている一方、「設計」の代替には危険です。
他者から期待するのは、週末の試作や単発スクリプトではなく、ユーザー・バグレポート・自身の変化に耐える本格的なソフトウェア開発体験を共有してほしいということです。