はじめに
自分は駆け出しエンジニアで、現場に入って仕様理解がうまくできず、タスクを遅延をしてしまいました。原因は技術力のせいにしていましたが、ただ技術力不足なだけでないことがわかってきました。
実際にどうやってコードを読めるようにしていけばいいのかを説明していきます。
参考動画
そもそもコードが読めるとは?
そもそもコードが読めるとは何でしょうか。
コードを読んだらどんな処理をしているかがわかり、システムの仕様がわかる状態です。
コードを読めるようにするには?
コードを理解して、処理の流れを理解し、システムの仕様を理解することです。
ただこれが駆け出しエンジニアには難しい😭
これはベテランエンジニアでも仕様の理解には、時間がかかってしまいます。
実際に自分がいた現場の経験10年のCTOやメガベンチャー出身のエンジニアも
仕様は全部把握していないと話していました。
参考資料は、ソースコードを全部読むのに、3年かかると言われています。
仕様理解するためにどうする?
上でお伝えしたように、強エンジニアでも完全に理解は難しいです。
ただ仕様理解には、コツがあるみたいです。
結論(ただコードを読まないこと)
自分が始めて現場に入った時に、ただ闇雲にコードを読んでいたら、
一日で疲れ果ててしまって、仕様が全く理解できずに終わってしまいました。
普通に撃沈でした😭
参考資料を引用するとこんな感じです。
なぜなら、長年動いているシステム系は一千万行とかの単位でソースコードがあるので、1日千行読んだとしても千日かかります。単純計算で全部読むのに3年かかる計算です
普通に無理ゲーです。😅
ソースコードを読んで理解するには、コードを読み始める前に8割程は勝負が決まる
とみたいです。
この勝負を決めるには、コードを読むコツを理解しておく必要があります。
コードの読み方のコツ
1.入口と出口を意識(読む目的を明確にし、読まない部分を決める)
入口と出口を理解(読む目的)を理解できれば、処理は理解できたりします。
動画を参考に書いていきます。
プログラムの処理(メソッド)は主に以下の3つの構成です。
1.データを入れる(入口)
2.中でデータを処理(中身)
3.データを出す(出口)
ここで抑えるべきは、1と3
です。
1の入口はメソッドの引数
3の出口は、returnで返しているもの
この2つを見て大まかに理解します。こんな感じです。
この処理は何するんだろう?🤔
ex)
ログインしているか確認する処理
クーポンを発行する処理
ユーザーのデータを表示する処理
この処理はもらったデータをこんな感じで返すんだなー
って予測できたりします。
これを繰り返していきましょう。
そして膨大な量のコードがある場合は、読まないことを決めることも大事です。
努力しても成果が出ない人は、不要な努力をしているケースが多いです。(完全に僕です。😅)
2.紙に書いて状況整理
頭の中だけだと100%忘れます。
なので、自分は理解したことをメモで書いたりしました。
後はNotionなどで、自分が理解していったことをドキュメント化して仕様書を現場で作成しました。
ex)
1.メソッドごとにどんな処理をしているかまとめる
2.紙で処理の流れを図に書いて整理
3.詰まったら問題の切り分け
仕様が理解できない原因は以下の2つみたいです。
以下の2つの切り分けができないと、仕様理解の対策が立てられません。
仕様が理解できないのはどっちかを理解していく必要があります。
①技術がわからない(Rails、Reactの使い方など)
自分の場合は、Railsでクラスの使い方がわかってなくて苦戦したことがありました。
あとReactだとuseStateの使い方がわかってませんでした。
具体的に、Railsの何がわかっていないのかを理解する必要があります。
ex)
Railsが理解できていないならServiceクラスがわかっていないのか?
クラスがわかっていないということは、Rubyのクラスの部分をわかっていないのか?
わかっていない部分がわかったらそこをピンポイントで調べればいいです。
他は、一旦は調べる必要ないです。
それすらわからないなら、先輩に相談するといいです。
②システムの仕様がわからない
ex)
自分の場合、予約機能の流れがどのファイルでどのコードが呼び出されているかわかっていなかったです。
コツは、時間を決めて処理を追って制限時間が来たら人に聞くといいです。
あとテクニックとして、実際に自分でサービスを使ってみるといいです。(ローカルでOK)
あとユースケースも確認しておきましょう。
そしてコードを少しいじったりしながら、挙動を確認するといいです。
もう一つテクニックとして、メイン機能を理解して、その後に、自分のタスクに関係する機能を理解することです。
なぜならWebサービスは、メイン機能を軸にそこから派生させて作っています。
まずはメイン機能を理解しましょう。
4.デバックする
Railsならbinding.pry
、Laravelならdd
を使ったりして処理を理解していくといいです。
デバックをすると処理の流れや変数に何が入っているかなどを理解できます。
- Laravel(dd)
- Rails(binding.pry)
- Rails(Raise 〇〇.inspect)
5.推測しながら読む
全体像や処理をある程度推測しながらソースコードを読むと内容が理解しやすくなります。
ex)
Coupon.rbのモデルがあればこれがCouponに関するモデルかな?とか(ざっくりですみません😅)