3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Composable Storefront でデバッグをしてみる

3
Last updated at Posted at 2023-07-21

※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。

ここでは PWA Kit を利用したローカル開発の際、また Managed Runtime(以下、MRT) 上にデプロイした後のデバッグ方法を紹介して行きたいと思います。(詳細

クエリによるステートとサーバーサイドレンダリングの確認

ここでは URL のクエリを利用してサーバーサイドレンダリング時とステートの確認方法を見て行きます。

サーバーサイドレンダリングのみの状態を確認したい場合

クライアントでの Hydration(Javascript のイベントのアタッチ)を行わずに完全にサーバーからレンダリングされた状態のページを確認したい場合は URL のクエリに __server_only というパラメータを設定します。例えばホームページで確認を行いたい場合は http://localhost:3000/?__server_only のようにします。

下記はパラメータを指定しない状態でのホームページですが、この場合は Hydration が行われるためヘッダーのアローの表示やホバーした際のメニューの表示が行われます。
スクリーンショット 2023-07-19 18.20.27.png

一方、パラメータを設定することで Hydration が行われず、アローボタンやホバー時のメニューの表示といった Javascript イベントで行われる動的な部分が機能していないことが確認できます。
スクリーンショット 2023-07-19 18.20.01.png

サーバーサイドから送られてくるステートを確認したい場合

PWA Kit は Isomorphic Javascript でありサーバーサイドで処理された状態をステートとしてクライアント側に HTML を通じて JSON 形式でグローバル変数 __PRELOADED_STATE__ に渡しますが、その内容をフォーマットされた状態で確認したい場合は __pretty_print パラメータをURLに付与することで可能になります。例えばホームページでのステートの確認したい場合は http://localhost:3000/?__pretty_print のような URL になります。

下記がフォーマットされていない状態

スクリーンショット 2023-07-19 18.21.58.png

フォーマットされている状態

スクリーンショット 2023-07-19 18.21.34.png

デベロッパーツールのコンソールで確認したい場合

デベロッパーツールのコンソールで確認したい場合は window.__PRELOADED_STATE__ を実行すれば確認することも可能です。
スクリーンショット 2023-07-19 18.22.38.png

サーバーサイド(Node.js )のデバッグ

Google Cromeによるデバッグ

ここでは Google Chrome を利用したサーバーサイドのデバッグ方法を紹介します。
まずは、 npm run start:inspect コマンドでローカルでデバッグモードで PWA Kit を実行します。次に chrome://inspect という URL にブラウザでアクセスします。すると「Open dedicated DevTools for Node」というリンクをクリックします。
スクリーンショット 2023-07-19 17.23.55.png

すると、下記のような画面が表示されて、デバッグを始めることができます。
もし、localhost:9229 が設定に入っていなければ自身で設定してください。 Node.js のデバッグの際に利用されるポートについては「Debugging Guide」をご覧ください。
スクリーンショット 2023-07-19 17.24.17.png

あとは普通のデバッグと同様にブレークポイントを設定したり変数の中身を確認することができます。見た目はクライアントサイドのデバッグと似ていますが、画面上部の「DevTool - Node.js」と書いてあればサーバサイド側のデバッグであることが確認できます。
スクリーンショット 2023-07-19 17.34.04.png

VS Code によるデバッグ

ここでは VS Code を利用したサーバサイドのデバッグ方法を紹介します。
まずは Google Chrome でのデバッグと同様に npm run start:inspect コマンドで PWA Kit を起動させます。
そのあと、VS Code 上でコマンドパレットを表示( Command + Shift + P (Mac の場合)、 Ctrl + Shift + P (Windows の場合))し「Debug: Attach to Node Process」を選択します。
スクリーンショット 2023-07-19 17.43.33.png

次に一番上の Node.js プロセスを選択するとデバッグが開始されます。
スクリーンショット 2023-07-19 17.43.49.png

あとは通常のデバッグ時と同様にブレークポイントを設定したり変数の中身を確認することができます。
スクリーンショット 2023-07-19 17.50.20.png

Google Chrome、 VS Code 共通の確認方法

Google Chrome での開発や VS Code での開発共にデバッガがアタッチされた際は「Debugger attached.」という文字が npm run start:inspect を実行しているターミナルに表示されます。
スクリーンショット 2023-07-19 17.30.24.png

クライアントサイド(Javascript のデバッグ)

クライアントサイドのデバッグを行う際は、通常の Google Chrome などのブラウザのデバッグで可能です。
Google Chrome の開発者ツールの画面上部にはサーバーサイドの場合「DevTool - Node.js」と表示されているのに対してクライアントサイドの場合は「DevTool - {URL} 」になってると思います。

スクリーンショット 2023-07-19 17.39.37.png

MRT のリアルタイムログ取得

ここでは PWA Kit を MRT にデプロイした後にアプリケーションログを確認する方法を紹介します。

サンプルコード

今回はサンプルとしてホーム画面表示時に「テストーーーーーーー」とログに表示されるようにコードを修正したものをデプロイしてログを確認してみたいと思います。MRT へのデプロイ方法については「Salesforce B2C Commerce PWA Kit のサンプルを構築してみる」を参照してください。
スクリーンショット 2023-07-19 17.54.11.png

MRT ログを取得する

ログを取得するためにはコマンドを実行します。その際、環境 ID とプロジェクト ID が必要となりますが、取得方法は「プロジェクト ID の取得」と「環境 ID の取得」を参照してください。

デプロイした PWA Kit のプロジェクト外での取得コマンド
npx @salesforce/pwa-kit-dev tail-logs --environment {環境 ID} --project {プロジェクト ID}
プロジェクト内でのコマンド
npm run tail-logs -- --environment {環境 ID}

実行結果

コマンドを実行した状態でデプロイした環境のホーム画面に遷移するとデプロイした内容が取得できていることが確認できます。
スクリーンショット 2023-07-19 18.06.57.png

注意点

  • ログ取得コマンドのセッション保持時間は 60 分です
  • 1 環境につきログ取得に利用できるセッションは 100 セッションまでです
  • ログ取得を行うユーザは MRT の開発者または管理者権限が必要です
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?