Studioから移ったmicroCMSで、プレビュー・画像最適化・更新が反映されない時の設定はどうしますか?

結論

Studioは編集画面と公開サイトがひとつにまとまっていました。microCMSは記事を管理する画面と表示するサイトが別々なので、設定もそれぞれ必要です。プレビューは遷移先URLと下書きを取りに行く処理、画像はURLに付けるパラメータ、更新の反映はWebhookとビルドやキャッシュの設定で整えます。

microCMSへの移行更新日

microCMSで公開前の記事をプレビューするにはどう設定しますか?

公開前の記事を確認するには、まず対象APIの「API設定」から「画面プレビュー」を開きます。「遷移先URL」に表示用ページのURLを入れ、「変更する」を押してください。これでコンテンツ詳細画面に画面プレビューのボタンが出て、そこから登録したURLへ移れるようになります(画面プレビューの設定手順)。

ただ、URLを登録しただけでは下書きは表示されません。表示側のページで、URLに付いたコンテンツIDとdraftKeyを受け取り、その値でmicroCMSから下書きのデータを取ってきて描画する処理を書いておきます。遷移先URLには{CONTENT_ID}と{DRAFT_KEY}を埋め込みますが、どちらもURLの中で使えるのは1個ずつです。2個目以降は実際の値に置き換わりません。

Astroの静的サイトの場合、プレビュー用のページをサーバーで動かすことが前提になるわけではありません。ブラウザー側のJavaScriptで下書きを取りに行く形でも組めます。この方法では閲覧者にAPIキーが知られ得るので、キーの権限はGETのみにするなど絞っておきます(Astroでのプレビュー実装)。サーバー側で生成したいときは、実行環境に合うアダプターを入れ、そのページの先頭にexport const prerender = falseを書きます。ほかのページは静的生成のまま残ります。

microCMSの画像APIで画像を最適化するにはどうしますか?

Studioでは画像の配信をほぼ任せきりでしたが、microCMSでは画像URLの後ろにパラメータを付けて、加工した画像を受け取ります。画像処理にはimgixのRendering APIが使われていて、サイズの変更、切り抜き、圧縮ができます。よく使う指定は次のとおりです。

やりたいこと付ける例気をつける点
幅をそろえる?w=600縦横比は元のまま
幅と高さの枠を決める?w=600&h=400既定のfit=clipは縦横比を保つので、600×400pxになるとは限らない
決めたサイズで切り抜く?fit=crop&w=600&h=400fit=cropはwとhの両方が必須
画質を落として軽くする?q=400〜100で指定、変換時の既定は75。対応形式に制限あり

一方で、できないこともあります。次世代フォーマットへ自動変換する「?auto=format」には対応していません。また、SVG形式の画像や、Amazon S3連携を有効にした環境では画像API自体が使えません(画像APIの対応範囲)。パラメータを何も付けなければ元の画像がそのまま配信されるので、移行後にページが重いと感じたら、まず画像URLにwやqが付いているかを見るのが早いですね。

リッチエディタの画面内で個別に直接設定できるパラメータもwとhだけに絞られているため、細かい圧縮や切り抜きをサイト全体で行うなら、フロントエンド側でHTMLを解析してURLを書き換える実装を挟みます。

microCMSで記事を更新してもサイトに反映されないのはなぜですか?

管理画面で記事を更新して保存したのに、本番サイトの表示が古いまま変わらないのは何が原因でしょうか。Studioの場合でもデザイン編集後は公開パネルからサイト更新を手動で行う仕組みでしたが、microCMSでは「CMS側のデータ保存」と「公開サイトのHTML生成」が完全に切り離されている点が大きな違いです。

静的サイトとして生成している環境では、記事を書き換えただけでは本番のHTMLは作り直されません。記事の変更を検知してWebサイト側を自動で再構築するには、Webhookの連携が必要です。microCMSの各API設定にある「Webhook」を開くと、Cloudflare PagesやVercel、Netlify、GitHub Actionsなどの通知先が選べます。Cloudflare PagesならDeploy Hooksと組み合わせることで、記事を変えるたびに新しいビルドが自動で配信されます。

もう一つの見落としがちな要因が、配信フレームワーク側のキャッシュ保持です。例えばNext.js 15を採用しているサイトでは、Data Cacheと呼ばれる取得データの保存機能が働き、単にサイトを再デプロイしただけではキャッシュが引き継がれて内容が更新されないケースがあります。取得データまで新しくしたいなら再検証を入れるか、キャッシュを使わない設定にしてください(Next.js 15のキャッシュ)。

microCMSで予約公開した記事がサイトに反映されないのはなぜですか?

手動での即時公開なら反映されるのに、日時を指定した予約公開だけサイトに表示されないという状況はよく起こります。まず、Webhookの通知タイミングを開いてください。予約による新規公開や更新は「コンテンツの公開(予約設定による操作)」という別の項目に分かれています。「コンテンツの公開(予約設定による操作)」にチェックが入っていないと、指定時刻を迎えて管理画面側が公開状態に切り替わっても、再ビルドを促す通知が配信基盤へ一切送られません。

Cloudflare Pagesなら、デプロイログのSource欄でDeploy Hookから動いたビルドを見分けられます。数分後に公開される試しの記事を予約し、その時刻にDeploy Hook由来のビルドが記録されるか見てみると、原因の切り分けが進みますね。

通知そのものが届いていないこともあります。Webhookを無効にしていれば通知は出ません。また、通知が送信されたとしても、ネットワークの不具合や相手先サーバーの4xx・5xxエラーで失敗した場合、microCMS側からの自動再送は行われない仕様です。さらに、ビルド自体は完了していても、サイトのページ数や静的ファイルの配信ラグによって数分程度の待ち時間が生じることもあります。

Next.jsのApp Routerでは、再ビルドしてもAPI応答のキャッシュが残り、データが古いままのことがあります。この場合はビルド前にフェッチキャッシュを消すと直ることがあり、コンテナ環境のビルドなら基本的にキャッシュファイルは消えているので特別な対応は要りません(App Routerのキャッシュ)。心当たりがなければ数分待ち、それでも出ないときは対象記事のURLをサイト管理者に伝えて見てもらいましょう。

microcms-js-sdkはどう使いますか?

「API連携と聞くと難しそう」「生のfetch関数でURLやヘッダーを細かく書くのは面倒」と感じる人もいるのではないでしょうか。実際に書くのは、最初の接続部分と取得の呼び出しが中心です。導入時は「npm install microcms-js-sdk」を実行し、コード内でcreateClient関数を呼び出してクライアントを初期化します。設定に必要なのはserviceDomainとapiKeyの2つです。serviceDomainには「xxxx.microcms.io」の全体ではなく、サブドメインにあたる「xxxx」の部分だけを指定します。Astroなどで開発する場合は、プロジェクト直下の.envファイルにこれらの値を記述し、環境変数経由で読み込ませるのが標準的な手順です。

取得には、APIの形に合わせてメソッドを使い分けます。

  • getList:リスト形式APIの一覧を取る
  • getListDetail:IDを指定して1件を取る
  • getObject:オブジェクト形式APIを取る

以前使われていた汎用の「get」メソッドは非推奨となっているため選ばないようにしましょう。下書き記事を取り出したいときは、getListDetailの引数にendpointとcontentIdを渡し、queriesの中にdraftKeyを文字列で添えれば取得できます。ここまでは下書きのデータを取る部分なので、プレビュー画面に表示する処理は別に組みます。

ただ、.envに置けばブラウザーから見えなくなる、というわけではありません。

こんな聞き方も

  • microCMSで公開前の記事をプレビューするにはどう設定しますか?
  • microCMSの画像APIで画像を最適化するにはどうしますか?
  • microCMSで記事を更新してもサイトに反映されないのはなぜですか?
  • microCMSの更新が反映されない原因がキャッシュの場合、どう解消しますか?
  • microCMSで予約公開した記事がサイトに反映されないのはなぜですか?
  • microCMSでメンバーごとの権限はどう管理しますか?
  • microCMSへデータを移行する一般的な手順は?
  • microcms-js-sdkはどう使いますか?
  • microcms プレビュー 設定
  • microcms 反映されない

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

QmicroCMSでメンバーごとの権限はどう管理しますか?

全員にすべての権限を渡す運用とは対照的に、組織が大きくなると「ライターには記事の執筆だけを任せ、公開ボタンは押させたくない」「特定の担当者には特定のお知らせAPIだけを触らせたい」といった細かい切り分けが求められます。microCMSでは、メンバーごとに「ロール」を割り当てることで、管理画面で行える操作の範囲を細かくコントロールできます。

ただし注意したいのがプランの違いです。ロール機能の仕様によると、独自の権限を設計できるロール機能はBusinessプランとEnterpriseプランで提供されています。メンバーを管理画面に迎え入れる際は、画面左側にある「◯人のメンバー」から「追加」を選び、招待したい相手のメールアドレスと割り当てるロールを指定して「招待する」を押せば案内が届きます。

権限の設計では、APIごとに閲覧・編集・公開といった個別権限を設定できますが、1人のメンバーに複数のロールを付与した場合は、より権限の広い設定が優先される仕組みです。権限を狭めるためのロールを重ねて追加しても、別のロールで許可されていれば制限はかかりません。また、編集などの操作権限が与えられていても、その対象となるAPIの閲覧権限がなければ操作自体ができない点も特徴的です。担当サイトごとの閲覧ロールと、入稿者やレビュアーの操作ロールを分けて作る場合は、両方を付けてください。

一方、管理画面に入る人の権限とは別に、プログラムからの通信に使うAPIキーの権限管理も分かれています。APIキーの作成・編集・削除は管理者しかできません。編集者のロールをいくら広げても、キーの権限は変えられないということですね。

QmicroCMSへデータを移行する一般的な手順は?

既存サイトに溜まった記事データをmicroCMSへ移すには、具体的にどのような手順を踏めばよいのでしょうか。どこから手を付けるかというと、移行先のAPIとフィールドを先に作り、そこへ元のデータを合わせて入れる順番です。入れ方は、CSVを管理画面から取り込む方法と、スクリプトからWRITE APIで登録する方法の2通り。CSVは取り込みの操作にコードが要りません。APIで入れるならスクリプトを用意します。CSVを作る段階でコードが要るかは、移行元からどうデータを取り出すかで変わりますね。

CSVで入れる流れは次のとおりです。

  1. 移行先のAPIとフィールドを作る
  2. そのAPIのサンプルCSVをダウンロードし、記事データを書き込む
  3. 文字コードをUTF-8(BOMなし)にして保存する
  4. 管理画面でファイルと公開状態を選び、取り込みを始める

CSVで入れられるのはリスト形式のAPIです。選んだ公開状態はCSV内の全コンテンツにまとめて付きます。プランによって1回のCSVインポートで登録できるコンテンツの上限件数は決まっており、次のように分かれています。

プラン名1回のCSVインポート上限
Hobby1,000件
Team2,000件
Business5,000件

この数字はサービス全体の保存上限ではなく、1度のインポート処理で扱える件数です。件数が多い場合は分割して取り込むか、WRITE APIを使ったプログラム移行を検討します。

画像フィールドには、移行元のURLではなく、microCMSで配信している画像のURLを入れます。メディアにカスタムドメインを設定していれば、そのURLも使えますよ。

また、CSVインポートで追加したコンテンツではWebhookが通知されません。Webhookを合図にビルドしている構成では、取り込んだ後にサイト側へ反映されたかを別に確かめましょう。

QStudioから取り出した記事はそのままmicroCMSへ入りますか?

「Studioの管理画面からワンクリックで記事を書き出し、microCMSへそのまま流し込めないだろうか」と考える人は少なくありません。しかし結論から言うと、Studioから取り出した記事データをそのまま直接microCMSへ入れることはできません。そもそもStudioには、CMS記事やデザインデータ、ソースコードを一括で出力するエクスポート機能が存在しないからです。

Studioのエクスポート仕様でも明記されている通り、フォーム回答のCSV出力こそ提供されているものの、ブログ記事などのコンテンツを他のツールへ引き継ぐためのデータ出力機能はありません。

さらに、集めた記事データもそのままではmicroCMSに収まりません。microCMS側にも特定のCMSに特化した自動移行機能は用意されていないため、まずは受け皿となるAPIのスキーマを自社で設計します。サンプルCSVの列は作ったフィールドの種類で変わるため、タイトル・本文・スラッグが決まった列として最初から並んでいるわけではありません。CSVで取り込む場合でも、本文データはmicroCMSのリッチエディタが解釈できる範囲のHTMLタグへと整形して流し込まなければなりませんね。

記事が数本なら、管理画面のリッチエディタに貼り付けるやり方もあります。ただ、WordやHTMLを貼り付けた場合、見た目はある程度残っても、内容がすべて正しく保存される保証はありません。貼り付けた後は、見出し・表・画像の位置が崩れていないか、1本ずつ公開前に見て回ることになります。

Qプレビューを社外の人に見せても大丈夫ですか?

公開前の原稿を社外のライターや監修者、クライアントへ確認してもらう際、プレビュー用のURLをそのまま渡してしまっても情報管理の上で問題はないでしょうか。見せることはできますが、プレビューの作り方によっては下書きが外へ漏れます。microCMSの画面プレビューは、コンテンツIDとdraftKeyを含むURLで下書きを表示する仕組みです。そのためdraftKeyが漏れれば、関係のない第三者でも下書きを読めてしまいます。社外の人に見せる前提なら、プレビューページに認証をかけるなどの対策を入れておきます(プレビューの実装パターン)。送る相手を絞るのも一つの手ですが、リンクが転送されれば止められません。

AstroとVercelのDraft Modeで組んだ場合は、共有するURLにも気をつけます。送るのはリダイレクトされる前のプレビューURLです。遷移した後のURLだけを渡しても、受け取った人のブラウザーには必要なCookieがないため、下書きは表示されません。

Studioのライブプレビュー機能ではリンクの削除によって古いURLを無効化できましたが、microCMSのdraftKey方式ではフロントエンド側の設計に依存します。ただしこれはStudio側の仕組みで、microCMSのプレビューURLを無効にする方法とは別物です。

出典

この内容をChatGPTで相談

無料診断