naming について
用語集に基づいて識別子を統一したいチーム向けのリポジトリ命名スキルです。共通ルールにプロジェクト別の上書きを加え、push と CI で機械的に検査できます。
主な機能
- 01用語集に基づく命名規則
- 02プロジェクト別上書きの統合
- 03機械的に検査できる命名ゲート
- 04コード成果物の命名ガイド
活用シーン
- 01push 前の命名変更チェック
- 02コードと API ルートの用語統一
- 03リポジトリ固有の命名規約設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ timschoch/ skilly --skill namingインストール後、Claude Code で/namingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/biome.jsonlint.mdnaming.jsonreferences/stacks/tech-payload.jsontech-tanstack.jsonscripts/check.mjsconfig.mjsdefault-branch.mjsmerge-config.mjs詳細
命名
ハブと同期する単一のリストです。ゲート naming は、プッシュ時と CI で機械的にチェックできる項目を確認し、それ以外はあなたの判断に委ねます。境界については references/lint.md を参照してください。
何かに名前を付ける前に、node .agents/skills/naming/scripts/config.mjs を実行し、現在のルールとしてその出力を読んでください。出力には、プロジェクトのオーバーライドをマージした references/naming.json が表示されます。
ルール
-
それぞれに使う単語は一つだけで、その単語は
GLOSSARY.mdにあるものを使います。まずそこを確認し、次に既存の型、DB テーブル、API ルートを確認してください。リポジトリで使われている単語を、依頼で使われた単語より優先します。良い例 悪い例 理由 testimonialcustomerQuote依頼では「customer quotes」とされていましたが、リポジトリでは testimonialを使っていますTestimonial型、testimonialsテーブル、/api/testimonialsTestimonial型、reviewsテーブルどこでも、一つのものには一つの単語を使います orderorderと並ぶpurchase一つのものに二つの単語を使うと、検索が分散します -
まだ単語がない場合は、term-check を実行し、結果をユーザーに提示して承認を得てから、そのファイルを管理する domain-modeling を通じて
GLOSSARY.mdに単語を追加します。良い例 悪い例 理由 用語チェック済みで、 GLOSSARY.mdに記録されたcarryOverPR で独自に作った carryOver新しい単語にはユーザーの承認が必要です 複数形 caseStudiesとともに記録されたcaseStudy記録のない caseStudy次のエージェントが別の単語を選んでしまいます ロールのリストに追加された gridリストはそのままで使われる Grid定義済みリストにないロールは新しい単語です -
型ではなくロールに基づいて命名します。
IやTの接頭辞、ハンガリアン記法、ノイズワードは使いません(naming.jsonのnoiseWordsを参照)。良い例 悪い例 理由 UserIUserIの接頭辞は使いませんcountnCountハンガリアン記法は使いません accountsaccountList、accountDataノイズワードは不要です。複数形だけで複数であることがわかります -
単語は省略せず、1 文字の名前やマジックナンバーは使いません。使用禁止の短縮語は
naming.jsonのshortWordsに記載されています。良い例 悪い例 理由 optionsopts単語を省略しません errore、err1 文字や略語は使いません const MAX_RETRIES = 3単独の 3数値には名前が必要です -
呼び出し元ですでに示されていることは、名前に含めません。
良い例 悪い例 理由 user.nameuser.userNameオブジェクトが userを示していますtestimonials.add(item)testimonials.addTestimonial(item)コレクションが testimonialを示していますテーブル testimonialsのフィールドnameフィールド testimonial_nameテーブルが testimonialを示しています -
アクションの名前は、
naming.jsonのprefixesにある動詞で始め、意味ごとに動詞を一つだけ使います。純粋な派生値には名詞を使ってもかまいません。良い例 悪い例 理由 fetchTestimonialsそれと並ぶ loadTestimonials意味ごとに動詞は一つだけです。 fetchはネットワーク経由で取得することを示しますlistUsersgetAllUserslistは複数を意味しますbranchShagetBranchSha純粋な派生値には名詞を使ってもかまいません 接頭辞は、その意味を約束します。
getは読み取り専用、setは値を返さないことを示し、isはブール値を返します。また、findは結果がない場合もありますが、getはそうではありません。andを含む名前(saveAndNotify)は、二つの関数を意味します。 -
保存するブール状態には形容詞だけを使います。チェックには
is、has、can、shouldを使い、notXの形は使いません。良い例 悪い例 理由 archivedisArchived保存する状態には形容詞だけを使います isEmpty、canRetryempty()、retryAllowedチェックには接頭辞を付けます enablednotDisabled肯定形の名前だけを使います -
エンティティには単数形、コレクションには複数形を使います。不規則な複数形は、単語の横に
GLOSSARY.mdへ記録してください。良い例 悪い例 理由 型 Testimonial、ファイルtestimonial.ts型 Testimonials単一のエンティティは単数形です テーブル、パス、フォルダー testimonialsテーブル testimonialコレクションは複数形です GLOSSARY.mdに複数形として記録されたcase_studiescase_studys不規則な複数形は一度だけ記録します -
enumは使いません。文字列リテラルのユニオン型、またはas constオブジェクトを使います。識別子キーは naming.json のdiscriminant(kind)です。独自の値はケバブケースにし、外部 API からミラーする値はそのままにします。良い例 悪い例 理由 type Status = 'open' | 'in-progress'enum Status { Open }enumは使いません{ kind: 'pull-request' }{ type: 'pull-request' }識別子キーは kindですGitHub API の 'MERGED''merged'ミラーする値はそのままにします -
naming.json の
partsから、名前の大きな単位から小さな単位へ組み立てます:project · area · entity · role · action · attribute · consumer。必要なパーツを選び、順序は維持します。各artifactsエントリーにはパーツ、ケース、例が記載されています。roleはリポジトリごとの固定リストです(artifacts.component.roles、artifacts.env.roles)。環境変数はartifacts.env.shapeに従います。Payload CMS では、コレクションのスラッグ=API パス=テーブルです。スラッグはケバブケースかつ複数形(case-studies)にし、テーブルではハイフンをアンダースコアに置き換えます(case_studies)。良い例 悪い例 理由 COLIN_SYNC_KEY_FOR_TWENTYTWENTY_API_KEY発行元、そのキーの用途、保持者の順です TestimonialGridGridTestimonialエンティティを先にし、その後に役割を続けます testimonial.addedaddTestimonialイベントは過去に起きた事実であり、命令ではありません -
大文字・小文字の使い分けは、言語ガイドとリポジトリのリンターに従います。ファイル名とフォルダー名は小文字のケバブケースにします。ただし、既存のリポジトリ規約がこのルールに優先します。その場合は
artifacts.file.caseとartifacts.folder.caseに設定します。ケースは1つ、またはリストで指定します(React コンポーネントとフックの場合は["kebab", "PascalCase", "camelCase"])。良い例 悪い例 理由 render-pr-body.mjsrenderPrBody.mjsファイル名はケバブケースです src/components/case-studies/src/components/case_studies/フォルダー名はケバブケースです loadをどこでも使っているリポジトリでのloadUserその隣にある fetchUser既存の規約が優先されます -
意味が変わりましたか?writing-rules のルール 204 に従い、同じ変更内ですべての箇所の名前を変更します。
良い例 悪い例 理由 コード、ドキュメント、DB で draftをproposalに一度の PR で変更コードでは変更したが、ドキュメントにはまだ draftと記載1つのものを2つの言葉で表しています 値が上限でなくなった後の retryCountmaxRetriesのまま名前が実態と合いません 名前の変更と GLOSSARY.mdの更新名前の変更のみ 用語集が情報源です
プロジェクトごとの上書き
上書きファイル:.skilly/naming.json。references/naming.json と同じ形式で、変更するキーのみを記述します。古い docs/agents/naming.json は .skilly/naming.json がない場合に限り読み込まれます。.skilly/naming.json に移してください。
マージ順:
- references/naming.json
.skilly/config.jsonのbundlesに記載された各バンドルのreferences/stacks/<bundle>.json。記載順に適用します。ファイルがない場合はスキップします。includes経由でのみ参照されるバンドルは対象外です。.skilly/naming.json
マージのルール:
- オブジェクトはキーごとにマージします。
nullはキーを削除します。 - 配列は末尾に追加し、重複を除去します。
"-Data"はデフォルトのDataを削除します。 - スカラー値は上書きします。
{
"prefixes": { "sync": { "meaning": "mirror to a remote system", "not": ["push", "mirror"] } },
"noiseWords": ["-Data"],
"allow": {
"ctxTools": { "names": ["^ctx_"], "rules": ["short-word"], "why": "lean-ctx tool names." },
"payload/migrations": null
}
}
allow には名前付きエントリーを記述します。形式と抑制される内容については、references/lint.md を参照してください。
参照資料
- references/naming.json:プレフィックス、パーツ、成果物、短い単語、ノイズワード、同義語、識別子、許可リスト
- references/stacks/:バンドルごとのデフォルト設定。同じ形式です
- references/lint.md:ゲートでチェックする内容、判断する内容、リポジトリごとの例外
- references/biome.json:利用者向けのオプトイン Biome ブロック
- scripts/config.mjs:統合済みの設定を出力します
- scripts/check.mjs:ブランチで変更されたファイルに対してゲートを実行します