2019/3/31 PHPerKaigi 2019
© - BASE, Inc.PhpStormでコードを理解する技術How to use PhpStorm to understand the code⽥中孝治 @tenkoma/ / PHPerKaigi
View Slide
© - BASE, Inc.PhpStormでコードを理解するために使ってきた機能を整理して紹介したい僕もまだまだ使いこなせてないので、他の機能をご存じの⽅はTwitter, ブログなどで紹介してくださいトークで話したいこと
© - BASE, Inc.⾃⼰紹介⽥中孝治BASE株式会社 BASE Product DivisionPhpStorm歴8年@tenkoma(Twitter, GitHub )Back-end Engineer
© - BASE, Inc.つづきはブログでもショートカットキー‧サンプルDocker環境設定はブログで公開していますhttps://tenkoma.hatenablog.com/entry/ / / /
© - BASE, Inc.キーマップはDefaultで!2ヶ⽉前にEmacsキーバインドから変えました「PhpStorm 分集中超絶技巧」より https://speakerdeck.com/yusuke/
© - BASE, Inc.「コードを理解するためのアプローチ」の違いで4つに分類機能を紹介していく前に
© - BASE, Inc.機能を分類1. コードを読む‧構造を知る3. コードを実⾏する2. 変更の経緯をたどる4. テストコードを利⽤する3, 4は準備に知識と⼿間がそれなりに必要ですが、コードを理解する⼿段として強⼒です
8コードジャンプ(Navigate→Declaration)クラス‧メソッドを開く(Navigate→Symbol)ファイル構造(File Structure)Call HierarchyFind Usages1. コードを読む‧構造を知る
© - BASE, Inc.シンボル(Symbol) クラス名、メソッド名、変数名などの名前の総称。識別⼦。よく出てくる⽤語「シンボル」
Mac:Cmd+B, Win/Linux: Ctrl+Bコードジャンプ(Navigate→Declaration)シンボルの使⽤箇所→定義を⾏き来する
Mac:Cmd+Alt+O, Win/Linux: Shift+Ctrl+Alt+Nシンボルを開く(Navigate→Symbol)急に特定のコードを確認したくなったとき
Show Usages: Opt+Cmd+F Win/Linux: Ctrl+Alt+FMac: Option+F Win/Linux: Alt+F使⽤箇所を検索(Show Usages/Find Usages)シンボルの使⽤箇所を⼀覧/検索
Mac:Cmd+F , Win/Linux: Ctrl+Fファイル構造(File Structure)ファイルのシンボル⼀覧表⽰
Mac: Ctrl+Option+H Win/Linux: Ctrl+Alt+H呼び出し階層(Call Hierarchy)メソッド呼び出され‧呼び出し関係をツリー表⽰
© - BASE, Inc.PHPプロジェクトを開くと、PhpStormが⾃動的にコードを静的解析してくれる機能を覚えるだけでコードの構造が理解しやすくなる1. コードを読む‧構造を知る まとめ
16AnnotateFind in Pull Request プラグイン2. 経緯をたどって理解する
エディタの右端の⾏番号を右クリックして「Annotate」を選択Annotate(git blame相当)⾏の最終更新⽇時、コミッターを表⽰
© - BASE, Inc.不具合の調査時に使うことがありますが、バグの犯⼈探しに使うわけじゃないよ!コードをよく理解したり、正しく改善するために便利な機能です⚠注意
エディタ⾏で右クリックして「Find Pull Request」を選択(ただしGitHubを使い、プルリクエストで開発を進めないと使えない)Find in Pull Request プラグインコード⾏から最終変更したプルリクエストを探す
© - BASE, Inc.2. 経緯をたどる まとめコードレビューの議論をたどるVCSを活⽤して、コードに書かれていない情報にあたる
21RunDebug(Toggle Line Breakpoint, Step Over)3. コードを実⾏する
© - BASE, Inc.このコードはなにをするコード?// nazono.phpfunction nazono() {$a = 0;$b = 1;for ($i = 1; $i <= 10; $i++) {$l = $a;$a = $b;$b += $l;print "$a\n";}}nazono();※意図的にわかりにくいコードにしてます
Mac: Ctrl+Shift+R Win/Linux: Shift+Ctrl+F実⾏(Run)実⾏結果で⼀⽬瞭然な例
ブレークポイント: Mac: Cmd+F Win/Linux: Ctrl+Fデバッグ実⾏: Ctrl+Shift+Dステップオーバー: Fデバッグ(Debug)実⾏途中の変数をみてコードの挙動を理解する
呼び出し階層‧変数が多いWAFを使ったアプリのデバッグ例CakePHP アプリ
© - BASE, Inc.3. コードを実⾏する まとめわかりにくいコードは実⾏すると理解しやすいデバッグできるようにすると変数を追跡でき、途中の状態を確認できる
27テストコードを読むテスト実⾏(Run)コードを書き換えてテスト実⾏ or テストコードを書く4. テストコードを利⽤する
プロダクションコード呼び出し‧期待する出⼒が書かれているテストコードを読むコードジャンプでテストコードを探す
Mac: Ctrl+Shift+R Win/Linux: Shift+Ctrl+F(通常の実⾏と同じ)テスト実⾏(Run)テストコードの想定どおりプロダクションコードが動くか確認
コードを書き換えてテスト実⾏ or テストコードを書く挙動の変化をみる
© - BASE, Inc.4. テストコードを利⽤する まとめPhpStormと連携してテスト実⾏できると、エディタから離れずに済むので、コード実⾏回数を増やせる。アプリケーションを通常実⾏するより局所的にコード実⾏できる。コードを理解する⼿段が増える
© - BASE, Inc.まとめショートカットキーを覚えてコードの構造を把握する難読なコードは実⾏‧デバッグしたほうが早いVCS連携でコード外の情報をたどるテストもコードを理解する⼿段になる
© - BASE, Inc.ありがとうございます!@shin x Masashi Shinbaraさん@tanakahisateru ⽥中ひさてるさん@chiroruxxxx ちろさん@sji_ch sjiさん@yusuke ⼭本ユースケさんブログ記事を参考にしたり、Twitterでフィードバックいただいたみなさん