Go言語のオープンソースプロジェクト公開14周年を迎えて
- Go言語の共同創始者の一人が、2023年11月10日にシドニーで開催されたGopherConAUカンファレンスで最後の講演を行った。
- 講演では、Go言語がオープンソースプロジェクトとして公開されてから14年になったことを記念し、その間の成功と反省すべき点について議論した。
- 講演者はGoチームやGoogleを代表するものではなく、個人的な見解を述べるものだとしたうえで、Go言語の成功に貢献したコミュニティに感謝を表した。
Go言語の成功要因と改善点
- Go言語の当初の目標は、新しいプログラミング言語を作ることではなく、ソフトウェアの書き方を改善することだった。
- Go言語は、依存関係管理、大規模チームとの協業、保守のしやすさ、効率的なテスト、マルチコアCPUやネットワーキングの効果的な活用など、現代的なサーバーソフトウェア構築の複雑さを解決しようとした。
- Go言語は単なるプログラミング言語ではなく、本番ソフトウェアをより簡単かつ生産的に構築するためのプロジェクトである。
Go言語のマスコット、ゴーファー
- Go言語のマスコットであるゴーファーは、Go言語の成功に重要な役割を果たした。
- ゴーファーはGoプログラマーの象徴であり、コミュニティの旗印として、プロジェクトの成長に不可欠だった。
- ゴーファーのデザインをCreative Commons Attributionライセンスで公開したことは、コミュニティ精神を促進する助けになった一方で、著作権問題による困難もあった。
Go言語の技術的成功要因
- 公式仕様書の作成、複数実装の存在、移植性、互換性保証、豊富なライブラリ、ツール開発のしやすさ、自動コード整形ツールである
gofmt などがGo言語の成功に貢献した。
gofmt はプログラミングコミュニティ全体に影響を与え、ほとんどの言語が標準フォーマッターを持つきっかけを作った。
並行性(Concurrency)とインターフェース
- Go言語は並行性を言語の主要な構成要素とし、サーバーソフトウェアの構造を単純化することに貢献した。
- インターフェースはGo言語を特徴づけるアイデアであり、オブジェクト指向設計に対するGoの答えとして、標準ライブラリや依存関係管理などに重要な役割を果たした。
ジェネリクス(Generic)とコンパイラ
- インターフェースの存在は、Go言語にジェネリクスを追加するのに長い時間がかかった原因の一つだった。
- 初期のGoコンパイラがCで書かれていたことはプログラミング言語コミュニティで論争の的となったが、Go言語の発展には適した選択だった。
プロジェクト管理とパッケージ管理
- Go言語はオープンソースプロジェクトとして、開発初期には非公開で進められていたが、公開に転じた後はコミュニティからの貢献が爆発的に増加した。
- パッケージ管理の開発過程は順調ではなく、コミュニティとの協業の進め方に対する理解が不足していた。
ドキュメント化と例
- 初期のGo言語ドキュメントはコミュニティの期待に応えられなかったが、実行可能なサンプルをWebで提供するなど改善が進んだ。
GN⁺の意見
- Go言語の成功は、強力な標準ライブラリ、並行性のサポート、インターフェースベースの設計、明確なパッケージ管理、高速なビルドおよびテストツール、一貫したコード整形、可読性重視、互換性保証といった要素に起因する。
- Go言語はプログラミング言語としての機能だけでなく、ソフトウェア開発の進め方にも革新をもたらしており、これはコミュニティの多様性と支援のおかげである。
- Go言語の開発過程とそれに対する反省は、オープンソースプロジェクトを運営するうえで重要な教訓を与える。
1件のコメント
Hacker Newsの意見
プロジェクトの振り返りに時間を割いた中心人物たちへの感謝
Go言語とコミュニティへの愛着
Goのパッケージ管理システムに関する批判的な経験の共有
Go言語に対する批判的な見方
Ken ThompsonのCコンパイラ使用決定に関する興味深い点
gofmtの導入成功の強調
GopherConAU主催者としてプレイリスト全体を共有
Goを使ってモノレポを簡単に作れ、アプリを素早くビルドできる利点
Goの相互運用性とC FFIに関する選択への言及不足
コンパイラを自前の言語で書くことに関する意見