EmDashでブログをゼロから立ち上げた記録(つまずき4つと解決方法)
公開日更新日約4分で読めます

EmDash 1.3.1でブログを作り、Cloudflareに公開するまでの記録。R2の有効化、データベースの準備が途中で止まる問題など、実際につまずいた点と直し方をまとめました。
このブログ自体を、EmDashで今日ゼロから作りました。最初の記事として、立ち上げの流れと、実際につまずいた点を残しておきます。
使ったもの
- EmDash 1.3.1(Astro 7.4.2)
- Node.js 24.14.1
- 公開先:Cloudflare Workers(データベースはD1、画像はR2)
1. ひな形を作る
ひな形には、ブログ専用の「blog」テンプレートを使いました。Starterより、記事一覧・タグ・RSSなどブログ向けの部品が最初からそろっています。
npm create emdash@latest emdash-blog -- --template cloudflare:blogコードはGoogleドライブなどの同期フォルダの外に置きました。部品のファイルが大量にあり、同期のせいで手元のデータベースが壊れることがあるためです。
2. 手元で動かす
npm run dev で起動し、http://localhost:4321/_emdash/admin/ で初回設定をします。サイト名、メールアドレス、パスキー(指紋や顔認証でのログイン)を登録すれば、管理画面が使えるようになります。
管理画面で記事を書いて「Publish now」を押すと、すぐにサイトに出ます。ここまではとても簡単でした。
3. 見た目を日本語向けに整える
テンプレートは英語圏向けなので、次の点を直しました。
- フォントを日本語向け(IBM Plex Sans JP)に変更し、行間を広めに
- 日付が世界標準時のまま出て、日本時間と1日ずれていた → 日本時間・「2026.10.24」形式に
- 「min read」「All posts」などの英語を日本語に
- 色は
src/styles/theme.cssで上書き(テンプレートの決まりで、ここに書けば元の設定に勝つ)
4. 公開でつまずいた4つのこと
つまずき1:日本語フォントの取得が途中で止まる
公開用に組み立てる(npm run build)とき、日本語フォントは383ファイルに分かれていて、取得が途中でエラーになりました。取得済みのファイルは保存されるので、同じコマンドを何度かやり直すと最後まで通りました。
つまずき2:R2が有効になっていない
最初の公開で「R2 bucket not found」、作ろうとすると「Please enable R2 through the Cloudflare Dashboard」と出ました。R2(画像の保存場所)は、Cloudflareの管理画面で一度申し込みが必要です。無料の範囲は保存10GBまでですが、支払い方法の登録を求められました。
つまずき3:やり直したらセッションの保管場所が重複した
1回目の公開で作られたKV(ログイン情報の保管場所)があるのに、2回目でもう一度作ろうとして「already exists」になりました。wrangler.jsonc に既存のKVのIDを書いて解決しました。注意点として、設定は組み立て時に固まるので、書き換えたら npm run build からやり直す必要があります。
つまずき4:「Database migrations are required」
公開できたと思って管理画面を開くと、このエラーが出ました。データベースの準備(全91工程)が自動で始まったものの49工程目で止まり、「作業中」の印が残っていたのが原因です。
emdash migrate --status で状況を確認し、表示された値を使って残りを適用すると直りました。公式の手順にも「大きな更新は自動では適用されない」とあるので、公開後はこの確認を毎回するのが安全です。
5. 公開直後にすぐやること
EmDashは、初回設定を最初に済ませた人が管理者になります。公開したらすぐに、本番のURLで初回設定を終わらせてください。手元で登録したパスキーは本番では使えないので、登録し直しになります。
初回設定の「How do you want to start?」で「Empty site」を選ぶと、英語のサンプル記事なしで始められます。
6. ターミナルから記事を投稿するときの「承認画面」
この記事は、管理画面ではなくターミナル(AIの作業画面)から投稿しました。EmDashのコマンドで emdash login を実行すると、ブラウザで開くURLと、8文字のコードが表示されます。
ログイン済みのブラウザでそのURLを開くと、次のような承認画面が出ます。

表示されたコードが、ターミナルに出たコードと同じであることを確かめてから「承認」を押します。権限は「管理者フルアクセス」なので、自分が今まさに操作しているとき以外は承認しないのが安全です。

「デバイスを承認しました」と出れば完了です。パスワードやパスキーをターミナルに渡さずに済むのが、この仕組みのよいところです。作業が終わったら emdash logout で接続を切っておきます。
まとめ
手元で動かすところまでは、コマンド1つですぐでした。時間がかかったのは公開のところで、つまずきの多くはCloudflare側の準備(R2の申し込み、データベースの準備)でした。同じところで止まった人の参考になればうれしいです。
次は、記事一覧やタグのページの日本語化と、記事を書く流れを整えていきます。




コメント
まだコメントはありません。最初のひとことをどうぞ。