トップ画像イメージ

数ヶ月後の自分は赤の他人やで。ほんま。

こんにちは。 今回は筆者の本番環境リリーズ直前に、大慌てしてしまったので、一生忘れないようにその時の状況と対策を書いていきたいと思います。

エンジニアの仕事はとても楽しいですが、責任は重大です。本番環境リリースを経て、そのことを痛感しました。

というのも、本番リリース直前にまさかの仕様変更があったのですが(そもそもそれが一番いけない気がするが)、

その時に自分が書いたコードを見て・・・

何だこのクソコードは!誰が書いたぁ!!

と、某雄山も激怒な状況になっていました。

そうなると、どこを直せばいいのか、すぐにはわからず、数時間後にはお客様に見せなければならない状況から、更に焦ってしまい、大変苦労しました。

ですので、今後絶対に同じことにならないように、すぐ改善できそうなところから、記載していきます。

なお、この改善すべきポイントについては、名著と話題のリーダブルコードの影響を強く受けております。 業界半年くらいの方が読めば、「はぇ〜。確かにせやな。」となること請け合いなので、是非見られてください。

すぐに改善できるポイント

分かりやすい変数名を使う

長ーいコードになってくると特に、どの変数に、どの様な型の、どんなデータが入ってくるのか一撃で分かる変数名を書くのが非常に重要だと思いました。

例えば以下の例

folder_name = "#{Rails.root}/public/fuga/"
file_name = "hoge.csv"
file_path = folder_name + file_name

#(中略)
folder_name = "/fuga/"
file_name = "hoge.csv"
file_path = folder_name + file_name

↑を見ると、まぁ

  • file_nameにはファイルの名前
  • folder_nameにはファイルまでのパス
  • file_pathにはファイルまでのフルパス

が入ってくることは分かります。

でも、そのパスが何のパスなのか、分かりません。ファイルを生成して、サーバーに保存するためのパスなのか、ユーザーにダウンロードしてもらうためのパスなのか・・・

しかも、同じ変数名で・・・

これが長ーいコードを読み解いていくときに、この様なことをしていると、過去の自分をぶん殴りたくなります。(あくまで例ですが)

なので、もっと分かりやすくできます。

#サーバーに書き込むためのパス
save_folder_name = "#{Rails.root}/public/fuga/"
file_name = "hoge.csv"
save_file_path = save_folder_name + file_name

#ユーザーにダウンロードしてもらうためのパス
download_folder_name = "/fuga/"
download_file_path = folder_name + file_name

と、しておけば、最終的にこの値がどの様に利用されるか想像ができる様になります。

多少、文字数が多くても(長すぎはダメだけど)、一瞬でどんなデータが入っているか想像できる変数名を使う様にします。(決意)

javascriptのfor分で利用する、変数なんかも気をつけた方が良さそうです。

for (var i = 0; i < obj.length ; i ++){
  //処理
}

//よりも,
for (var index ; index < obj.length ; index ++){
  //処理
}
//の方がまだ意味がわかる。

会社にコーディング規約がなければ、優れた企業の規約をパクる

私が現在携わっているプロジェクトでは、これ!といったコーディング規約が残念ながらありません。

ですが、Githubを見渡せば、様々な優れた企業がコーディング規約を公開してくれています。

(例) クックパッド様のコーディング規約

これらを参考に、統一性のあるコードを書いておくと、非常に保守性が上がりそうです。(自分だけでもしておけば、少なくとも過去の自分に切れることは少なくなります)

単純なのもですが、配列に値を代入する際には、必ず改行して、インデントを合わせる。などはやっておいた方が良さそうです。

あと、変数名やfunction名にも統一性を持たせる様にします。

//js
//いい感じ
var $deleteTarget = $('#id-fuga'); //jqueryのオブジェクト
var indexNum = '0'; //ローカルな変数名
function deleteElement(){}

//ぐちゃぐちゃ
var delete_target = $('#id_fuga')
//スネークケース。htmlのidはキャメルケースの方が良いと思う。
var IndexNum = ""//シングルクオートとの使い分けに意味は?
function deleteElement(){}

とりあえず、今日からでもすぐに改善できそうな点です。(他にもインデントは揃えるとか、至極当たり前のこともあるけど)

まとめ

  • 仕様は必ず変わる。だったら、変わってもどこのコードを変えればいいか、すぐにわかる様にしておこう
  • 変数名や、関数名には命名規則を持たせて、すぐに何かわかるようにしておく