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 understand the code
Search
tenkoma (Koji Tanaka)
March 31, 2019
Programming
0
3.1k
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
3.8k
PhpStormとPHPUnitを 連携してユニットテスト 作成を楽にする / Integrating PHPUnit with a PhpStorm
tenkoma_
1
570
CakeFest 2019について / About CakeFest 2019
tenkoma_
0
3.8k
ユニットテストを書きやすくするためにテストスイートを拡張する / Extend test suite to make unit test easier to write
tenkoma_
0
2.5k
BASE の PHP アプリ アップデートについて
tenkoma_
0
4.2k
CircleCI 2.0 で CakePHP3 アプリのビルド
tenkoma_
0
1.8k
GitLab CI + Review Apps で簡易レビュー環境
tenkoma_
4
2.9k
CakePHP プロジェクトにプルリクを送り続けた僕は
tenkoma_
0
600
Webpack勉強会 JavaScriptビルド編
tenkoma_
1
1.8k
Other Decks in Programming
See All in Programming
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
210
"config" ってなんだ? / What is "config"?
okashoi
0
250
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
1
330
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
430
Java 22 Overview
kishida
1
190
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
120
CREってこういうこと? 体験入社 - 提案資料 - / what-is-cre-trial-employment
shinden
0
260
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
670
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
130
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
160
AmperとFleetを使ったAndroidアプリ
yoppie
0
240
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
19
3.9k
Agile that works and the tools we love
rasmusluckow
325
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
Optimising Largest Contentful Paint
csswizardry
12
2.4k
Atom: Resistance is Futile
akmur
260
25k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
What's new in Ruby 2.0
geeforr
337
31k
The Invisible Side of Design
smashingmag
294
49k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.2k
Side Projects
sachag
451
41k
For a Future-Friendly Web
brad_frost
172
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で フィードバックいただいたみなさん