Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PhpStormでコードを理解する技術 / How to use PhpStorm to ...
Search
tenkoma (Koji Tanaka)
March 31, 2019
Programming
0
3.4k
PhpStormでコードを理解する技術 / How to use PhpStorm to understand the code
2019/3/31 PHPerKaigi 2019
tenkoma (Koji Tanaka)
March 31, 2019
Tweet
Share
More Decks by tenkoma (Koji Tanaka)
See All by tenkoma (Koji Tanaka)
PhpStormとPHPUnitを連携してユニットテスト作成を楽にする ver.phpconsen / integrating-phpunit-with-a-phpstorm-ver-phpconsen
tenkoma_
0
4.1k
PhpStormとPHPUnitを 連携してユニットテスト 作成を楽にする / Integrating PHPUnit with a PhpStorm
tenkoma_
1
640
CakeFest 2019について / About CakeFest 2019
tenkoma_
0
4k
ユニットテストを書きやすくするためにテストスイートを拡張する / Extend test suite to make unit test easier to write
tenkoma_
0
2.8k
BASE の PHP アプリ アップデートについて
tenkoma_
0
4.5k
CircleCI 2.0 で CakePHP3 アプリのビルド
tenkoma_
0
2k
GitLab CI + Review Apps で簡易レビュー環境
tenkoma_
4
3k
CakePHP プロジェクトにプルリクを送り続けた僕は
tenkoma_
0
640
Webpack勉強会 JavaScriptビルド編
tenkoma_
1
2k
Other Decks in Programming
See All in Programming
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.3k
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
2
150
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
5
1.1k
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
120
Result型で“失敗”を型にするPHPコードの書き方
kajitack
5
920
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.6k
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
780
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
効率的な開発手段として VRTを活用する
ishkawa
0
140
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
530
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
1
6k
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
7.6k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.4k
Side Projects
sachag
455
42k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
The Language of Interfaces
destraynor
158
25k
Visualization
eitanlees
146
16k
A designer walks into a library…
pauljervisheath
207
24k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Optimizing for Happiness
mojombo
379
70k
Speed Design
sergeychernyshev
32
1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Documentation Writing (for coders)
carmenintech
72
4.9k
Transcript
© - BASE, Inc. PhpStormで コードを理解する技術 How to use PhpStorm
to understand the code ⽥中孝治 @tenkoma / / PHPerKaigi
© - BASE, Inc. PhpStormでコードを理解するために使ってき た機能を整理して紹介したい 僕もまだまだ使いこなせてないので、他の機能 をご存じの⽅はTwitter, ブログなどで紹介して ください
トークで話したいこと
© - BASE, Inc. ⾃⼰紹介 ⽥中孝治 BASE株式会社 BASE Product Division
PhpStorm歴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 Hierarchy Find Usages 1.
コードを読む‧構造を知る
© - 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+F Mac: 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.
コードを読む‧構造を知る まとめ
16 Annotate Find in Pull Request プラグイン 2. 経緯をたどって理解する
エディタの右端の⾏番号を右クリックして 「Annotate」を選択 Annotate(git blame相当) ⾏の最終更新⽇時、コミッターを表⽰
© - BASE, Inc. 不具合の調査時に使うことがありますが、 バグの犯⼈探しに使うわけじゃないよ! コードをよく理解したり、正しく改善するた めに便利な機能です ⚠注意
エディタ⾏で右クリックして「Find Pull Request」を選択 (ただしGitHubを使い、プルリクエストで開発を進めないと使えない) Find in Pull Request プラグイン コード⾏から最終変更したプルリクエストを探す
© - BASE, Inc. 2. 経緯をたどる まとめ コードレビューの議論をたどる VCSを活⽤して、コードに書かれ ていない情報にあたる
21 Run Debug(Toggle Line Breakpoint, Step Over) 3. コードを実⾏する
© - 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(); ※意図的にわかりにくいコードにしてます
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で フィードバックいただいたみなさん