CLI リファレンス

このページ

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

インストール

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

npm install emdash

npx emdash でコマンドを実行するか、package.json にスクリプトを追加します。短縮形として em バイナリも使用できます。

認証

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

  1. --token フラグ — コマンドラインで明示的に指定するトークン
  2. EMDASH_TOKEN 環境変数
  3. 保存された認証情報emdash login で保存された ~/.config/emdash/auth.json
  4. Dev バイパス — URL が localhost でトークンが利用できない場合、dev バイパスエンドポイント経由で自動認証

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

共通フラグ

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

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

出力

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

コマンド

emdash init

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

npx emdash init [options]

オプション

オプションエイリアス説明デフォルト
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリカレントディレクトリ
--force-fスキーマとシードを再実行false

動作

  1. package.json から emdash 設定を読み取り
  2. 必要に応じてデータベースファイルを作成
  3. コアマイグレーションを実行(システムテーブルの作成)
  4. 設定されている場合はテンプレート schema.sql を実行
  5. 設定されている場合はテンプレート seed.sql を実行

emdash dev

自動データベースセットアップ付きで開発サーバーを起動します。

npx emdash dev [options]

オプション

オプションエイリアス説明デフォルト
--database-dデータベースファイルパス./data.db
--types-t起動前にリモートから型を生成false
--port-p開発サーバーポート4321
--cwd作業ディレクトリカレントディレクトリ

# 開発サーバーを起動
npx emdash dev

# カスタムポート
npx emdash dev --port 3000

# 起動前にリモートから型を生成
npx emdash dev --types

動作

  1. 保留中のデータベースマイグレーションを確認して実行
  2. --types が設定されている場合、リモートインスタンスから TypeScript 型を生成(URL は EMDASH_URL 環境変数または package.jsonemdash.url から)
  3. EMDASH_DATABASE_URL を設定して Astro 開発サーバーを起動

emdash types

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

npx emdash types [options]

オプション

オプションエイリアス説明デフォルト
--url-uEmDash インスタンス URLhttp://localhost:4321
--token-t認証トークン環境変数/保存された認証情報
--output-o型の出力パス.emdash/types.ts
--cwd作業ディレクトリカレントディレクトリ

# ローカル開発サーバーから型を生成
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 を併せて書き込み

emdash login

OAuth デバイスフローを使用して EmDash インスタンスにログインします。

npx emdash login [options]

オプション

オプションエイリアス説明デフォルト
--url-uEmDash インスタンス URLhttp://localhost:4321

動作

  1. インスタンスから認証エンドポイントを検出
  2. localhost で認証が未設定の場合、自動的に dev バイパスを使用
  3. それ以外の場合、OAuth デバイスフローを開始 — コードを表示してブラウザを開く
  4. 認証をポーリングし、~/.config/emdash/auth.json に認証情報を保存

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

emdash logout

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

npx emdash logout [options]

オプション

オプションエイリアス説明デフォルト
--url-uEmDash インスタンス URLhttp://localhost:4321

emdash whoami

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

npx emdash whoami [options]

オプション

オプションエイリアス説明デフォルト
--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
オプション説明
--statusステータスでフィルタリング
--limit最大アイテム数
--cursorページネーションカーソル

content get <collection> <id>

npx emdash content get posts 01ABC123
npx emdash content get posts 01ABC123 --raw
オプション説明
--raw生の Portable Text を返す(Markdown 変換をスキップ)

レスポンスには _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
オプション説明
--dataコンテンツデータの JSON 文字列
--fileJSON ファイルからデータを読み取り
--stdinstdin からデータを読み取り
--slugコンテンツスラッグ
--status初期ステータス(draft、published)

--data--file--stdin のいずれか 1 つでデータを提供します。

content update <collection> <id>

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

# 1. アイテムを読み取り、_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 を返します — 再読み込みしてリトライしてください。

content delete <collection> <id>

npx emdash content delete posts 01ABC123

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

content publish <collection> <id>

npx emdash content publish posts 01ABC123

content unpublish <collection> <id>

npx emdash content unpublish posts 01ABC123

content schedule <collection> <id>

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

content restore <collection> <id>

npx emdash content restore posts 01ABC123

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

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"
オプション説明
--labelコレクションラベル(必須)
--label-singular単数形ラベル
--descriptionコレクションの説明

schema delete <collection>

npx emdash schema delete articles
npx emdash schema delete articles --force
オプション説明
--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
オプション説明
--typeフィールドタイプ: string, text, number, integer, boolean, datetime, image, reference, portableText, json(必須)
--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
オプション説明
--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"
オプション説明
--alt代替テキスト
--captionキャプションテキスト

media get <id>

npx emdash media get 01MEDIA123

media delete <id>

npx emdash media delete 01MEDIA123

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

npx emdash search "hello world"
npx emdash search "hello" --collection posts --limit 5
オプションエイリアス説明
--collection-cコレクションでフィルタリング
--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
オプションエイリアス説明
--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
オプション説明
--nameタームラベル(必須)
--slugタームスラッグ(デフォルトはスラッグ化された名前)
--parent親ターム ID(階層タクソノミー用)

emdash menu

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

npx emdash menu list
npx emdash menu get primary

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

emdash seed

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

npx emdash seed [path] [options]

引数

引数説明デフォルト
pathシードファイルのパス.emdash/seed.json

オプション

オプションエイリアス説明デフォルト
--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.jsonemdash.seed フィールドのパス

emdash export-seed

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

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

オプション

オプションエイリアス説明デフォルト
--database-dデータベースファイルパス./data.db
--cwd作業ディレクトリカレントディレクトリ
--with-contentコンテンツを含める(すべてまたはカンマ区切りのコレクション)
--no-prettyJSON フォーマットを無効化false

出力フォーマット

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

  • Settings: サイトタイトル、タグライン、ソーシャルリンク
  • Collections: フィールド付きのすべてのコレクション定義
  • Taxonomies: タクソノミー定義とターム
  • Menus: アイテム付きのナビゲーションメニュー
  • Widget Areas: ウィジェットエリアとウィジェット
  • Content(リクエスト時): ポータビリティのため $media 参照と $ref: 構文付きのエントリ

emdash auth secret

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

npx emdash auth secret

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

生成されるファイル

.emdash/types.ts

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;
}

.emdash/schema.json

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

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

環境変数

変数説明
EMDASH_DATABASE_URLデータベース URL(dev で自動設定)
EMDASH_TOKENリモート操作用の認証トークン
EMDASH_URLtypesdev --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"
	}
}

終了コード

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