microCMS

外部データ連携(iframeフィールド)が追加されました

柴田 和祈

この記事は公開後、1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

新しく外部データ連携機能が追加されました。

インラインフレーム(iframe)を用いて、外部データを管理画面内で選択できる機能になります。
これにより、例えば機密性の高いデータは自社データベースで管理しつつ、microCMSからも参照可能にすることが実現できます。
iframeで読み込むHTMLは自社サーバーにホスティングするため、その環境に対してネットワーク制限をかけることでさらに安全を担保することも可能です。

※外部データ連携機能はBusinessプラン以降にて提供しております。
-----
(追記その1)
2022/3/29より、全プランで外部データ連携をご利用いただけるようになりました!
外部データ連携(iframe)が全プランでご利用可能になります

(追記その2)
2022/5/19より、インラインフレームフィールドは「拡張フィールド」に名称変更しました。
【お知らせ】iframeフィールドの名称を拡張フィールドに変更します
-----

仕様

インラインフレームフィールドを用いて、iframeとmicroCMS管理画面の間でwindow.postMessage APIを用いて値のやり取りを行います。

microCMSからiframeへの通信仕様

①初期値の取得

まず、インラインフレームフィールドが設定されているコンテンツ作成/編集画面を開くと、microCMS管理画面からiframeに対して下記のようにpostMessageを行います。

{
  id: 'sfa3ff2c',  // iframe識別子
  action: "MICROCMS_GET_DEFAULT_DATA",
  message: value  // 設定済みの値
}

iframe側はmessageイベントに対してEventListenerを設定しておくことで、上記のメッセージを受け取ることができます。
idは送信時に使用するのでどこかに保持しておきましょう。
messageの値は初期値として利用します。(初回はundefinedです)

window.addEventListener('message', (e) => {
  if (
    e.isTrusted === true &&
    e.data.action === 'MICROCMS_GET_DEFAULT_DATA'
  ) {
   // idやmessageを保存する
    // e.data.id: 識別子
    // e.data.message: 設定済みの値
  }
});


iframeからmicroCMSへの通信仕様

②データの送信

逆に何らかのデータをiframe側からmicroCMSの管理画面に対してPOSTしたい場合は下記のようにpostMessageを行います。

window.parent.postMessage(
  {
    id: 'sfa3ff2c',  // iframe識別子
    action: 'MICROCMS_POST_DATA',
    message: {
      id: 'some-id',
      title: 'some-title',
      description: 'some-description',
      imageUrl: 'some-image-url',
      updatedAt: 'some-updated-at',
      data: {    // APIのレスポンスとなる部分
        id: '123'
      }
    }
  },
  'https://your-service-id.microcms.io'
);

idには画面ロード時にmicroCMS側から受け取ったidを指定してください。
actionには'MICROCMS_POST_DATA'と指定してください。
messageにはメタ情報として次の項目があります。

  • id(String)
  • title(String)
  • description(String)
  • imageUrl(String: URL形式)
  • updatedAt(Date)


これらは全て任意項目であり、microCMSの管理画面内で管理しやすいように設定する値です。
設定しておくと、コンテンツ一覧画面等で表示されます。

また、APIレスポンス用のフィールドとしてdataがあります。

  • data(型不定)


dataに指定した値が実際にコンテンツのGET APIからiFrameフィールド用の値として返されます。

セキュアな通信を行うために、postMessageの第二引数にはmicroCMS管理画面のURLを指定します。

②'レスポンス

postMessageにはレスポンスは存在しないのですが、データ変更が成功したかどうかを知るために擬似的なレスポンスを返します。
成功時には以下のようなpostMessageを受け取ることができます。

{
  id: 'sfa3ff2c',  // iframe識別子
  action: "MICROCMS_POST_DATA_SUCCESS",
  message: value  // 送信した値
}

失敗時には以下のようなpostMessageが返されます。

{
  id: 'sfa3ff2c',  // iframe識別子
  action: "MICROCMS_POST_DATA_FAILURE",
  error: 'エラーメッセージ'
}


③スタイルの変更

iframeの高さは初期ロード時に決定してしまうため、iframe内のUIが変化した際に見づらくなってしまう可能性があります。
そこで、iframeから下記のようなpostMessageを行うことで、iframe自体のheightwidthを変更することができます。

window.parent.postMessage(
  {
    id: this.id,
    action: 'MICROCMS_UPDATE_STYLE',
    message: {
      height: 300,
      width: '100%'
    }
  },
  'https://your-service-id.microcms.io'
);


APIからのレスポンス

④レスポンスの取得

次のようなAPIスキーマを例に挙げます。

iframeフィールドにdataとして下記の値をセットします。

{
  data: {
    id: '123'
  }
}

入力された値はコンテンツのGET APIから次のように取得することができます。

{
  "id": "mir1wo77g",
  "createdAt": "2020-07-21T14:12:14.606Z",
  "updatedAt": "2020-07-21T14:12:14.606Z",
  "publishedAt": "2020-07-21T14:12:14.606Z",
  "title": "タイトルのテスト",
  "iframe": {
    "id": "123"
  }
}


microCMS管理画面での設定方法

API設定 > APIスキーマの種類から「インラインフレーム」を選択します。

iframeで読み込む先のURLを入力します。
localhostも指定可能です。

フィールドの設定は以上で完了です。
コンテンツの編集画面に遷移すると、先ほど指定したURLがiframeによって表示されます。

おわりに

外部データと連携が可能になるiframeフィールドを紹介しました。
これにより企業の独自システムとmicroCMSを連携しやすくなりました。
機密データや、大容量のデータをmicroCMS側で参照したい場合などにお使いください。

-----

microCMSは日々改善を進めています。
ご意見・ご要望は管理画面右下のチャット、公式Twitterメールからお気軽にご連絡ください!
引き続きmicroCMSをよろしくお願いいたします!

まずは、無料で試してみましょう。

APIベースの日本製ヘッドレスCMS「microCMS」を使えば、 ものの数分でAPIの作成ができます。

microCMSを無料で始める

microCMSについてお問い合わせ

初期費用無料・14日間の無料トライアル付き。ご不明な点はお気軽にお問い合わせください。

お問い合わせ

microCMS公式アカウント

microCMSは各公式アカウントで最新情報をお届けしています。
フォローよろしくお願いします。

  • X
  • Discord
  • github

ABOUT ME

柴田 和祈
microCMSのデザイン、フロントエンド担当 / ex Yahoo / 2児の父 / 著書「React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで 」 / Jamstack