ゆめみのmpyw氏が、Goのフラットなパッケージ構造にファイル単位のprivateスコープを持ち込むLinter「declscope」を開発し、解説しています。Goの可視性はExported(全パッケージから可視)とUnexported(パッケージ内の全ファイルから可視)の2段階しかなく、「このヘルパーはこのファイル専用」といった暗黙の規約は人間の頭の中にしか存在しません。著者は、AIエージェントがコードを生成する際、こうした自然言語の規約は確率的にしか守られないため、機械的に検査できる仕組みが必要だと考えたと述べています。

declscopeはboundary・qualify・surplus・directiveという4つのルールで、private宣言への越境アクセスや不要な共有宣言を検出し、-fixフラグで自動修正もできます。ファイル名をlowerCamelCase化した名前がnamespaceとして自動付与されるほか、baselineコマンドで既存コードベースに段階的に導入することも可能です。

実証としてOSSのcobra(14ファイル対象)とurfave/cli(39ファイル対象)に適用したところ、違反件数はそれぞれ35/119件、112/114件から最終的に0/0件まで削減できたとしています。著者は「自然言語の規約は、守られたかどうかを決定論的に判定できない以上、どうしても確率的にしか効きません」と述べています。

出典が伝えている要点

  • 記事の著者はmpyw氏で、所属はゆめみ。
  • 記事の公開日は2026年9月16日。
  • declscopeは、Goのフラットなパッケージ内にファイル単位のprivateスコープを導入するLinterである。
  • Goの可視性はExported(importした全パッケージから可視)とUnexported(パッケージ内の全ファイルから可視)の2段階のみである。
  • declscopeにはboundary、qualify、surplus、directiveという4つのルールがある。
  • boundaryルールはprivate宣言の越境使用を検知する。
  • surplusルールは不要な共有宣言を報告する。
  • declscopeは-fixフラグによる自動修正に対応している。
  • ファイル名をlowerCamelCase化した名前がnamespaceとして自動付与される(例: user_repository.go → userRepository)。
  • declscope baseline ./...コマンドで既存の違反を記録し、以降は新規違反のみを報告する仕組みがある。
  • cobraへの適用では14ファイルを対象に、開始時35/119件あった違反を最終的に0/0件にした。
  • urfave/cliへの適用では39ファイルを対象に、開始時112/114件あった違反を最終的に0/0件にした。

原文より

自然言語の規約は、守られたかどうかを決定論的に判定できない以上、どうしても確率的にしか効きません

出典: zenn.dev

← 2026.09.17 の号を通しで読む