既存のRailsのコードの読む際にやったこと
はじめに
アドベントカレンダーの記事になっております〜!
Rails初心者なこともあって、既存のコードを読むのに非常に苦労しました。その際に気をつけたことを書いて行きたいと思います。
シチュエーション
既存のRailsからモデルなどを確認して、処理を追加、改変するような状況を前提とします。
データの扱い方を確認する
まずデータがアプリケーション無いでどういう扱いをされているかを把握します。
データのインプット箇所を確認する
データのインプット箇所とはmodelがビルド、またはインサートされている以下のような箇所です。
RailsであればparamsでPostされたデータを扱うのでControllerのactionから追って行けばすぐに見つけることができると思います。
Mode.new(hoge: hoge)
Model.create(hoge: hoge)
データのインプット箇所から追うことによって、以下のように加工済みのデータが挿入されていたり、DBに登録されるデータから処理を追う取っ掛かりを作ることができます。以下の処理の場合fuga関数の処理を追っていくことになるでしょう。
hoge = fuga(paramas[:hoge])
Model.create(hoge: hoge)
このように徐々にデータがどう扱われているかを探って行きます。
これを先に行うことにより、カラムからの推測による勘違いを減らせます。
例えばスキーマのカラムの型がfloatでカラム名がtaxだった場合、直感的に税率が入ってるのかと思いますが実際にDBに登録される値は税金 * 商品価格
の値かもしれないですし、商品価格 + 税金 * 商品価格
の値かもしれないので、推測はせず一つの値に対してどういう処理が施されているかを確認していきます。
データのアウトプットを確認する
インプットから処理を追ったあとは実際に使わている箇所を確認する作業を行います。
アウトプット先はRailsの場合最終的にはブラウザの表示に行き着くと思います(サーバーのみで扱われる値がある場合もあるがここでは省く)。
アウトプットも確認してないと値の扱われ方がわからないものあるので、インプットの際との加工処理と最終出力されたUIを頭の中で合致させていきます。
例えばprice
というカラムがあっても単位が円かドルかを持っていない場合、UIを確認しないと単位を確認できません。
必要なモデルの全体像を把握する
モデルの依存関係を把握したい場合があります。とくにRailsはアソシエーションがあるのでそのような事が多いように思います。
モデルのアソシエーションから依存関係を把握する
モデルから以下のようなアソシエーションからテーブルの依存関係を把握することができます。
アソシエーションを見ることで関係性がN対1なのか1対1なのかを把握することできると思います。
has_many :hoges
belongs_to :fuga
ただこれだけを確認するとカスタマイズされたアソシエーションの可能性もあるためスキーマの確認も必要です。
スキーマのコメントに注釈が書いてる可能性もあるのでなるべく合わせて把握しましょう。
稀にアソシエーションを貼り間違えているものあったりするのでデータの扱い方といっしょに把握していくと良いでしょう。
ER図を作成する
任意ですが視覚的にわかりやすいのと、スキーマとアソシエーションからN対1, N対Nなどの関係をいちいち覚えなくても済むようになるので存在しない場合作成しても良いかもしれません。
モデルの全体的なER図を作成してしまうと逆に分かりにくくなってしまうので、現状必要としている箇所のみのものを作ります。
自分が把握していることを説明する際は共有しやすいのでオススメです。
まとめ
既存のコードを読むのに気をつけていた事をまとめると以下になります。
- データのインプット箇所を確認する
- 処理を追う取っ掛かりを作るため
- 実際の値の扱われ方を確認し、推測を減らすため
- データのアウトプットを確認する
- UIのみで確認できることがあるため
- インプットで確認した処理と合致させるため
- モデルの全体像を把握する
- モデルのアソシエーションから依存関係を把握する
- 視覚的にわかりやすいためERを作成する
Discussion