#78387likely_accept
cmd/go: disallow \\`go list ...\\` in module mode
ステータス変更: active likely_accept
要約
AIによる要約であり、誤りを含む場合があります。
概要
モジュールモードにおける go list ...(裸のワイルドカード)コマンドを禁止するproposalです。このコマンドはユーザーの意図する動作をほぼ(あるいは全く)実現せず、混乱を招くため、エラーを返すよう変更することを提案しています。
ステータス変更
active → likely_accept
提案者である @matloob が所属する Go Command Working Group が全会一致でこの提案を支持し、proposalプロセスに移行されました。その後、@aclements を含むProposal Review Groupが2026年5月21日の週次ミーティングで「likely accept」と判定しました。判定理由として「go list ... が何を意味するかさえ誰も説明できない」ことが明示されています。
技術的背景
現状の問題点
モジュールモードで go list ... を実行すると、ビルドリスト内の「全モジュール」の「全パッケージ」を列挙しようとします。この動作には以下の問題があります。
- 現在のビルドに必要でないモジュールの依存関係まで解決しようとする
- それらの外部依存はワークモジュールの
go.modには記載されておらず、デフォルトの-mod=modモードで混乱を招くエラーが発生する - 動作が文書化されておらず(Issue #37227)、ユーザーが期待する結果を返さない
ユーザーが実際にやりたいことは多くの場合「カレントモジュール以下のパッケージを列挙する(./...)」か「ワークスペース全体のパッケージを列挙する(work)」であり、go list ...はそのいずれとも異なる動作をします。
提案された解決策
go list ...(裸の...のみのパターン)はモジュールモードでエラーを返すgo list ./...、go list example.com/...のように他のコンポーネントと組み合わせた...は引き続き有効(検索範囲が絞られるため)- エラーメッセージでは
./...やworkの使用を代替案として案内する go list -m ...(パッケージではなくモジュールを列挙するフラグ)は同問題を抱えないため、引き続き動作する
これによって何ができるようになるか
ユーザーが誤った go list ... を実行した際に、混乱を招く動作の代わりに明確なエラーメッセージが表示されるようになります。これによりデバッグ時間の短縮と、正しいパターンへの誘導が期待されます。
コード例
// Before: 予期しない動作・混乱を招くエラー
// モジュールモードで実行すると不完全な結果や謎のエラーが出る
$ go list ...
// → go.modに載っていない依存モジュールの解決を試みてエラーになる場合がある
// After: 明確なエラーと代替案の提示
$ go list ...
// → エラー: モジュールモードでは `go list ...` は使用できません
// 代わりに `./...`(カレントモジュール)または `work`(ワークスペース全体)を使用してください
// 正しい書き方1: カレントモジュール以下の全パッケージ
$ go list ./...
// 正しい書き方2: ワークスペース全体のパッケージ(go.work使用時)
$ go list work
// 正しい書き方3: モジュール一覧(-mフラグは引き続き有効)
$ go list -m ...
議論のハイライト
- 後方互換性への懸念: @seankhliao が GitHub上で約6,700件の非フォーク・非アーカイブリポジトリで
go (list|build|test) ...が使われていることを指摘。しかし @matloob がスポットチェックしたところ、実際のコードではなくドキュメントやログメッセージ内の記述がほとんどであり、実質的な破壊的変更は限定的と判断された。 go list -m ...の扱い: モジュール一覧を返す-mフラグ付きの場合はパッケージ列挙と同じ問題が起きないため、引き続き許可される方針が合意された。...の再利用の提案:...をビルド可能なパッケージの列挙として再定義する案も出たが、「ビルド可能なパッケージ」の集合を明確に定義・列挙する方法が難しいとして採用されなかった。- Go Command Working Group の全会一致支持: 提案はワーキンググループ内で満場一致で支持され、Proposal Review Groupへ送付された。
- 長年の未解決問題: Issue #37227(
go list ...の動作がモジュールモードで文書化されていない)など、関連する問題が複数年にわたって蓄積されており、今回の禁止がその根本的解決となる。