Studioから移る先としてEmDashをDockerとPostgreSQLで動かすにはどうしますか?

結論

EmDashはNode.js環境でDockerとPostgreSQLの両方に対応しています。ただ、公式ガイドの基本例はSQLiteの1サービス構成です。PostgreSQLで動かす場合は、pgパッケージの追加、接続設定、Composeへのデータベース定義を自分で足してから起動します。

EmDashへの移行更新日

EmDashはDockerとPostgreSQLに対応していますか?

はい、対応しています。EmDashはDockerでの実行に対応しており、EmDash公式リポジトリにはDockerfileとcompose.yamlが用意されています。公式のNode.js導入ガイドでも、コンテナイメージの作成やDocker Composeを利用した起動例が掲載されていました。

データベースについては、Node.js環境での配備においてPostgreSQLを正式にサポートしています。軽量なSQLiteやTurso(libSQL)も選べますが、複数のNode.jsプロセスでひとつのデータベースを共有して運用する場面では、PostgreSQLが実用的な選択肢。内部ではSQLの操作にKyselyを使っていますが、利用者がKyselyを直接触る必要はありません。

ただし、Dockerで動かせることと、同梱のComposeがPostgreSQL構成になっていることは別です。ガイドの基本例はSQLiteとローカル保存を使っています。PostgreSQLに切り替えるには、pgパッケージを追加し、emdash/dbのpostgresに接続情報を渡す設定が要ります。環境変数にDATABASE_URLを定義して渡す設計です。

また、画像などのメディアファイルの保存先は、データベースとは別に管理します。Node.js環境ではローカルのファイルシステムや、S3互換のオブジェクトストレージを選択できる構成です。Cloudflareで動かす場合はR2が保存先の候補です。

ちなみに、Cloudflare環境だけでなく、Node.js環境でもworkerdを別プロセスとして立ち上げ、プラグインを隔離した状態で実行する仕組みを備えています。

EmDashをDockerとPostgreSQLで立ち上げる手順は?

SQLiteならアプリのコンテナ1つで動きます。PostgreSQLではアプリとデータベースの2つを並べて起動し、起動の順番にも気を配らなければなりません。公式ガイドのCompose例はアプリ1つだけのSQLite構成なので、データベースのサービスは自分で追加しましょう。

おおまかな流れは次のとおりです。

  1. npm create emdash@latest でサイトを作る
  2. pgパッケージを依存関係に追加する
  3. 設定ファイルで emdash/db から postgres を読み込み、database: postgres({ connectionString: process.env.DATABASE_URL }) を指定する
  4. compose.yamlにPostgreSQLのサービスを追加し、アプリ側にDATABASE_URLを渡す
  5. docker compose up -d で起動する
  6. /_emdash/admin にログインし、試しに記事を作って公開ページに反映されるか確かめる

4の段階では起動の順番に注意してください。Docker起動順序の解説にあるように、PostgreSQLサービス側にpg_isreadyを用いたヘルスチェックを設定し、アプリ側のdepends_onでservice_healthyの条件を指定します。データベースの接続受付が整ってからアプリが起動するため、初期化時の接続失敗を防げます。

なお、Node.jsのプロセスが1つで永続ディスクを用意できるなら、SQLiteも公式の選択肢です。規模が小さいうちは、SQLiteで始めても困らない場面が多いでしょう。

EmDash(D1/SQLite)で日本語の全文検索をするにはどうしますか?

Studioで運用していた日本語記事をEmDashへ移すとき、標準の検索機能で日本語テキストが意図通りに探せるのか気になりますね。EmDash coreのREADMEにあるとおり、EmDashの標準検索機能はSQLiteの全文検索拡張であるFTS5を採用しており、コレクションごとに検索対象を設定できる仕組みです。FTS5は、Cloudflare D1が対応するSQLite拡張のひとつです。

ただし、EmDashはFTS5にPorter stemmingを組み合わせています。Porter stemmingは、runningをrunにそろえるような英語の語形変化を扱う処理です。日本語は単語の間に空白がないので、語の区切り方がそもそも英語と違います。日本語で検索できないと決まったわけではありませんが、どの程度の精度になるかは、日本語の記事を入れて試すまでわかりません。

精度が足りないときの候補に、静的サイト向けの検索ツールPagefindがあります。Pagefindの拡張版では、日本語や中国語などスペース区切りのない言語に対しても文字の分割処理がサポートされており、npxコマンド実行時にも既定で拡張版が呼び出されます。ただ、これらの言語の語幹処理には対応していません。また、EmDashとつなぐ公式の手順はないため、ビルド時に索引を作るなどの組み込み方は自分で決めることになります。

PostgreSQL構成でも同じ検索が使えるかは、公式資料からは判断がつきません。PostgreSQLで日本語検索を使う予定があるなら、テスト環境に記事を数本入れ、よく使う語で検索に引っかかるかを移行前に試してください。

EmDashでContact Form 7の代わりになるものは何ですか?

WordPressで使い慣れていたContact Form 7のような手軽な問い合わせフォームを、EmDashでもそのまま再現できるのだろうか、と迷う声は少なくありません。EmDashには公式の拡張機能として@emdash-cms/plugin-formsが用意されています。このプラグインを導入すると、管理画面上でのフォーム作成、ユーザーからの回答の蓄積、担当者へのメール通知といった基本的な仕組みをサイト内へ組み込めます。導入するには、設定ファイルのpluginsにformsPlugin()を登録します。

ただ、Contact Form 7と同じことがすべてできるかは検証されていません。メールのテンプレートや条件分岐を細かく作り込んでいた場合は、使っていた機能を書き出し、移す前にひとつずつ照らし合わせてください。DockerとPostgreSQLの構成でこのプラグインが問題なく動くかも、自分の環境で試して確かめてください。

通知メールの送り方もあわせて決めましょう。Cloudflareで動かすなら、Cloudflare Email ServiceでWorkersからメールを送れます。任意の宛先に送るにはWorkers Paidが必要です。

ところで、Studioでは2026年10月の件で、ダッシュボードに保存されていたフォーム回答が、流出した可能性のある情報に含まれました。回答の保存を無効にしていた期間の回答は対象外です。Googleフォームなどの外部フォームでブラウザから直接送られた回答も、Studioを通っていないため含まれません。移行先でも、回答をどこに保存するかは最初に決めておきたいですね。

EmDashのドキュメントやリリースノートはどこで読めますか?

EmDashの設定方法や最新のバージョン情報を確認したいとき、どこを一次情報として確認すればよいのでしょうか。EmDashの公式技術文書は、専用のドキュメントサイト(docs.emdashcms.com)に整理されています。GitHubの公式リポジトリにあるREADMEからもリンクが張られており、導入ガイド、各種APIのリファレンス、プラグインの開発手引きなどを一通り確認できます。READMEには設定のコード例、PostgreSQLを含む対応データベースの一覧、開発用デモの管理画面URLまで載っていました。ただ、Dockerでの構築を最初から最後まで追うなら、ドキュメントサイトのほうが読みやすいでしょう。

初めて導入を試す際は、ドキュメント内のGetting Startedガイドが基本の道筋。Starterテンプレートを使ってNode.jsのサイトを作る手順で、データベースはSQLite、メディアはローカル保存を使います。PostgreSQLで始める手順ではないので、PostgreSQLの設定はデプロイ関連のページと合わせて読みましょう。

変更点を追うなら、GitHubのReleasesを開きます。ここではEmDash本体の更新だけでなく、公式プラグインなど個別パッケージのバージョンアップ内容や修正点も一覧で確認できます。本体とプラグインの版数は別々に進むので、アップデートの前に、どちらの変更なのかを見分けてください。

開発の背景や設計思想を知る上では、Cloudflare公式ブログの記事も役立ちます。プラグインレジストリの発表記事では、EmDashのプラグインレジストリが紹介されています。

こんな聞き方も

  • emdash docker
  • emdash cms docker
  • emdash docker compose
  • EmDashをDockerとPostgreSQLで動かすにはどうしますか?
  • emdash postgresql docker
  • emdash docs
  • emdash documentation
  • emdash cms documentation
  • npm create emdash latest
  • emdash release notes
  • EmDash(D1/SQLite)で日本語の全文検索をするにはどうしますか?
  • EmDashでContact Form 7の代わりになるものは何ですか?
  • emdash contact form 7 代わり

あわせて知りたい(関連する疑問)

Qnpm create emdash@latest は何をするコマンドですか?

たとえば手元のPCで新しいWebサイトの骨組みを素早く用意したいとき、ターミナルで実行するのがnpm create emdash@latestというコマンドです。このコマンドは、ローカル環境にEmDashのプロジェクト一式を新規作成するための公式CLIツールを呼び出します。npm createはnpm initの別名で、@latest を付けると最新のcreate-emdashをレジストリから取ってきて実行します。

EmDashはWebフレームワークのAstroを基盤として採用しているCMSです。公式ブログ作成ガイドにあるように、テンプレートを指定して作成することで、ブログ記事の投稿機能や固定ページの表示機能をあらかじめ備えたAstroサイトのソースコードが手元に展開されます。--template node:blog を付けると、SQLiteとローカルのファイル保存を使うNode.js向けの構成。この指定だけではPostgreSQL構成にならないので、作成後にpgパッケージと接続設定を足してください。

pnpmを使う公式のブログ作成例では、作成後に次の順で進めます。

  1. cd my-blog で作成したフォルダに移る
  2. pnpm dev で開発サーバーを起動する
  3. 表示されたローカルURLと /_emdash/admin を開いて初期設定をする

依存関係の導入でつまずいたら、先に pnpm install を実行してから pnpm dev をやり直します。

このコマンドが作るのはサイトの雛形までです。Studioの記事を取り込むことも、DockerやPostgreSQLを設定することもしません。移行作業は、ここで作ったサイトを土台に進めます。

QPostgreSQLとD1のどちらを選ぶべきですか?

サイトの運用基盤を決める際、データベースをPostgreSQLにするかCloudflare D1にするか、どちらを選ぶのが適しているのでしょうか。どこで動かすかで決まります。Cloudflareで動かすならD1、自前のサーバーやDockerで複数のNode.jsプロセスから1つのデータベースを使うならPostgreSQLが基本です。

Cloudflare上で運用する場合でも、Hyperdriveのバインディングを経由して外部の既存PostgreSQLに接続する構成が可能です。そのため、Cloudflareを利用するからといってD1だけに限定されるわけではありません。接続方法はどちらの場合も同じで、postgresアダプターに接続文字列を渡します。

一方、D1の特徴を見ると、SQLiteベースでありながら同一データベース内のテーブル間で外部キー制約を定義でき、データの整合性を維持できます。ただしD1の制限仕様に定められているように、データベース1つあたりの容量上限は、Workers有料プランで10 GB、無料プランでは500 MBに設定されていました。移す記事の量に今後増える分を足して、上限に収まるかを見積もります。

さらに、個々のD1データベースはクエリを1件ずつ順番に処理する単一スレッドの仕組みで動くため、全体の処理能力は実行するクエリの処理時間に直接左右されます。テーブルの関係が複雑かよりも、実際のクエリ時間とアクセスの多さを見て決めるほうが現実的でしょう。

QDocker HubにEmDashの公式イメージはありますか?

たとえば jstgnkl/emdash:latest というイメージがあります。これはjstgnklが公開しているdocker-emdashリポジトリのイメージで、docker run -d -p 4321:4321 jstgnkl/emdash:latest という起動例とDocker Hubへのリンクが載っています。ただ、EmDashの開発元が配布しているイメージだと示す記載はありません。

開発元が案内している方法は、イメージを自分で作るものです。公式のNode.js配備ガイドでは、自分のサイト用のDockerfileを書き、docker build -t my-emdash-site . でイメージを作ります。ここで混同しやすいのが、EmDash公式のソースコードリポジトリのルート階層にあるDockerfileです。このファイルはモノレポ全体のビルドやブログテンプレートの組み込みを目的とした開発用の設定であり、利用者のサイト用Dockerfileとは互換性がありません。

もうひとつ、Docker Hubには、Docker社が公式に認定・保守するDocker Official Imagesという厳選されたリポジトリ群があり、対象のイメージには専用の識別バッジが付与されます。製品の開発元が出しているイメージとは意味が違うので、Docker Hubで探すときはバッジの有無と公開者の名前を見てください。本番で使うなら、ガイドに沿って自分でビルドしたイメージのほうが中身を把握しやすいでしょう。EmDashの更新にも合わせやすくなります。

QEmDashの管理画面のURLは何ですか?

コンテナの立ち上げや環境変数の設定が完了したあと、記事の投稿やサイト設定を行う管理画面へはどのURLからアクセスすればよいのでしょうか。管理画面のURLは、サイトのアドレスの後ろに /_emdash/admin を付けたものです。ローカル環境で標準の4321番ポートを使って起動している場合であれば、ブラウザでlocalhostの4321番ポートに /_emdash/admin を付けたアドレスを開くと、管理画面へ接続できます。

新しく作成したサイトでこの管理画面URLに初めてアクセスすると、初期設定ウィザードの画面が自動的に表示されます。Dockerで起動したあと、公開ページの表示を確かめるだけで終わらせず、続けて管理画面を開いてアカウントを作ってください。

Docker環境で運用する際にホスト側のポートマッピングを変更しているなら、アクセスするURLのポート番号もそれに合わせて変えます。たとえばComposeファイル側で「8080:4321」のように指定しているなら、接続先はlocalhostの8080番ポートに /_emdash/admin を付けたアドレスです。READMEに載っているURLは、Node.jsとSQLiteで動かすデモの例です。PostgreSQL構成でも管理画面のパスは同じ /_emdash/admin なので、ホスト名とポートだけ自分の環境に置き換えて開きます。

Qemdash playgroundとは何ですか?

手元のパソコンにNode.jsやDockerの環境を整える前に、まずは管理画面の操作感や記事作成の使い勝手だけを手軽に試してみたい、という場面がありますね。そうした用途に向けて用意されているのが、公式の体験環境であるEmDash Playgroundです。EmDash公式サイトからtry.emdashcms.comへアクセスすることで、ブラウザ上だけでEmDashの管理画面や編集インターフェースを直接操作できます。

自分のパソコンで動かしたくなったら、npm create emdash@latest でローカルにサイトを作りましょう。

似た名前の設定に、EmDashのplaygroundモードがあります。こちらは自分のサイトをデモとして動かすための設定です。通常の初期設定や認証の処理を通らないため、一時的なデモサイト専用で、本番のCMSには使いません。

出典

この内容をChatGPTで相談

無料診断