0.概要
MarkLogic用クエリ(xquery/java-script)をデバッグする時、xdmp:log()をよく利用しますが、ブレークポイントを設定したり、ステップ実行する方法3つあります。
- Oxygen XML Editorを利用する
- XQDebugを利用する
- Visual Studio Codeを利用する
本文はVS Codeを利用する方法をご紹介します。
1.共通手順
拡張モジュールをインストール
- VSCode左の拡張モジュールボタン(下図の①)を押下
- 検索ボックスにmarklogicを入れ
- 現時点検索結果1件のみである、その右下のInstallボタン(下図の③)を押下
MarkLogic接続情報を設定
拡張モジュールの説明(上記画像の右側)を読めば設定方法が分かります。
左下の歯車アイコンからsettingsを選ぶ(ctrl+,)設定を開く
- Extensions -> MarkLogic conne... を選ぶ
- MarkLogic: Documents Dbに利用するデータベースを記載(例はDocuments)
- MarkLogic: Modules Dbに利用するモジュールDBを記載(例はModules)
※記載しない時デフォルト利用すると書いてありますが、自分の環境はできませんでした。
クエリ実行
VS Codeで現在開いているxqy/javascriptを実行させる時の手順
- 任意のxqueryファイルを開いて
- コマンドプレート(ctrl + shift + p)を開く
- 検索欄に marklogic を入れ
- 結果から「Marklogic: Eval XQuery」或いは「MarkLogic: Eval JS」を選ぶ
実行結果確認
下図上段はxquery、中段はjavascript、下段は別窓で表示されるMarkLogicログ。
上段と中段の左は実行されるクエリ、右は自動で表示される実行結果窓。
※拡張子sjsのファイルに文字色付けられない場合、ctrl + shift + p 後、 Change Language Mode で強制に Java Scriptに変更することができます。
2.XQueryに関する手順
2.1.デバッグ
デバッグ設定
フォルダーを開いて、再度以下の操作
下記のように、自動的に launch.json が作られ、そしたら
- 10行目の文を "launch xqy" に変更
- 17行目の文を "attach xqy" に変更
- launch.json を保存する(ctrl + sを押下)
※ここで修正した name が実行設定の名前は、図上③の場所に表示される
デバッグ実施
2.2.アタッチ
アタッチとは
アタッチ(attach)とは、MarkLogicサーバー内実行しているクエリをデバッグする方法。
※デバッグはクライアント側(VS Codeが実行するマシン)のファイルを(一時MarkLogicに送信して)実行する方法。
アタッチの流れ
- サーバーに接続
- (VS Code以外で)クエリを実行
- アタッチする
- デバッグ開始
httpサーバ作成
アタッチする時、該当サーバー側のクエリ実行が全て止まるので、MarkLogic既存のサーバーではなく、新たにhttpサーバーを作成しましょう。設定値は下図ご参考。
サーバー接続
VS Codeにて
すると、接続可能なサーバー一覧が表示され、適切に選ぶ(例はdebugHttpServer
を選ぶ)
ちなみに、新規httpサーバー作成しないと、以下のエラーになります。
クエリをMarkLogicサーバーに配置
- MarkLogicクエリコンソールに接続
- データベースを「Modules」を選ぶ
- 「Explore」ボタンを押下
- 「New」ボタンを押下
- ファイル名欄に「/t1.xqy」を入れ
- 用意した内容を入力
- 「Save」ボタンを押下
外部からクエリを呼び出す
外部からクエリ「/t1.xqy」を呼び出すために、 curl を使います。
※Git Bash に含まれる。
curl --anyauth --user admin:admin "localhost:8021/t1.xqy"
実行後、curl が終了せず止まっていることが分かります。これはクエリがデバッグ待ち状態にあることを意味します。
アタッチ
- 設定ボタンをクリックし、最低限1つの編集窓を開いてる状態とします(バグ回避)
- 「attach xqy」を選ばれたことを確認
- 緑三角形を押下
- 一覧から(1件だけ)選ぶ
すると、自動的にソースファイルが開かれ、デバッグ状態になります。
接続終了
作業終了後、接続を終了する。
※この操作忘れると、起動するクエリが自動で止まり動作しなくなります。
3.JavaScriptに関する手順
3.1.設定の追加
3.2.sjsデバッグ
step実行できるような状態になります。
3.3.sjsのアタッチ
設定追加
上記と同じ手順で設定を追加
設定の「debugServerName」を上に設定した名前(この例ではdebugHttpServer
)に修正する
サーバー接続
- ctrl + shift + p でコマンドパレードを開き
- 「MarkLogic: connect JavaScript Debug Server」を選ぶ
- Xqueryの場合と違って一覧ではなく入力欄になります、サーバー名(この例は
debugHttpServer
、大文字小文字注意)を正確に入れると、接続成功になる
外部からクエリを呼び出す
アタッチ
接続終了
作業終了後、接続を終了する。
※この操作忘れると、起動するクエリが自動で止まり動作しなくなります。
以上