Go

Go 1.27の新機能・変更点まとめ|最新バージョンの確認方法と移行ガイド

Go 1.27は2026年7月時点でRC2(リリース候補)が公開され、正式版は2026年8月にリリースされる見込みです。現在ダウンロードできる安定版はGo 1.26系(記事執筆時点の最新はgo1.26.5)で、本番環境で使うなら通常はこちらを選びます。この記事では、公式ドラフトのリリースノートをもとにGo 1.27で追加・変更される機能を整理し、あわせて「いま入れるべきバージョンはどれか」「どうやって最新版を確認・更新するか」まで通しで解説します。Go 1.26からの実際の変更点や移行時のつまずきどころも押さえるので、アップグレード計画の判断材料に使えます。

まとめ:Go 1.27で押さえるべき要点

  • リリース状況:Go 1.27は2026年8月に正式版予定(7月時点はRC2)。現行安定版はgo1.26.5で、本番投入は原則こちらを使う。
  • 言語仕様の目玉:ジェネリックメソッド(メソッドが独自の型パラメータを宣言可能)が追加。構造体リテラルのキー拡張と型推論の一般化も入る。
  • 標準ライブラリencoding/json/v2 が新規追加され旧v1は非推奨に。標準の uuid パッケージ、ポスト量子署名の crypto/mldsa、可搬な simd パッケージも登場。
  • ランタイム:小さいオブジェクト(80バイト未満)の割り当てが最大約30%高速化。asynctimerchan のGODEBUGが撤去され、goroutineリーク検出プロファイルが標準化。
  • 移行の注意:Go 1.27はmacOS 13以降が必須(macOS 12は非対応)。json v1→v2の挙動差とプラットフォーム要件を先に確認する。

Go 1.27の言語仕様:ジェネリックメソッドと型推論の拡張

ジェネリックメソッド:メソッドが独自の型パラメータを持てる

Go 1.27最大の言語変更が、メソッド宣言が自分の型パラメータを宣言できるようになった点です。Go 1.18でジェネリクスが入って以降、型パラメータは関数と型にしか付けられず、メソッドに独自の型パラメータを持たせることはできませんでした。1.27ではこの制約が緩和され、たとえばイテレータやコレクションを扱うメソッドで、レシーバの型パラメータとは別に、そのメソッド固有の型を導入できます。これまで自由関数として書くしかなかった変換系の処理を、型に紐づくメソッドとして自然に表現できるようになります。既存コードには影響しない追加的な変更で、Go 1.27以降でのみ使える書き方です。

構造体リテラルのキー拡張と関数型推論の一般化

構造体リテラルのキーに、単純なフィールド名だけでなく「有効なフィールドセレクタ」を書けるようになりました。埋め込みフィールドを介したフィールド指定などがリテラル内で扱いやすくなります。あわせて関数の型推論も一般化され、ジェネリック関数を変数に代入するあらゆる文脈で型引数を省略できるケースが広がります。いずれも記述量を減らす方向の緩和で、後方互換性は維持されます。なお、即値からポインタを生成する new(expr) 構文はGo 1.26で先に追加された機能で、こちらは現行安定版でも利用できます。

Go 1.27の標準ライブラリ強化:json/v2・uuid・crypto/mldsa

encoding/json/v2:JSON処理の全面改訂

標準ライブラリの最大の追加が encoding/json/v2 です。既存の encoding/json を再設計したもので、より低レベルな構文処理を担う encoding/json/jsontext と組で提供されます。Marshal/Unmarshal は可変長の Options 引数を受け取り、挙動を細かく制御できます。従来のv1実装は非推奨となり、内部的にはv2を土台に動くようになります(GOEXPERIMENT=nojsonv2 で従来実装に戻せます)。既存のv1 APIはそのまま使えますが、新規に厳密なJSON制御が必要なコードではv2への移行を検討する価値があります。以下はドラフト時点のAPI例で、正式版で細部が変わる可能性があります。

import "encoding/json/v2"

data, err := json.Marshal(v, json.Deterministic(true))

標準uuidパッケージ・ポスト量子署名・可搬なSIMD

UUIDの生成・解析を標準ライブラリだけで行える uuid パッケージが追加され、外部モジュールに頼らずに済むようになります。暗号面では、FIPS 204準拠のポスト量子署名方式ML-DSAを実装する crypto/mldsa が新設され、crypto/tlscrypto/x509 もML-DSAに対応します。Go 1.26で実験導入されたアーキテクチャ固有の simd/archsimd に代わり、Go 1.27ではベクトル幅に依存しない可搬な simd パッケージ(実験的・GOEXPERIMENT=simd で有効化)が提供されます。標準の unicode パッケージもUnicode 15から17へ更新されます。

Go 1.27のランタイム・コンパイラ改善

小さいオブジェクトの割り当てを最大30%高速化

コンパイラがサイズ特化のメモリ割り当てルーチンを生成するようになり、80バイト未満の小さなオブジェクトの割り当てコストが最大で約30%削減されます。HTTPハンドラやJSONパースのように短命な小オブジェクトを大量に確保する処理で効きます。ただしこれは特定の割り当てパスの数値で、プログラム全体の実行時間としては約1%程度の改善が目安です。代償としてバイナリサイズが約60KB増えますが、GOEXPERIMENT=nosizespecializedmalloc でオプトアウトできます(このオプトアウト自体はGo 1.28で撤去予定)。あわせて、Go 1.26でデフォルト化した新GC「Green Tea」の旧GCへの切り替えフラグ GOEXPERIMENT=nogreenteagc はGo 1.27で撤去される見込みで、新GC前提の運用に一本化されます。

asynctimerchanの撤去とgoroutineリークプロファイルの標準化

非同期タイマー用のGODEBUG設定 asynctimerchan が撤去され、time.Timer/time.Ticker のチャネルは常に同期(バッファなし)で動作します。過去にこの設定へ依存していたコードは挙動が変わる可能性があるため、タイマー周りのテストを確認しておくと安全です。診断面では、並行プリミティブで永久にブロックされたgoroutineを検出する goroutineleak プロファイルが正式機能になり、実験フラグ goroutineleakprofile は不要になりました。goroutineの取り違えやリークの調査に役立ちます。並行処理の基礎はGoroutineの仕組みを解説した記事もあわせて参照してください。

Go 1.27のツール変更:go fix・go test・go doc

コード近代化ツール go fix にモダナイザが追加されました。atomictypesembedlitslicesbackwardunsafefuncs が新設され、fmtappendf は削除、waitgroupwaitgroupgo に改名されました。なお go fix の基盤自体はGo 1.26で分析フレームワーク上に再実装されており、interface{}any に置き換えるといった修正を go fix ./... 一発で適用できます。//go:fix inline ディレクティブによるAPIインライン置換も引き続き利用できます。go test はデフォルトで stdversion の静的解析を実行するようになり、go docpackage@version 記法と実行可能例を一覧する -ex フラグに対応します。go mod tidy はGo 1.27以降を指定したモジュールで重複した require ブロックを自動統合し、バージョン管理系では旧式の bzr サポートが撤去されました。

Goの最新バージョン確認とインストール方法

現在の安定版と確認コマンド

記事執筆時点(2026年7月)の最新安定版はgo1.26.5です。手元のバージョンは go version で確認でき、公式の配布ページ(go.dev/dl)やJSON API(go.dev/dl/?mode=json)でも最新版を機械的に取得できます。Go 1.27のようなRC版はこのページで「rc」付きバージョンとして公開され、go install golang.org/dl/go1.27rc2@latest のように試験導入できますが、本番用途では安定版を選ぶのが基本です。プロジェクト単位で使うGoのバージョンを固定・切り替えたい場合は、go.modtoolchain 行や GOTOOLCHAIN 環境変数を使います。運用の詳細はGo Toolchainの設定方法をまとめた記事で解説しています。

リリースサイクルとサポート方針

Goのメジャーリリースはおおむね2月と8月の年2回で、約6か月ごとに新しいマイナー番号(1.25→1.26→1.27)が上がります。セキュリティ修正やバグ修正は、最新2つのメジャーリリースに対して提供される方針です。つまりGo 1.27が正式リリースされると、サポート対象はGo 1.27とGo 1.26になり、Go 1.25は原則としてサポート外へ移ります。長期運用するプロジェクトでは、この年2回のサイクルに合わせて計画的にアップグレードするとサポート切れを避けられます。

Go 1.26(現行安定版)の主な変更点

いま本番で使うGo 1.26系の要点も押さえておきます。最大の変更は新GC「Green Tea」のデフォルト化で、GCオーバーヘッドが従来比おおむね10〜40%削減され、新しい世代のCPU(Intel Ice Lake、AMD Zen 4以降)ではさらに約10%の改善が見込まれます。cgo呼び出しのランタイムオーバーヘッドは約30%削減され、C連携が多いコードをそのまま高速化できます。image/jpeg パッケージはエンコーダ/デコーダが再実装され高速・高精度になりましたが、出力がビット単位で従来と異なる場合があるため、JPEG出力を厳密比較するテストは見直しが必要です。ハイブリッド公開鍵暗号の crypto/hpke パッケージ追加や、即値からポインタを作る new(expr) 構文の導入もGo 1.26からです。cmd/doc は削除され go doc に統合、pprofのWeb UIは既定がフレームグラフ表示になりました。

Go 1.27への移行と注意点

プラットフォーム要件:macOS 13必須・ppc64はELFv2へ

Go 1.27はmacOS 13 Ventura以降が必須で、macOS 12 Monterey以前は非対応になります(Go 1.26がmacOS 12対応の最後のリリースでした)。CIやビルドマシンにmacOSを使っている場合は、先にOSバージョンを確認してください。ビッグエンディアンLinuxのppc64ポートはELFv2 ABIへ切り替わり(Linux 3.13以降が前提)、cgoやPIE、外部リンクにも対応します。これら以外の主要環境(linux/amd64、linux/arm64、windows/amd64 など)は従来どおり利用できます。

非互換の要点とDockerでのバージョン更新

移行前に確認したい非互換は主に3点です。第一に encoding/json がv2を土台に動くようになるため、厳密なエンコード順序やエラー挙動に依存するコードは差異が出ないか検証します。第二に asynctimerchan 撤去でタイマーチャネルが常に同期になる点。第三にmacOS 13必須などプラットフォーム要件です。DockerでGoを使う場合は、公式イメージのタグを更新するのが基本です。安定版なら FROM golang:1.26、RC版を試すなら FROM golang:1.27rc のようにタグを切り替え、CIでビルドが通ることを確認してから本番タグを上げます。プロジェクト構成そのものの見直しにはGoのディレクトリ構成ガイドも参考になります。

Go 1.27は本番導入すべきか(RC版の判断基準)

結論から言うと、2026年7月時点では本番環境にGo 1.27(RC2)を入れるべきではありません。RCは仕様がほぼ固まった検証用ビルドで、正式版までに細かな修正が入る可能性が残り、ライブラリやツールチェーン側の対応も揃っていないためです。一方で、ジェネリックメソッドや encoding/json/v2 を前提とした設計を早めに評価したいチームは、開発ブランチやCIの別ジョブでRCを回しておくと、正式版が出た瞬間に移行できて有利です。判断の目安はシンプルで、「本番・リリース対象コードは安定版のGo 1.26.5」「新機能の先行検証はRCを隔離環境で」の二本立てが安全です。ポスト量子署名(crypto/mldsa)のように規制・監査が絡む採用は、正式版とライブラリ対応が揃うまで待つのが無難です。セキュリティ面の継続チェックにはgovulncheckによる脆弱性検出を合わせて運用すると、バージョン更新に伴うリスクを早期に拾えます。

よくある質問

Go 1.27はいつ正式リリースされますか?

正式版は2026年8月にリリースされる見込みです。2026年7月時点ではRC2(リリース候補)が公開されており、公式のダウンロードページから入手できます。Goは例年2月と8月にメジャーリリースを行うため、このスケジュールに沿った公開です。

現時点でインストールすべきGoのバージョンはどれですか?

本番・開発の実務では安定版のGo 1.26系(執筆時点の最新はgo1.26.5)が推奨です。Go 1.27はRC段階のため、新機能の検証を目的とする場合に隔離環境で試すのが適切です。

Go 1.27の変更点はどこで正確に確認できますか?

公式のドラフトリリースノート(tip.golang.org/doc/go1.27)が一次情報です。正式リリース後はgo.dev/doc/go1.27に反映されます。本記事もこれらの公式ノートとgo.dev/dlの配布情報をもとに整理しています。

encoding/json/v2に今すぐ移行する必要はありますか?

必須ではありません。従来の encoding/json(v1)APIは引き続き利用でき、内部実装がv2を土台にするだけです。厳密なオプション制御やエンコード挙動の細かな指定が必要な新規コードで、v2の採用を検討すれば十分です。

Go 1.27にアップグレードするとmacOSで動かなくなりますか?

macOS 12 Monterey以前ではGo 1.27はサポート対象外です。macOS 13 Ventura以降であれば問題ありません。ビルド環境がmacOS 12以前の場合は、OSを更新するか安定版のGo 1.26系を使い続けてください。

関連記事

資料請求

RELATED POSTS 関連記事