CLI リファレンス

このページ

EmDash CLI は、データベースのセットアップ、型生成、コンテンツの作成と編集、スキーマ管理、メディア、サイトのエクスポートとインポート、プラグイン開発のコマンドを提供します。

インストール

CLI は emdash パッケージに含まれます。次のコマンドでインストールします。

npm install emdash

npx emdash でコマンドを実行するか、package.json にスクリプトを追加します。バイナリは簡潔さのため em としても利用できます。

パッケージスクリプト(例: pnpm dev)でサイトを起動します。パッケージスクリプトは Astro を起動し、EmDash 統合は emdash-env.d.ts を生成します。一方、ランタイムは最初のリクエストで保留中のマイグレーションを実行し、データベースが空でセットアップが完了していないときに同梱シードを適用します。

認証

実行中の EmDash インスタンスに接続するコマンドは、次の順で認証を解決します。

  1. --token フラグ — コマンドライン上の明示的なトークン
  2. EMDASH_TOKEN 環境変数
  3. 保存された資格情報 — ~/.config/emdash/auth.json(emdash login が保存)
  4. Dev bypass — URL が localhost でトークンがない場合、dev bypass エンドポイント経由で自動認証

types、whoami、content、schema、media、search、taxonomy、menu、site コマンドは実行中のインスタンスに接続します。認証コマンドは独自の接続オプションを持ちます。ローカル開発サーバーを対象にする場合、トークンは不要です。

共通フラグ

接続フラグはコマンドごとに異なります。下記のグループ化されたコマンドは、そのグループ内のすべてのサブコマンドを意味します。

FlagAliasAvailable onDescription and default
--url-utypes, login, logout, whoami, content, schema, media, search, taxonomy, menu, siteインスタンス URL。デフォルトは EMDASH_URL または http://localhost:4321
--token-ttypes, whoami, content, schema, media, search, taxonomy, menu, siteフラグ、EMDASH_TOKEN、または保存された資格情報からのトークン
--header "Name: Value"-Htypes, login, content, schema, media, search, taxonomy, menu, siteEMDASH_HEADERS と保存ヘッダーとマージされる繰り返し可能なヘッダー
--jsonwhoami, content, schema, media, search, taxonomy, menu, site端末向け整形出力ではなく生 JSON を書き込む

出力

コマンドが対話型ターミナルに結果を書き込む場合、読みやすい形式に整形します。上記の --json 付きコマンドは、フラグが設定されているか出力がパイプされているときに生 JSON を書き込みます。emdash migrate は明示的な --json オプションがある場合のみ JSON を出します。

コマンド

emdash init

package.json のテンプレートメタデータからローカル SQLite データベースを初期化します。コマンドはコアマイグレーションを実行し、続けて emdash.schema が指定する任意の SQL ファイルを適用します。JSON シードデータには別途 emdash seed を実行します。

npx emdash init [options]
OptionAliasDescriptionDefault
--database-dSQLite データベースパス./data.db
--cwdプロジェクト作業ディレクトリ現在のディレクトリ
--force-fコレクションが既に存在する場合にテンプレートスキーマを再適用false

--force なしでは、初期化済みデータベースはそのまま残ります。このコマンドはローカル SQLite ファイルを直接開きます。デプロイ管理の D1、PostgreSQL、libSQL、Hyperdrive マイグレーションには emdash migrate を使用します。

emdash doctor

ローカル SQLite データベースの接続、マイグレーション、コレクション、テーブル、ユーザーの問題を確認します。プロジェクトに Wrangler 設定がある場合、Cron Trigger と EmDash の scheduled() ハンドラーが一緒に設定されているかも確認します。

npx emdash doctor [options]
OptionAliasDescriptionDefault
--database-dSQLite データベースパス./data.db
--cwdプロジェクト作業ディレクトリ現在のディレクトリ
--json構造化結果を出力false

各チェックを合格、警告、失敗として報告し、チェックが失敗すると非ゼロで終了します。

emdash seed

JSON シードをローカル SQLite データベースに検証または適用します。コマンドは、指定があれば位置引数のパス、次に .emdash/seed.json、次に package.json の emdash.seed パスを使います。

npx emdash seed [path] [options]
OptionAliasDescriptionDefault
--database-dSQLite データベースパス./data.db
--cwdプロジェクト作業ディレクトリ現在のディレクトリ
--validateデータベースを変更せずにシードを検証false
--no-contentエントリ、バイライン、タクソノミー用語をスキップfalse
--on-conflict既存レコードを skip、update、または error で処理skip
--uploads-dirシードメディア用のローカルディレクトリ./uploads
--media-base-urlローカルシードメディアに保存するベース URL/_emdash/api/media/file

シード適用はまずコアマイグレーションを実行します。データベースを開いたり作成したりせずにファイルを確認する必要がある CI では --validate を使用します。

emdash migrate

Astro ビルドが出力したコアマイグレーションセットを確認または適用します。

npx emdash migrate [options]
npx emdash migrate --check [options]
npx emdash migrate --status --json [options]
npx emdash migrate --release-lock <id> [options]

デフォルトではプロジェクトルートを検出し、.emdash/migrations.json を読みます。プロジェクトにインストールされた EmDash パッケージに対してマニフェストを検証し、アダプターのプロジェクトローカルエグゼキューターを解決し、SQL の前に不変のターゲットを表示します。

オプション

OptionDescription
--check何も適用しない。保留中または未知のマイグレーション記録で非ゼロ終了
--status適用せずに正確な状態を報告。成功した報告の後にゼロ終了
--json安定したマイグレーション報告を JSON として出力
--manifest <path>非標準のマニフェストパスを読む
--from-configマニフェストの代わりに信頼された Astro 設定を明示的に評価
--config <path>--from-config で使う Astro 設定パス
--expected-target-fingerprint <sha256>非対話的な適用またはロック解除に必要なガード
--release-lock <id>--status が報告する id で D1 マイグレーションロックを解除。--check または --status と併用不可
--database <path>SQLite パスを上書き
--database-url-env <name>PostgreSQL 接続変数名を上書き
--d1 <uuid-or-name>D1 データベースを明示的に選択
--account-id <id>Cloudflare アカウントを明示的に選択
--wrangler-config <path>明示的な Wrangler 設定から D1 バインディングメタデータを読む
--wrangler-env <name>環境を選択。--wrangler-config が必要

対話的な人間可読の適用とロック解除は確認を求めます。非対話的な適用またはロック解除、および --json を使うすべての適用またはロック解除は、ターゲット用に表示された正確なフィンガープリントが必要です。down や --dry-run はありません。作業が必要かどうかは --check で判断します。

終了コード

CodeMeaning
0成功(成功した --status 報告を含む)
1検証、設定、ターゲット、マイグレーション、またはクリーンアップエラー
2--check が既知の保留マイグレーションを検出
3--check が未知の適用済み記録を検出(保留より優先)
4確認欠落、拒否、またはターゲットフィンガープリント不一致
130境界付きエグゼキュータークリーンアップ後に中断

デプロイ順序、ターゲット資格情報、D1 マイグレーションロックについては Manage Core Database Migrations を参照してください。

emdash dev(非推奨)

レガシーコマンドは Astro を起動する前にローカル SQLite データベースを初期化・マイグレートします。この動作はサイトが設定したデータベースアダプターを使わず、Cloudflare D1 開発と互換性がありません。既存の呼び出しは、データベース作業の前に非推奨警告を表示するようになりました。

OptionAliasDescriptionDefault
--database-dローカル SQLite データベースパス./data.db
--types-tAstro 起動前にリモート型を取得false
--port-pAstro 開発サーバーポート4321
--cwdプロジェクト作業ディレクトリ現在のディレクトリ

emdash types

実行中の EmDash インスタンスのスキーマから TypeScript 型を生成します。

npx emdash types [options]

オプション

OptionAliasDescriptionDefault
--url-uEmDash インスタンス URLhttp://localhost:4321
--token-t認証トークン環境または保存された資格情報から
--header-Hカスタムリクエストヘッダー。繰り返し可能環境または保存された資格情報から
--json受け付けるが、このコマンドのファイルや進捗出力は変更しない—
--output-o型の出力パス.emdash/types.ts
--cwd作業ディレクトリ現在のディレクトリ

例

# Generate types from local dev server
npx emdash types

# Generate from remote instance
npx emdash types --url https://my-site.pages.dev

# Custom output path
npx emdash types --output src/types/emdash.ts

動作

  1. インスタンスからスキーマを取得
  2. TypeScript 型定義を生成
  3. 出力ファイルに型を書き込み
  4. 参照用に横に schema.json を書き込み

emdash login

OAuth Device Flow で EmDash インスタンスにログインします。

npx emdash login [options]

オプション

OptionAliasDescriptionDefault
--url-uEmDash インスタンス URLhttp://localhost:4321
--header-Hカスタムリクエストヘッダー。繰り返し可能EMDASH_HEADERS から

動作

  1. インスタンスから認証エンドポイントを検出
  2. localhost で認証が未設定の場合、自動的に dev bypass を使用
  3. それ以外は OAuth Device Flow を開始 — コードを表示しブラウザを開きます。コード入力後、管理ページは CLI が受け取る権限と、ロールが許可しない要求権限を、承認前に一覧表示します。
  4. 認可をポーリングし、資格情報を ~/.config/emdash/auth.json に保存

保存された資格情報は、同じインスタンスを対象とする以降のすべてのコマンドで自動的に使われます。

emdash logout

ログアウトし、保存された資格情報を削除します。

npx emdash logout [options]

オプション

OptionAliasDescriptionDefault
--url-uEmDash インスタンス URLhttp://localhost:4321

emdash whoami

現在認証されているユーザーを表示します。

npx emdash whoami [options]

オプション

OptionAliasDescriptionDefault
--url-uEmDash インスタンス URLhttp://localhost:4321
--token-t認証トークン環境/保存資格情報から
--jsonJSON として出力

メール、名前、ロール、認証方法、インスタンス URL を表示します。

emdash content

コンテンツ項目を管理します。すべてのサブコマンドは EmDashClient 経由でリモート API を使います。

content list <collection>

npx emdash content list posts
npx emdash content list posts --status published --limit 10
OptionDescription
--statusステータスで絞り込み
--localeロケールで絞り込み
--limit最大件数
--cursorページネーションカーソル

content get <collection> <id>

npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
OptionDescription
--localeID 引数がスラッグのときに使うロケール
--rawMarkdown ではなく生の Portable Text を返す
--published保留中の下書きを無視し、公開データのみを返す

応答には _rev トークンが含まれます。上書き前に現在の状態を見たと確認するため、content update に渡します。

content create <collection>

npx emdash content create posts --data '{"title": "Hello"}'
npx emdash content create posts --file post.json --slug hello-world
cat post.json | npx emdash content create posts --stdin
OptionDescription
--dataコンテンツデータの JSON 文字列
--fileJSON ファイルからデータを読む
--stdinstdin からデータを読む
--slugコンテンツスラッグ
--localeコンテンツロケール
--translation-ofこの項目を翻訳としてリンクするコンテンツ項目の ID
--draft自動公開せず下書きのままにする

データは --data、--file、--stdin のいずれか 1 つだけを指定します。--draft が設定されていない限り、新しい項目は自動公開されます。

content update <collection> <id>

現在の状態を見たと証明するため、前回の get の _rev トークンを提供する必要があります。これにより、見ていない変更の上書きを防ぎます。次の手順で項目を読み、そのトークンで更新します。

# 1. Read the item, note the _rev
npx emdash content get posts 01ABC123

# 2. Update with the _rev from step 1
npx emdash content update posts 01ABC123 \
  --rev MToyMDI2LTAyLTE0... \
  --data '{"title": "Updated"}'
OptionDescription
--revget からのリビジョントークン(必須)
--dataコンテンツデータの JSON 文字列
--fileJSON ファイルからデータを読む
--localeID 引数がスラッグのときに使うロケール
--draft自動公開せず更新を下書きのままにする
--override-lock別の編集者がエントリを開いていても書き込む

get 以降に項目が変わった場合、サーバーは 409 Conflict を返します — 再読み取りして再試行してください。

管理画面で誰かがエントリを開いている場合、サーバーはコード ENTRY_LOCKED と保持者を示すメッセージ付きの 409 を返します。完了を待つか、 --override-lock を渡します。同じフラグは content delete、 content publish、content unpublish、content schedule でも使えます。

content delete <collection> <id>

npx emdash content delete posts 01ABC123

コンテンツ項目をソフト削除します(ゴミ箱へ移動)。

別の編集者が開いているエントリを削除するには --override-lock を渡します。

content publish <collection> <id>

npx emdash content publish posts 01ABC123

別の編集者が開いているエントリを公開するには --override-lock を渡します。

content unpublish <collection> <id>

npx emdash content unpublish posts 01ABC123

別の編集者が開いているエントリの公開を取り消すには --override-lock を渡します。

content schedule <collection> <id>

npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
OptionDescription
--atZ または明示的な UTC オフセット付きの ISO 8601 日時(必須)

別の編集者が開いているエントリをスケジュールするには --override-lock を渡します。

content restore <collection> <id>

npx emdash content restore posts 01ABC123

ゴミ箱に入れたコンテンツ項目を復元します。

content translations <collection> <id>

エントリの翻訳グループ内のすべての翻訳を一覧表示します。

npx emdash content translations posts 01ABC123

結果には各翻訳の ID、ロケール、スラッグ、ステータス、および要求されたエントリかどうかが含まれます。

emdash schema

コレクションとフィールドを管理します。

schema list

npx emdash schema list

すべてのコレクションを一覧表示します。

schema get <collection>

npx emdash schema get posts

すべてのフィールド付きでコレクションを表示します。

schema create <collection>

npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"
OptionDescription
--labelコレクションラベル(必須)
--label-singular単数形ラベル
--descriptionコレクションの説明

schema delete <collection>

npx emdash schema delete articles
npx emdash schema delete articles --force
OptionDescription
--force確認をスキップ

--force が設定されていない限り確認を求めます。

schema add-field <collection> <field>

npx emdash schema add-field posts body --type portableText --label "Body Content"
npx emdash schema add-field posts featured --type boolean --required
OptionDescription
--typeフィールド型: string, text, url, number, integer, boolean, datetime, select, multiSelect, portableText, image, file, reference, json, slug, または repeater(必須)
--labelフィールドラベル(デフォルトはフィールドスラッグ)
--requiredフィールドが必須かどうか

schema remove-field <collection> <field>

npx emdash schema remove-field posts featured

emdash media

メディア項目を管理します。

media list

npx emdash media list
npx emdash media list --mime image/png --limit 20
OptionDescription
--mimeMIME タイプで絞り込み
--limit件数
--cursorページネーションカーソル

media upload <file>

npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"
OptionDescription
--alt代替テキスト
--captionキャプションテキスト

media get <id>

npx emdash media get 01MEDIA123

media delete <id>

npx emdash media delete 01MEDIA123

media repair-usage

1 つのコレクション、またはすべてのコンテンツコレクションのコンテンツメディア使用インデックスを修復します。インポートや直接のデータベース書き込みの後、使用カバレッジが古いまたは信頼できないときに使います。

npx emdash media repair-usage --collection posts
npx emdash media repair-usage --all
npx emdash media repair-usage --all --json
OptionAliasDescription
--collection-c1 つのコンテンツコレクションを修復
--allすべてのコンテンツコレクションを修復

--collection または --all のどちらか一方だけを渡します。リモート修復には Admin ユーザーと admin スコープの認証トークンが必要です。

全コンテンツの修復は同期実行され、大きなサイトでは遅くまたは高コストになることがあります。1 つのコレクションだけ修復する場合は --collection を優先してください。

構造化結果 complete、partial、stale は 0 で終了し、構造化 failed は 1 で終了します。自動化と cron ジョブは --json を使い、終了コード 0 を完全カバレッジとみなすのではなく、status、failedSourceCount、skippedSourceCount、コレクションごとの要約を解析してください。

コンテンツ全体の全文検索です。

npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
OptionAliasDescription
--collection-cコレクションで絞り込み
--localeロケールで絞り込み
--limit-l最大結果数

emdash taxonomy

タクソノミーと用語を管理します。

taxonomy list

npx emdash taxonomy list

taxonomy terms <name>

npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
OptionAliasDescription
--limit-l最大用語数
--cursorページネーションカーソル

taxonomy add-term <taxonomy>

npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
OptionDescription
--name用語ラベル(必須)
--slug用語スラッグ(デフォルトはスラッグ化された名前)
--parent親用語 ID(階層タクソノミー用)

emdash menu

ナビゲーションメニューを管理します。

npx emdash menu list
npx emdash menu get primary

すべての項目付きでメニューを返します。

emdash site

サイト全体を .emdash サイトパッケージにエクスポートし、空のサイトにパッケージをインポートします。サイト転送ガイド は、パッケージの内容、ターゲットサイトに必要なもの、インポートプランの読み方を説明します。

トークンには emdash login トークンが持つ admin スコープ、または対応する転送スコープが必要です。エクスポートには transfer:export、インポートには transfer:analyze と transfer:execute。それらがないトークンは INSUFFICIENT_SCOPE で失敗します。

進捗メッセージは常に stderr へ、結果は stdout へ行きます。--json の場合、または stdout が端末でない場合、stdout には JSON 結果のみが含まれます。エラーは { "error": { "code": "…", "message": "…" } } として書かれます。コードはサーバーのエラーコードに加え、不正なフラグの INVALID_ARGUMENT、再開インポートがまだパッケージファイルを必要とするときの PACKAGE_FILE_REQUIRED、および UNKNOWN_ERROR です。

コマンドはネットワーク障害と 408、429、5xx 応答をバックオフ付きで再試行します。

site export

サイトをエクスポートし、パッケージファイルに書き込みます。

npx emdash site export --output site.emdash
OptionAliasDescriptionDefault
--output-o書き込むパッケージファイル(必須)
--no-commentsコメントとコメントリアクションを除外コメントを含む

コマンドはエクスポートを開始し、完了まで進め、パッケージをファイル単位でダウンロードします。ダウンロードしたマニフェストがエクスポートのパッケージダイジェストと一致することを確認し、一致しない場合は何も書き込む前に TRANSFER_PACKAGE_DIGEST_MISMATCH で失敗します。書き込み前に各ファイルのサイズと SHA-256 ダイジェストを確認します。パッケージは <output>.partial に書き込まれ、完了時に出力パスへリネームされます。

コマンドは進捗を <output>.partial.json に、ダウンロードしたファイルを <output>.parts/ ディレクトリに保持します。中断後に同じコマンドを再実行すると同じエクスポートを再開します。既にダウンロードしたファイルは確認して再利用され、再利用した数が報告されます。パッケージ書き込み時に両方とも削除されます。進捗ファイルが別の URL や別のコメント設定用に書かれた場合、またはそのエクスポートが失敗・期限切れの場合は無視され、コマンドは新しいエクスポートを開始します。

JSON 結果には operationId、output、packageDigest、files、bytes、resumed が含まれます。

site import <file>

パッケージを 2 段階でインポートします。まず分析し、分析が表示したプランダイジェストを確認します。

npx emdash site import site.emdash --analyze
npx emdash site import site.emdash --plan sha256:3f1c… --confirm
OptionDescription
--analyzeパッケージをアップロードし、分析し、インポートプランを表示
--map-principal <from>=<to>--analyze と併用: パッケージのプリンシパルを ID またはメールで、サイトユーザー(ID またはメール)または none にマップ。繰り返し可能
--use-target-title--analyze と併用: パッケージではなくこのサイトのタイトルを保持
--use-target-tagline--analyze と併用: パッケージではなくこのサイトのタグラインを保持
--plan <digest>実行するプランダイジェスト。sha256:<hex> または裸の hex。--confirm が必要
--confirm--plan で指定したプランを実行。--plan が必要
--yesエイリアス -y。cancel または abandon と併用: 確認プロンプトをスキップ

--analyze はパッケージファイル全体をローカルで検証し、同じパッケージのサイト上の既存インポートを見つけるか作成します。サイトがまだ持っていないファイルをアップロードし、分析を実行し、プランを表示します。パッケージとプランのダイジェスト、レコード数、サイズ、タイトルとタグラインの選択、各プリンシパルとそのマッピング、「Differences from the source site」下の変換、警告、ブロッカー。同じパッケージの以前のインポートが失敗、キャンセル、放棄、または期限切れの場合、コマンドは警告して新しいインポートを開始します。

決定はインポートと一緒に保存されるため、決定フラグなしの後続の --analyze 実行はそれらを保持します。決定の変更ごとに新しいプランダイジェストが生成されます。決定は --plan と併用できず、--plan は --analyze と併用できません。

--plan <digest> --confirm はダイジェストが現在のプランと一致する場合のみインポートを実行し、完了まで進めてレシートを表示します。確認後にプランが変わった場合、コマンドは TRANSFER_PLAN_DIGEST_MISMATCH で失敗します。再分析して新しいダイジェストを確認してください。

--analyze の JSON 結果には operationId、state、packageDigest、planDigest、executable、完全な plan が含まれます。--confirm の JSON 結果には operationId、state(complete)、receipt、およびレシートの receiptDigest が内容と一致するかを報告する receiptDigestValid が含まれます。

これらの形式は操作 ID でインポートを操作します。

CommandDescription
emdash site import status <operation-id>Print the import’s state, stage, progress, digests, and error, and how many files are uploaded. The JSON result is { operation, files: { declared, verified } }.
emdash site import resume <operation-id> [file]Continue the import from its current state: finish uploading, finish analysis and print the plan, or finish execution and print the receipt. Pass the package file only while the import is still uploading.
emdash site import receipt <operation-id>Print the receipt of a complete import, in the same shape as --confirm.
emdash site import cancel <operation-id>Cancel the import. A running import stops after its current batch; what it already wrote stays on the site.
emdash site import abandon <operation-id>Lift the write block that a failed or cancelled import leaves on the site. What the import wrote is not deleted, so reset the site or set up a new one before importing again.

cancel と abandon は確認を求めます。プロンプトをスキップするには --yes を渡します。--json の場合や stdout が端末でない場合もプロンプトはスキップされます。stdin が端末でなく、どちらも当てはまらない場合、コマンドは INVALID_ARGUMENT で失敗します。プロンプトを拒否しても何も変わらず、コード 1 で終了します。両方の JSON 結果は { operationId, state, operation } です。

インポートコマンドは次のコードで終了します。

CodeMeaning
0Success. For status, an import that is in progress or complete
1An error, a declined prompt, an import that ended without a receipt, or a receipt whose digest does not match. For status, an import that failed, was cancelled or abandoned, or expired
2Analysis finished, but the plan has blockers

emdash plugin

EmDash プラグインの作成、検証、バンドル、公開を行います。マーケットプレイスへのログインは CMS インスタンスへのログインとは別です。

plugin init

サンドボックスまたはネイティブプラグインをスキャフォールドします。

npx emdash plugin init --dir ./my-plugin --name my-plugin --format sandboxed
OptionDescriptionDefault
--dir作成するディレクトリ現在のディレクトリ
--nameプラグインパッケージ名または ID対話プロンプト
--formatsandboxed または native対話プロンプト
--native--format native のショートカットfalse

plugin bundle

プラグインを検証し、マーケットプレイス用 tarball を作成します。

npx emdash plugin bundle --dir ./my-plugin --outDir ./artifacts
OptionAliasDescriptionDefault
--dirプラグインディレクトリ現在のディレクトリ
--outDir-otarball 出力ディレクトリ./dist
--validateOnlytarball を作成せずに検証を実行false

plugin validate

plugin bundle と同じ検証を tarball 作成なしで実行します。

npx emdash plugin validate --dir ./my-plugin

任意の --dir はプラグインディレクトリを選択し、デフォルトは現在のディレクトリです。

plugin publish

バンドルをマーケットプレイスにアップロードし、デフォルトでは処理結果を待ちます。

npx emdash plugin publish --tarball ./dist/my-plugin-1.0.0.tar.gz
OptionDescriptionDefault
--tarball既存のプラグイン tarball—
--dir--build で使うプラグインディレクトリ現在のディレクトリ
--buildアップロード前にプラグインをビルドfalse
--registryマーケットプレイスのベース URLhttps://marketplace.emdashcms.com
--no-wait処理結果を待たずにアップロード後に終了false

--tarball を指定するか、先に --dir からビルドするために --build を渡します。

plugin login

GitHub device flow でマーケットプレイスに認証します。--registry は別のマーケットプレイスを選択し、デフォルトは https://marketplace.emdashcms.com です。

npx emdash plugin login

plugin logout

保存されたマーケットプレイス資格情報を削除します。任意の --registry はログインに使ったのと同じマーケットプレイスを識別する必要があります。

npx emdash plugin logout

emdash export-seed

データベーススキーマとコンテンツをシードファイルとしてエクスポートします。ローカル SQLite ファイルに直接動作します。

データベースは、インストール済み EmDash バージョンが知るすべてのマイグレーションを持っている必要があります。コマンドが 保留マイグレーションを報告したら、npx emdash migrate を実行してから再エクスポートしてください。データベースが より新しい EmDash バージョンでマイグレートされている場合は、エクスポート前にインストール版をアップグレードしてください。エクスポートは データベースを読み取り専用で開き、自身ではマイグレーションを適用しません。

npx emdash export-seed [options] > seed.json

オプション

OptionAliasDescriptionDefault
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリ現在のディレクトリ
--with-contentコンテンツを含める(すべて、またはカンマ区切りコレクション)
--pretty / --no-prettyインデント付き JSON 出力の有効/無効プリティ出力が有効
--media-base-url絶対 $media URL を書くために使うサイトの公開 URL

出力形式

エクスポートされたシードファイルには次が含まれます。

  • Settings: サイトタイトル、タグライン、ソーシャルリンク
  • Collections: フィールド付きのすべてのコレクション定義
  • Block types: 保持された各バージョンと各タイプのアクティブバージョンポインタ
  • Taxonomies: タクソノミー定義と用語
  • Menus: 項目付きナビゲーションメニュー
  • Redirects: ステータス 301、302、307、または 308 のリダイレクト規則
  • Widget Areas: ウィジェット領域とウィジェット
  • Sections: 再利用可能なコンテンツブロック
  • Content(要求時): 移植性のための $media 参照と $ref: 構文付きエントリ

スケジュール済みエントリは下書きとしてエクスポートされます。シードには公開時刻のフィールドがないためです。エクスポートは stderr 上の警告付きで、emdash seed が拒否するものを除外します。ステータス 410 または 451 のリダイレクト規則、同じソースを共有する余分な規則(古いデータベースで可能)、スラッグに小文字・数字・ハイフン以外の文字を含むセクション。

メディア URL

emdash seed は各 $media URL をダウンロードし、ターゲットサイトのストレージにアップロードするため、到達可能な絶対 http または https URL が必要です。絶対 URL を書くにはソースサイトの公開 URL を渡します。

npx emdash export-seed --with-content=all --media-base-url=https://example.com > seed.json

シード適用中、サイトはその URL の下の /_emdash/api/media/file/ からメディアを提供する必要があり、URL は localhost やプライベートネットワークアドレスを指してはなりません。emdash seed はそれらからのダウンロードを拒否します。--media-base-url がない場合、$media URL はサイト相対パスとなり、emdash seed はスキップしてフィールドを空のままにし、エクスポートは stderr に警告を出します。

画像とファイルのフィールド、およびリピーターの画像サブフィールドは $media 参照としてエクスポートされます。Portable Text フィールド内の画像は保存されたメディア ID と URL を保持し、別サイトでは解決しません。

emdash secrets

プラグインシークレットの暗号化に使うキーを生成・検査します。

secrets generate

デプロイ用の EMDASH_ENCRYPTION_KEY を生成します。キーは 保存時のプラグインシークレットの暗号化に使われます。

npx emdash secrets generate

新しいキーを stdout に出力します。シークレットストアへパイプするか、--write で ローカルの .env ファイルに直接書き込みます。Wrangler と Cloudflare Vite プラグインはローカル開発でそのファイルを読みます。スタンドアロンの Node サーバーは .env を自動読み込みしません。プロセスマネージャー経由で読み込むか、 サーバーのプロセス環境でキーを提供してください。Node.js デプロイ ガイド にローカルコマンドがあります。

npx emdash secrets generate --write .env

--write は --force なしでは既存エントリの上書きを拒否します。既存の暗号化データがあるデプロイをローテーションするには、生成したキーを既存値の前に置き、キーをカンマで区切ります。EmDash は最初のキーで新しい値を暗号化し、復号には古いエントリを kid で使います。古いキーを削除する前に、すべてのプラグインシークレットを再保存してください。EmDash は現在、保存設定がまだ使うキー ID を一覧表示しないため、再保存する資格情報の一覧を保持し、古いキーを削除する前に各統合を検証してください。

secrets fingerprint <key>

値を露出させずにキーの 8 文字フィンガープリント(kid)を表示します。 正しいキーがデプロイされたことを検証する CI で有用です。次のコマンドはキーのフィンガープリントを表示します。

npx emdash secrets fingerprint emdash_enc_v1_...

emdash auth(非推奨)

auth secret

レガシーの EMDASH_AUTH_SECRET 値を生成します。

npx emdash auth secret

既存インストールはこの変数を保持して、安定したコメント投稿者 IP ハッシュを保てます。プラグインシークレットは暗号化しません。

生成ファイル

emdash-env.d.ts

Astro 統合は、ローカル開発サーバー起動時にプロジェクトルートに emdash-env.d.ts を生成します。実行中の開発サイト経由で行われたスキーマ変更の後にファイルを更新します。宣言は EmDashCollections を拡張するため、getEmDashCollection("posts") のような呼び出しはローカルデータベースで定義されたフィールドを推論します。

このファイルは自動で、ローカル Astro 開発ワークフローに属します。作成のために emdash types を実行する必要はありません。

.emdash/types.ts

emdash types コマンドは実行中インスタンスのスキーマを取得し、スタンドアロンの TypeScript インターフェイスを書き込みます。スキーマがリモート EmDash インスタンスにある場合、ツールがカスタムパスのファイルを必要とする場合、またはローカル Astro 開発サーバーが動いていないときに使います。

// Generated by EmDash CLI
// Do not edit manually - run `emdash types` to regenerate

import type { PortableTextBlock } from "emdash";

export interface Post {
	id: string;
	slug: string | null;
	status: string;
	title: string;
	content?: PortableTextBlock[];
	createdAt: Date;
	updatedAt: Date;
	publishedAt: Date | null;
	bylines?: ContentBylineCredit[];
	terms?: Record<string, TaxonomyTerm[]>;
}

リモート出力はスタンドアロンのコレクションインターフェイスを含み、EmDashCollections は拡張しません。emdash types を実行したときだけ変わります。emdash-env.d.ts はモジュール拡張を使い、ローカル開発の一環として更新されます。

.emdash/schema.json

コマンドは選択した TypeScript 出力の横に、生のスキーマエクスポート schema.json も書き込みます。デフォルト出力パスではファイルは .emdash/schema.json です。

{
  "version": "a1b2c3d4",
  "collections": [
    {
      "slug": "posts",
      "label": "Posts",
      "fields": [...]
    }
  ]
}

環境変数

VariableDescription
EMDASH_DATABASE_URLデータベース URL を上書き
EMDASH_TOKENリモート操作用の認証トークン
EMDASH_URL共有リモートクライアントを使うコマンドのデフォルト URL
EMDASH_HEADERS共有リモートクライアントと login 用の改行区切りカスタムリクエストヘッダー
EMDASH_ENCRYPTION_KEY保存時のプラグインシークレット暗号化キー。運用者が提供 — データベースには保存されない。emdash secrets generate で生成。
EMDASH_PREVIEW_SECRETプレビュー HMAC シークレットの任意上書き。未設定時、EmDash はオプションテーブルに生成・永続化する。
EMDASH_IP_SALTコメント投稿者 IP ハッシュソルトの任意上書き。未設定時、EmDash はオプションテーブルに生成・永続化する。
EMDASH_AUTH_SECRETレガシー。設定されている場合 IP ソルト源として使われ、既存インストールはアップグレード後も安定したコメント投稿者 IP ハッシュを保てる。新規インストールは設定しないこと。

パッケージスクリプト

便利のため、よく使うコマンドを package.json スクリプトとして追加します。

{
	"scripts": {
		"dev": "astro dev",
		"types": "emdash types",
		"export-seed": "emdash export-seed",
		"db:reset": "rm -f data.db"
	}
}

一般的な終了コード

ほとんどのコマンドは成功に 0、エラーに 1 を使います。emdash migrate は 終了コード表 に記載の特定結果に 2、3、4、130 も使います。emdash site import はインポートプランにブロッカーがあるとき 2 を使います。

CodeDescription
0成功
1エラー(設定、ネットワーク、データベース)