EmDash 0.38.0
破壊的変更(Breaking)と対応
- エントリーの編集ロックによる書き込みの拒否:管理画面で誰かがエントリーを開いている間、スクリプト、APIトークン、CLIからそのエントリーを更新・削除・公開・公開取り消し・予約公開・下書き破棄しようとすると、
409 ENTRY_LOCKEDが返るようになりました。これまでは成功していた書き込みです。マイグレーションの実行後、すべてのコレクションが対象になります。- 対応:ロックがあっても書き込む場合は、リクエスト本文に
"overrideLock": trueを付けます。本文のないDELETEでは?overrideLock=trueを付けます。CLIではcontent update、content delete、content publish、content unpublish、content scheduleに--override-lockを付けます。 - 対応:ロックを使わない場合は、管理画面の「コンテンツタイプ」→対象のコレクション→「Edit locking」、シードファイルの
editLocking: false、またはschema_update_collectionで無効にします。
- 対応:ロックがあっても書き込む場合は、リクエスト本文に
- データベースのマイグレーション
075_entry_edit_locks:既定のautoモードで実行時にマイグレーションを適用しているプロジェクトは対応不要です。デプロイの工程でマイグレーションを実行しているプロジェクトは、この版をデプロイする前にemdash migrateを実行します。 portableTextToProsemirror()の出力の変更:table、tableRow、tableHeader、tableCellのノードを返すようになりました。- 対応:この出力を使う独自のProseMirrorスキーマでは、既存のTipTapの表の拡張機能を登録します。
- プラグインのHTTPリクエストの検証:
allowedHostsを使うプラグインのリクエストで、最初のURLとリダイレクト先もSSRF(サーバーを踏み台にした内部への不正アクセス)の検証を受けるようになり、公開されていないアドレスへのリクエストは拒否されます。- 対応:既定の検証は公開ホスト名を
cloudflare-dns.comで名前解決します。セルフホストの環境では、このエンドポイントへの通信を許可します。
- 対応:既定の検証は公開ホスト名を
- プラグインストレージの範囲指定:範囲指定の境界がすべて
undefinedの条件は、これまですべての行に一致していましたが、フィールド名を示したStorageQueryErrorを投げるようになりました。- 対応:境界に値を入れるか、条件なしで一致させたいときはそのフィールドを条件から外します。
新機能
- コレクションに「グループ」設定が追加されました。同じグループのコレクションは、管理画面のサイドバーで1つのフォルダーにまとめて表示されます。グループは「コンテンツタイプ」の編集画面の「ナビゲーション」、シードファイル、スキーマAPI、MCPのコレクション用ツールで設定できます。
<EmDashHead>が、エントリーのSEOパネルの値(タイトル、説明、画像、正規URL、noindex)を自動で出力するようになりました。これまではgetSeoMeta()を自分で組み込まない限り、SEOパネルの値は反映されませんでした。対象は、<EmDashHead>を含み、getEmDashEntry()でエントリーを取得するサーバーで描画するページです。- エントリーごとの編集ロックが追加されました。2人が同じエントリーを同時に編集して、あとから衝突に気づく事態を防ぎます。2人目の編集者は、読み取り専用で開くか、ロックを引き継ぐかを選べます。ロックはエントリーとロケールごとにかかります。
- コレクションのURLパターンで、WordPressと同じ日付の指定(
{year}、{month}、{day}、{hour}、{minute}、{second})が使えるようになりました。/{year}/{month}/{day}/{slug}.htmlのようなURLを再現できます。 - 本文の表が改良され、行・列の操作、セルの結合と分割、列幅の保存、HTMLや表計算ソフトとのコピー・貼り付けに対応しました。
- プラグイン開発者向けに、ストレージの条件付き更新(
updateIf)と、競合を防ぐ書き込み(getVersioned、compareAndSet、compareAndDelete)が追加されました。使う前に、コアとサンドボックスのアダプターを一緒に更新し、データベースのマイグレーションを適用します。 - サンドボックスランナーが使えないときの
SANDBOX_NOT_AVAILABLEエラーと起動時の警告に、原因が表示されるようになりました。
主な修正
- Cloudflareのバインディングが見つからないときのエラーが、原因の分かる
BINDING_NOT_FOUNDに変わりました。 - 新しく作るCloudflareのプロジェクトでは、有料プランが必要なWorker Loaderのバインディングが最初は無効になり、Workersの無料プランでもデプロイできるようになりました。サンドボックス型プラグインは、作成時の質問か
--sandboxed-pluginsで有効にします。 - 項目の多いコレクションのエントリーが、Cloudflare D1で「too many columns in result set」エラーになり読み込めない問題が修正されました。
- 一覧ページ(
getEmDashCollectionで取得したエントリー)でもビジュアル編集ができるようになりました。 - ビジュアル編集で、何も変更していないのに新しい下書きが保存される問題が修正されました。
- リビジョンを使うコレクションで、翻訳しないフィールドの値がほかの言語のエントリーに反映されない問題が修正されました。
- エントリーを完全に削除したあとも、タームの割り当てがデータベースに残る問題が修正されました。
- CloudflareでAstroの開発サーバーが、初回のセットアップや最初の管理画面へのリクエストで止まる問題が修正されました。
- PostgreSQLで、プレビュー用のスナップショットとバックアップにSQLiteと同じ内容が含まれるようになりました。
- Marketplaceのプラグインの更新時に、新しく要求された権限、公開ルート、MCPツールを管理者が確認してから許可するようになりました。
原文:emdash の変更履歴
根拠にした公式ページ
- emdash の変更履歴(0.38.0):https://github.com/emdash-cms/emdash/blob/main/packages/core/CHANGELOG.md#0380
- 公開日:npm(emdash 0.38.0、2026-09-15T05:30:34Z=日本時間9月15日):https://www.npmjs.com/package/emdash/v/0.38.0