テストコードが新たなモートになる時代
(saewitz.com)-
成功の逆説: プロジェクトが成長するほど、後方互換性と巨大なコードベース(The Ship of Theseus)という重荷を背負うことになります。一方で競合は、既存プロジェクトのAPI仕様やドキュメント、テストコードをAIに学習させ、核となる価値だけを抽出した「より軽量でモダンなバージョン」を瞬時に作り出せます。
-
Cloudflare vs Vercelの事例: Cloudflareは、Vercelが長年にわたって積み上げてきたNext.jsの膨大なドキュメントとテストスイートを活用し、わずか1週間でViteベースのスリムなNext.js互換ランタイムを構築しました。(現在は米国政府サイトのcio.govにも適用)
-
テストコードこそ資産: かつてはコードそのものが重要でしたが、いまや「ソフトウェア契約(Contract)」と「テストケース」が最も高価な資産になりました。これを公開することは、競合が自社サービスをそのまま複製できる精密な設計図を与えるのと同じです。
-
SQLiteの先見性: SQLiteはコードは公開する一方で、ソースコードの590倍に達する膨大なテストスイート(9,200万行)は非公開のまま維持しています。これが、彼らがオープンソースのエコシステムを維持しつつ商業的な防御力を持つための「モート」になりました。
-
結論: AI時代の商用オープンソース企業は、「完全な利他主義(オープンソース)」と「ビジネスの生存」の間で決断を迫られる時点に直面しています。今後、多くのプロジェクトがSQLiteのようにテストコードを非公開へ切り替え、独自の技術的障壁を築いていくとみられます。
19件のコメント
この観点に従うなら、もしかすると ADR(Architecture Decision Records) や CIR(Change Intent Records) のような文書が、コードそのものよりもさらに貴重に扱われるようになるのかもしれません。
かなり印象的ですね。短い文章なのに、すぐに納得できます。テストコードのセキュリティは、ソースコードより重要になることもありそうですね。
私には「e2eテストを省略するな」と言っているように聞こえるのですが、ほかの方はどうお考えか気になります
私は完全に非開発者なのですが……AIをいじる楽しさで少しコーディングをさせてみたら、頼んでもいないのにテストコードを大量に作って保存していて、こういう理由があったんですね。
これ、いったいなぜ必要なのかと聞いたら、自分がコードを作るときに必要だから消さないでくれと言っていました。
おお…その通りな気がします。
SQLiteのアプローチは本当に印象的ですね。コードの590倍にもなるテストスイートを非公開のままにしているというのは、結局のところ「ソフトウェアの本当の価値は動作仕様にある」ということですから。
実際、最近のAIコーディングツールでプロジェクトを作ってみると、既存プロジェクトのREADME、APIドキュメント、そしてテストコードさえあれば、コア機能を驚くほど速く複製できます。自分で7つのプロジェクトを運営しながら感じたことですが、テストがしっかりしているプロジェクトほど、逆説的に複製もしやすいんですよね。
ただ、Cloudflare vs Vercelの事例で見落とされている点があって、「複製」と「運用」はまったく別の問題です。Next.jsのエッジケース、プラグインのエコシステム、コミュニティへの依存性まで再現しようとすると、テストコードだけでは足りません。結局、モートはテストコード + コミュニティ + 運用ノウハウの組み合わせなのではないかと思います。
ソロ開発者として7つのプロジェクトを運営しているのですが、この記事は痛いほど身にしみます。
AIコーディングツールのおかげで初期開発のスピードは狂ったように速くなりましたが、テストなしで急いで積み上げたコードは、結局リファクタリング地獄になるんですよね。特に複数のサービスを同時に運営していると、テストのないプロジェクトは機能を1つ触るたびに他のところが壊れるのではないかと怖くて、手を入れるのが恐ろしくなります。
「テスト = moat」というたとえは正確です。競合がコードをコピーすることはできても、数千ものエッジケースをカバーするテストスイートまで複製するのは難しいでしょう。特にAIはコード生成は得意でも、意味のあるテストシナリオを作るのは、まだ人間のドメイン知識が必要な領域だという点で、なおさらそうです。
ただ、分野によってはテストコードのカバレッジがほとんどないケースもあるので、悩ましいところではありますね。そちらはまだ、他の分野に比べると良いコードをうまく作れていないようにも思います。
その分野が何なのか、もしよろしければ教えていただけますか?(言いがかりではなく、本当に純粋な興味です。)
私が働いている分野もそこまで極端な分野ではありませんが、AI分野で研究開発をしています。
一般的によく使われるフレームワーク以外にも、実際にモデルをデプロイするターゲット環境が学習していた環境と異なる場合もあります。
特定のオペレーションがサポートされていなかったりして、カスタムオペレーションをプラットフォームごとに作らなければならない場合もあります。この場合、開発した環境でそのままテストできないことも多いです。
モデルを直接設計することもありますが、特定のデータを使ってテストコードを書くことはできても、データセットによって確率的に値が変化したり、特定の時点で値が発散したりする現象は、テストコードでカバーするのが難しいんですよね。
おそらく私よりもさらにテストが難しい環境はかなりあるのではないかと思います。
あくまで私の考えですが、Notebookを使うことが多い分野や、確率的に答えが出るAI分野、あるいはゲームクライアント分野などではないかと思います。
これは私も周囲でよく話していることですが、結局のところ後になればすべてのコードを詳しく見ていくのは難しくなるので、本当に重要なロジックは必ずテストしておかないと大変なことになると思います。
記事の下部にも追記されていましたが、tldrawもテストを非公開で回しているという話がありました(冗談だったそうです)。
https://github.com/tldraw/tldraw/issues/8082
SQLiteはどのようにテストされているのか を見ると、
SQLiteは完全公開ですが、ソースコードの590倍ものテストコードがあり、これは完全非公開です。
100%の分岐カバレッジに数百万件のテストケースがあり、10億件を超える変異テストを実行しています.
イシューに入って読んでみたら、「jokeだ」とのことですね
Jokeテストだったようですね
へえ、そうなんですね。上のほうだけ見て、ふふ
「ソースよりテスト」という核心は本当にその通りだと思います。ただ、オープンテストはせずにオープンソースだけを行う戦略が有効なのかは分かりません。ソースからテスト項目を抽出することも、やはりうまくやれそうですが..
間違っていたりもするんですよね
Cloudflare, AI로 Next.js를 1주일 만에 Vite로 재구현한 vinext 공개
この記事と関連しているようです。オープンソースをやる際、テストコードの公開については、今後は保守的になることもありそうですね。