microCMS

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

更新情報
2020/08/25 柴田 和祈

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

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

※外部データ連携機能はBusinessプラン以降にて提供しております。

仕様

インラインフレームフィールドを用いて、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をよろしくお願いいたします!

ABOUT ME

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

microCMSとは

  1. 開発者、編集者どちらも分かりやすい管理画面

  2. 細かな権限管理や豊富な外部サービス・データ連携

  3. 安心の日本製・日本語でのチャットサポート