エンジニアが既存のプロダクトの開発に携わる際、他人の書いたソースコードを読み解くところから始まります。過去に書かれたコードの意図を理解することは自分が書いたものでもしばしば難しく、他人が書いたものならなおさらです。この記事では過去に書かれたコードを理解するための工夫についてお話したいと思います。Requestを利用して開発が進められていることを前提としています。Requestページを開くクックパッドのソースコードには概してコメントがあまり書かれておらず、見ただけでは理解しづらいような特殊な方法をとっている場合のみコメントを書いている印象です。Requestページに書かれていることが多いです。Requestのページを見に行きますが、そのページを検索するのは少々面倒です。Requestページに直接的に辿り着く方法をご紹介します。特定のコミットハッシュからそのコミットを含むブランチのマージコミットを見つけるこちら(StackOverflow)の方法が社内でシェアされていました。RequestページのURLを生成することができます。これをシェルスクリプトの関数にしたものが下記になります。$url}$YOUR_REPO_URLの部分にはhttps://github.com/<owner>/<repo>を設定してください。-u`に置き換えるのが良さそうです。Requestページを開くことができます。blameするのを煩わしく思ったためXcodeのプラグインにしました。Requestページを開くことができます。プラグインは新規に作成したのではなく近い機能を提供していたlarsxschneider/ShowInGitHubをForkしてその一機能として実装しています。以下にプラグインが配置されるのでXcodeを再起動すると有効になります。blameは強力です。Requestの情報を辿ることができます。最初の実装時の情報を知りたいのにその後にバグ修正などが行われ変更されていると、最初に実装された際のコミットが分からず困る場合があります。そこでtigというコマンドラインツールを用いるとblameを繰り返し簡単に過去に遡ることができます。<ファイル名>を叩くとコミット情報が表示されるので、さらにblameしたい行を選択して,キーを押すとその行が最後に変更されたコミットを起点として再度blameした結果が表示されます。これを繰り返すと簡単に目的のコミットを発見することができます。checkoutしてプログラムを実行します。installといったパッケージのインストールを実行する必要が多いかと思います。確認を終えて最新のコミットに戻ってきた際にも再びインストールを実行する必要があり、長い時間パッケージのインストールで待たされることになります。このような場合はgit-new-workdirというコマンドを使って新たな作業ディレクトリを作成するとディレクトリ毎に別々のコミットをcheckoutできるので、最新にcheckoutしたディレクトリはそのまま置いておいて別の作業ディレクトリで古いコミットの動作確認をすることができます。git-new-workdirはgit-core/contrib/workdir/git-new-workdirに入っているコマンドです。ちなみにgit-new-workdirの存在はCTO氏から聞きました。使い方についてはこちらの記事が参考になります。あるビューがどのクラスのものかを特定するこちらはGitには関係が無いのですがコードリーディングに関連するのでおまけとして記載しておきます。既存のプロダクトをさわる際、自分が手を加えたいビューに関するコードがどのファイルに書かれているものかを探るのは意外に大変です。コードを読もうにもどこに書いてあるかがわからずファイルの探索に時間を取られてしまう場合があります。RailsアプリとiOS/Androidアプリのそれぞれで、実行時に表示されているビューからそれを司るファイルを特定する方法をご紹介します。Railsアプリクックパッドではr7kamura/view_source_mapというgemを利用しています。これを利用するとレンダリングされたHTMLソース内に、どこがどのpartialのものかをコメントとして表示することができます。Hierarchy"ボタンをクリックすると次の画像のようにビューの階層構造が可視化されます。この画面で任意のビューをクリックするとそのビューのクラス名が表示されます。Automator"ボタンをクリックすると実行画面が表示され、ビューをクリックすると右側のリストからそのクラス名が確認できます。まとめこの記事では既存のコードを読解するための工夫についてお話しました。皆さまの日々のコードリーディングの一助になれば幸いです。技術基盤や研究開発領...2017-06-28Android開発のコードレビューbotを乗り換えた話モバイル開発で利用しているコードレビューbotを最近乗り換えた...2016-10-04iOSアプリの継続的デリバリーへの取り組みについての勉強会を開催しました技術部モバイル基盤グループの三木(@giginet)です。