当サイトは、アフィリエイト広告を利用しています
ReactフレームワークのGatsbyはSSG(静的サイトジェネレーター)の機能を持っており
がある。
上記二つをVSCodeとChromeデベロッパー・ツールでそれぞれ実行する方法をまとめる。
VSCode上のソースにブレークポイントを打ってデバッグする方法をまとめる。
VSCodeで拡張機能を入れる。
「Debugger for Chrome」を検索してインストールしておく
GatsbyのSSG(静的サイトジェネレーター)の部分であるgatsby-node.jsはビルドプロセス時に実行されるので
画面表示時には実行済みのため通常のChromeデベロッパー・ツールなどではデバッグすることができない。
VScodeでgatsby-node.jsをデバッグする場合はlanch.jsonを作成して行う。
windowsを使用している場合
{"version": "0.2.0","configurations": [{"name": "Gatsby develop","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","windows": {"program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby"},"args": ["develop"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1",},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"},{"name": "Gatsby build","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","windows": {"program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby"},"args": ["build"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1",},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"}]}
Linuxを使用している場合
{"version": "0.2.0","configurations": [{"name": "Gatsby develop","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","args": ["develop"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1",},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"},{"name": "Gatsby build","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","args": ["build"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1",},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"}]}
更新されてる場合もあるので最新は下記をドキュメント参照してください
lanch.jsonを作成してVSCodeのデバッグタグから「Gatsby develop」を選択して実行すると
下記のようなメッセージがでてVSCodeでつけたブレークポイントでとまる。
$ /usr/bin/env PARCEL_WORKERS=0 GATSBY_CPU_COUNT=1 'NODE_OPTIONS=--require "c:/Program Files/Microsoft VS Code/resources/app/extensions/ms-vscode.js-debug/src/bootloader.bundle.js" --inspect-publish-uid=http' 'VSCODE_INSPECTOR_OPTIONS={"inspectorIpc":"\\\\.\\pipe\\node-cdp.14748-1.sock","deferredMode":false,"waitForDebugger":"","execPath":"C:\\Users\\lunaj\\.nvm\\versions\\node\\v18.9.0\\bin\\node.exe","onlyEntrypoint":false,"autoAttachMode":"always","fileCallback":"C:\\Users\\lunaj\\AppData\\Local\\Temp\\node-debug-callback-20f66458620f3433"}' C:\\Users\\lunaj\\.nvm\\versions\\node\\v18.9.0\\bin\\node.exe --nolazy .\\node_modules\\gatsby\\dist\\bin\\gatsby developDebugger attached.Debugger attached.
その後はブレークポイントからデバッグを続けることができる。
※ブレークポイントがない場合はそのまま起動する。
なぜかブレークポイントが無効化され、デバッグできない状態が発生した。
原因は不明だが「gatsby clean」を実行し、再度、実行すると正常に実行できた
gatsby-node.js自体は「gatsby develop」したときに実行され、debugできるが
createPageでtemplateコンポーネントを使ってpageを作成する処理自体は
画面実行時に流れるため、画面を実行するまで下記のようにブレークポイントを無効化された状態になる。
後述する画面表示時に実行されるコードのデバッグ方法の「Launch Chrome」で
実行すれば有効化する
lanch.jsonにブラウザデバッグ用の設定を追記する
{"version": "0.2.0","configurations": [{"name": "Gatsby develop","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","windows": {"program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby"},"args": ["develop"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1"},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"},{"name": "Gatsby build","type": "pwa-node","request": "launch","program": "${workspaceRoot}/node_modules/.bin/gatsby","windows": {"program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby"},"args": ["build"],"env": {"PARCEL_WORKERS": "0","GATSBY_CPU_COUNT": "1"},"runtimeArgs": ["--nolazy"],"console": "integratedTerminal"},{"name": "Launch Chrome","type": "chrome","request": "launch","url": "http://localhost:8000","webRoot": "${workspaceFolder}"}]}
ターミナルから「gatsby develop」などで起動後に
VSCodeのデバッグタグから「Launch Chrome」を選択して実行すると
VSCode上のソースでデバッグ実行ができる
VSCodeではなくChromeデベロッパー・ツールを使ってデバッグする方法をまとめる。
gatsby-node.jsはnode.jsで実行されてるためノード用のChromeDevToolsでもデバッグすることができる。
VSCodeから起動後にブラウザ(googlechrome)を立ち上げて
ノード用のChromeDevToolsを開いてデバッグする。
ターミナルで下記のどれかのコマンドを実行するとデバッグを開始する
起動後に自分でつけたブレークポイントまで動かす場合は
下記で起動する。
$ gatsby develop --inspect
ブレークポイントをつけてない場合は流れ切ってしまうので初回は
後述するコマンドの方がいいかもです。
とりあえず最初で止めたい場合はこちらを使う
$ gatsby develop --inspect-brk
または
$ node --inspect-brk node_modules/gatsby/dist/bin/gatsby.js build
どちらも基本的には同じ
例えば「$ gatsby develop --inspect-brk」を実行すると
$ gatsby develop --inspect-brkDebugger listening on ws://127.0.0.1:9229/6cec9cb7-8a09-4852-856b-af9419b64d61For help, see: https://nodejs.org/en/docs/inspector
となるので Chromeを立ち上げて「chrome://inspect」を開くと下記のような画面になっている
RemoteTargetのinspectをクリックするとノード用のChromeDevToolsになる
初回ではソースフォルダは表示されていないため、「Add folder to workspace」でフォルダを追加する。
gatsby-node.jsをデバッグする場合はプロジェクト ディレクトリを選択して追加した後
gatsby-node.jsを開いてブレークポイントを打てばデバッグができる
ChromeDevToolsを使う場合はターミナルから「gatsby develop」などで起動後に
chromeブラウザで画面表示後にF12でChromeDevToolsでデバッグできる。
ブラウザでの画面表示後のデバッグについてはわざわざVSCodeでするメリットが
あまりないように思うのでChromeDevToolsで十分だと思う。
gatsby-node.jsのデバッグについては今まではVSCodeで実行していたのですが
node.jsからnode.jsのversion管理ができるnvmに入れ替えた後にうまくできなくなったので
現在はノード用ChromeDevToolsを使っている。
※VSCodeを調べて色々やったみたがうまく動かなかったので...
またNext.jsでbuild時実行されるgetstaticpropsもノード用のChromeDevToolsで
デバッグすることができる。
方法は下記記事で紹介しています
Gatsbyの基本的な仕組みや環境設定方法など下記の書籍が参考になりました。
特に特典のセットアップPDFはversionが上がると更新してくれるようなので
Gatsbyのversionが上がった時なども今でも参考にしてます!