プログラマーは技術職だけど“管理”職でありたい

入社3年目になってから開発を行う上で今まで以上に気を付けている事があります。それは、「バグが起こりにくく 」「可読性の高い」プログラムを構築することです。
私が思うそれぞれの定義は以下の通りです。
- 「バグが起こりにくい」 = 想定外の挙動を想定してプログラムを組めているか
- 「可読性が高い」 = 他人が見た時に時間をかけず理解してもらえるようになっているか
つまり、今後のメンテナンスや他のメンバーがプログラムを修正する際に分かりやすい構造になっているかを考えてプログラムを構築するということです。
新卒の頃は、開発案件を任されても仕様通りに作り動かすことしか頭になく、言われた事だけをこなす事しかできないプログラマーになっていました。
しかし、それはプログラマーなら誰にでもできます。より大きな案件を任せてもらうように、周りと差をつけるにはどうすべきなのか?私が考えたことを今回書きたいと思います。
品質を高めて長期的なコストを抑える
開発において、重要な一つの指標に「品質管理」があります。

例えば、プログラムを時計に置き換えて考えてみましょう。
商品A | 商品B | |
---|---|---|
金額(開発コスト) | 20,000円 | 50,000円 |
耐久性(バグの除去率) | 低い | 高い |
修理のしやすさ(可読性) | 修理はできるが時間がかかる | 修理はかんたん |
どちらの時計を選ぶのがいいでしょうか。
一見、金額が抑えられるので「商品A」の方がお得に思えますが、実は長期間でみると「商品A」の方が金額が高くなる可能性が出てきます。なぜなら、「商品A」は耐久度が低いので故障が発生する確率が高く、故障が発生した際にコストがかかるからです。
最初は安くてもメンテナンスコストをかけたり、商品を買い直したりすれば何倍にも膨れ上がってしまいます。逆に、故障しないように最初にコストをかけておけば、メンテナンスコストを抑えれるかもしれないのです。
つまり、長期的に考えると開発コストをかけてでも品質管理を行う必要があると考えることができます。もちろん必ずしもこうなるとは限らないので断言はできませんが、バグが起こりうるかもしれないということは常に意識しておかないといけないと思います。
品質を落とさないために
「バグが起こりにくく 」「可読性が高い」プログラムを書くために日頃から意識すべき部分はなにがあるのでしょうか?
私はPHPを使った開発をメインで行っておりますので、PHPに関する内容で進めていきます。
1.バグを起こしにくいプログラムを書くには
◆ 型を意識して想定していない値を入れないようにする
良いIDEを使えば解決するかもしれませんが、そこはツッコまないでください(笑)
従来のPHPは型の宣言が曖昧でしたが、バージョンアップにより最近では型を意識しなければ警告を発するケースが増えました。これにより、型を意識しないでプログラムを組むと予期せぬ結果につながることもあります。
より安全なプログラムを書くためには型の意識もしておく必要があります。
◆ 条件文に必ずしも当てはまるわけではないので初期化は必須
条件文の構成に関してです。例えば下記のようなプログラムがあったとします。
if($_GET["name"] == "hoge") {
$name = $_GET["name"];
}
echo $name;
urlのクエリに?name=hogeがあった場合は$nameに値が入ります。しかし、クエリが無かった場合は$nameは未定義の変数扱いになりエラー(Undefined variable)となります。変数の初期化を行えば回避できますし、条件文に当てはまらない場合の想定はしておかないといけません。
◆ 必要な時のみ、型変換を行う
型の相互変換に関してです。例えば下記のような指定をしたとします。
// パターン1 (https://www.kurumaerabi.com?number=1)
$string = $_GET['number']; // 文字列で1が代入される
$string = $string + 1; // int(2)が返ってくる
// パターン2 (PHP7.1以降だとNG)
$string = "a"; // 文字列でaが代入される
$string = $string + 1 // int(1)が返ってくる
このように文字列で定義したのに足し算をしたら整数(int)の結果になるといった自動型変換(暗黙的な変換)が行われます。
ただ、注意しないといけないのはこの$string自体の型が変更されているものではありません。($stringは文字列のままです)どの様な型で解釈されたのかで、結果が変わってくるだけです。
他にもキャスト(明示的な変換)で変換する方法もあります。先程の処理を行うのでしたらキャストを使用した方がよいと思います。
$string = (int)$_GET['number']; // int(1)が代入される
$string = $string + 1; // int(2)が返ってくる
型変換についてお話してきましたが、安易に型変換を行うと、想定外のバグが起きる可能性がありますので注意が必要です。
できるだけ最初から型を意識したプログラムを書くことと、想定外の動作をされた場合でも回避するように例外パターンを組んでおくように気を付けることが大切です。
2.可読性を上げる
◆ 変数名をわかりやすくする
変数名を見ただけでイメージがつかめることは大切だと思います。
例えば、車両の一覧を保持するなら「CarList」のような感じにすると分かりやすいと思います。
◆ 条件文を使う場合はネストを深くしすぎない
ネストの構造が深くなりすぎると「どういった条件なのか」「横にスクロールしないと見えない」など、内容を理解するのに手間がかかる場合があります。
なので、条件文も複雑にならないよう気を付ける必要があります。
◆ 1つのメソッドになるべく多くの処理をかかない(複数に分ける)
例えば1つのメソッドに1,000行のプログラムを書いたとします。
そうした場合、コードを追うのが大変になります。
なので、分割できる処理は違うメソッドにして1つ1つをコンパクトにするようにしてあげます。
◆ コメントを活用して自分の意図を正しく伝える
他の方が「なぜ、このような処理をしているのか?」と意図が伝わらない場合があります。
そうした場合に、コメントで説明文を残しておくと意図を正しく伝えられますので、理解する時間を短縮出来ます。
過去の自分のプログラムを振り返る際にも使えます。これらを意識するだけで可読性が高いプログラムが書けると思います。
自己流のコードを書くのでなく相手のことを考える & 今後のことを意識すればより質の高いプログラマーに成長すると考えています。
分かりにくいプログラムはバグを発生させる原因にもなりますので….
最後に
私たちが提供しているサービスを利用してくださっているお客様は沢山いらっしゃいます。しかし、全員が満足しているわけではありません。
一人でも多くのお客様が喜んでいただけるサービスを提供するには、私たちプログラマーの品質管理は必要不可欠だと思います。より品質”管理”職としてこれからも励んでいきたいと思います。
ファブリカコミュニケーションズで働いてみませんか?
あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。
ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。
“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。