Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

© - BASE, Inc. このコードはなにをするコード?

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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