世界を動かす技術を、日本語で。

GoはAI支援ソフトウェアエンジニアリングに最適な言語です

概要

  • AIコーディングアシスタント の台頭によるソフトウェア開発の根本的な変化
  • Go言語 の設計思想とプラットフォームとしての強み
  • 可読性・信頼性・保守性 を重視したGoの特徴
  • AIと人間の協調 を支えるGoの開発ツール群とエコシステム
  • 長期的な チーム開発とシステム維持 におけるGoの優位性

AI時代のソフトウェアエンジニアリングの変化

  • AIコーディングアシスタント の普及により、コード生成作業の自動化が進展
  • 人間は 生成されたコードのレビュー・修正・検証 に注力
  • システム全体の アーキテクチャ設計・サービス境界の定義・運用の安全性確保 が人間の主な役割
  • 開発ツールの重要性 が「書きやすさ」から「レビュー・検証・保守のしやすさ」へとシフト
  • AIとの協働 を前提としたチーム開発の新たなパラダイム

Go言語の設計思想とソフトウェアエンジニアリング

  • Goは ソフトウェアエンジニアリング を重視して設計された言語
  • プログラミング は「問題解決のためのコーディング」、 ソフトウェアエンジニアリング は「長期的なシステム設計・運用・チーム協働」
  • シンプルさの徹底 により、チーム全体で統一的なコード構造・書式・テストを実現
  • 強力な後方互換性保証 による長寿命なコードベースの維持
  • グローバルな依存管理・セキュリティ対策 を備えたエコシステムの構築

Goはプラットフォーム

  • Goは単なる言語ではなく エンドツーエンドの開発プラットフォーム
  • 標準ツールチェーン により、フォーマッタ・テスト・依存管理・セキュリティツールを一括提供
  • 標準ライブラリ の充実で、外部フレームワークへの依存を最小化
  • 開発者全体の一貫性 を促進し、エコシステム全体の均質化を実現
  • AIエージェント もGoのツールチェーンを活用しやすく、高品質なコード生成が可能

Goの可読性

  • Goは 可読性優先 の設計思想
  • gofmt による自動フォーマットで、誰が書いても同じ見た目のコード
  • 複雑な抽象化やシンタックスシュガー を意図的に排除
  • AIによるコード生成 でも一貫した構文・記法が維持され、人間のレビュー効率向上
  • 標準化されたコード は、AIモデルの学習データとしても理想的

Goの信頼性

  • 静的型付け による自動的な安全性確保
  • コンパイラ が型エラーや未初期化変数などを即時検出
  • 高速なビルド でAIエージェントも効率的な自己修正ループを実現
  • 標準ライブラリ優先 でサードパーティ依存のリスク低減
  • チェックサムDB・モジュールミラー・govulncheck によるサプライチェーン攻撃対策と脆弱性管理
  • 組み込みテスト・ファズテスト で堅牢なコード検証サイクル

Goの保守性

  • 後方互換性保証 による長期的なコード維持
  • Go 1.0のコードも最新ツールチェーンでそのまま動作
  • Go 2.0は存在しない という原則で、将来もコードが壊れない安心感
  • 静的バイナリ生成 による運用ポータビリティ
  • AIエージェントによる大量リファクタやPR にも耐えるアーキテクチャの堅牢さ

まとめ:AI時代におけるGoの価値

  • AIと人間の協働 を前提としたソフトウェア開発の基盤
  • 可読性・一貫性・信頼性・保守性 を兼ね備えた言語とプラットフォーム
  • 長期的なチーム開発・運用・進化 に最適な選択肢としてのGo

Hackerたちの意見

この記事にめっちゃ同意する!NetflixでGo言語のギルドをリードしてるんだけど、最近、ユーザーがAIエージェントに書かせたGoコードが他の言語よりも良いって報告が増えてるんだ。それに、プロジェクトでもGoが他の言語より好まれる傾向が見られる。追加で2つ言いたいことがあるんだけど:

  • Goには良いコードを書くための素晴らしいリソースがあって、特に https://go.dev/doc/effective_go や https://google.github.io/styleguide/go/ は宝の山だよ。 編集:ごめん、追加するの忘れてた!これらのリソースをAIエージェントに渡して、さらに良いGoコードを生成させてるんだ。
  • 言語チームにとって、Goは夢のような存在。go fixツールやAST/SSAパッケージ、go.modの読み書きのしやすさ(go mod editとか)、その他の「プラットフォーム的」な機能のおかげで、大規模なGoコードの修正が他の言語よりずっと簡単なんだよね。

言語チームにとって、Goは夢のような存在。 めっちゃ同意!他の言語では100万通りのパターンがあることについて議論する必要はないよね。例えば、正しいフォーマットはgo fmtで常にチェックできるし、特に設定オプションも必要ない。これで終わり。

質問があるんだけど、どうしてGoが他の言語より優れていると思うの?新しい言語を学ぶのには時間がかかるし、基本的な文法は共通しててすぐに覚えられるけど、その言語特有の思考モデルをマスターするにはかなりの時間投資が必要なんだ。だから、以前Goを使ったことはあるけど、真剣にはやってなかった。最近、TypeScriptのツールがGoに移植されるって聞いて興味が湧いたし、Goがすごく速いのも知ってる。でも、AIエージェントが生成するGoコードが優れているという結果はどこから来てるの?それは公平な比較なの?Goは25のキーワードしかない小さな言語だから、コードの書き方はすごく標準化されてる。だから、自然に優れたベストプラクティスや慣習が生まれると思うけど、実際にそれを証明するコードの例があるかは分からないな。

Uberは、彼らのGoコードが他の言語のコードよりも定量的に多くの同時実行バグを抱えていると報告していて、Goの同時実行モデルを見れば明らかだと思うけど、実際のデータでも裏付けられてるんだ。他の人気のある言語よりもLLMベースのワークフローでGoが優れているという主張を裏付ける定量的データはあるの?

NetflixってJava使ってるんじゃないの?

コーディングエージェントにリソースを渡すとき、URLを渡すの?それともローカルのバージョンを使うの?ローカルにダウンロードしたドキュメントをclaudeに指示するのが結構成功したけど、大きなプロジェクトでこのパターンをどうスケールさせるかは分からないな。

私は大きなデブセック会社で主にGoとTypeScriptを使ってるんだけど、LLMが生成したGoはあまりミスがなくて、一般的にはそんなに難解じゃないよ。でも、コードの量がすごく多いから、同僚たちがレビューをうまくできてないんだ。間違ったHTTPコードを返したり、SLOに使うメトリックを誤分類したりする、すごくバカな決定を見たことがあるけど、コードの量が多すぎてそれが助けになってないと思う。皮肉なことに、LLM開発にうまくいくって実験結果が出てるから、一部のプロジェクトをRustに移行することを考えてるんだ。

アマチュアな私が感じたのは、Goは言語モデルと一緒に使うとすごく良いってこと。シンプルさとツールが助けになると思うし、そうなるだろうなって思ってた。でも、FlutterやDartでも結構いい感じだと知って驚いたよ。やっぱり良いツールとドキュメントがあって、PythonやPHPみたいな歴史的な負担もあまりないし。スタックオーバーフローもほとんど話題にならないしね。

あなたの投稿を見て、Pythonの好きなところを思い出したよ。PEP-8ってスタイルガイドがあって、コードの書き方がちょっと変わる(良い方向にね)。他の言語ではこのスタイルガイドを気にする人があまりいないのが寂しいな。

Goはシンプルさで勝ってるね。でも、見てきた限り、会社はJavaを選ぶことが多い。Goほどシンプルではないけど、十分にシンプルで速いから。でもJavaの残念なところは、シンプルなものを複雑にしちゃう広いエコシステムだよね。

誰が気にするの?言語は道具だし、LLMも道具。やりたいことに合ったものを使えばいいんだよ。ウェブレイアウトやるならGoはCSSよりいいの?最小限のwasmを出力するならzigの方がいいの?iOS特化の開発ならswiftの方がいいの?OSスクリプトならbashがいいの?自分が何をやってるか考えて、適切なものを選べばいい。これはLLMが出る前からそうだったし。楽しんでる?だったらLISPを選べばいいじゃん。

何年もbashスクリプトを書いてきたけど、最近Goを試してみたら、OSスクリプトにはGoの方がずっと良いって感じた。もっと早くGoを始めておけばよかったな。今は全てのスクリプトをGoに書き直したよ。ほんの数行でロジックがないものだけは残してるけど。

Hacker Newsで議論の続きを見る