LoginSignup
0
0

More than 3 years have passed since last update.

vscode を使って MarkLogic xqy/sjs をデバッグする方法

Posted at

0.概要

 MarkLogic用クエリ(xquery/java-script)をデバッグする時、xdmp:log()をよく利用しますが、ブレークポイントを設定したり、ステップ実行する方法3つあります。

本文はVS Codeを利用する方法をご紹介します。

1.共通手順

拡張モジュールをインストール

  1. VSCode左の拡張モジュールボタン(下図の①)を押下
  2. 検索ボックスにmarklogicを入れ
  3. 現時点検索結果1件のみである、その右下のInstallボタン(下図の③)を押下

rapture_20210502163345.png

MarkLogic接続情報を設定

拡張モジュールの説明(上記画像の右側)を読めば設定方法が分かります。

左下の歯車アイコンからsettingsを選ぶ(ctrl+,)設定を開く

  1. Extensions -> MarkLogic conne... を選ぶ
  2. MarkLogic: Documents Dbに利用するデータベースを記載(例はDocuments)
  3. MarkLogic: Modules Dbに利用するモジュールDBを記載(例はModules)

※記載しない時デフォルト利用すると書いてありますが、自分の環境はできませんでした。
rapture_20210502174950.png

クエリ実行

VS Codeで現在開いているxqy/javascriptを実行させる時の手順

  • 任意のxqueryファイルを開いて
  • コマンドプレート(ctrl + shift + p)を開く
  • 検索欄に marklogic を入れ
  • 結果から「Marklogic: Eval XQuery」或いは「MarkLogic: Eval JS」を選ぶ

rapture_20210502181415.png

実行結果確認

下図上段はxquery、中段はjavascript、下段は別窓で表示されるMarkLogicログ。
上段と中段の左は実行されるクエリ、右は自動で表示される実行結果窓。
rapture_20210502182317.png

※拡張子sjsのファイルに文字色付けられない場合、ctrl + shift + p 後、 Change Language Mode で強制に Java Scriptに変更することができます。

2.XQueryに関する手順

2.1.デバッグ

デバッグ設定

  1. VS Code左側のデバッグボタン( ① )を押下
  2. 設定を保存んするため、フォルダーを開く必要がありと提示される(②) rapture_20210502190117.png

フォルダーを開いて、再度以下の操作
1. デバッグボタンを押下
1. create a launch.json fileをクリック
1. 一覧に「MarkLogic XQY Debugger」を選ぶ
rapture_20210502190732.png

下記のように、自動的に launch.json が作られ、そしたら
- 10行目の文を "launch xqy" に変更
- 17行目の文を "attach xqy" に変更
- launch.json を保存する(ctrl + sを押下)
 ※ここで修正した name が実行設定の名前は、図上③の場所に表示される
rapture_20210502191057.png

デバッグ実施

  1. クエリタブを選んで、
  2. 「launch xqy」が選択されたことを確認
  3. 隣りの緑矢印を押下、デバッグを開始させる。  デバッグ操作は割愛します。 rapture_20210502191756.png

2.2.アタッチ

アタッチとは

 アタッチ(attach)とは、MarkLogicサーバー内実行しているクエリをデバッグする方法。
※デバッグはクライアント側(VS Codeが実行するマシン)のファイルを(一時MarkLogicに送信して)実行する方法。

アタッチの流れ

  • サーバーに接続
  • (VS Code以外で)クエリを実行
  • アタッチする
  • デバッグ開始

httpサーバ作成

アタッチする時、該当サーバー側のクエリ実行が全て止まるので、MarkLogic既存のサーバーではなく、新たにhttpサーバーを作成しましょう。設定値は下図ご参考。
rapture_20210502213959.png

サーバー接続

VS Codeにて
1. コマンドプレート(ctrl + shift + p)を開く
1. 検索欄に marklogic を入れ
1. 結果から「Marklogic: Connect XQuery Debug Server」を選ぶ
rapture_20210502214520.png

すると、接続可能なサーバー一覧が表示され、適切に選ぶ(例はdebugHttpServerを選ぶ)
rapture_20210502214824.png

画面下部に接続成功メッセージが表示されます。
rapture_20210502214932.png

ちなみに、新規httpサーバー作成しないと、以下のエラーになります。
rapture_20210502200333.png

クエリをMarkLogicサーバーに配置

  1. MarkLogicクエリコンソールに接続
  2. データベースを「Modules」を選ぶ
  3. 「Explore」ボタンを押下
  4. 「New」ボタンを押下 rapture_20210502220849.png
  5. ファイル名欄に「/t1.xqy」を入れ
  6. 用意した内容を入力
  7. 「Save」ボタンを押下 rapture_20210502221230-fix.png

外部からクエリを呼び出す

外部からクエリ「/t1.xqy」を呼び出すために、 curl を使います。
Git Bash に含まれる。

curl --anyauth --user admin:admin "localhost:8021/t1.xqy"

rapture_20210502223202.png
実行後、curl が終了せず止まっていることが分かります。これはクエリがデバッグ待ち状態にあることを意味します。

アタッチ

  1. 設定ボタンをクリックし、最低限1つの編集窓を開いてる状態とします(バグ回避)
  2. 「attach xqy」を選ばれたことを確認
  3. 緑三角形を押下
  4. 一覧から(1件だけ)選ぶ rapture_20210502225308.png すると、自動的にソースファイルが開かれ、デバッグ状態になります。 rapture_20210502225708.png

接続終了

作業終了後、接続を終了する。
※この操作忘れると、起動するクエリが自動で止まり動作しなくなります。
rapture_20210502230037.png

3.JavaScriptに関する手順

3.1.設定の追加

rapture_20210502230635.png
rapture_20210502230816.png
設定ファイルにブロックが自動的に追加される。
rapture_20210502231014.png

3.2.sjsデバッグ

rapture_20210502231307.png

step実行できるような状態になります。

3.3.sjsのアタッチ

設定追加

上記と同じ手順で設定を追加
設定の「debugServerName」を上に設定した名前(この例ではdebugHttpServer)に修正する
rapture_20210502232753.png

サーバー接続

  1. ctrl + shift + p でコマンドパレードを開き
  2. 「MarkLogic: connect JavaScript Debug Server」を選ぶ
  3. Xqueryの場合と違って一覧ではなく入力欄になります、サーバー名(この例は debugHttpServer、大文字小文字注意)を正確に入れると、接続成功になる rapture_20210502232250.png

外部からクエリを呼び出す

  • 別窓で curl を実行する
  • curlが途中に止まり、帰ってこない状態になる rapture_20210503005226.png

アタッチ

  1. 「Attach to Remote JavaScript Request」を選で
  2. 緑の三角形を押下
  3. 一覧からアタッチ対象を選び、アタッチされたことが確認できる rapture_20210503004907.png

接続終了

作業終了後、接続を終了する。
※この操作忘れると、起動するクエリが自動で止まり動作しなくなります。
rapture_20210502230037.png

以上

0
0
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
0
0