PhpStormでコードを理解する技術 / How to use PhpStorm to understand the code

PhpStormでコードを理解する技術 / How to use PhpStorm to understand the code

2019/3/31 PHPerKaigi 2019

6c3a375d1752c7f5aafc963296b9d5a0?s=128

tenkoma (Koji Tanaka)

March 31, 2019
Tweet

Transcript

  1. © - BASE, Inc. PhpStormで コードを理解する技術 How to use PhpStorm

    to understand the code ⽥中孝治 @tenkoma / / PHPerKaigi
  2. © - BASE, Inc. PhpStormでコードを理解するために使ってき た機能を整理して紹介したい 僕もまだまだ使いこなせてないので、他の機能 をご存じの⽅はTwitter, ブログなどで紹介して ください

    トークで話したいこと
  3. © - BASE, Inc. ⾃⼰紹介 ⽥中孝治 BASE株式会社 BASE Product Division

    PhpStorm歴8年 @tenkoma(Twitter, GitHub ) Back-end Engineer
  4. © - BASE, Inc. つづきはブログでも ショートカットキー‧サンプルDocker 環境設定はブログで公開しています https://tenkoma.hatenablog.com/entry/ / /

    /
  5. © - BASE, Inc. キーマップはDefaultで! 2ヶ⽉前にEmacsキーバインドから変えました 「PhpStorm 分集中超絶技巧」より
 https://speakerdeck.com/yusuke/

  6. © - BASE, Inc. 「コードを理解するための アプローチ」の違いで4つに 分類 機能を紹介していく前に

  7. © - BASE, Inc. 機能を分類 1. コードを読む‧構造を知る 3. コードを実⾏する 2.

    変更の経緯をたどる 4. テストコードを利⽤する 3, 4は準備に知識と⼿間がそれなりに必要ですが、コードを理解する⼿段とし て強⼒です
  8. 8 コードジャンプ(Navigate→Declaration) クラス‧メソッドを開く(Navigate→Symbol) ファイル構造(File Structure) Call Hierarchy Find Usages 1.

    コードを読む‧構造を知る
  9. © - BASE, Inc. シンボル(Symbol) クラス名、メソッド 名、変数名などの名前の総称。識別⼦。 よく出てくる⽤語「シンボル」

  10. Mac:Cmd+B, Win/Linux: Ctrl+B コードジャンプ(Navigate→Declaration) シンボルの使⽤箇所→定義を⾏き来する

  11. Mac:Cmd+Alt+O, Win/Linux: Shift+Ctrl+Alt+N シンボルを開く(Navigate→Symbol) 急に特定のコードを確認したくなったとき

  12. Show Usages: Opt+Cmd+F Win/Linux: Ctrl+Alt+F Mac: Option+F Win/Linux: Alt+F 使⽤箇所を検索(Show

    Usages/Find Usages) シンボルの使⽤箇所を⼀覧/検索
  13. Mac:Cmd+F , Win/Linux: Ctrl+F ファイル構造(File Structure) ファイルのシンボル⼀覧表⽰

  14. Mac: Ctrl+Option+H Win/Linux: Ctrl+Alt+H 呼び出し階層(Call Hierarchy) メソッド呼び出され‧呼び出し関係をツリー表⽰

  15. © - BASE, Inc. PHPプロジェクトを開くと、 PhpStormが⾃動的にコードを 静的解析してくれる 機能を覚えるだけでコードの構造 が理解しやすくなる 1.

    コードを読む‧構造を知る まとめ
  16. 16 Annotate Find in Pull Request プラグイン 2. 経緯をたどって理解する

  17. エディタの右端の⾏番号を右クリックして 「Annotate」を選択 Annotate(git blame相当) ⾏の最終更新⽇時、コミッターを表⽰

  18. © - BASE, Inc. 不具合の調査時に使うことがありますが、 バグの犯⼈探しに使うわけじゃないよ! コードをよく理解したり、正しく改善するた めに便利な機能です ⚠注意

  19. エディタ⾏で右クリックして「Find Pull Request」を選択 (ただしGitHubを使い、プルリクエストで開発を進めないと使えない) Find in Pull Request プラグイン コード⾏から最終変更したプルリクエストを探す

  20. © - BASE, Inc. 2. 経緯をたどる まとめ コードレビューの議論をたどる VCSを活⽤して、コードに書かれ ていない情報にあたる

  21. 21 Run Debug(Toggle Line Breakpoint, Step Over) 3. コードを実⾏する

  22. © - BASE, Inc. このコードはなにをするコード? <?php // nazono.php function nazono()

    { $a = 0; $b = 1; for ($i = 1; $i <= 10; $i++) { $l = $a; $a = $b; $b += $l; print "$a\n"; } } nazono(); ※意図的にわかりにくいコードにしてます
  23. Mac: Ctrl+Shift+R Win/Linux: Shift+Ctrl+F 実⾏(Run) 実⾏結果で⼀⽬瞭然な例

  24. ブレークポイント: Mac: Cmd+F Win/Linux: Ctrl+F デバッグ実⾏: Ctrl+Shift+D ステップオーバー: F デバッグ(Debug)

    実⾏途中の変数をみてコードの挙動を理解する
  25. 呼び出し階層‧変数が多い WAFを使ったアプリのデバッグ例 CakePHP アプリ

  26. © - BASE, Inc. 3. コードを実⾏する まとめ わかりにくいコードは実⾏すると理 解しやすい デバッグできるようにすると変数を

    追跡でき、途中の状態を確認できる
  27. 27 テストコードを読む テスト実⾏(Run) コードを書き換えてテスト実⾏ or テストコードを書く 4. テストコードを利⽤する

  28. プロダクションコード呼び出し‧期待する出⼒ が書かれている テストコードを読む コードジャンプでテストコードを探す

  29. Mac: Ctrl+Shift+R Win/Linux: Shift+Ctrl+F (通常の実⾏と同じ) テスト実⾏(Run) テストコードの想定どおり プロダクションコードが動くか確認

  30. コードを書き換えてテスト実⾏ or テストコードを書く 挙動の変化をみる

  31. © - BASE, Inc. 4. テストコードを利⽤する まとめ PhpStormと連携してテスト実⾏できると、エ ディタから離れずに済むので、コード実⾏回数を 増やせる。

    アプリケーションを通常実⾏するより局所的に コード実⾏できる。コードを理解する⼿段が増え る
  32. © - BASE, Inc. まとめ ショートカットキーを覚えてコードの構造を把握する 難読なコードは実⾏‧デバッグしたほうが早い VCS連携でコード外の情報をたどる テストもコードを理解する⼿段になる

  33. © - BASE, Inc. ありがとうございます! @shin x Masashi Shinbaraさん @tanakahisateru

    ⽥中ひさてるさん @chiroruxxxx ちろさん @sji_ch sjiさん @yusuke ⼭本ユースケさん ブログ記事を参考にしたり、Twitterで フィードバックいただいたみなさん