The Go Blog

Goの13年

Goチームを代表して、Russ Cox
2022年11月10日

本日、Goのオープンソースリリース13周年を祝います。Gopherはティーンエイジャーになりました!

Goにとって今年は波乱に富んだ年でした。最も重要なイベントは、3月のGo 1.18のリリースで、多くの改善をもたらしましたが、特にGoワークスペース、ファジング、ジェネリクスが注目されます。

ワークスペースは、複数のモジュールを同時に簡単に操作できるようにし、特にモジュール間に依存関係がある関連モジュールのセットを保守している場合に非常に役立ちます。ワークスペースについては、Beth Brownのブログ記事「ワークスペースに慣れる」とワークスペースリファレンスを参照してください。

ファジングはgo testの新しい機能で、コードが適切に処理しない入力を特定するのに役立ちます。あらゆる入力で合格すべきファズテストを定義し、ファジングはコードカバレッジに導かれながらさまざまなランダムな入力を試行し、ファズテストを失敗させようとします。ファジングは、任意の(攻撃者によって制御されたものさえ含む)入力に対して堅牢でなければならないコードを開発する際に特に役立ちます。ファジングの詳細については、チュートリアル「ファジングを始める」とファジングリファレンスを参照し、Katie HockmanのGopherCon 2022での講演「Fuzz Testing Made Easy」にも注目してください。これはまもなくオンラインで公開される予定です。

ジェネリクスは、Goで最も要望の多かった機能の一つであり、Goにパラメトリック多相性を追加することで、さまざまな異なる型で機能するコードを記述できるだけでなく、コンパイル時に静的にチェックされます。ジェネリクスの詳細については、チュートリアル「ジェネリクスを始める」を参照してください。さらに詳細については、ブログ記事「ジェネリクス入門」と「ジェネリクスを使うべき時」、またはGo Day on Google Open Source Live 2021での「Goでジェネリクスを使う」、およびRobert GriesemerとIan Lance TaylorによるGopherCon 2021での「ジェネリクス!」という講演を参照してください。

Go 1.18と比較して、8月のGo 1.19リリースは比較的穏やかなものでした。Go 1.18で導入された機能の洗練と改善、および内部の安定性向上と最適化に焦点を当てました。Go 1.19での目に見える変更の1つは、Goのドキュメントコメントにおけるリンク、リスト、見出しのサポートが追加されたことです。もう1つは、ガベージコレクターのソフトメモリ制限が追加されたことで、これはコンテナワークロードで特に役立ちます。最近のガベージコレクターの改善の詳細については、Michael Knyszekのブログ記事「Goランタイム: 4年後」、彼の講演「Goにおけるメモリ制限の尊重」、および新しい「Goガベージコレクターガイド」を参照してください。

私たちは、特にVS Code GoとGopls言語サーバーの作業において、Go開発がますます大規模なコードベースにうまく対応できるように努力を続けています。今年は、Goplsのリリースは、ジェネリクスへのサポート、新しい分析、コードレンズを提供しながら、安定性とパフォーマンスの向上に焦点を当てました。もしVS Code GoやGoplsをまだ使っていないなら、試してみてください。概要については、Suzy Muellerの講演「Goエディタでより良いプロジェクトを構築する」を参照してください。さらに、DelveのネイティブDebug Adapter Protocolのサポートにより、VS CodeでのGoのデバッグがより信頼性が高く、強力になりました。Suzyの「デバッグ宝探し」を試してみてください!

開発規模のもう一つの要素は、プロジェクト内の依存関係の数です。Goの12歳の誕生日の約1ヶ月後、Log4shellの脆弱性は、サプライチェーンセキュリティの重要性について業界に警鐘を鳴らしました。Goのモジュールシステムは、この目的のために特別に設計されており、依存関係を理解して追跡し、具体的にどの依存関係を使用しているかを特定し、既知の脆弱性があるかどうかを判断するのに役立ちます。Filippo Valsordaのブログ記事「Goがサプライチェーン攻撃をどのように軽減するか」は、私たちのアプローチの概要を示しています。9月には、Julie Qiuのブログ記事「Goの脆弱性管理」で、Goの脆弱性管理へのアプローチをプレビューしました。その作業の核心は、新しい、厳選された脆弱性データベースと新しいgovulncheckコマンドであり、高度な静的分析を使用して、モジュール要件のみを使用した場合に発生するほとんどの偽陽性を排除します。

Goユーザーを理解するための私たちの取り組みの一環として、毎年年末にGoアンケートを実施しています。今年は、ユーザーエクスペリエンス研究者が軽量な年半ばのGoアンケートも追加しました。Goコミュニティ全体に負担をかけずに、統計的に有意な回答数を集めることを目指しています。結果については、Alice Merrickのブログ記事「Go開発者アンケート2021の結果」とTodd Kuleszaのブログ記事「Go開発者アンケート2022第2四半期の結果」を参照してください。

世界中で旅行が再開され始め、2022年には、特に7月のベルリンでのGopherCon Europeと10月のシカゴでのGopherConで、多くの方々と直接お会いできたことを嬉しく思います。先週、私たちは毎年恒例のバーチャルイベント、Google Open Source LiveのGo Dayを開催しました。これらのイベントで私たちが発表した講演の一部を以下に示します。

今年のもう一つの節目は、Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor、Ken Thompsonによる「The Go Programming Language and Environment」が、Communications of the ACMに掲載されたことです。Goのオリジナルデザイナーと実装者によるこの記事は、Goがこれほど人気があり生産的である理由を説明しています。要するに、Goはソフトウェア開発プロセス全体をターゲットとした完全な開発環境を提供することに重点を置いており、大規模なソフトウェアエンジニアリングの取り組みと大規模なデプロイメントの両方にスケールすることを重視しているということです。

Goの14年目には、Goを大規模なソフトウェアエンジニアリングにとって最高の環境にするために引き続き取り組んでいきます。特に、サプライチェーンセキュリティ、互換性の向上、構造化ロギングに焦点を当てる予定であり、これらはすべてこの記事ですでにリンクされています。また、プロファイルガイド付き最適化を含む、他にも多くの改善が行われる予定です。

ありがとうございました!

Goは常に、GoogleのGoチームがする仕事以上のものです。貢献者の皆様、そしてGoコミュニティの皆様、Goを今日の成功したプログラミング環境にしてくださったご協力に感謝いたします。来る年が皆様にとって最高の年となることを願っています。

次の記事: Goでの開発に関するフィードバックを共有してください
前の記事: Goランタイム: 4年後
ブログインデックス