🤖

GoはAIエージェントに最適な言語か

getbruin.com記事 + Hacker News反応まとめ — Rubyist視点で読む

getbruin.comが「Go Is the Best Language for AI Agents」という記事を投稿し、HNで300件以上のコメントがついた。核心の主張と反論をRubyist視点で整理する。

原文の核心主張

AIエージェントが大量にコードを生成する時代。エージェントが作るコードは大半が「それらしく見える」レベルなので、実際の動作検証が核心課題。

Goはこの検証に有利だというのが原文の要旨:

コンパイル言語の利点 — 静的型付けで誤った型/引数使用をコンパイル時に除外。コンパイルが通れば最低限構文的に正しいコードという保証がある。Rubyの「本番でTypeError発見」がなくなる。

Rustよりgo — Goの文法がRustより単純でLLMがより慣用的なコードを生成。GoのコンパイルがRustより速くエージェントのフィードバックループが短縮。学習データにGoコードが多い。

標準化ツール — gofmt、go test、go buildが標準。JSのような「このプロジェクトはPrettier、あちらはESLint」という混乱がない。

クロスプラットフォームバイナリ — GOOS=linux go buildで完了。Rubyの「このgemはWindowsで動かない」問題がない。

Rubyistが読むと刺さる部分

Rubyの弱点が正確に指摘される。

PythonとRubyの問題:同じ作業に20通りの方法がある。Net::HTTP vs Faraday vs HTTParty vs RestClient。エージェントがどのライブラリを使うか予測不能。Goはnet/http一つでほぼ解決。

エージェントがGoコードを一発で有効に生成する割合が約95%(著者体感)。Ruby/Pythonはランタイムでやっとエラー発見。この差はエージェントワークフローで大きい。

HNの反論

「Javaも同じ理由で適合」 — 正しい。より多い学習データ、より強力な型システム。Javaに言及しないのは若干偏向的。

「Rustの方がいい」 — コンパイラエラーを通過すればランタイムエラーがほぼない点で正しい。ただしRustは変化が速くLLMが最新APIについていけないという反論も。Rustのテストがソースファイル内にあるのでエージェントが修正時テストも一緒に更新するのは良い指摘。

「OCaml/Haskellが最高」 — 強力な型システム(GADT含む)、純粋関数、高速ビルド。理論的には正しいが学習データが不足。

「Pythonの方が良かった」 — 複数言語でプロジェクトを書き直した人がPythonがClaudeに最も合ったと主張。コードが短く理解しやすい。

「言語よりドメインが重要」 — 最も現実的な意見。TypeScriptはWeb、PythonはData/ML、GoはCLI/インフラ。「最高の言語」はエージェントが何をするかによる。

Rubyistはどうすべきか

Rubyがエージェントコード生成に不利なのは事実。動的型付け、フレームワーク断片化、ランタイムエラー依存。構造的弱点だ。

でもRailsアプリをGoで書き直すべきか?いいえ。原文も認めるように「12ヶ月後にはコードを直接読む機会が減る可能性」がある。現在の言語別長短所はLLM性能向上とともに意味が薄れうる。

実用的アプローチ:Rubyでビジネスロジック、Goでパフォーマンスクリティカルな部分。SidekiqワーカーをGoに転換、CLIツールをGoで作る。すでに多くのチームがこうしている。

この記事の本当の教訓は「Goが最高」ではなく、コンパイル時検証+標準化ツール+単純な文法がエージェント時代に価値が上がるということ。Rubyがこの方向に進化できるかがRubyistにとってより重要な問いだ。

原文主張 vs HN反論

主張HN反論Rubyist視点
Goコンパイルでエージェントコード即座検証Java、Rust、OCamlも同様Rubyはランタイム依存 — 本当の弱点
GoがRustより単純Rust: コンパイル通過=ランタイム安全Rubyも単純だが型安全性なし
標準ツール(gofmt、go test)TSもtsc+vitestで十分標準化Ruby: RuboCop+RSpec+Bundler組み合わせ必要
有効コード生成率95%PythonがClaudeに最も合ったという意見もRuby数値なし — 体感的にはもっと低い

Rubyistのための核心要約

認めるべき: 静的型付け+高速コンパイル+標準ツールがエージェント時代に価値上昇。Rubyは3つとも弱い。過大解釈するな:「最高の言語」はドメインによる。RailsをGoで書き直す必要なし。実用的に: Rubyでビジネスロジック、Goでパフォーマンスクリティカル部分。

RubyからGoへ

1

エージェント生成コードをコンパイルで即座に検証 — Rubyはランタイムまでエラーが分からない

2

gofmt/go test/go build標準ツール — RubyのRuboCop/RSpec/Bundler断片化と対比

3

Goのnet/httpひとつ vs RubyのNet::HTTP/Faraday/HTTParty/RestClient断片化

4

クロスプラットフォームバイナリ標準対応 — Ruby gemのOS互換問題なし

5

実用的アプローチ:Ruby(ビジネスロジック)+ Go(パフォーマンスクリティカル)組み合わせ

メリット

  • コンパイル時検証でエージェント生成コードの95%が初回で有効(Rubyはランタイム依存)
  • gofmtひとつでフォーマット統一 — エージェントがPrettier vs ESLintを悩む必要なし
  • 10年以上互換性を壊すバージョンなし — LLM学習データが古くても有効
  • クロスプラットフォームバイナリでエージェントが様々なOSで同一コードを検証・実行可能

デメリット

  • Ruby/Python比ライブラリエコシステムが貧弱 — 特にデータ/ML分野
  • HN反論:Rustはコンパイル通過時ランタイムエラーほぼゼロ — Goより安全
  • HN反論:PythonがClaudeに最も合ったという実戦経験も存在
  • 「最高の言語」はドメインによる — WebはTS、データはPython、CLI/インフラだけGo

ユースケース

AIエージェント(Claude Code、Codex等)でGoコードを生成しコンパイルで即座に検証するワークフロー Rubyプロジェクトのパフォーマンスボトルネック(ワーカー、CLI)をGoに分離しハイブリッドアーキテクチャ構成 エージェント生成コードのフォーマット・テスト・ビルドを標準ツール一発で処理