Appearance
cdm notebook
cdm notebook サブコマンドで、ノートブックファイルの取得・反映・検証・プレビューなどを行います。
cdm notebook <subcommand> [arguments] [options]| サブコマンド | 用途 |
|---|---|
notebook clone | サーバからノートブックを新規取得 |
notebook pull | 既存ノートブックファイルの最新化 |
notebook diff | サーバとの差分確認 |
notebook push | ノートブックの書き戻し |
notebook preview | ノートブックのプレビュー |
notebook validate | ノートブックファイルの検証 |
notebook format | ノートブックファイルのフォーマット |
notebook strip | ノートブックファイルからジョブ実行情報を削除 |
notebook build-sql | ノートブックファイル内のSQLのビルド |
サブコマンド共通事項
ワークスペースとの整合性確認
ノートブックファイルを対象とした操作では、ノートブックファイルのフロントマターで指定されたワークスペースID(workspace_id)と、利用中の profile のワークスペースIDが一致しているかを検証します。
- ワークスペースIDが一致しない場合、コマンドは
exit 1で終了します - ディレクトリに対する操作の場合、ディレクトリ配下のすべてのノートブックファイルに対して整合性を確認します
ノートブックの識別
ノートブックファイルを対象とした操作では、ノートブックファイルのフロントマターで指定されたノートブックID(id)を用いて、サーバ側のノートブックを特定します。
ノートブックの新規取得
cdm notebook clone <notebookId|url>
-o, --output <path> 出力先(ファイルパス または ディレクトリ)
--stdout 標準出力に出力(--output と排他)
-y, --yes 既存ファイルがある場合の確認プロンプトをスキップ
--profile <name> 利用する profile を指定サーバ上のノートブックをローカルに保存します。
ノートブックの指定方法
第1引数の <notebookId|url> には、以下のいずれかを指定してください。
- notebookId (24文字の16進数): 例
671ef14b0d08cf6c657df7da - URL: Codatum のノートブックページのURL
- 形式:
https://app.codatum.com/workspace/<wsId>/notebook/<notebookId>/<pageId> - URL 内の
<wsId>は、利用中の profile のワークスペースと一致する必要があります
- 形式:
出力先
--outputで出力先を指定できます- ファイルパスを指定した場合、そのパスに書き込みます
- 拡張子を省略した場合は
.cnb.mdを付与します(例:notebooks/sales→notebooks/sales.cnb.md)。
- 拡張子を省略した場合は
- ディレクトリを指定した場合、ディレクトリ内にファイルを生成します
- ファイル名はノートブック名から自動生成されます
- 書き込み先に既存のファイルがある場合、確認プロンプトが表示されます
--yesを指定することで、確認をスキップできます
- 中間ディレクトリは必要に応じて自動作成します
- ファイルパスを指定した場合、そのパスに書き込みます
--stdoutを指定した場合、マークダウンを標準出力に出力します--ouput,--stdoutのいずれも指定のない場合は、--output ./として処理します
利用例
bash
# URL コピペで一発取得(カレントディレクトリに自動命名)
cdm notebook clone https://app.codatum.com/workspace/.../notebook/.../...
# notebooks/ ディレクトリに自動命名で保存
cdm notebook clone 671ef14b0d08cf6c657df7da -o notebooks/
# ファイル名まで明示
cdm notebook clone 671ef14b0d08cf6c657df7da -o notebooks/sales.cnb.md
# 標準出力
cdm notebook clone 671ef14b0d08cf6c657df7da --stdout > sales.cnb.mdノートブックの最新化
cdm notebook pull <target>
-y, --yes 確認プロンプトをスキップして反映
--profile <name> 利用する profile を指定サーバから最新状態を取得して、ローカルのノートブックファイルを上書きします。
<target>にディレクトリを指定した場合、配下の*.cnb.mdを再帰的に処理します<target>にファイルを指定した場合、そのファイルのみを処理します- 変更がある場合、書き込み前に確認プロンプトが表示されます
--yesを指定することで、確認をスキップできます- 差分を確認したい場合は、
cdm notebook diffを実行してください
出力例
/notebooks/sales.cnb.md changed
/notebooks/users.cnb.md unchanged
2 files processed: 1 changed, 1 unchanged
? Pull these changes from the server? (y/N)利用例
bash
# 確認しつつ反映
cdm notebook pull notebooks/
# CI 等で確認なしに反映
cdm notebook pull notebooks/ --yesサーバとの差分確認
cdm notebook diff <file>
--exit-code 差分がある場合に exit 2 を返す
--profile <name> 利用する profile を指定指定したノートブックファイルをサーバに push した場合に発生する差分を出力します。
<file>にはノートブックファイルを指定してください- 単純な文字列の差分ではなく、サーバ側で実際にノートブックの統合処理を行った結果としての差分を出力します
- サーバへの送信前にノートブックファイルの検証を行い、エラーが見つかった場合は
exit 1で終了します --exit-codeを指定した場合、差分がある場合はexit 2で終了します
出力例
差分がある場合:
diff
--- notebooks/sales.cnb.md (server: before)
+++ notebooks/sales.cnb.md (server: after)
@@ -45,7 +45,7 @@
-SELECT * FROM users WHERE created_at > '2024-01-01'
+SELECT * FROM users WHERE created_at > '2025-01-01'利用例
bash
# 差分確認
cdm notebook diff notebooks/sales.cnb.md
# CI レビュー用に diff をファイルへ保存
cdm notebook diff notebooks/sales.cnb.md > review.patch
# CI で変更検知(変更があれば exit 2)
cdm notebook diff notebooks/sales.cnb.md --exit-codeノートブックの書き戻し
cdm notebook push <target>
-y, --yes 確認プロンプトをスキップして反映
--profile <name> 利用する profile を指定指定したノートブックファイルの内容をサーバに送信し、サーバ上のノートブックに反映します。
<target>にディレクトリを指定した場合、配下の*.cnb.mdを再帰的に処理します<target>にファイルを指定した場合、そのファイルのみを処理します- サーバへの送信前にノートブックファイルの検証を行い、検証エラーが見つかった場合は
exit 1で終了します- 複数のファイルを対象とする場合、すべてのファイルを検証し終えてから、エラーをまとめて報告します。
- この処理によりサーバのノートブックが更新される場合、書き込み前に確認プロンプトが表示されます
--yesを指定することで、確認をスキップできます- 詳細な差分を事前に確認したい場合は、別途
diffを実行してください。
出力例
/notebooks/sales.cnb.md changed
/notebooks/users.cnb.md unchanged
2 files processed: 1 changed, 1 unchanged
? Push these changes to the server? (y/N)利用例
bash
# 確認しつつ反映
cdm notebook push notebooks/
# 事前に個別ファイルの差分を確認してから反映
cdm notebook diff notebooks/sales.cnb.md
cdm notebook push notebooks/
# CI で確認なしに反映
cdm notebook push notebooks/ --yesノートブックのプレビュー
cdm notebook preview <file>
-p, --port <n> ファイル同期用の WebSocket ポート番号(既定: 8743)
-d, --debug 同期・書き込みの詳細ログを出力
--profile <name> 利用する profile を指定Codatum の Web サービスをブラウザ経由で起動します。
- 既定ポート(8743)または
--portで指定したポートが使用中の場合、そこから順に空きポートを探索して利用します <file>にはノートブックファイルを指定してください- ブラウザでは、指定したノートブックファイルのプレビュー画面を開きます
- プレビュー中は、表示対象のノートブックファイルに対して、以下の処理が自動的に適用されます。
注意事項
- エディタによりノートブックファイルを編集しつつ、プレビューすることを想定していますが、エディタの環境や設定により、期待しない動作をする可能性があります
- エディタからの保存時に書き込みの競合が頻発する場合、以下の設定をご確認ください
- エディタの保存時の自動フォーマット機能(
formatOnSave)が有効な場合、プレビューからの変更と競合するため、必ず無効にしてください - 同じエディタプロセス内で大量のファイルを監視している場合、ファイル監視イベントの遅延によりエディタに更新が反映されず、競合が発生しやすくなります
- 大量のファイルを監視するエディタプロセスを終了してからファイルを編集すると、競合が発生しにくくなります
- エディタの保存時の自動フォーマット機能(
ノートブックの検証
cdm notebook validate <target>
--profile <name> 利用する profile を指定対象のノートブックファイルのスキーマ・構文を検証します。ファイルは書き換えません。
<target>にディレクトリを指定した場合、配下の*.cnb.mdを再帰的に処理します<target>にファイルを指定した場合、そのファイルのみを処理します- 検証エラーが見つかった場合、
exit 1で終了します
ノートブックのフォーマット
cdm notebook format <target>
--check ファイルを書き換えず、フォーマットが必要なファイルを表示して終了
(差分あり → exit 1、CI用)
--profile <name> 利用する profile を指定対象の *.cnb.md ファイルをフォーマットします。
<target>にディレクトリを指定した場合、配下の*.cnb.mdを再帰的に処理します<target>にファイルを指定した場合、そのファイルのみを処理します- 処理内でファイルの検証も同時に行い、自動修復可能なエラーは自動修復し、自動修復不可能なエラーが見つかった場合、
exit 1で終了します。
自動修復について
- 検証エラーのうち以下に示すような一部のエラーは
formatコマンドにより自動的に修復されます。- ページ属性の指定漏れ
- 各属性における
idの指定漏れ
ジョブ実行情報の削除
cdm notebook strip <target>
--profile <name> 利用する profile を指定対象のノートブックファイルから、ノートブック実行に紐づくジョブ実行情報(ジョブID、エラー、実行結果ID等)を削除します。
<target>にディレクトリを指定した場合、配下の*.cnb.mdを再帰的に処理します<target>にファイルを指定した場合、そのファイルのみを処理します- 処理内でファイルの検証も同時に行い、エラーが見つかった場合、
exit 1で終了します。- 自動修復可能なエラーも検証エラーとして扱われるため、対象と同じパスを指定して
cdm notebook formatを実行することで解消できる場合があります。
- 自動修復可能なエラーも検証エラーとして扱われるため、対象と同じパスを指定して
SQLのビルド
cdm notebook build-sql <file>
-k, --key <key> 特定の SQL のみ出力(省略時は対象の SQL を全て出力)
-f, --format <fmt> 出力形式: text | json(既定: text)
--profile <name> 利用する profile を指定対象のノートブックファイル内に含まれる SQLを、バインド値などを解決した実行可能な形にビルドして出力します。ファイルは書き換えません。
<file>にはノートブックファイルを指定してください- ワークスペースのコネクション一覧を参照して SQL をビルドします
--keyを省略した場合、ファイル内の対象 SQL を全て出力します。- SQLブロックを指定する場合は
pageId:${pageId}/sqlId:${sqlId}形式で指定してください。
- SQLブロックを指定する場合は
--keyで指定したキーが存在しない場合、エラーを出力してexit 1で終了します。- 処理内でファイルの検証も同時に行い、エラーが見つかった場合、
exit 1で終了します。
出力形式
text(既定)
SQL をそのまま出力します。
--keyを指定した場合、該当の SQL 文のみを出力します。--keyを省略した場合、各 SQL の直前に-- @cnb-sql <key>形式のコメント行を区切りとして挿入し、SQL 間を空行で区切って連結します。- SQL 末尾にセミコロンは付与しません。
- 個別の SQL に分割する場合は、
-- @cnb-sqlをマーカーとして split してください。
出力例(全件出力時):
sql
-- @cnb-sql pageId:page1/sqlId:q1
SELECT * FROM users WHERE created_at > '2025-01-01'
-- @cnb-sql pageId:page1/sqlId:q2
SELECT COUNT(*) FROM orders WHERE status = 'completed'json
キーと SQL のペアの配列を JSON で出力します。
出力例:
json
[
{ "key": "pageId:page1/sqlId:q1", "sql": "SELECT * FROM users WHERE created_at > '2025-01-01'" },
{ "key": "pageId:page1/sqlId:q2", "sql": "SELECT COUNT(*) FROM orders WHERE status = 'completed'" }
]