What's new in Go (1.25 and 1.26)

234 Views

June 27, 26

スライド概要

2026年6月27日(土)に岡山で開催された「Google I/O Extended 2026 Okayama」での私の登壇資料「What's new in Go (1.25 and 1.26)」です。Google I/O 2026のGoの基調講演「What's New in Go」の公開動画を補足しながらGo紹介させて頂きました。

profile-image

主にICTイベントでの発表資料を公開しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

What's new in Go (1.25 and 1.26) Google I/O Extended 2026 Okayama 27 June 2026 Ryuji Iwata Okayama, Japan

2.

Ryuji Iwata X (Twitter) : @qt_luigi Portfolio : sites.google.com/view/ryuji-iwata-portfolio

3.

What's new in Go (昨年もこのお二人が担当) 2026年5月19~20日に米国で開催された「Google I/O 2026」でのGoの基調講演。 What's new in Go Overview Cloud Go is “boring” in the best way: stable, reliable, and built for scale. Explore what's new in Go 1.25 and 1.26, including the Green Tea garbage collector, native vectorized instructions, and the code- modernizers behind the “go fix” command. Whether your focus is developing Al agents or traditional microservices, discover how Go continues to deliver industry-leading advancements that make it the best choice for your mission-critical, high- performance applications. Speakers Cameron Balahan Group Product Manager Marc Dougherty Developer Relations Engineer io.google/2026/explore/pa-keynote-17

4.

セッション概要 Goは、安定性、信頼性、そして拡張性を兼ね備えた、まさに「退屈」な言語です。 Go 1.25と1.26の新機能、例えばGreen Teaガベージコレクター、ネイティブなベクトル化命令、そして「go fix」コマンドを支えるコードモダナイザーなどについて紹介。 AIエージェントの開発であれ、従来のマイクロサービスの開発であれ、Goがいかに業界をリードする進歩を続け、ミッションクリティカルな高性能アプリケーションにとって最適な選択肢となっているかをご確認ください。

5.

アジェンダ セッションは4つのパートで構成。 1. オープニング 2. Goのコードの生産性の向上について 3. 本番環境でのコードのパフォーマンス向上について 4. クロージング (本スライドでは割愛: コミュニティへの感謝など) 本スライドの最Goには「リンク集」を用意してありますので、お見逃しなく。

6.

オープニング

7.

約20年前にGoogleが直面した課題 生産性 (動的インタプリター型言語: PythonやJavaScript) ・スケーラビリティや信頼性で課題を抱えることが多い。 本番対応性 (静的型付けのコンパイル型言語: C++やJava) ・高い処理性能は得られるが複雑さが増す。 Goは、その両方を満たすために開発された。 GO Productivity + Production Readiness

8.

AI時代にこの課題は重要なのか? → より一層重要となったに過ぎない 人に分かりやすい言語は、AIモデルにもその出力を検証する人にも、良いものである。 AIによってコードの生成量と本番環境への投入量が加速するにつれ、両者が安全で高性能かつ保守しやすいコードを簡単に書けることが、より重要になっている。 Humans and AI have surprisingly similar needs Developers More successful with robust developer tools Developer Tools AI Tools More successful with robust developer tools

9.

Goは良い意味で「退屈」だが 他のプログラミング言語と異なる点は「単なる言語ではない」こと。 Goはソフトウェアエンジニアリングのためのエンドツーエンドのプラットフォーム。 ソフトウェアエンジニアリングはチームで行われ、人間とAIを含む他者と協力して、時間とともに進化する耐久性のあるシステムを設計し、実装する行為。 プログラミングはあくまでもソフトウェアエンジニアリングの一部に過ぎない。 Code Build Test Release Monitor Operate

10.

Goは、ソフトウェアエンジニアリングのためのプラットフォーム Goは、ソフトウェア開発ライフサイクル全体にわたる決定論的なツールを備えた堅牢な E2Eのプラットフォームを通じてソフトウェアエンジニアリング全体を支えている。 Easy concurrency Dependency management Vulnerability monitoring IDE integrations Simplicity & Readability Rich standard library Module mirror Checksum DB Built-in formatting Built-in profiling Profile-guided optimization Static binaries Source code analysis Memory safe code SBOM generation Compatibility promise Cross-compilation Runtime tracing Built-in test framework Delve debugger Flight recording Self-tuning GC Vulnerability scanning Dynamic data race detector Built-in fuzz testing

11.

Goが進化する中でも順守されている基本原則 Goでは、シンプルさ、パフォーマンス、セキュリティ、信頼性が最優先事項。 開発者が去った後でも何十年も保守可能なシステムを構築するための基盤となる原則。 Goは誕生から約20年経った今もなお、生産性と本番対応性において、業界をリードする重要な改善を続けている。 Simplicity Performance Security Reliability

12.

Goのコードの生産性の向上について

13.

Goは2月と8月にメジャーアップデートをリリース (Go 1.25と1.26) すべてのプログラミング言語は時間とともに進化し、進化するにつれて、古いコードは慣用性が失われ、読みにくくなり、保守が難しくなる。 新しい機能やパターンがトレーニングデータにあまり含まれていないため、AIが生成する新しいコードにも影響を与える可能性がある。

14.
[beta]
go fix (Go 1.26)
これに対応すべくgo fixを再構築し、継続的なモダナイゼーションを可能に。
Goの分析フレームワークを活用してコードを深く理解し、決定論的な変更を適用することで、最新の言語機能を活用したコードを生成する。
Legacy Code
func OldProcess(s []int) {
sort.Slice(s, func(i, j int) bool {
return s[i] < s[j]
})
for i := 0; i < len(s); i++ {
//process s[i]
}
}
Modern Go Code
func Process(s []int) {
slices.Sort(s)
for i, v := range s {
//process s[i]
}
}
15.

この新しいエンジンの中心: モダナイザーフレームワーク 正確性を優先したコード変換を可能にし、更新されたコードが元の動作を維持することを保証。 go fixにおいては、 ・コードの明瞭さと可読性を維持するための20種類以上のモダナイザーが既に搭載。 ・ソースレベルのインライナー機能により、コードベースの進化にも対応。 Dozens of modernizers available and more coming soon Overview Analyzer appendclipped Analyzer bloop Analyzer any Analyzer errorsastype Analyzer fmtappendf Analyzer forvar Analyzer mapsloop Analyzer minmax Analyzer newexpr Analyzer omitzero Analyzer plusbuild Analyzer rangeint Analyzer reflecttypefor Analyzer slicescontains Analyzer slicesdelete Analyzer slicessort Analyzer stditerators Analyzer stringscut Analyzer stringscutprefix Analyzer stringsseq Analyzer stringsbuilder Analyzer testingcontext Analyzer unsafefuncs Analyzer waitgroup

16.

//go:fix inline ディレクティブ 非推奨のAPIに //go:fix inline ディレクティブを追加するだけで、go fixはコードベース全体でその関数への呼び出しを新しい実装に置き換える。 ・Goコンパイラの知見を活用して、副作用がある場合でもコードの元の動作を維持。 ・API移行を迅速化し、非推奨メソッドを削除してコード全体をよりクリーンに保つ。 Library // Deprecated: poor argument order //go:fix inline func Sub(x, y int) int{ return NewSub(y, x) } Calling code // Before go fix: n := Sub(2, 10) // After go fix: n := NewSub(10, 2)

17.

Google では go fixの利用により、社内コードベース全体で18,000件以上の変更がコミットされ、最も古いGoコードベースのひとつに最新のGo機能が導入された。 18,000 committed changes across Google's internal code base

18.

Goの核となる理念のひとつ 「自動リファクタリングを支援するために、ソースコードは機械が読み書きしやすいべきである」 Goの読みやすい構文と標準化されたフォーマットにつながり、go fixやモダナイザーの開発にも引き続き影響を与えている。 AIによるコード作成を飛躍的に向上させ、Goが始まった頃には想像もできなかった規模で動作するモダナイザーのような高度なソースツールを実現できている (原点回帰) Static type checking Secure defaults Stylistic consistency Simple, readable code Concurrency without callbacks Batteries-included standard library

19.

testing/synctest パッケージ (Go 1.25) Goで最も高く評価されているテスト機能のひとつ。 並行処理では ・操作が順不同で行われる可能性があるため本質的に複雑である。 ・並行コードのテストも複雑で、タイムアウトやスリープ呼び出しに依存することが多く、不安定なテストにつながる可能性がある。

20.

バブル ゴルーチンが擬似的な合成クロックを使用する隔離された環境。 ・並行処理のテストを劇的に簡素化。 ・すべてのゴルーチンがブロックされると時間が自動的に進む。 func TestWait(t *testing.T) { synctest.Test(t, func(t *testing.T) { go func() { time.Sleep(3 * time.Second) }() time.Sleep(5 * time.Second) })

21.

testing/synctest パッケージを使うと ・以前はタイムアウトまで5秒間待機していたが、ミリ秒単位で決定論的かつ一貫して終了。 ・並行テストにおけるイベントの順序調整が容易になり、すべてのゴルーチンがバブル終了までを確実に保証。

22.

Goは意図的に退屈な言語である 言語自体に直接的な変更を加えることはほとんどない。 そのため、Go 1.26のコードはGo 1.0のコードとほぼ同じように見える。

23.

new() 組み込み関数の拡張 (Go 1.26) 言語自体への小さな変更であるが、非常に大きな影響を与えている。 Goユーザーは、protobufのようなデータ交換フォーマットでよく見られる、ポインターを多用する深い構造体を扱う際に、多少の不便さを感じていた。 基本的なデータ型や関数の戻り値を含む式からポインターを作成できるように拡張。 new(expr) Expanded new() functionality

24.

例えば proto.String() など 一部のユーザーやライブラリーは、同じ結果を得るために独自のヘルパーメソッドを作成している。 モダナイザーのgo fixを使うと、これらのヘルパーメソッドを自動的に識別し、代わりにnew() 組み込み関数呼び出しに置き換えることができる。 The Old Way ot := OtherThingBuilder() req := &service.ThingRequest{ Name: proto.String("string ptr"), Other: &ot, } req := &service.ThingRequest{ Name: new("string ptr"), Other: new(OtherThingBuilder()), }

25.

これらのツールは連携して コードベースが常に最新の状態に保たれ、読みやすく、何より正確であることを保証。

26.

本番環境でのコードのパフォーマンス向上について

27.

Production Readiness ここまでのGo 1.25と1.26の新機能は、生産性を向上させる上で非常に役立つ。 Goは生産性だけを追求するのではなく本番環境でのコードのパフォーマンスも重視。 GO Productivity + Production Readiness

28.

Goは現代のクラウドの基盤 Goは、Google規模の問題を解決するために開発され、Kubernetes、Docker、Terraformなど、世界的に有名なクラウド技術の多くがGoで記述されている。 ・Goが常に本番環境への対応を重視してきたことの直接的な結果

29.

Goの互換性保証 GoチームがGo仕様に基づいて記述されたコードは、今後のすべてのGoリリースにおいて変更なしで正しくコンパイルおよび実行されることを正式に保証。 “As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.” Go Release Notes

30.

Goでは古いコードは負債ではなく資産 互換性保証により多くの機能がほとんど手間をかけずにバージョンアップごとに改善。 アップグレードして再コンパイルするだけで、システムはより優れたものになる。 他のエコシステムでは、コードが古くなると負債となるが、Goでは資産となる。 新しい機能やメリットを実現するためにコードを変更する必要がある場合は、go fixがそれを自動的に行う。 Upgrade Recompile System is better

31.

Green Tea ガベージコレクター 今年のパフォーマンス面での最大に注目点で、Go 1.25で実験的に導入され、Go 1.26以降はデフォルトで有効。 従来のガベージコレクター設計とは大きく異なり、従来のアルゴリズムのハードウェアによる制約を超越している。

32.

仕組みと効果 作業の基本単位を、個々の分散したオブジェクトから、ページと呼ばれる大きな連続したメモリブロックへと移行することで動作。 最新のハードウェア設計と連携して動作、高レイテンシーのメモリフェッチを最小限に抑え、ランタイムが非常に高いスループットのベクトルアクセラレーションを利用。 ほとんどのアプリでガベージコレクションのCPUコストが10%削減され、複雑なメモリレイアウトを持つアプリでは最大50%削減。しかもコードを一一行も変更する必要なし。

33.

Green Tea 最新のマルチコアシステムを効果的に活用するために設計されたランタイムの進化版。 最新のサーバーCPUアーキテクチャーにおけるNUMA対応など、これまで不可能だった透過的な最適化を実現する、まったく新しい基盤。 Non-uniform Memory Access (NUMA)

34.

メモリ割り当てのランタイム最適化 (Go 1.25と1.26) ヒープからスタックへのメモリ割り当てを大幅にシフトするランタイム最適化を導入。 スタック割り当てははるかにコストが低く、ガベージコレクターに負荷をかけない。 迅速な再利用が可能になりキャッシュの局所性が向上してメモリアクセスが高速化。 これもまた、透過的なメリットであり、コードを変更する必要がない。

35.

cgoを最適化 (Go 1.26) GoとCの間の遷移を最適化し、cgo呼び出しを30%高速化。 低レベルのシステムAPIや専用ハードウェアライブラリーに依存する高性能システムにとって、境界を越えるコストを大幅に削減し、機械学習、ゲーム、GUIといった分野で新たなユースケースが可能に。 必要不可欠なツールから、全く新しい種類のアプリを構築するための機会へと変化。

36.

SIMDのファーストクラスサポートを導入 (Go 1.26) 最新のCPUはベクトル化された配列操作を実行したり、特定の種類ループを並列実行したりすることが可能に。 特定の種類AIインフラストラクチャーに必要なものを含め、多くの種類のパフォーマンス最適化に不可欠。 Green Tea ガベージコレクターの効率をさらに向上させるためにSIMDを使用。 128-bit 256-bit 512-bit

37.

MCP SDK AIにおいては、昨年モデルコンテキストプロトコル (MCP) の公式SDKをリリース。 統一されたプロトコルを通じて、サービスがLLMにコンテキストとツールを提供。 Goのシグネチャー機能を確実に活用し、AIアプリケーションにデータと機能を提供。 LLM MCP Language Server Vulnerability Database Static Analyzers

38.

gopls MCP SDKを使用して、Goツールチェーンのより多くの機能をエージェントやAI搭載開発ツールに公開するサーバーを構築。 言語サーバーであるgoplsで、プロトタイプのMCPサーバーを運用。今後1年間で、さらに多くの機能が追加される予定。 GO pls Go Language Server

39.

新しいフライトレコーダー (Go 1.25) 新しいフライトレコーダー (runtime/trace パッケージ) によって、オブザーバビリティをより使いやすく。 トレースはコストがかかる場合があるが、リングバッファで常にトレースを有効にし、必要なときにのみフラッシュすることで、最小限の運用オーバーヘッドで必要なデータを取得。

40.

セキュリティ Goは、量子耐性暗号の拡張 (Go 1.25と1.26)、ランダム化されたヒートベースのアドレス (Go 1.26)、FIPS 140サポートの強化 (Go 1.25と1.26) により、今後10年間もセキュリティを維持。 こうした積極的なセキュリティ機能こそが、Goが常に時代の最先端を走り続け、最も重要なワークロードで引き続き利用できることを保証。

41.

go.dev さらに詳しい情報は、go.devのリリースノートを参照。 go.dev/doc/go1.25 go.dev/doc/go1.26 これらすべては、Goの生産性と本番環境への対応性を維持する取り組みの一環。 これに加えて、今後行う全ての変更でGoの互換性保証を守り続けることを約束。 Go 1.0との完全な後方互換性を維持しており、今後もその状態は変わらない。

42.

リンク集

43.

今回のオリジナル What's new in Go • Google I/O 2026: What's new in Go io.google/2026/explore/pa-keynote-17 • Goの最新情報 - YouTube www.youtube.com/watch?v=l4lneZYtjQg

44.

実はもうひとつ、Goのセッションがワークショップでありました! Build an AI agent app with Go ADK, Cloud Run, and Flutter • Google I/O 2026: Build an AI agent app with Go ADK, Cloud Run, and Flutter io.google/2026/explore/workshop-7 • Go ADK、Cloud Run、Flutterを使用してAIエージェントアプリを構築する - YouTube www.youtube.com/watch?v=zuymRY4X0rg • 👗 Flutter、ADK Go、Gemini を使用してバーチャル試着室と AI スタイリストを構築する (goo.gle/adkgo-flutter) codelabs.developers.google.com/codelabs/fitting-room/instructions?hl=ja#0

45.

Thank you Ryuji Iwata Okayama, Japan @qt_luigi