カスタムフィールド定義のデプロイ問題を解決する Advanced Custom Fields の Local/Synchronized JSON

「ACF ってすっごく便利なのだけど、フィールドの定義情報をデプロイするのが面倒くさい問題」が解決できる機能、local json, synchronized json のご紹介です。

カスタムフィールド製造業界のみな様、こんにちは!

「ACF ってすっごく便利なのだけど、フィールドの定義情報をデプロイするのが面倒くさい問題」が解決できる機能が、ちょっと前から追加されていたようです。

Advanced Custom Fields の、フィールドの定義情報を json 形式で保存でき、また、それをテーマに含めることができるというドキュメントにばったりと出会ってしまいました。みなさん知ってて僕だけが知らなかったのだとしたら、すみません。

簡単に言いますと、

  • ACF のフィールドグループを管理画面を使って定義すると、
  • テーマ内に json が生成されて、
  • git で管理できるし、
  • デプロイも簡単で、
  • json からデータベースへの逆同期(?)も可能

というものです。

みつけたきっかけは、マルチサイトで運用する多言語サイトで、全サイト同じフィールドを持たせたいのだけど、フィールドの定義を全部のサイトで変えるのは面倒くさすぎるのを何とかしたいと、「そういえば php を生成してそれを functions.php に含めれる」みたいな方法があったな、と思って検索していたのがきっかけでした。

この機能が使えるのは、ACF の Version 5 以降です。ドキュメントは以下です。

ACF | Local JSON

仕組み・使い方

スクリーンショット 2015-05-04 21.47.04

テーマの中に、acf-json というフォルダを作成して最低限の書き込み権限等を与えると、フィールドグループ(フィールド定義のセットのこと)を保存する度に json ファイルが生成されて、そのファイルがある場合にはそちらが読まれるとのこと。ドキュメントには、データベースにアクセスする回数が減りますよ、と書いてありました。

フィールドグループの編集画面ではデータベースの情報が読まれるそうですので、手動で更新した場合には、定義画面にはその変更は、そのままでは反映されません。
定義画面ではどんな場合にもデータベースの情報が読まれ、保存時に json ファイルが更新される。表側や入力画面( edit-post.php 系の画面とかオプションページとか)では、json があればそちらがロードされるということ。

json からデータベースへの反映は、以下のようなメニューが追加されていて同期が可能になっています。

スクリーンショット_2015_05_04_21_35

くわしくは、ACF | Synchronized JSON を読むと分かるのですが、

  • json 情報はあるけど対応する定義がデータベースがない場合に利用可能
  • json 情報もデータベース情報もあるけど更新時間が json の方が新しい場合に利用可能

という条件で、どっちが新しいんだっけ?という問題も起きないようになっているみたいです。

素晴らしい!

マルチサイトでの便利ポイント

ここまででも素晴らしいですが、マルチサイトでの運用時にも大変便利です。

  • マルチサイトで同じフィールドを使いたい場合、マスターになるサイトで定義をして json を生成してしまえば、同じテーマを利用する他のサイトでも同じフィールドが使える。
    • しかも、変更が全サイトに反映される
  • json さえバージョン管理されていれば、データベース側の情報が古くなってしまっていても大丈夫。
  • 本番の環境では書き込み権限を無くしてしまうと、なんとなくさらに安心感がある気がする

あとあと、WordPressのカスタムメニューが82個以上登録できねーおらおらーって時の対処方法 | Firegobyにあるような、フィールドが多くなりすぎてサーバで保存ができなくなって大変、というのもこの方法であれば(定義情報に限り)、プロダクション環境のセキュリティのレベルを下げることなく、事故がなくなり、その点も便利です。

ここ最近の案件用のプラグインにまつわる発見の中でも、すっごいびっくりしたのでした!

大きなプラグインは特にですが、やっぱりドキュメントをちゃんと読まないと損だなと思いました。

また、仕組みなどは違いますが、ファイルベースでフィールドを定義できるカスタムフィールドプラグインに、キタジマタカシさんによる、Smart Custom Fieldsもありますので、使わせていただきたいと思います!
くわしくは以下をごらんください。
Smart Custom Fields でカスタムフィールドの定義を Git で管理できるようになりました! | モンキーレンチ

↓ プラグインを作る方々への本、書きました。 ↓

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です