良いコードを書く意識を習慣化するための第一歩

トレタ Advent Calendar 2018 3日目の記事です。

トレタ Advent Calendar 2018 1日目の記事に対して、私が @ziguzagu から受けたコードレビューを題材に、品質の高いコードを習慣化するための第一歩について考えてみます。

レビューするスクリプト

我々トレタのAPIはRuby on Railsで書かれています。日々のオペレーションの中で、アドホックなRuby scriptをRails runnerで実行することがよくあります。このようなスクリプトは週に1〜2回は実行するが、機能がリリースされる数ヶ月後には削除予定となるようなものです。

今回は、とある機能を有効にするためにSystemPropetyというグローバル変数のようなTableにデモ店舗を追加するスクリプトが今回の題材です。

レビュー前のコード

さて、私は最初に以下のようなコードを書いてレビューをお願いしました。

このコードのロジックは正しいです。しかし、いくつかスクリプトとして甘いコードになっています。レビューでは以下のような指摘を受けました。

スクリプト書くときの習慣になれば特にコストかけてやることではないものがほぼなので以下を気にすること
・コマンドラインの(に限らずだけど)引数検査はスクリプトの先頭でやろう
・ARGV[0] があるかどうか、数値かどうか、のチェックをしてから DB に渡そう
・正常でない終了は 0 以外を返そう。ruby に限って言えば puts & exit より raise するほうがよい。検査時のエラーはエラー文字列を自分で渡してraiseすると可読性が上がる
・ARGV[0] が何度も出現するのは可読性を損なうので、restaurant_idに代入する処理を先頭にする

私の最初のコードではそもそも引数をActiveRecordに渡してDBのレイヤで検査しているのが危険な行為でした。引数としてhogeが入ると以下の挙動になります。

レビュー後のコード

上記のレビューを受けて修正した結果、下記のようなコードになりました。

改善された点は以下のようになりました。

・入力引数が検査され、id相当以外の文字列がDBに渡されなくなった
・入力引数が異常な文字列だった場合、ログでわかるようになった
・正常終了・異常終了がわかるようになった
・スクリプトの可読性が向上した

アドホックなスクリプトといえど、少し考慮するだけで品質が高いコードになりました。これで私は昨日よりずっと良いRuby scriptが書ける第一歩を踏み出すことができました。

このように、コードの品質は日々もっと改善できないかを探すことで少しの労力で劇的に向上することができます。これが人によってはコードスニペットだったり、shellscriptだったり、IDEのショートカットを覚えることだったりします。

何でも良いと思うので、自分のコードや作業に常に疑問を投げかけて、より良くできないか考えることがコード品質を向上させる第一歩だと私も思います。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

4
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。