$30 off During Our Annual Pro Sale. View Details »

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

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

2019/3/31 PHPerKaigi 2019

tenkoma (Koji Tanaka)

March 31, 2019
Tweet

More Decks by tenkoma (Koji Tanaka)

Other Decks in Programming

Transcript

  1. © - BASE, Inc.
    PhpStormで
    コードを理解する技術
    How to use PhpStorm to understand the code
    ⽥中孝治 @tenkoma
    / / PHPerKaigi

    View Slide

  2. © - BASE, Inc.
    PhpStormでコードを理解するために使ってき
    た機能を整理して紹介したい
    僕もまだまだ使いこなせてないので、他の機能
    をご存じの⽅はTwitter, ブログなどで紹介して
    ください
    トークで話したいこと

    View Slide

  3. © - BASE, Inc.
    ⾃⼰紹介
    ⽥中孝治
    BASE株式会社 BASE Product Division
    PhpStorm歴8年
    @tenkoma(Twitter, GitHub )
    Back-end Engineer

    View Slide

  4. © - BASE, Inc.
    つづきはブログでも
    ショートカットキー‧サンプルDocker
    環境設定はブログで公開しています
    https://tenkoma.hatenablog.com/entry/ / / /

    View Slide

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

    https://speakerdeck.com/yusuke/

    View Slide

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

    View Slide

  7. © - BASE, Inc.
    機能を分類
    1. コードを読む‧構造を知る
    3. コードを実⾏する
    2. 変更の経緯をたどる
    4. テストコードを利⽤する
    3, 4は準備に知識と⼿間がそれなりに必要ですが、コードを理解する⼿段とし
    て強⼒です

    View Slide

  8. 8
    コードジャンプ(Navigate→Declaration)
    クラス‧メソッドを開く(Navigate→Symbol)
    ファイル構造(File Structure)
    Call Hierarchy
    Find Usages
    1. コードを読む‧構造を知る

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. Show Usages: Opt+Cmd+F Win/Linux: Ctrl+Alt+F
    Mac: Option+F Win/Linux: Alt+F
    使⽤箇所を検索(Show Usages/Find Usages)
    シンボルの使⽤箇所を⼀覧/検索

    View Slide

  13. Mac:Cmd+F , Win/Linux: Ctrl+F
    ファイル構造(File Structure)
    ファイルのシンボル⼀覧表⽰

    View Slide

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

    View Slide

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

    View Slide

  16. 16
    Annotate
    Find in Pull Request プラグイン
    2. 経緯をたどって理解する

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. © - BASE, Inc.
    このコードはなにをするコード?
    // nazono.php
    function nazono() {
    $a = 0;
    $b = 1;
    for ($i = 1; $i <= 10; $i++) {
    $l = $a;
    $a = $b;
    $b += $l;
    print "$a\n";
    }
    }
    nazono();
    ※意図的にわかりにくいコードにしてます

    View Slide

  23. Mac: Ctrl+Shift+R Win/Linux: Shift+Ctrl+F
    実⾏(Run)
    実⾏結果で⼀⽬瞭然な例

    View Slide

  24. ブレークポイント: Mac: Cmd+F Win/Linux: Ctrl+F
    デバッグ実⾏: Ctrl+Shift+D
    ステップオーバー: F
    デバッグ(Debug)
    実⾏途中の変数をみてコードの挙動を理解する

    View Slide

  25. 呼び出し階層‧変数が多い
    WAFを使ったアプリのデバッグ例
    CakePHP アプリ

    View Slide

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

    View Slide

  27. 27
    テストコードを読む
    テスト実⾏(Run)
    コードを書き換えてテスト実⾏ or テストコードを書く
    4. テストコードを利⽤する

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. © - BASE, Inc.
    4. テストコードを利⽤する まとめ
    PhpStormと連携してテスト実⾏できると、エ
    ディタから離れずに済むので、コード実⾏回数を
    増やせる。
    アプリケーションを通常実⾏するより局所的に
    コード実⾏できる。コードを理解する⼿段が増え

    View Slide

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

    View Slide

  33. © - BASE, Inc.
    ありがとうございます!
    @shin x Masashi Shinbaraさん
    @tanakahisateru ⽥中ひさてるさん
    @chiroruxxxx ちろさん
    @sji_ch sjiさん
    @yusuke ⼭本ユースケさん
    ブログ記事を参考にしたり、Twitterで
    フィードバックいただいたみなさん

    View Slide