コードの読み方 (LT駆動開発01で発表しようとしたネタ)

2014年2月28日のメモ。メモの放出はとりあえずこれで終わりっ!

参考文献

LT の目的

  • 正直どうやって読めばよいのかわからないので路頭に迷っている
  • フィードバックが欲しい
  • 時間があまったら、普段こういう感じでコードリーディングしているというのを見せてもらえると嬉しい
  • 普段 IDE を使っていないので、IDE を使ってコードリーディングしている人の意見も聞きたい
  • コードリーディングのエッセンスを抽出したい

なぜコードリーディングに意欲なのか

  • 例えば、最近 ocamltter や rubo に興味が出て読んでみた
  • ocamltter は、動かなかったので修正してプルリクエストを出してみたが結構時間がかかった
  • OCaml に慣れていないということもあるが
  • rubo は、hubot の ruby 版で、まだ plugin や adapter がそろっていないので、書いてみようかとコードを見た
  • あまり理解できない
  • あまりの読めなさに愕然とした
  • 書くことよりも読むことのほうが多いとされている
  • rhg にも読むことは簡単だとは思えないと書いてある
  • 良いコードを書くには書くことも重要だが、読むことも重要
  • 凡人なので自分だけの世界で書いていてもクソコードを書くことになる
  • デザインパターン
  • 抽象化
  • 分割
  • 名前
  • 圧倒的に読む量が足りていない
  • とりあえず読め、そしたらおのずとわかってくると言われるかもしれないが、経験者がいるのでその人たちからエッセンスを盗んでもいいはず
  • 読まないとわからないということもあるのは理解している
  • 実際にやっているところをみたい

コードリーディング

コードリーディングには2つの読み方がある。

  • 動的な読み方(動的解析)
  • 静的な読み方(静的解析)

それぞれにコードリーディングを効率的にするためのツールがある。 メンタルモデルもある。どういう方針で読み解いていくのか。あたりをつける。

動的な読み方

実際にコードを実行しながら読む。 実際をともなっているので、直感的に理解が進みやすい。 最近は、ユニットテストがついてくることも多いので、それを見たり動かしたりするとよい。 メソッドの使い方がわかる。仕様が読み取れる。

ツール

  • デバッガ
  • pry-byebug (ruby)
  • print

静的な読み方

ソースコードを読む

ツール

  • grep
  • git grep
  • 読みたい場所がわからん場合
  • find
  • 読みたい場所がわからん場合
  • タグジャンプ
  • ctags
  • Unite grep or Unite vcs_grep

ctags

  • たいてい、exuberant ctags のことを指す
  • tags というファイルを生成する
  • ハイパーリンク
  • <C-]> 定義にジャンプ
  • g<C-]> ジャンプ先が複数ある場合、一覧表示して候補を選択する
  • <C-t> 戻る
  • Unite tag or :tag <word> or tjump <word>

メンタルモデル

目的を持って読む

何が知りたいのかというのを意識していないと、あっちこっちに目が移ってしまい何がしたかったのかよくわからなくなる。 時間がかかるし、途中であきらめてしまいたくなるかもしれない。