はじめに
FAQ運用でいちばん揉めやすいのが、「誰がFAQを直すのか」という点です。
現場は「気づいたらすぐ直したい」、開発は「データはちゃんと管理したい」。この二つ、放っておくと衝突しますよね。
この記事では、私がアパレル・ギア系のECサイトで、現場は管理画面で編集、開発はGitで管理という二つの経路を、push/pullスクリプトで両立させた運用を解説します。どちらから触っても、最終的にデータが一つに収束する仕組みです。
二つの編集経路を用意する
現場スタッフは管理画面から
FAQを直したい人の多くは、コードもGitも触りません。カスタマーサポートの担当者が「この回答、古くなってる」と気づいたとき、その場で直せることが大事です。そこで、OTP認証(ワンタイムパスワード)でログインできる管理画面を用意し、質問・回答・並び順を直接編集できるようにしました。専門知識なしに、必要な人が必要なときに直せる。これが現場側の入り口です。
開発側はGitでJSONを管理
一方、開発側はカテゴリ別JSONをGitで管理します。大きな構造変更、カテゴリの追加、複数サイトへの展開といった作業は、コードと同じようにブランチを切ってレビューを通したい。Gitで扱えば、いつ・誰が・どこを変えたかが履歴に残り、問題があれば戻せます。日々の細かな修正は現場、まとまった変更は開発、という自然な役割分担ができます。
OTP認証の管理画面から、質問・回答・並び順を直接編集。日々の細かな修正を担う
GitでJSONを管理。構造変更・カテゴリ追加・サイト展開をレビュー付きで担う
push/pullで双方向に同期する
faq-push と faq-pull の役割
二つの経路があると、必ず「どっちが最新か」という問題が起きます。これを解くのが、双方向の同期スクリプトです。faq-pushはGit上のJSONをVercel KV(本番データ)へ反映し、faq-pullは管理画面で変更された最新のKVデータをGit側へ取り込みます。開発がまとめた変更はpushで配信し、現場が直した内容はpullで手元へ回収する。この往復があるからこそ、二つの経路が破綻せずに共存できるんです。
現場の変更を取りこぼさない
いちばん怖いのは、現場が管理画面で直した内容を、開発がGitから古いJSONをpushして上書きしてしまうことです。これを防ぐため、開発側で作業を始める前にまずfaq-pullで最新を取り込む、という手順を運用ルールにしています。「触る前に引く」を徹底しておけば、現場の修正を潰す事故はぐっと減ります。
faq-pull で管理画面側の最新変更をGitへ取り込む
ブランチを切ってJSONを変更し、レビューを通す
faq-push でKVへ反映し、本番へ展開
横断検索用の索引を再生成して整合を取る
運用を安全に回すために
認証と権限を分ける
管理画面はFAQという公開情報を扱うとはいえ、誰でも書き換えられては困ります。OTP認証でログインを絞り、編集できる人を限定しています。パスワードの使い回しやハードコードを避けられるOTPは、現場スタッフが使う管理画面と相性が良い方式です。
同期のタイミングを決めておく
push/pullは強力ですが、いつ実行するかを曖昧にすると事故のもとです。「作業前は必ずpull」「配信はpush後に検索インデックスも更新」といったタイミングを運用ルールとして明文化しておくと、担当者が変わっても同じ手順で回せます。仕組みだけでなく、この決めごとの部分が地味に効いてきますよね。
上書き事故に注意
Git側から古いJSONをそのままpushすると、管理画面で現場が加えた最新の変更を消してしまう恐れがあります。「作業を始める前にfaq-pull」を鉄則にして、現場の修正を取りこぼさないようにしましょう。
まとめ
FAQの編集は、現場が管理画面、開発がGit、という二つの経路を持ち、faq-push / faq-pullで双方向に同期することで両立させました。「すぐ直したい現場」と「きちんと管理したい開発」、どちらの要望も潰さずに済むのがこの運用の良さです。
このFAQをユーザーの自己解決にどうつなげるかは、FAQと問い合わせ導線の接続でCS負荷を下げるで解説します。データ構造の詳細はJSON+KVによるFAQデータ管理と検索インデックスをご覧ください。