AgentSkillsCN

naming

在编程中运用面向对象的命名技巧,以目的为导向为类、函数和变量命名。聚焦于“目的”,而非“存在”,从而设计出清晰分离关注点的命名方式。当您在命名时感到困惑,或希望在代码评审中优化命名,又或是通过重构来重新审视并改进命名时,可使用此功能。

SKILL.md
--- frontmatter
name: naming
description: プログラミングにおけるクラス・関数・変数の目的駆動命名スキル。存在ではなく目的に焦点を当て、関心の分離を実現する名前を設計する。命名に悩んでいる時、コードレビューで命名を改善したい時、リファクタリングで名前を見直したい時に使用する。

Naming - 目的駆動命名

ソフトウェアの意図を名前から読み取れるようにするための命名スキル。

命名の原則

1. 目的駆動で考える

存在駆動(何であるか)ではなく、目的駆動(何のためか)で名前を設計する。

code
// 存在駆動(避ける)
UserData, ItemList, StringHelper

// 目的駆動(推奨)
AuthenticatedUser, PurchasableItems, EmailValidator

2. 具体性を最大化する

可能な限り具体的で、意味が狭く、目的に特化した名前を選ぶ。

code
// 曖昧(避ける)
process(), handle(), Manager, Service, Utils

// 具体的(推奨)
calculateShippingCost(), validateEmailFormat(),
OrderFulfillmentCoordinator, PaymentGatewayClient

3. 関心の分離を確認する

一つの名前が複数の責務を示唆していないか点検する。

code
// 複数の関心が混在(避ける)
UserManagerAndValidator
saveAndNotify()

// 関心が分離(推奨)
UserRepository + UserValidator
save() → onSaved → notify()

命名ワークフロー

  1. 業務目的を分析する

    • このコードは何を達成しようとしているか?
    • どんなビジネス価値を提供するか?
    • ユーザーにとっての意味は何か?
  2. 用語を調査する

    • プロジェクトの用語集・利用規約を探す
    • ドメイン固有の専門用語を確認する
    • 既存コードで使われている命名パターンを調べる
  3. 候補を列挙する

    • 最低3つの候補を出す
    • 各候補の長所・短所を比較する
  4. 置き換え可能性をテストする

    • 別の名前で置き換えられないか検討する
    • 置き換えられるなら、より具体的な名前がある
  5. 関心の分離を点検する

    • 名前が単一の責務を表しているか?
    • 「and」「or」「with」が含まれていないか?
    • 名前を説明するのに複数の文が必要ないか?

アンチパターン

パターン問題改善例
XxxManager責務が不明確具体的な動作を名前に
XxxService何でも入る目的を明示
XxxUtils/Helper凝集度が低い機能ごとに分割
doXxx()当然すぎる何をするか具体的に
XxxInfo/Dataデータの目的が不明用途を名前に含める

良い命名の特徴

  • 読めば目的がわかる: コメントなしで意図が伝わる
  • 検索可能: grepで見つけやすい
  • 発音可能: チームで議論できる
  • 一貫性: 同じ概念には同じ言葉を使う
  • 適切な長さ: スコープに応じた詳細度