コンテンツにスキップ

CLI リファレンス

EmDash CLIは、EmDash CMSインスタンスの管理 — データベース設定、型生成、コンテンツCRUD、スキーマ管理、メディアなど — のためのコマンドを提供します。

CLIはemdashパッケージに含まれています:

Terminal window
npm install emdash

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

実行中のEmDashインスタンスと通信するコマンド(init、seed、export-seed、auth secretを除くすべて)は、以下の順序で認証を解決します:

  1. --tokenフラグ — コマンドラインでの明示的なトークン
  2. EMDASH_TOKEN環境変数
  3. 保存された認証情報 ~/.config/emdash/auth.jsonから(emdash loginで保存)
  4. 開発バイパス — URLがlocalhostでトークンが利用できない場合、開発バイパスエンドポイントを介して自動的に認証

ほとんどのコマンドは--url(デフォルトhttp://localhost:4321)と--tokenフラグを受け付けます。ローカルの開発サーバーを対象とする場合、トークンは必要ありません。

これらのフラグはすべてのリモートコマンドで利用可能です:

フラグエイリアス説明デフォルト
--url-uEmDashインスタンスURLhttp://localhost:4321
--token-t認証トークン環境変数/保存済み認証情報から
--jsonJSONとして出力(パイプ用)TTYから自動検出

標準出力がTTYの場合、CLIはconsolaで結果を整形表示します。パイプされた場合や--jsonが設定されている場合、標準出力に生のJSONを出力します — jqや他のツールに適しています。

コアスキーマとオプションのテンプレートデータでデータベースを初期化します。

Terminal window
npx emdash init [options]
オプションエイリアス説明デフォルト
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリカレントディレクトリ
--force-fスキーマとシードを再実行false
  1. package.jsonからemdash設定を読み取る
  2. 必要に応じてデータベースファイルを作成
  3. コアマイグレーションを実行(システムテーブルを作成)
  4. 設定されている場合、テンプレートschema.sqlを実行
  5. 設定されている場合、テンプレートseed.sqlを実行

自動データベース設定で開発サーバーを起動します。

Terminal window
npx emdash dev [options]
オプションエイリアス説明デフォルト
--database-dデータベースファイルパス./data.db
--types-t起動前にリモートから型を生成false
--port-p開発サーバーポート4321
--cwd作業ディレクトリカレントディレクトリ
Terminal window
# Start dev server
npx emdash dev
# カスタムポート
npx emdash dev --port 3000
# 起動前にリモートから型を生成
npx emdash dev --types
  1. 保留中のデータベースマイグレーションをチェックして実行
  2. --typesが設定されている場合、リモートインスタンスからTypeScript型を生成(URLはEMDASH_URL環境変数またはpackage.jsonのemdash.urlから)
  3. EMDASH_DATABASE_URLを設定してAstro開発サーバーを起動

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

Terminal window
npx emdash types [options]
オプションエイリアス説明デフォルト
--url-uEmDashインスタンスURLhttp://localhost:4321
--token-t認証トークン環境変数/保存済み認証情報から
--output-o型の出力パス.emdash/types.ts
--cwd作業ディレクトリカレントディレクトリ
Terminal window
# Generate types from local dev server
npx emdash types
# リモートインスタンスから生成
npx emdash types --url https://my-site.pages.dev
# カスタム出力パス
npx emdash types --output src/types/emdash.ts
  1. インスタンスからスキーマを取得
  2. TypeScript型定義を生成
  3. 出力ファイルに型を書き込み
  4. 参照用にschema.jsonを隣接して書き込み

OAuth Device Flowを使用してEmDashインスタンスにログインします。

Terminal window
npx emdash login [options]
オプションエイリアス説明デフォルト
--url-uEmDashインスタンスURLhttp://localhost:4321
  1. インスタンスから認証エンドポイントを検出
  2. localhostで認証が設定されていない場合、自動的に開発バイパスを使用
  3. それ以外の場合、OAuth Device Flowを開始 — コードを表示しブラウザを開く
  4. 認可をポーリングし、認証情報を~/.config/emdash/auth.jsonに保存

保存された認証情報は、同じインスタンスを対象とするすべての後続コマンドで自動的に使用されます。

ログアウトして保存された認証情報を削除します。

Terminal window
npx emdash logout [options]
オプションエイリアス説明デフォルト
--url-uEmDashインスタンスURLhttp://localhost:4321

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

Terminal window
npx emdash whoami [options]
オプションエイリアス説明デフォルト
--url-uEmDashインスタンスURLhttp://localhost:4321
--token-t認証トークン環境変数/保存済み認証情報から
--jsonJSONとして出力

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

コンテンツアイテムを管理します。すべてのサブコマンドはEmDashClientを介してリモートAPIを使用します。

Terminal window
npx emdash content list posts
npx emdash content list posts --status published --limit 10
オプション説明
--statusステータスでフィルタ
--limit最大アイテム数
--cursorページネーションカーソル
Terminal window
npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
オプション説明
--raw生のPortable Textを返す(マークダウン変換をスキップ)

レスポンスには _rev トークンが含まれます — content update に渡して、上書きする前に現在の状態を確認したことを証明します。

Terminal window
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
オプション説明
--dataコンテンツデータを含むJSON文字列
--fileJSONファイルからデータを読み込む
--stdin標準入力からデータを読み込む
--slugコンテンツスラッグ
--status初期ステータス(draft, published)

データは --data、--file、--stdin のうちのいずれか1つを介して提供してください。

書き込み前に読み取りが必要なファイルエディターのように — 現在の状態を確認したことを証明するために、事前の get から取得した _rev トークンを提供する必要があります。これにより、未確認の変更を誤って上書きすることを防ぎます。

Terminal window
# 1. Read the item, note the _rev
npx emdash content get posts 01ABC123
# 2. ステップ1の _rev を使用して更新
npx emdash content update posts 01ABC123 \
--rev MToyMDI2LTAyLTE0... \
--data '{"title": "Updated"}'
オプション説明
--revget から取得したリビジョントークン(必須)
--dataコンテンツデータを含むJSON文字列
--fileJSONファイルからデータを読み込む

アイテムが get 実行後に変更されている場合、サーバーは409 Conflictを返します — 再読み込みして再度試してください。

Terminal window
npx emdash content delete posts 01ABC123

コンテンツアイテムをソフト削除します(ゴミ箱に移動)。

Terminal window
npx emdash content publish posts 01ABC123
Terminal window
npx emdash content unpublish posts 01ABC123
Terminal window
npx emdash content schedule posts 01ABC123 --at 2026-03-01T09:00:00Z
オプション説明
--atISO 8601日時形式(必須)
Terminal window
npx emdash content restore posts 01ABC123

ゴミ箱にあるコンテンツアイテムを復元します。

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

Terminal window
npx emdash schema list

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

Terminal window
npx emdash schema get posts

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

Terminal window
npx emdash schema create articles --label Articles
npx emdash schema create articles --label Articles --label-singular Article --description "Blog articles"
オプション説明
--labelコレクションラベル(必須)
--label-singular単数形ラベル
--descriptionコレクション説明
Terminal window
npx emdash schema delete articles
npx emdash schema delete articles --force
オプション説明
--force確認をスキップ

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

Terminal window
npx emdash schema add-field posts body --type portableText --label "Body Content"
npx emdash schema add-field posts featured --type boolean --required
オプション説明
--typeフィールドタイプ: string, text, number, integer, boolean, datetime, image, reference, portableText, json(必須)
--labelフィールドラベル(デフォルトはフィールドスラッグ)
--requiredフィールドが必須かどうか
Terminal window
npx emdash schema remove-field posts featured

メディアアイテムを管理します。

Terminal window
npx emdash media list
npx emdash media list --mime image/png --limit 20
オプション説明
--mimeMIMEタイプでフィルタリング
--limitアイテム数
--cursorページネーションカーソル
Terminal window
npx emdash media upload ./photo.jpg
npx emdash media upload ./photo.jpg --alt "A sunset" --caption "Taken in Bristol"
オプション説明
--alt代替テキスト
--captionキャプションテキスト
Terminal window
npx emdash media get 01MEDIA123
Terminal window
npx emdash media delete 01MEDIA123

コンテンツ全体で全文検索を実行します。

Terminal window
npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
オプションエイリアス説明
--collection-cコレクションでフィルタリング
--limit-l最大結果数

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

Terminal window
npx emdash taxonomy list
Terminal window
npx emdash taxonomy terms categories
npx emdash taxonomy terms tags --limit 50
オプションエイリアス説明
--limit-l最大ターム数
--cursorページネーションカーソル
Terminal window
npx emdash taxonomy add-term categories --name "Tech" --slug tech
npx emdash taxonomy add-term categories --name "Frontend" --parent 01PARENT123
オプション説明
--nameタームラベル(必須)
--slugタームスラッグ(デフォルトはスラッグ化された名前)
--parent親タームID(階層型タクソノミー用)

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

Terminal window
npx emdash menu list
Terminal window
npx emdash menu get primary

メニューとそのすべてのアイテムを返します。

シードファイルをデータベースに適用します。このコマンドはローカルのSQLiteファイルに対して直接動作します(実行中のサーバーは不要です)。

Terminal window
npx emdash seed [path] [options]
引数説明デフォルト
pathシードファイルへのパス.emdash/seed.json
OptionAliasDescriptionDefault
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリカレントディレクトリ
--validate検証のみ、適用しないfalse
--no-contentサンプルコンテンツをスキップfalse
--on-conflict競合処理: skip, update, errorskip
--uploads-dirメディアアップロード用ディレクトリ.emdash/uploads
--media-base-urlメディアファイルのベースURL/_emdash/api/media/file
--base-urlサイトのベースURL (絶対メディアURL用)

コマンドは以下の順序でシードファイルを探します:

  1. 位置引数 (指定された場合)
  2. .emdash/seed.json (慣例)
  3. package.json の emdash.seed フィールドからのパス

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

Terminal window
npx emdash export-seed [options] > seed.json
OptionAliasDescriptionDefault
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリカレントディレクトリ
--with-contentコンテンツを含める (all またはカンマ区切りのコレクション)
--no-prettyJSONフォーマットを無効化false

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

  • 設定: サイトタイトル、タグライン、ソーシャルリンク
  • コレクション: フィールドを含むすべてのコレクション定義
  • タクソノミー: タクソノミー定義と用語
  • メニュー: アイテムを含むナビゲーションメニュー
  • ウィジェットエリア: ウィジェットエリアとウィジェット
  • コンテンツ (要求された場合): $media 参照と移植性のための $ref: 構文を含むエントリ

デプロイメント用の安全な認証シークレットを生成します。

Terminal window
npx emdash auth secret

EMDASH_AUTH_SECRET に適したランダムなシークレットを出力します。

emdash types によって生成されるTypeScriptインターフェース:

// Generated by EmDash CLI
// Do not edit manually - run `emdash types` to regenerate
import type { PortableTextBlock } from "emdash";
export interface Post {
id: string;
title: string;
content: PortableTextBlock[];
publishedAt: Date | null;
}

ツーリング用の生のスキーマエクスポート:

{
"version": "a1b2c3d4",
"collections": [
{
"slug": "posts",
"label": "Posts",
"fields": [...]
}
]
}
VariableDescription
EMDASH_DATABASE_URLデータベースURL (dev によって自動的に設定)
EMDASH_TOKENリモート操作用の認証トークン
EMDASH_URLtypes および dev --types 用のデフォルトリモートURL
EMDASH_AUTH_SECRETパスキー認証用のシークレット
EMDASH_PREVIEW_SECRETプレビュートークン生成用のシークレット
{
"scripts": {
"dev": "emdash dev",
"init": "emdash init",
"types": "emdash types",
"seed": "emdash seed",
"export-seed": "emdash export-seed",
"db:reset": "rm -f data.db && emdash init"
}
}
CodeDescription
0成功
1エラー (設定、ネットワーク、データベース)