EmDash CLIは、EmDash CMSインスタンスを管理するためのコマンドを提供します — データベースセットアップ、型生成、コンテンツCRUD、スキーマ管理、メディアなど。
インストール
CLIは emdash パッケージに含まれています。以下のコマンドでインストールします:
npm install emdash
npx emdash でコマンドを実行するか、package.json にスクリプトを追加します。バイナリは簡潔さのために em としても利用可能です。
認証
共有リモートクライアントを使用するコマンドは、この順序で認証を解決します:
--tokenフラグ — コマンドライン上の明示的なトークンEMDASH_TOKEN環境変数- 保存された認証情報
~/.config/emdash/auth.jsonから(emdash loginで保存) - 開発バイパス — URLがlocalhostでトークンが利用できない場合、開発バイパスエンドポイント経由で自動認証
これらのコマンドは --url(EMDASH_URL から、フォールバックは http://localhost:4321)と --token フラグを受け付けます。認証コマンドには独自の接続オプションがあります。ローカル開発サーバーを対象とする場合、トークンは不要です。
共通フラグ
共有リモートクライアントを使用するコマンドで利用可能なフラグ:
| フラグ | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--url | -u | EmDashインスタンスURL | EMDASH_URL または http://localhost:4321 |
--token | -t | 認証トークン | env/保存済み認証情報から |
--header "Name: Value" | -H | カスタムリクエストヘッダー;繰り返し可 | EMDASH_HEADERS/保存済み認証情報から |
--json | JSON出力(パイプ用) | 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
動作
- 保留中のデータベースマイグレーションをチェックし実行
--typesが設定されている場合、リモートインスタンスからTypeScript型を生成(URLはEMDASH_URL環境変数またはpackage.jsonのemdash.urlから)EMDASH_DATABASE_URLを設定してAstro開発サーバーを起動
emdash types
実行中のEmDashインスタンスのスキーマからTypeScript型を生成します。
npx emdash types [options]
オプション
| オプション | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--url | -u | EmDashインスタンスURL | http://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
動作
- インスタンスからスキーマを取得
- TypeScript型定義を生成
- 出力ファイルに型を書き込み
- 参照用に
schema.jsonを隣に書き込み
emdash login
OAuth Device Flowを使用してEmDashインスタンスにログインします。
npx emdash login [options]
オプション
| オプション | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--url | -u | EmDashインスタンスURL | http://localhost:4321 |
動作
- インスタンスの認証エンドポイントを検出
- localhostで認証が設定されていない場合、自動的に開発バイパスを使用
- それ以外はOAuth Device Flowを開始 — コードを表示しブラウザを開く
- 認可をポーリングし、
~/.config/emdash/auth.jsonに認証情報を保存
保存された認証情報は、同じインスタンスを対象とするすべての後続コマンドで自動的に使用されます。
emdash logout
ログアウトし保存された認証情報を削除します。
npx emdash logout [options]
オプション
| オプション | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--url | -u | EmDashインスタンスURL | http://localhost:4321 |
emdash whoami
現在の認証済みユーザーを表示します。
npx emdash whoami [options]
オプション
| オプション | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--url | -u | EmDashインスタンスURL | http://localhost:4321 |
--token | -t | 認証トークン | env/保存済み認証情報から |
--json | JSON出力 |
メール、名前、ロール、認証方法、インスタンス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文字列 |
--file | JSONファイルからデータを読み込み |
--stdin | stdinからデータを読み込み |
--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": "更新済み"}'
| オプション | 説明 |
|---|---|
--rev | get からのリビジョントークン(必須) |
--data | コンテンツデータのJSON文字列 |
--file | JSONファイルからデータを読み込み |
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
| オプション | 説明 |
|---|---|
--at | ISO 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
| オプション | 説明 |
|---|---|
--mime | MIMEタイプでフィルタ |
--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 | -c | 1つのコンテンツコレクションを修復 |
--all | すべてのコンテンツコレクションを修復 |
--collection または --all のいずれか1つを渡します。リモート修復にはAdminユーザーと admin スコープの認証トークンが必要です。
全コンテンツの修復は同期的に実行され、大規模サイトでは遅くなったりコストがかかったりする可能性があります。1つのコレクションのみ修復する場合は --collection を推奨します。
構造化された complete、partial、stale 修復結果は 0 で終了し、構造化された failed 結果は 1 で終了します。自動化やcronジョブは --json を使用し、終了 0 を完全なカバレッジとして扱うのではなく、status、failedSourceCount、skippedSourceCount、およびコレクションごとのサマリーをパースすべきです。
emdash search
コンテンツ全体のフルテキスト検索。
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
ナビゲーションメニューを管理します。
menu list
npx emdash menu list
menu get <name>
npx emdash menu get primary
すべてのアイテムを含むメニューを返します。
emdash export-seed
データベーススキーマとコンテンツをシードファイルとしてエクスポートします。ローカルSQLiteファイルで直接動作します。
npx emdash export-seed [options] > seed.json
オプション
| オプション | エイリアス | 説明 | デフォルト |
|---|---|---|---|
--database | -d | データベースファイルパス | ./data.db |
--cwd | 作業ディレクトリ | 現在のディレクトリ | |
--with-content | コンテンツを含める(すべてまたはカンマ区切りのコレクション) | ||
--no-pretty | JSONフォーマットを無効化 | 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 | エラー(設定、ネットワーク、データベース) |