実は大切!PHPの命名規則を作って、開発効率を向上させよう

インタビューを読んで、同じような経験をしたいと思った方へ

「プログラミングに興味はあるけど、自分にできるんだろうか…」
「どうやって勉強すればきちんと身につけられるんだろう…」

初めてプログラミングに触れる方は、こんな疑問や不安を抱えている人も多いと思います。

まずは気軽に、『無料カウンセリング』であなたのキャリアや勉強方法について一緒に考えてみませんか?
侍エンジニア
無料カウンセリングの詳細はこちら

PHPの命名規則って、どうやって作ればいいのかな?
そもそも命名規則って必要なのかな?

こんにちは。HTMLやPHPの開発歴8年の著者が、PHPにおける命名規則について、その大切さと作成のコツをご紹介します。

命名規則とは、変数や関数などに名前をつける時のルールのことです。変数名などはプログラマーが自由に決めてもシステム上は問題ないんですが、複数人での開発となると、結構問題になってきます。

自分が作ったプログラムなら変数名を見るとどんな変数だったか分かりますが、人が作ったプログラムだと変数名だけを見ても何を意図して作られた変数なのか、すぐには判断できませんね。しかし命名規則を設けると、その変数の意味がすぐに分かるようになります。

今回は、意外と意識されていないけど実は大切な命名規則について解説したいと思います!

目次

PHPの命名規則とは

PHPにおける命名規則は、主にPHPファイル名、変数名、配列名、関数名、クラス名などに対して策定されます。そのルールの厳密さはプロジェクトが求める内容によって様々です。

人数が多ければ、結構しっかりとした規則が必要ですが、2〜3人なら簡単なルール付けくらいでも大丈夫でしょう。どういう目的で命名規則を作るか、それを考えることが大切です。

PHPの命名規則の種類

PHPには既存の命名規則がいくつか存在します。既に色々な人が命名規則を考えてくれているんですね。

例えばPHPの標準的なコーディング規約にPSRというものがあります。この中に命名規則が書かれてあって、それを採用しているプロジェクトも多いでしょう。

また、WordPressはPHPで作られているのですが、そこではWordPress用の規則が用いられています。WordPressのテンプレートページは世界中で開発されていますが、みんながその規則に則ってコーディングしてくれているので、誰が見ても内容が理解しやすく、開発の助けになっています。

そしてまた、各プロジェクトによる独自の命名規則もあるでしょう。このように命名規則には、色々な種類があります。

命名規則を作るときに気をつけること

では、命名規則を作成するときに気をつけることとはなんでしょうか?とにかく厳密にきっちり作るのが良いのでしょうか?

命名規則を作るときに大切なことは、その目的を明確にすることです。目的が明確になっていないと、無意味に厳しい規則になって逆に開発効率を下げたり、規則がゆるゆるで規則として機能していなかったり、せっかくの規則が意味をなさないことになります。

開発の人数、担当するプログラマーの経験値、プロジェクトの内容など、総合的に考えて命名規則を考える必要があります。

PHPの命名規則を作ってみよう

ではどのように命名規則を作ったらいいのか、変数名と関数名を例に挙げて考えてみましょう。それぞれ、どのようなポイントに注意して命名規則を策定すれば良いか、解説したいと思います。

変数名の規則を作ってみよう

まずは変数名です。名前の記法にはいくつかの型があって、基本の形をそこから選択すると規則策定の助けになるでしょう。

有名な記法には次の種類があります。

項番記法名特徴
1コンスタントケース全て大文字
各単語をアンダーバーで繋ぐ
PHP_HENSU_NAME
2パスカルケース各単語の先頭が大文字PhpHensuName
3キャメルケース最初の単語以外の単語の先頭が大文字phpHensuName
4スネークケース各単語をアンダーバーで繋ぐphp_hensu_name
5ケバブケース各単語をハイフンで繋ぐphp-hensu-name

ここで一つのポイントになるのが、変数は通常たくさん作られることです。つまり、その分名前をたくさん考えないといけなし、タイピングも多くなります。

このことから、変数名にはタイピングしやすいパスカルケースやスネークケースが選ばれやすい傾向にあります。変数が全部大文字だとタイピングしにくいですよね。

また、その変数の型を表すstrやintなどを先頭の単語にして、キャメルケースにする場合もあります。例えば、intAgeという変数を作ると、それがint型で年齢を入れる変数であることの想像がつくと思います。

明示的に型が分かるようにするのはバグを防ぐのに有効です。型の間違いによる不具合を防げるからです。

ということで、変数の命名規則としては次のように策定してみましょう。

「変数名はキャメルケースで、最初の単語はその変数の型を表すものとする。」

関数名の規則を作ってみよう

関数名については、変数名がキャメルケースだったので違う形にしたいと思います。関数名も数多く定義されますので、やはりタイピングは優先した方が良いでしょう。

変数と関数の違いをはっきりさせる上でも、関数名はキャメルケースではなくスネークケースにしてはどうでしょうか。例えば、calc_birth_year()というように関数が作成できます。

変数名と関数名の記法を変えると、どのように視認性が変わるのでしょうか?例を挙げて考えてみましょう。

例えば、先ほどの関数は引数を使ってcalc_birth_year($intAge)のよう書けますが、関数名も変数名と同じキャメルケースにしてしまうと、calcBirthYear($intAge)となって、少し視認性が低下してしまいます。

こういった、ちょっとした視認性の低下が意外と開発の効率に関わってきます。というわけで、今回の関数名の規則は次の通りとしたいと思います。

「関数名はスネークケースとして、単語の先頭は大文字にしない。」

簡単に変数名と関数名だけの命名規則を作ってみましたが、このようにごく簡単な規則でも開発効率が全然違ってきます。その他、クラス名やPHPファイル名の命名規則も、必要に応じで策定するといいでしょう。

標準的な命名規則について

命名規則に困ったら、標準とされている命名規則を参考にする方法もあります。こういった標準の規則は結構色々なシーンで取り入れられているので、新しい人が開発メンバーに加わっても命名規則の共有がスムーズにできるメリットがあります。

ここでは、冒頭に取り上げたPHPの標準的なコーディング規約のPSRと、WordPressで用いられている命名規約を簡単に紹介したいと思います。

コーディング規約PSRの命名規則

PSRの命名規則には次のものがあります。

  • クラス名はパスカルケースで記述する。
  • クラス定数名はコンスタントケースで記述する。
  • 関数名はキャメルケースで記述する。

例えば、このように記述できます。

<?php
class ClassTest{
    const CLASS_NUM = 1;
    function testMethod(){
        $TestHensu = ‘test’;
        echo $TestHensu;
    }
}
?>

PSRではクラス名、定数名、関数名で違った記法を用いています。PSRには変数に関する命名規則がありません。

変数に関する規則を設けないのも一つの方法で、あまり厳密に規則を作ってしまっても、逆に開発効率を落としてしまいます。PSRではその辺が考慮されているのか、一番よく使われる変数については規則を作っていないようです。

また、詳しくはこちらの記事も参考にしてください。

WordPressの命名規則

WordPressの命名規則には次のものがあります。

  • 変数と関数はスネークケースで、全て小文字にする。
  • クラス名はスネークケースで、各単語の先頭を大文字にする。
  • 定数名はスネークケースで、全て大文字にする。

例えば、このように記述できます。

<?php
class Class_Test{
    const CLASS_NUM = 1;
    function test_method(){
        $test_hensu = ‘test’;
        echo $test_hensu;
    }
}
?>

こちらはPSRとは打って変わって、記法が全てスネークケースです。ただ、何を大文字にするかだけで変数名、クラス名、定数名を分けています。

こうすることで、アンダーバーを入れるのか入れないのか、いちいち迷う必要がありません。とにかく単語の区切りにはアンダーバーを使うということが分かります。

そして、変数と関数は区別をつけないようです。よく使うものに関しては区別しないようにすると、命名規則を考える手間を省くことができます。

このように、命名規則は考え方によって色々な手法があるということが分かったのではないでしょうか。

まとめ

今回は命名規則の大切さと策定する時の考え方などを紹介しました。また、標準的なコーディング規約PSRとWordPressの命名規則も簡単に紹介しましたね。

どの規則が一番良いということはありません。一番大切なのは、命名規則を作る目的をしっかりと定め、共有することです。そうすることでPHPの開発がスムーズになり、不要なバグを防ぐことができます。

ぜひ、命名規則について一度考えてみていただければと思います。

この記事を書いた人

プログラム歴10年のシステムエンジニアです。
経験のある言語はHTML,JavaScript,PHP,VB,VBAなど。
WEB系の開発が得意です。

目次