go-naming について
Go のパッケージ、識別子、レシーバー、変数の名前を決める開発者向けのスキルです。MixedCaps、頭字語、簡潔な命名の規則と、問題を確認するスクリプトを含みます。
主な機能
- 01パッケージと識別子の命名規則
- 02MixedCaps と頭字語の表記規則
- 03インターフェースとレシーバーの命名
- 04ゲッターと定数の命名指針
- 05命名チェック用スクリプト
活用シーン
- 01Go のパッケージ名と API 名の見直し
- 02識別子の一貫したリネーム
- 03コード内の命名アンチパターンの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cxuu/ golang-skills --skill go-namingインストール後、Claude Code で/go-namingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/IDENTIFIERS.mdREPETITION.mdVARIABLES.mdscripts/check-naming.sh詳細
Go の命名規則
リソースの振り分け
scripts/check-naming.sh- SCREAMING_SNAKE_CASE 定数、Get 接頭辞付きゲッター、汎用的なパッケージ名、またはthis/selfという名前のレシーバーを確認するときに実行します。references/IDENTIFIERS.md- 頭字語、エクスポートされる識別子、パッケージレベルのシンボルの名前を選ぶときに読みます。references/REPETITION.md- パッケージ、レシーバー、型、またはローカルの文脈と名前が重複するときに読みます。references/VARIABLES.md- ローカル変数名、レシーバー名、またはループ識別子を選ぶときに読みます。
基本原則
名前は次のようにします。
- 使用時に冗長に感じられない
- 文脈を考慮する
- すでに明らかな概念を繰り返さない
命名は科学というより芸術です。Go の名前は、他の言語より短くなる傾向があります。
命名の判断フロー
What are you naming?
├─ Package → Short, lowercase, singular noun (no underscores, no mixedCaps)
├─ Interface → Method name + "-er" suffix when single-method (Reader, Writer)
├─ Receiver → 1-2 letter abbreviation of type (c for Client); consistent across methods
├─ Constant → MixedCaps; use iota for enums; no ALL_CAPS
├─ Exported func → Verb or verb-phrase in MixedCaps; no Get prefix for getters
├─ Variable → Length proportional to scope distance
│ ├─ Tiny scope (1-7 lines) → single letter (i, n, r)
│ ├─ Medium scope → short word (count, buf)
│ └─ Package-level / wide → descriptive (userAccountCount)
└─ Any name → Check: does it repeat package name or context? If yes, shorten it
MixedCaps(必須)
規範:すべての Go 識別子は MixedCaps を使用する必要があります。
アンダースコアが許可されるのは、テスト関数(TestFoo_InvalidInput)、生成コード、OS/cgo との相互運用に限られます。
パッケージ名
規範:パッケージ名は小文字で、アンダースコアを含めてはいけません。
短く、小文字の単数形の名詞を使います。util、common、helper のような汎用的な名前は避け、stringutil、httpauth、configloader のような具体的な名前を選びます。
// Good: user, oauth2, tabwriter
// Bad: user_service, UserService, count (shadows var)
インターフェース名
推奨:メソッドが1つのインターフェースには「-er」接尾辞を使います。
メソッド名に「-er」を付けて、メソッドが1つのインターフェースに名前を付けます。例:Reader、Writer、Formatter。標準的なメソッド名(Read、Write、Close、String)とそのシグネチャーに従います。
レシーバー名
規範:レシーバーには短い略称を使い、一貫して使用する必要があります。
型を略した1文字または2文字を使い、すべてのメソッドで一貫させます。
func (c *Client) Connect()、func (c *Client) Send() のようにします。
this や self は決して使いません。
定数名
規範:定数には MixedCaps を使い、ALL_CAPS や K 接頭辞は使いません。
値ではなく役割に基づいて定数に名前を付けます。Three ではなく MaxRetries、Port8080 ではなく DefaultPort とします。
const MaxPacketSize = 512
const defaultTimeout = 30 * time.Second
頭字語と略語
規範:頭字語の大文字・小文字は、一貫して維持する必要があります。
頭字語(URL、ID、HTTP、API)はすべて大文字、またはすべて小文字にします。
HTTPClient、userID、ParseURL() のようにし、HttpClient、orderId、ParseUrl() とはしません。
関数名とメソッド名
推奨:単純なアクセサーには
Get接頭辞を付けず、アクションには動詞のような名前を使います。
フィールド owner のゲッターは GetOwner() ではなく Owner() とします。セッターは SetOwner() です。コストの高い処理には Compute または Fetch を使います。
型だけが異なる関数には、名前の末尾に型を含めます。
ParseInt()、ParseInt64() のようにします。
変数名
変数名は、簡潔さと明確さのバランスを取ります。主な原則は次のとおりです。
- スコープに応じた長さ:小さなスコープでは短い名前(
i、v)を使い、広いスコープでは長く説明的な名前を使います - 1文字の名前の慣例:よく知られたパターンを使います(インデックスには
i、リーダー/ライターにはr/w) - 名前に型を含めない:
userSliceではなくusers、nameStringではなくnameを使います - 非エクスポートのグローバル変数には接頭辞を付ける:シャドーイングを防ぐため、パッケージレベルの非エクスポート変数/定数には
_接頭辞を使います
for i, v := range items { ... } // small scope
pendingOrders := filterPending(orders) // larger scope
const _defaultPort = 8080 // unexported global
重複を避ける
Go の名前は、使用時に冗長に感じられないようにします。全体の文脈を考慮してください。
- パッケージ+シンボル:
widget.New()とし、widget.NewWidget()とはしません - レシーバー+メソッド:
p.ProjectName()ではなくp.Name()とします - 文脈+型:パッケージ
sqldbでは、DBConnectionではなくConnectionを使います
組み込み名を避ける
Go の事前宣言済み識別子(error、string、len、cap、
append、copy、new、make など)を、変数名、パラメーター名、型名としてシャドーイングしてはいけません。
詳しいガイダンス:go-declarations の「組み込み名の使用を避ける」セクションを参照してください。
クイックリファレンス
| 要素 | ルール | 例 |
|---|---|---|
| パッケージ | 小文字、アンダースコアなし | package httputil |
| エクスポート対象 | MixedCaps、大文字で始める | func ParseURL() |
| 非エクスポート対象 | mixedCaps、小文字で始める | func parseURL() |
| レシーバー | 1~2文字の略称 | func (c *Client) |
| 定数 | MixedCaps、すべて大文字にはしない | const MaxSize = 100 |
| 頭字語 | 大文字・小文字の使い方を統一する | userID、XMLAPI |
| 変数 | 長さはスコープの大きさに合わせる | i(小)、userCount(大) |
| 組み込み名 | 事前宣言された識別子をシャドーイングしない | go-declarations を参照 |
検証:識別子の名前を変更した後、
bash scripts/check-naming.shを実行して、命名に関するアンチパターンが残っていないことを確認します。次に、go build ./...を実行して、名前の変更によって問題が生じていないことを確認します。
関連スキル
- インターフェースの命名:
-er接尾辞を使ったインターフェースの命名やレシーバー型の選択については、go-interfaces を参照してください - パッケージの命名:パッケージの命名、
util/commonの回避、インポートの衝突解決については、go-packages を参照してください - エラーの命名:センチネルエラー(
ErrFoo)やカスタムエラー型の命名については、go-error-handling を参照してください - 宣言のスコープ:変数名の長さがスコープに応じて変わる場合や、組み込み名のシャドーイングを避ける場合は、go-declarations を参照してください
- スタイルの原則:識別子名の明瞭さと簡潔さのバランスについては、go-style-core を参照してください