コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsプロダクトを考古学するときに見ると良いポイントを雑に書き出す

最初から自分が関わっていないプロダクトコードを探索する記事を書いたのですが、そこからRails特有のTipsを書き留めておきます。

考古学するときに見るといいポイント

routesを常に見れる状態にする

Webサービスをやっているので、大概の要望は「◯◯というページの内容を変えたい」など、どこかのページをどうにかしたいという話から始まります。そのため、そのWebページがどのように処理されているかをというところが肝要という話になります。毎度 bin/rails routes して探すのもアリですし、私の場合は bin/rails routes した結果を手元に残しておいて検索をかけて使います。( annotate のgemを入れいてるのであれば、 annotate --routes でroutesにもコメントを吐き出してくれるのでそちらを閲覧するのもアリです。)

メソッドが増えるタイプのgemがあればそれを頭に入れる

「このメソッドどこに定義があるんだ…?」と思ったらgemが生やしている、というケースはたまにあります。そういうgemがどれだけあるかを頭に入れておくだけで考古学がはかどることがあります。自分がよく知るものだと以下です。

Viewの作り方の質感を整理する

ModelやControllerは少し見ると方向性がつかみやすいのですが、Viewは作り方の方向性が色々あるので、どういうコンセプトなのか見ていくと良いと思っています。確認ポイントは以下。

  • JavaScript関連はどのような使い方をしているか
    • webpackerなのかwebpackなのか、VueやReactを使っているのか、古いものであればturbolinkをつかっているのかいないのか、など。
  • テンプレートエンジンは何を使っているか
    • erbじゃなくてslimやhamlを使っているケースもあれば、混ざっていたりとか
  • インスタンス変数の取り扱い方
    • partialにもインスタンス変数取り扱ったり、ぼっち演算子でカバーするのかifでカバーするのか、などインスタンス変数起点でそのプロダクトの王道がありそうであれば把握します。

挙動がよくわからなかったらテストコードを書く

ロジック面で難解な処理があれば、テストコードを書いちゃうのが一番効率がいいので書くのが早いです。View側も可能であればControllerまで処理を移植してControllerSpecを書くと挙動理解が早いです。もしページに来るべきパラメータがわからない、などであれば一旦Railsデバッグログからパラメータを拾い上げるなどやるとショートカットできます。

考古学するときのポイント

一番はどうやってコードが伸びてきたのか、というところに思いを馳せると良いと思っています。「このコードを書いている人は既存のコードベースを参考にして書いているのかな?」とか「この人はどちらかというと責務の比重をフロントエンドに置こうとしているのかな?」とPullRequestやAuthorの名前を見ながら考えると、どのような成長の仕方をしたか、当時どういう思いで書いていたかというのがなんとなく見えてきます。

余談ですが、自分の価値観に沿わないコードを見ると憤りの気持ちが募ることもありますが、コードを考古学する本質は「なんでこうなったか」を把握して、現状のあるべき論と照らし合わせたときに誤った方向にいかないようにすることなので、憤ったときはその憤りの根源を整理して後の改善案と結び付けられるように整理できるとよいと思います。

関連リンク