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
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
1.2k
ワンバイナリWebサービスのススメ
mackee
10
7.6k
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
9
1.4k
Passkeys for Java Developers
ynojima
2
780
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
390
イベントストーミングから始めるドメイン駆動設計
jgeem
3
750
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
11
2.2k
Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門 / A Guide to Metaprogramming: Lessons from Forbidden Techniques and Their Price
nrslib
2
1.9k
推論された型の移植性エラーTS2742に挑む
teamlab
PRO
0
180
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
250
iOSアプリ開発もLLMで自動運転する
hiragram
6
2.3k
PT AI без купюр
v0lka
0
210
Featured
See All Featured
Side Projects
sachag
454
42k
Statistics for Hackers
jakevdp
799
220k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.4k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Building an army of robots
kneath
306
45k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
4 Signs Your Business is Dying
shpigford
183
22k
Gamification - CAS2011
davidbonilla
81
5.3k
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で フィードバックいただいたみなさん