【Zoho CRM】「気づいたら上書きされてた」を防ぐ。同時編集の事故をなくす警告機能の作り方(前編)
-832714.png)
「さっき入力した内容、消えてる…?」その原因、同時編集かもしれません
Zoho CRMをチームで使っていると、こんな経験はありませんか。
- 自分が商談に入力した内容が、いつの間にか別の値に書き換わっていた
- 同じ商談を二人で見ながら、それぞれ別の項目を編集していたら、片方の入力が消えた
- 「あれ、ここ昨日直したのにな」と思って履歴を見たら、誰かが後から上書きしていた
これらはすべて、同時編集による上書き事故です。
Zoho CRMは、同じレコードを複数の人(あるいは同じアカウントの別端末)が同時に開いて編集できてしまいます。そして保存のルールはシンプルで、「あとから保存した人の内容が優先される」。先に保存した人の入力は、何の警告もなく消えてしまうのです。
特に、同じアカウントを複数人で共有していたり、PCとタブレットなど複数端末から同じCRMにログインしている環境では、この事故が起きやすくなります。
今回はこの問題に対して、AndSoで実際に導入した「同時編集の警告機能」の作り方を、2回に分けてご紹介します。前編となる今回は、もっとも手軽に始められる第一歩、「商談を開いた瞬間に注意を促す警告」です。
そもそも「同時編集を完全にブロック」はできないの?

結論からお伝えすると、Zoho CRMの標準機能だけで「他の人が編集中はロックして触らせない」という完全な排他制御を行うことは、現実的にはかなり難しいのが実情です。
これはZohoの仕組み上の制約で、「編集ボタンそのものを押せなくする」といった強制力のある制御には、いくつもの技術的な壁があります。無理に作り込もうとすると、運用が複雑になりすぎたり、かえって業務の邪魔になったりしがちです。
そこで発想を変えます。
「編集させない」のではなく、「危ないですよ、と気づかせる」。
人は、ひとこと注意があるだけで行動が変わります。「この商談、ついさっき誰かが触ったみたいだな」とわかれば、いったん最新の状態を確認したり、隣の席に「これ今いじってる?」と声をかけたりできます。事故の多くは、この「気づき」だけで防げるのです。
今回作る前編の機能は、まさにこの「気づき」を生む仕組みです。
前編で作る機能:商談を開いた瞬間に出る警告
完成すると、こんな動きになります。
商談の詳細画面を開いたとき、その商談が直近30分以内に更新されていれば、画面に警告メッセージが表示されます。

⚠️ このレコードは約 ○分前に更新されています。
別端末で編集中の可能性があるため、最新の内容を確認してから編集してください。
逆に、最後の更新から30分以上経っている商談(=しばらく誰も触っていない商談)では、警告は一切出ません。普段の業務の邪魔をせず、本当に注意が必要なときだけそっと教えてくれる、という設計です。
この「30分」という数字は自由に変えられます。チームの動き方に合わせて、短くすればより慎重に、長くすればより安全側に倒せます。詳しくは後ほど説明します。
作り方:3ステップで完成します
この機能は、Zoho CRMの「クライアントスクリプト」という仕組みを使って作ります。クライアントスクリプトは、画面を開いたときなど特定のタイミングで小さなプログラムを動かせる機能です(Enterprise・Ultimateなどのプランで利用できます)。
「プログラム」と聞くと身構えてしまうかもしれませんが、今回はコードをそのままコピーして貼り付けるだけで動きます。順番に進めていきましょう。
ステップ1:スクリプトの新規作成画面を開く
Zoho CRMの設定から、以下の順にたどります。
- 画面右上の歯車アイコン →「設定」
- 左メニューの「開発者向け情報」→「クライアントスクリプト」
- 「+新しいスクリプト」をクリック
ステップ2:どの画面で動かすかを指定する
スクリプトの設定画面が開いたら、以下のように入力します。
| 設定項目 | 入力する値 |
|---|---|
| 名前 | 商談_同時編集警告 |
| カテゴリー | Module |
| ページ | 詳細ページ(Canvas)(※) |
| タブ | 商談 |
| レイアウト | 標準 |
| 種類 | ページの処理 |
| タイミング | onLoad |
(※)ここは少し注意が必要なポイントです。商談の詳細画面が「キャンバスビュー」というデザインで作られている場合は「詳細ページ(Canvas)」を、そうでない場合は「詳細ページ(Standard)」を選びます。どちらか分からない場合は、まず「詳細ページ(Canvas)」で試し、警告が出なければ「詳細ページ(Standard)」で作り直してみてください。商談を凝ったデザインで表示している場合は、たいていCanvasです。
入力できたら「次へ」をクリックします。
ステップ3:コードを貼り付ける
次に表示されるコード入力画面に、以下をそのままコピーして貼り付けます。
try {
var recordId = $Page.record.id;
var response = await zrc.get("/crm/v2/Deals/" + recordId);
var deal = response.data.data[0];
var modTimeStr = deal.Modified_Time;
if (modTimeStr) {
var modTime = new Date(modTimeStr);
var now = new Date();
var diffMin = (now - modTime) / 60000;
if (diffMin >= 0 && diffMin < 30) {
var diffDisplay = Math.round(diffMin);
var timeText = diffDisplay === 0 ? "1分以内" : "約 " + diffDisplay + " 分前";
ZDK.Client.showAlert(
"⚠️ このレコードは" + timeText + "に更新されています。\n\n" +
"別端末で編集中の可能性があるため、最新の内容を確認してから編集してください。"
);
}
}
} catch (e) {
// 何も表示しない
}
最後の仕上げ:必ず「有効化」する
ここが見落としやすい最重要ポイントです。スクリプトは保存しただけでは動きません。
クライアントスクリプトの一覧画面に戻り、作成したスクリプトの行にある有効化のスイッチ(トグル)をオンにしてください。スイッチが青や緑になっていれば有効化されています。
その後、ブラウザで強制リロード(Macは Cmd+Shift+R、Windowsは Ctrl+Shift+R)をすれば、設定完了です。
直近30分以内に更新された商談を開いて、警告が表示されれば成功です。
「30分」を自分のチームに合わせて調整する
コードの中ほどにある、この一行に注目してください。
if (diffMin >= 0 && diffMin < 30) {
この 30 という数字が、「最後の更新から何分以内なら警告を出すか」を決めています。単位は「分」です。
チームの動き方に合わせて、目安は以下のとおりです。
| 設定値 | 向いているチーム |
|---|---|
| 10〜15 | 短時間で集中して入力するチーム。誤操作を細かく防ぎたい場合 |
| 30(初期値) | 一般的な営業オペレーション。バランス重視 |
| 60 | じっくり時間をかけて編集することが多いチーム |
| 120 | とにかく安全側に倒したい場合 |
最初は30分で始めてみて、「警告が頻繁すぎる」と感じたら長く、「もっと細かく注意したい」と感じたら短く、運用しながら微調整するのがおすすめです。
この機能の「できること」と「できないこと」
正直にお伝えしておきます。今回の前編で作った警告は、あくまで「気づかせる」ための仕組みです。以下の点は、この機能だけではカバーしきれません。
- 警告を無視して、そのまま編集すること自体は止められません
- 概要画面で項目を直接クリックして編集する「インライン編集」には反応しません
- 「誰が」編集中なのかまでは表示できません
「えっ、それだと不十分では?」と思われたかもしれません。
そのとおりです。前編の警告は、事故を減らすための最初の一歩です。これだけでも「うっかり同時編集」の多くは防げますが、もう一段しっかり守りたい場面もあるはずです。
次回予告:後編は「編集に入った人を記録する」一歩進んだ仕組み
後編では、前編より踏み込んだ仕組みをご紹介します。
それは、「誰かが編集ページを開いた、まさにその瞬間を記録しておく」という方法です。
前編の警告は「最後に保存された時刻」を見ていましたが、後編では「編集を始めた時刻」を独自に記録します。これにより、
⚠️ 別端末で編集中の可能性があります。
約 3 分前に誰かが編集ページを開いています。
同時編集を避けるため、相手の編集が終わるまでお待ちください。
このように、まだ誰も保存していない段階(=編集している真っ最中)でも、後から開いた人に警告を出せるようになります。「保存される前に気づける」のが、後編の大きな進化点です。
前編の「開いたら警告」と、後編の「編集に入ったら記録して警告」。この2つを組み合わせることで、同時編集の事故をぐっと減らせる仕組みが完成します。
後編もぜひお楽しみに。