なぜ関数名の命名が重要なのか
PHPのコードレビューをしていると、機能は正しく実装されているのに、関数名が曖昧で意図が伝わりにくいコードに出会うことがあります。特に「削除」や「取得」といった操作は、英語の動詞によって「データの破壊度合い」や「処理の性質」が微妙に異なります。適切な単語を選ぶことは、将来のメンテナンス性を高め、チーム開発における「勘違いによるバグ」を未然に防ぐために非常に重要です。
基礎知識:動詞の選択がコードの性格を決める
関数名は一般的に「動詞+名詞(目的語)」で構成されます。しかし、プログラミングの世界では、日常会話以上に動詞ごとの「技術的なニュアンス」が重視されます。
例えば「削除」を意味する単語だけでも、以下のような違いがあります。
・delete: データを物理的に消去する(復元不可のニュアンスが強い)
・remove: リストや管理下から外す(データ自体は残る可能性がある)
・clear: コンテナやバッファの中身を空にする(器そのものは残る)
これらの違いを意識するだけで、コードの読み手は「この関数を実行すると何が起こるのか」を名前から推測できるようになります。
実装・解決策:現場で迷わないための使い分け指針
実務では、以下の分類を意識して命名を統一するのがおすすめです。
1. データの操作(CRUD):
- 作成系: create(新規), add(追加), insert(挿入)
- 取得系: get(単純取得), find(検索して取得), fetch(外部から持ってくる)
- 変更系: update(更新), modify(部分修正), replace(置換)
- 削除系: delete(消去), remove(取り除く)
2. 状態の判定(真偽値):
- 常に「is」「has」「can」などの接頭辞を使用する(例: isAvailable(), hasPermission())
サンプルプログラム:動詞の違いを意識した実装例
以下のコードは、キャッシュをクリアし、設定を保存し、ユーザーを取得する一連の流れを想定したクラス例です。
/
public function removeUser(int $userId): void
{
unset($this->users[$userId]);
}
/
- キャッシュの内容を全て空にする(器は残す)
/
public function clearCache(): void
{
file_put_contents($this->cachePath, ”);
}
/
- データベースへ情報を保存(永続化)する
/
public function saveUserData(array $data): bool
{
// データの永続化処理
return true;
}
/
- ユーザーが存在するかを確認する(真偽値を返す)
/
public function hasUser(int $userId): bool
{
return isset($this->users[$userId]);
}
}
?>
応用・注意点
関数名の命名において最も避けるべきは「意味が重複する単語」や「曖昧すぎる単語」です。
・避けるべき例: `processData()` や `handleData()`
これらは「何をする関数なのか」が名前から全く読み取れません。代わりに `validateData()` や `formatData()` のように、具体的な動作を明示してください。
・一貫性の維持:
プロジェクト内で「取得」を `get` としたなら、全ての取得系関数で `get` を使ってください。一部で `fetch` が混在すると、開発者は「これは何か特別な取得処理なのか?」と余計な推測を強いられます。
命名に迷ったら、その関数が「対象をどうしたいのか」を辞書で引き、その動詞が持つ「本来のニュアンス」と「プログラム上の挙動」が一致しているか確認する習慣をつけることが、熟練エンジニアへの近道です。