CLIリファレンス

このページ

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

インストール

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

npm install emdash

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

認証

共有リモートクライアントを使用するコマンドは、この順序で認証を解決します:

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

これらのコマンドは --urlEMDASH_URL から、フォールバックは http://localhost:4321)と --token フラグを受け付けます。認証コマンドには独自の接続オプションがあります。ローカル開発サーバーを対象とする場合、トークンは不要です。

共通フラグ

共有リモートクライアントを使用するコマンドで利用可能なフラグ:

フラグエイリアス説明デフォルト
--url-uEmDashインスタンスURLEMDASH_URL または http://localhost:4321
--token-t認証トークンenv/保存済み認証情報から
--header "Name: Value"-Hカスタムリクエストヘッダー;繰り返し可EMDASH_HEADERS/保存済み認証情報から
--jsonJSON出力(パイプ用)TTYから自動検出

出力

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

コマンド

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認証トークンenv/保存済み認証情報から
--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 Device Flowを使用してEmDashインスタンスにログインします。

npx emdash login [options]

オプション

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

動作

  1. インスタンスの認証エンドポイントを検出
  2. localhostで認証が設定されていない場合、自動的に開発バイパスを使用
  3. それ以外はOAuth Device Flowを開始 — コードを表示しブラウザを開く
  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認証トークンenv/保存済み認証情報から
--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コンテンツスラッグ
--localeコンテンツのロケール
--translation-of翻訳としてリンクするコンテンツアイテムのID
--draft自動公開せずにドラフトとして保持

--data--file--stdin のいずれか1つでデータを提供します。新しいアイテムは --draft が設定されていない限り自動公開されます。

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": "更新済み"}'
オプション説明
--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 "ブログ記事"
オプション説明
--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 "本文コンテンツ"
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 "夕焼け" --caption "ブリストルで撮影"
オプション説明
--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
オプションエイリアス説明
--collection-c1つのコンテンツコレクションを修復
--allすべてのコンテンツコレクションを修復

--collection または --all のいずれか1つを渡します。リモート修復にはAdminユーザーと admin スコープの認証トークンが必要です。

全コンテンツの修復は同期的に実行され、大規模サイトでは遅くなったりコストがかかったりする可能性があります。1つのコレクションのみ修復する場合は --collection を推奨します。

構造化された completepartialstale 修復結果は 0 で終了し、構造化された failed 結果は 1 で終了します。自動化やcronジョブは --json を使用し、終了 0 を完全なカバレッジとして扱うのではなく、statusfailedSourceCountskippedSourceCount、およびコレクションごとのサマリーをパースすべきです。

コンテンツ全体のフルテキスト検索。

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 export-seed

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

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

オプション

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

出力フォーマット

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

  • 設定: サイトタイトル、タグライン、ソーシャルリンク
  • コレクション: フィールド付きの全コレクション定義
  • タクソノミー: タクソノミー定義と用語
  • メニュー: アイテム付きナビゲーションメニュー
  • ウィジェットエリア: ウィジェットエリアとウィジェット
  • コンテンツ(リクエスト時): $media 参照と $ref: 構文付きのエントリ

emdash secrets generate

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

npx emdash secrets generate

新しいキーをstdoutに出力します。シークレットストアにパイプするか、--write でローカルの .env ファイルに直接書き込みます。同じ .env ファイルはNodeと、ローカル開発ではWranglerおよびCloudflare Viteプラグインによって読み取られます:

npx emdash secrets generate --write .env

--write--force なしでは既存エントリの上書きを拒否します。既存の暗号化データがあるデプロイメントでキーを置き換えると、それらのシークレットが読めなくなるため、この保護は意図的なものです。

emdash secrets fingerprint <key>

キーの値を公開せずに8文字のフィンガープリント(kid)を出力します。CIで正しいキーがデプロイされたか確認するのに便利です:

npx emdash secrets fingerprint emdash_enc_v1_...

生成されるファイル

.emdash/types.ts

emdash types コマンドは各コレクションのTypeScriptインターフェースを生成します:

// EmDash CLIで生成
// 手動で編集しないでください - `emdash types` を実行して再生成

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_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-saltソースとして使用。既存インストールがアップグレード時に安定したコメンターIPハッシュを維持するため。新規インストールでは設定不要。

パッケージスクリプト

CLI コマンドを package.json スクリプトとして追加:

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

終了コード

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