Go言語の歴史|誕生から2025年までの全バージョン変遷と採用事例

Go言語の歴史を2007年の誕生から2025年のGo 1.25まで全バージョン解説。Google開発の背景、ジェネリクス導入、Docker/Kubernetesなどの採用事例、他言語との比較まで網羅。

Goプログラミング

Go言語(Golang)の歴史|2007年の誕生から2025年現在まで

Go言語は、2007年にGoogleで開発が始まり、2009年に公開されたプログラミング言語です。Docker、Kubernetes、Terraformなど現代のインフラを支えるツールの多くがGoで書かれており、クラウドネイティブ時代を代表する言語のひとつです。

この記事では、Go言語の誕生から2025年最新のGo 1.25まで、18年にわたる歴史を全バージョンの変遷とともに振り返ります。

この記事でわかること

  • Go言語がなぜ作られたのか(C++への不満とGoogleの課題)
  • 全メジャーバージョン(1.0〜1.25)の主要変更点
  • ジェネリクス導入がもたらした影響
  • Docker、Kubernetesなど主要プロジェクトでの採用理由
  • 2025年現在のGoの立ち位置と将来展望

なぜGoは生まれたのか? Google社内の課題

C++のコンパイル時間問題(2007年)

Go言語の開発は2007年9月に、Google社内で3人のエンジニアによって始まりました。

きっかけは、Rob PikeがC++の遅いコンパイル時間に困っていたことです。当時のGoogle社内では、大規模なC++プロジェクトのビルドに45分以上かかることもありました。Rob PikeがRobert Griesemerと話をしていたところ、Ken Thompsonが隣のオフィスにいたため、3人で「もっとシンプルで高速な言語を作れないか」という議論が始まりました。

開発者3人の経歴

この3人は、コンピュータサイエンスの歴史に名を刻む伝説的なエンジニアです。

開発者 主な業績
Rob Pike UNIX開発、Plan 9 OS設計、UTF-8エンコーディング共同考案
Robert Griesemer V8 JavaScriptエンジン、HotSpot Java仮想マシン開発
Ken Thompson UNIX共同開発者、C言語の前身であるB言語開発者、チューリング賞受賞

3人とも「シンプルさ」を重視するUNIX哲学の系譜にあり、この設計思想がGoの根幹に反映されています。

Googleが抱えていた3つの課題

Goが生まれた背景には、当時のGoogleが抱えていた具体的な課題がありました。

  1. コンパイル速度: C++の大規模プロジェクトでビルド時間が長すぎた
  2. 並行処理の複雑さ: マルチコアCPUの活用にC++のスレッドモデルは複雑すぎた
  3. 依存関係の管理: C++のヘッダーファイルやリンク設定が肥大化していた

Goはこれらの課題を根本から解決するために設計されました。


Go言語の年表:2007年〜2025年

2007-2009年:秘密裏の開発期間

  • 2007年9月: Google社内で開発開始。最初はホワイトボードでの言語設計から
  • 2008年1月: Ken Thompsonがコンパイラの最初のバージョンを作成(C言語で実装)
  • 2008年中頃: フルタイムプロジェクトに昇格。Ian Lance Taylorが4人目のメンバーとして参加し、GCCフロントエンドを開発
  • 2009年11月10日: オープンソースとして一般公開。「Go」という名前で発表され、即座に大きな注目を集めた

公開時の反応は賛否両論でした。「なぜ今さら新しい言語が必要なのか?」という懐疑的な意見と、「C言語の精神を受け継いだモダンな言語だ」という歓迎の声が入り混じりました。

2012年:Go 1.0 ─ 互換性の約束

2012年3月28日、Go 1.0がリリースされました。これは単なるバージョンアップではなく、**Go 1 互換性保証(Go 1 Compatibility Promise)**の宣言です。

この保証により、Go 1.0で書かれたコードはGo 1.xの将来のすべてのバージョンで動作し続けることが約束されました。これは企業がGoを本番環境で採用する上で決定的に重要な判断材料となりました。

Go 1 互換性保証は「破壊的変更を入れない」という強い制約ですが、これによりGoのエコシステムは安定した成長を遂げることができました。

2012-2015年:基盤の成熟期

バージョン リリース日 主な変更
Go 1.1 2013年5月 整数演算の精度向上、メソッド値、競合状態検出器
Go 1.2 2013年12月 テストカバレッジ機能、スライスのインデックスでの3値構文
Go 1.3 2014年6月 スタックモデルを分割スタックからコピースタックに変更(パフォーマンス大幅改善)
Go 1.4 2014年12月 go generateコマンド追加、ランタイムの大部分をGoで書き直し開始
Go 1.5 2015年8月 セルフホスティング達成(コンパイラがGoで書かれた)、並行GC導入

Go 1.5は特に重要なマイルストーンでした。コンパイラ自体をGoで書き直す「セルフホスティング」により、C言語への依存が完全になくなりました。また、並行ガベージコレクターの導入により、GCによる停止時間が大幅に短縮されました。

2016-2018年:エコシステムの拡大期

バージョン リリース日 主な変更
Go 1.6 2016年2月 HTTP/2サポート、テンプレートのセキュリティ強化
Go 1.7 2016年8月 contextパッケージが標準ライブラリに昇格、SSAバックエンドでコンパイラ高速化
Go 1.8 2017年2月 プラグインシステム、GC停止時間100マイクロ秒以下を実現
Go 1.9 2017年8月 型エイリアス導入、sync.Map追加
Go 1.10 2018年2月 ビルドキャッシュの導入、テスト結果キャッシュ
Go 1.11 2018年8月 Go Modules導入(依存関係管理の革新)、WebAssemblyサポート

Go 1.11で導入されたGo Modulesは、長年の課題だった依存関係管理を解決しました。それまでのGOPATH制約やdep、glideなどのサードパーティツールへの依存がなくなり、プロジェクトごとに依存関係をバージョン管理できるようになりました。

2019-2021年:安定と洗練の時期

バージョン リリース日 主な変更
Go 1.12 2019年2月 Go Modulesのサポート強化、TLS 1.3対応
Go 1.13 2019年9月 数値リテラルの改善、errorsパッケージの拡充(errors.Iserrors.As
Go 1.14 2020年2月 Go Modulesが本番推奨に、テストクリーンアップ関数
Go 1.15 2020年8月 リンカの大幅高速化、time/tzdataパッケージ追加
Go 1.16 2021年2月 embedパッケージ導入(ファイルをバイナリに埋め込み)、io/fsパッケージ
Go 1.17 2021年8月 スライスから配列ポインタへの変換、Modules Graphのプルーニング

Go 1.16のembedパッケージは、静的ファイルをGoバイナリに埋め込めるようにした実用的な機能です。Webアプリケーションのデプロイが単一バイナリで完結するGoの強みがさらに強化されました。

2022年:ジェネリクスの導入 ─ Go最大の転換点

Go 1.18(2022年3月15日)は、Go 1.0以来最大の言語変更をもたらしました。

約10年にわたる議論を経て、ついに**ジェネリクス(型パラメータ)**が導入されました。ジェネリクスはGoのサーベイで毎年「最も望まれている機能」の1位に選ばれていた機能です。

// ジェネリクス導入前:型ごとに関数を書く必要があった
func MinInt(a, b int) int { ... }
func MinFloat64(a, b float64) float64 { ... }

// ジェネリクス導入後:1つの関数で複数の型に対応
func Min[T constraints.Ordered](a, b T) T {
    if a < b {
        return a
    }
    return b
}

同時にGo 1.18ではファジングテスト機能も標準ライブラリに追加され、テスト品質の向上が図られました。

Go 1.19(2022年8月)では、ジェネリクスの安定化とメモリモデルの更新が行われました。

2023-2025年:最新の進化

バージョン リリース日 主な変更
Go 1.21 2023年8月 **PGO(プロファイルガイド最適化)**正式化、log/slog構造化ログ、min/max/clear組み込み関数
Go 1.22 2024年2月 forループ変数スコープ修正(長年のバグ温床を解消)、math/rand/v2、ルーティングの強化
Go 1.23 2024年8月 **range over func(イテレータ)**導入、uniqueパッケージ、タイマー/ティッカーのGC改善
Go 1.24 2025年2月 ジェネリクスの型エイリアス完全対応、testing/synctestパッケージ、Swiss Tablesベースのmap実装
Go 1.25 2025年8月 コアライブラリの最適化、ランタイムパフォーマンス改善

Go 1.22のforループ変数スコープの修正は、Go開発者が長年悩んでいた「ループ変数のキャプチャ問題」を根本的に解決しました。

// Go 1.21以前:最後の値だけがキャプチャされるバグの温床
for _, v := range values {
    go func() { fmt.Println(v) }()  // 全て同じ値が出力される
}

// Go 1.22以降:各イテレーションで新しい変数が作られる
for _, v := range values {
    go func() { fmt.Println(v) }()  // 期待通りの値が出力される
}

Goで作られた主要プロジェクト

Go言語の実力を示すのは、Goで書かれたソフトウェアの質と影響力です。

コンテナ・オーケストレーション

プロジェクト 概要 GitHub Stars
Docker コンテナランタイム。現代のソフトウェア開発インフラの基盤 69k+
Kubernetes コンテナオーケストレーション。Googleが社内システム「Borg」の知見をもとに開発 112k+
containerd 業界標準のコンテナランタイム 18k+

インフラ・DevOps

プロジェクト 概要
Terraform HashiCorpのインフラ自動化ツール。IaCの事実上の標準
Prometheus CNCF発の監視・アラートシステム
etcd 分散キーバリューストア。Kubernetesのデータストアとして使用
Grafana データ可視化・モニタリングプラットフォーム
Vault HashiCorpの秘密情報管理ツール

ネットワーク・セキュリティ

プロジェクト 概要
Caddy 自動HTTPS対応のWebサーバー
Traefik クラウドネイティブなリバースプロキシ
Hugo 世界最速の静的サイトジェネレーター
CockroachDB 分散SQLデータベース

これらのプロジェクトに共通するのは、高い並行性能が求められるインフラ系ソフトウェアであることです。Goのgoroutineとchannelによる並行処理モデルが、この領域で圧倒的な強みを発揮しています。


Goはなぜ選ばれるのか:5つの技術的特徴

1. 高速コンパイル

Goが生まれた最大の動機です。数百万行のコードベースでも数秒でコンパイルが完了します。これはC++やJavaと比較して桁違いの速さです。

2. goroutineによる軽量並行処理

goroutineはOSスレッドと異なり、初期スタックサイズがわずか数KBです。1つのプログラムで数十万のgoroutineを同時に実行できるため、大量のHTTPリクエストを処理するWebサーバーに最適です。

3. シングルバイナリデプロイ

Goはすべての依存関係を1つの実行ファイルにコンパイルします。JavaのJARファイルやPythonの仮想環境のような実行時依存が不要で、バイナリをコピーするだけでデプロイが完了します。

4. 標準ライブラリの充実

HTTP、JSON、暗号化、テストなど、多くの機能が標準ライブラリに含まれています。外部パッケージへの依存を最小限に抑えた開発が可能です。

5. Go 1 互換性保証

Go 1.0で書かれたコードは、Go 1.25でもそのまま動きます。この互換性保証により、大規模プロジェクトでも安心してバージョンアップできます。


2025年のGoの立ち位置

開発者人気

Stack Overflow Developer Survey 2024では、Goは「最も望まれるプログラミング言語」の上位に位置しています。TIOBE Indexでもトップ10の常連となり、言語としての地位を確立しました。

Goが強い領域

  • クラウドネイティブ開発: Kubernetes、Docker周辺のエコシステム
  • マイクロサービス: gRPC対応の高速な通信
  • CLI開発: Cobra/Viperによるコマンドラインツール
  • ネットワークプログラミング: 高並行な通信処理

Goが向かない領域

  • GUI開発: デスクトップアプリケーション(選択肢が限られる)
  • 科学計算: NumPy/SciPyのようなエコシステムがない
  • ゲーム開発: ゲームエンジンのサポートが限定的

まとめ

Go言語は、2007年のGoogle社内での開発開始から18年で、クラウドインフラを支える中核言語へと成長しました。

年代 出来事
2007年 Google社内で開発開始
2009年 オープンソース公開
2012年 Go 1.0リリース、互換性保証
2015年 セルフホスティング達成
2018年 Go Modules導入
2022年 ジェネリクス導入(Go 1.18)
2025年 Go 1.25リリース

「シンプルさ」を徹底した設計思想は、C++の複雑さへの反省から生まれたものです。その思想は18年経った今も変わらず、Goのエコシステムは着実に成長を続けています。


生成AI導入のご相談

Go言語でのWeb開発やAPI構築でお困りですか?

  • GoによるAPIサーバー開発
  • Docker/Kubernetesを使ったインフラ構築
  • 既存システムのGoへの移行相談

お気軽にご相談ください。

サービス詳細を見る | LINEで相談する

このブログを書いている人

福岡のAIエンジニア。生成AI(ChatGPT・Claude)を活用した業務自動化、Webサイト開発、技術顧問を行っています。
「何から始めればいいかわからない」というご相談も歓迎です。

© 2022-2025 infoHiroki. All rights reserved.