「退屈な言語」がAIエージェントと相性がいい理由:GoとRust、Railsに学ぶ低分散エコシステムの勝利

なぜ「退屈な言語」がAIエージェントに選ばれるのか 2026年5月、Jacob Young(Sancho Studio創業者)が発表した “Use Boring Languages with LLMs” がHacker Newsで話題を集めている。その主張はシンプルだ。「LLMは訓練コーパスの分散が低い言語で圧倒的に良いコードを生成する。逆に分散が大きいエコシステムは、エージェントの出力品質を著しく低下させる。」 この論文はHNで203ポイント・293コメントの議論を巻き起こし、Goコミュニティを中心に「AIエージェント時代の最適言語」を巡る活発な論争を引き起こした。本稿では、この論文の核心的な主張をコード例を交えて解説し、日本におけるAIエージェント言語選定の一助とする。 低分散エコシステムとは何か Youngの主張を一言で言えばこうだ。 LLMは一貫性のある技術スタックを増幅し、断片化した技術スタックを静かに劣化させる。 「低分散エコシステム」とは以下の特徴を持つ言語・ツールチェーンのことを指す。 訓練コーパスの分散が小さい — 言語の書き方が一貫しており、LLMの学習データにおける表現のばらつきが少ない 「唯一の正しい書き方」が存在する — Convention over Configurationの原則が浸透している ツールチェーンが強固 — フォーマッター、リンター、静的解析が標準装備 依存関係の選択肢が限定的 — フレームワークやライブラリの「迷い」が少ない 後方互換性が長期にわたって維持される — 言語自体が頻繁に破壊的変更を行わない この条件を最もよく満たす言語として、YoungはGoを第一候補に挙げる。次いでRailsに代表されるRuby、そしてある程度はRustも該当する。逆に最もスコアが低いのはJavaScript/TypeScriptエコシステムとPythonだ。 GoがAIエージェントに最適な5つの理由 1. シンプルな並行処理モデル GoのgoroutineはチャネルベースのCSP(Communicating Sequential Processes)モデルを採用している。これは訓練コーパスにおいて極めて一貫性のある表現を持つ。 results := make(chan string, len(urls)) for _, u := range urls { go func(u string) { resp, err := http.Get(u) if err != nil { results <- err.Error() return } defer resp.Body.Close() results <- resp.Status }(u) } for range urls { fmt.Println(<-results) } このコードは「これがGoでの標準的な並行処理の書き方」として確立されており、LLMが何度も見てきたパターンだ。対照的にJavaScriptのasync/awaitやPromise.all、Pythonのasyncioやconcurrent.futuresは複数の書き方が混在しており、LLMがどのパターンを選ぶべきかを推論するコストが増加する。 2. 包括的な標準ライブラリ Goの標準ライブラリはHTTPサーバー、暗号化、JSON/XML処理、テンプレートエンジン、SQLデータベース等、商用アプリケーションに必要な大部分をカバーする。これによりサードパーティへの依存判断が最小限で済む。 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "ok") }) http.ListenAndServe(":8080", nil) } このHTTPサーバーのコードはGoの訓練コーパスに無数に存在する。エージェントは「どのフレームワークを使うか」を判断する必要がなく、標準ライブラリの範囲内でコードを生成する。 ...

May 28, 2026 · 18 min · 3595 words · Appwright