Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

個人的にコードリーディングがはかどったテクニックまとめ

$
0
0

はじめに

コードリーディングの重要性はそこらじゅうで語り尽くされてる感があります。

僕も地道にコードリーディングをしているのですが、いざやろうとするとハードルが高いことがままあります。そこで、個人的にコードリーディングがはかどったと感じたテクニックをまとめておこうと思います。

筆者環境の前提

  • ソースコードのバージョン管理は Git を使っている
  • 開発 PC は Mac を使っている
  • エディタは Vim を使っている

ghq + peco で読みたいリポジトリに気軽にたどり着く

読みたいソースコードのリポジトリが増えてくると、ローカル環境でのリポジトリをどのディレクトリに置くか、またいざ読もうとするときにディレクトリを辿っていくのが煩雑になってきます。

そんな時、読みたいリポジトリに気軽にたどり着くことができれば、読むハードルが下がります。

僕は pecoghqの組み合わせを使っています。この組み合わせによって、

  • ghqでリポジトリを~/.ghq/配下に <github username>/<repo name>のディレクトリ構造で一元管理し
  • peco~/.ghq配下のリポジトリ群をあいまい検索でフィルタリング

出来るようになり、読みたいリポジトリにたどり着くまでのハードルが下がります。

参考URL

gocloc でリポジトリの規模を知る

リポジトリのソースコードがどんな規模なのかを予め知っておくのは、コードリーディングを始める上で参考になると思います。

僕が使っているのは goclocです。こちらはもともと存在するコードの行数をカウントする cloc(Count Lines Of Code)を golang で書き直したものです。「a little fast cloc」と紹介されてたので使っています。

例えば先程取り上げた ghqgoclocをかけると、以下のような形でファイル数やコード行数でリポジトリの規模を知ることが出来ます。

$ gocloc ~/.ghq/github.com/motemen/ghq
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                              17            432             61           1748
AsciiDoc                         1             36              0            116
BASH                             2             14              0             36
Markdown                         1             12              0             27
Makefile                         1             10              0             23
YAML                             1              2              0              6
-------------------------------------------------------------------------------
TOTAL                           23            506             61           1956
-------------------------------------------------------------------------------```

参考URL

リリースバージョンを遡ってリポジトリの規模を縮小する

いきなり大規模なリポジトリを読もうとすると、どこから読めばいいかわからなくなりがちですよね。そんな時、最初のリリースに遡ってリポジトリを規模を小さくしてから読むと、糸口が見つかるかも知れません。

Github 上のリポジトリでは リリースバージョンのコミットに tagをつけることが多いので、tagでリリースバージョンを遡ることができます。

例えば railsのリポジトリでバージョンを遡ってみましょう。2018/06/24 時点で Releasesに載っている最新バージョンである v5.2.0から確認します。

$ cd rails
$ git checkout v5.2.0
$ gocloc .
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Ruby                          2313          55095          47048         234288
Markdown                        75          15327              0          38364
JavaScript                      47           3341           2804          13723
YAML                           137            282            208           2854
CSS                             20            215            140           1264
CoffeeScript                    24            194            225            763
JSON                             5              1              0            236
HTML                            20             15              3            199
Yacc                             1              4              0             46
SQL                              1              6              0             43
Plain Text                       6              0              0              6
-------------------------------------------------------------------------------
TOTAL                         2649          74480          50428         291786
-------------------------------------------------------------------------------

約29万行。。さすがの規模ですね。次に、初期バージョン v1.0.0を見てみると、

$ cd rails
$ git checkout v1.0.0
$ gocloc 
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Ruby                           567          10753          12570          50875
JavaScript                       4            519            183           3271
SQL                             22            209              6           1561
Ruby HTML                       61            107              0            533
YAML                            27             72             46            399
HTML                             3             32              0            261
CSS                              1             13              0             61
Bourne Shell                     3              3              0              9
Plain Text                       1              0              0              1
Batch                            1              0              0              0
-------------------------------------------------------------------------------
TOTAL                          690          11708          12805          56971
-------------------------------------------------------------------------------

約5万行程度まで規模が小さくなりました。(それでもかなりの規模ですが。。)
最新バージョンとは書き方が違っていたりするところも多いかと思いますが、リリース初期から存在する機能や、肝となるディレクトリ構造などを知ることは出来るのかなと思います。

コードを検索する

コードリーディングにはコード検索が欠かせないと思います。ここでは僕が使っているコード検索方法を書きます。

CLI でコード検索する

CLI 上で検索するときは、 findxargsgrepをパイプで繋いで検索するコマンドを、.zshrcalias登録して使っています。./.git./logといったディレクトリは検索除外にしています。

.zshrc
alias codegrep='find . -path ./.git -prune -o -path ./log -prune -o -type f -print0 | xargs -0 grep -n -E $1'

例えばこのコマンドで railsリポジトリをREADMEという文字列で検索すると、こんな感じで確認できます。

$ cd rails 
$ codegrep README
./actionpack/test/controller/action_pack_assertions_test.rb:88:    render file: File.expand_path("../../README.rdoc", __dir__)
./actionpack/test/controller/action_pack_assertions_test.rb:92:    render file: "README.rdoc"
./actionpack/actionpack.gemspec:20:  s.files        = Dir["CHANGELOG.md", "README.rdoc", "MIT-LICENSE", "lib/**/*"]
...

参考URL

Vim で ack.vim と the silver searcher を組み合わせてコード検索する

僕は開発で Vim を使っているのですが、ack.vimというプラグインでコード検索しています。こちらに高速でコード検索が出来るthe_silver_searcherを使えるように設定しています。

検索の仕方は:Ack hogehogeのような形で検索できます。
CLIでの検索と同様、 railsリポジトリをREADMEという文字列で検索してみると、こんな感じでエディタと別のペインで検索結果が表示されます。

image.png

Vim から抜けること無くコード検索ができ、かつ検索結果から直接検索ヒット箇所に移動できるので便利です。僕は開発時は CLI よりもこちらを使うことが多いです。

参考URL

終わりに

コードをたくさん読むことが大事だと最近痛感しています。もっと効率よく読めるようになりたいなと思っています。他にもコードリーディングがはかどるテクニックありましたら教えてください。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>