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
DevTools と デバッグ と 私
Search
Koji NAKAMURA
May 30, 2024
Programming
2
3.3k
DevTools と デバッグ と 私
2024/05/31 Shinjuku.rb #92 好きなもの紹介LT大会
Koji NAKAMURA
May 30, 2024
Tweet
Share
More Decks by Koji NAKAMURA
See All by Koji NAKAMURA
龍昌餃子で理解するWebサーバーの並行処理モデル - 東葛.dev #9
kozy4324
1
250
Rubyで作る論理回路シミュレータの設計の話 - Kashiwa.rb #12
kozy4324
1
520
Rubyで作る論理回路シミュレータ - Shinjuku.rb #99
kozy4324
0
100
Steep導入したいRTA - Kashiwa.rb #11
kozy4324
0
160
これまで細々と作成したGemの紹介をします - Kashiwa.rb #9
kozy4324
0
240
東京Ruby会議12のお手伝いしてきた話
kozy4324
0
120
個人開発発表 LT - Shinjuku.rb #97
kozy4324
0
410
Ruby界隈を中心に2024をふりかえる - Kashiwa.rb #6
kozy4324
0
190
「今までで一番学びになった瞬間」発表 LT - Shinjuku.rb #96
kozy4324
0
390
Other Decks in Programming
See All in Programming
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
310
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
250
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
300
ゆくKotlin くるRust
exoego
1
190
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
160
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
210
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
CSC307 Lecture 03
javiergs
PRO
1
460
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
120
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
46
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
BBQ
matthewcrist
89
9.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
730
Mind Mapping
helmedeiros
PRO
0
45
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Statistics for Hackers
jakevdp
799
230k
4 Signs Your Business is Dying
shpigford
187
22k
Transcript
DevTools と デバッグ と 私 2024/05/31 Shinjuku.rb #92 好きなもの紹介LT大会 Koji
NAKAMURA (@kozy4324)
自己紹介 - Koji NAKAMURA (@kozy4324) - Classi株式会社 - (フロントエンド開発歴の方が長いかもしれない)Railsエンジニア
好き - DevTools を使ってデバッグすること (ソフトウェアの仕組みや機序を動かしながら理解することが割と好き)
DevTools の推し機能3選 1. Copy as cURL 2. Block request URL
3. JavaScript デバッグツール
1. Copy as cURL API リクエストを繰り返しテストしたい時によく使う
2. Block request URL 特定のAPIリクエストがエラー時のフロントエンド挙動を確認したい時に使う
3. JavaScript デバッグツール
3. JavaScript デバッグツール ①ブレイクポイントで一時停止して、 ②スコープ変数が確認でき、 ③そのコンテキストでスクリプト実行して確認ができる
3. JavaScript デバッグツールの推しポイント Call Stackを移動して 確認することもできる
DevTools に最適化された人間が思うこと... - Ruby バックエンドも DevTools でデバッグがしたい
debug.gem で実現できる - debug.gem - https://github.com/ruby/debug - > You can
attach with external debugger frontend with VSCode and Chrome. - Rails 7 includes the debug gem - https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-ge m
debug.gem を使う
debug.gem を使う ②ブレイクポイントで一時停止されて、 ③コードを実行したり、色々確認できる ①ブレイクポイント設定する、binding.break, binding.b でも可
debug.gem から DevTools を起動する (rdbg) open chrome
debug.gem から DevTools を起動する (rdbg) open chrome Mac であれば Chrome
が起動する 起動しない場合は表示される devtools:// の URL を Chrome で開く
debug.gem w/ DevTools
debug.gem w/ DevTools JavaScriptの時と全く同じ操作感 Frame移動が超簡単、楽 FrameごとのRuby式の評価も出来る
遭遇した悩ましい挙動 🤔 - インスタンス変数を評価すると nil になる - ブロック付きメソッド呼び出しを評価しても nil になる
debug.gem をデバッグする - $ bundle open debug - lib/debug/server_cdp.rb#L962 あたりにprint文を仕込む
- https://github.com/ruby/debug/blob/v1.9.2/lib/debug/server_cdp.rb#L962 DEBUGGER: [:evaluate, {"id"=>21, "method"=>"Debugger.evaluateOnCallFrame", "params"=>{"callFrameId"=>"e8547272d5f75dfe567b420e26b2a42e", "expression"=>"", "objectGroup"=>"console", "includeCommandLineAPI"=>true, "silent"=>false, "returnByValue"=>false, "generatePreview"=>true}}, 0, "", "console"]
debug.gem をデバッグして分かったこと - 評価すべき文字列が空になっている - どうやら DevTools が投げてくる時点で空文字列 - コメントにも書いてあった
- https://github.com/ruby/debug/blob/v1.9.2/lib/debug/server_cdp.rb#L1044 - > Chrome doesn't read instance variables
こうなったら DevTools もデバッグだ! - https://github.com/ChromeDevTools/devtools-frontend - depot_toolsのインストール - $ git
clone https://chromium.googlesource.com/chromium/tools/depot_tools.git - $ export PATH="$PATH:$(pwd)/depot_tools" - ソースコードの取得 - $ mkdir devtools - $ cd devtools - $ fetch –nohistory devtools-frontend - ビルド - $ cd devtools-frontend - $ gclient sync - $ gn gen out/Default - $ autoninja -C out/Default
Google Chrome for Testing の実行 - $ ./third_party/chrome/chrome-mac/Google\ Chrome\ for\
Testing.app/Contents/MacOS/Google\ Chrome\ for\ Testing --disable-infobars --disable-features=MediaRouter --custom-devtools-frontend=file://$(realpath out/Default/gen/front_end) --use-mock-keychain - 起動したブラウザのアドレスバーに、debug.gem が出力する devtools:// のURLを 入力する - 表示した画面上で DevTools を起動する - option + command + I
None
RubyをデバッグしているDevTools 左側のDevToolsをデバッグしているDevTools
DevTools in DevTools の完成 - DevTools マニア歓喜 😂 🎉
DevTools をデバッグして分かったこと - DevTools 内でエラーが発生していた - > Uncaught SyntaxError: Unexpected
character '@' (1:0) - https://github.com/ChromeDevTools/devtools-frontend/blob/be0ed2fb4df509f39b73b84fe20a 94f7af948a24/front_end/panels/console/ConsolePrompt.ts#L378 - 入力文字列は JavaScript として parse されていた - https://github.com/ChromeDevTools/devtools-frontend/blob/be0ed2fb4df509f39b73b84fe20a 94f7af948a24/front_end/entrypoints/formatter_worker/Substitute.ts#L30-L33 - `@` やブロック付きメソッド呼び出しは JavaScript として Syntax Error だったというオチ - SourceMap を使って Transpile された変数名を解決するための置換処理が入っている模様 - ここでエラーになると空文字列にフォールバックされていた - DevTools のコンソールは JavaScript しか評価できない、という解釈を得た
ワークアラウンド - eval を使う - eval(‘@articles’) - eval('@articles.map(&:title).join(?,)')
終わり - DevTools を使って Ruby をデバッグする話をしようと思っていたら、DevTools を 使って DevTools をデバッグする話になっていたという回
- Ruby のデバッグや DevTools に関するノウハウ・ Tips を知るのが好き - オススメ情報があればぜひ教えてください!