kintoneで重複を防ぐ方法は3つです。1つのフィールドだけなら標準機能の「値の重複を禁止する」、「会社名+電話番号」のような組み合わせやサブテーブル内ならJavaScriptか無料プラグインを使います。標準機能は設定画面のチェックボックス1つ、プラグインも設定だけで済みます。
まず標準機能でできるか確かめる
kintoneには「値の重複を禁止する」という設定があります。
- アプリの設定 →「フォーム」を開く
- 重複を禁止したいフィールドの歯車アイコン →「設定」
- 「値の重複を禁止する」にチェック
- 「保存」→「アプリを更新」
これで、同じ値のレコードを2件目に保存しようとすると、kintone側でエラーになります。ブラウザではなくサーバー側で止まるため、APIやCSV読み込みからの登録も確実に防げます。
設定できるフィールド・できないフィールド
| 設定できる | 設定できない |
|---|---|
| 文字列(1行)、数値、計算 | 文字列(複数行)、リッチエディター |
| 日付、時刻、日時 | チェックボックス、複数選択、ラジオボタン、ドロップダウン |
| リンク、レコード番号 | 添付ファイル、ユーザー/組織/グループ選択 |
| ルックアップ | テーブル(サブテーブル)の中のすべてのフィールド |
標準機能でできないこと
ここからが、多くの人がつまずく部分です。
| やりたいこと | 標準機能 | 対処 |
|---|---|---|
| 1つの項目の重複を禁止 | できる | 標準の設定で十分 |
| 複数項目の組み合わせで判定 | できない | JavaScript/プラグイン |
| サブテーブルの中の重複行を検出 | できない | JavaScript/プラグイン |
| 条件付きで重複を禁止(「ステータスが有効のときだけ」など) | できない | JavaScript/プラグイン |
| 別のアプリにあるレコードとの重複を確認 | できない | JavaScript |
| 重複していても警告だけ出して保存させる | できない(常に保存を止める) | JavaScript/プラグイン |
| 重複している既存レコードを画面に出す | できない(エラー文だけ) | JavaScript/プラグイン |
とくに困るのが複数項目の組み合わせです。会社名だけで禁止すると、支店違いの「株式会社A(東京支店)」「株式会社A(大阪支店)」が登録できなくなります。かといって禁止しなければ、同じ会社が二重に登録されます。
もう1つはサブテーブルです。見積明細に同じ品番を2行入れてしまう事故は、標準機能では検出できません。
ONにできないときの原因
「値の重複を禁止する」にチェックを入れて保存するとエラーになるのは、すでに重複したデータが入っているためです。一覧でそのフィールドをグループ化して件数が2以上のものを探すか、CSVに書き出してExcelのCOUNTIFで探し、重複を消してから設定します。
なお、空欄は重複とみなされません。空欄のレコードが何件あっても設定できます。
JavaScriptで書くとどうなるか
「会社名+電話番号」の組み合わせで重複を止める最小の例です。保存時に同じ組み合わせのレコードを検索し、見つかったらエラーにします。
(() => {
'use strict';
const KEYS = ['会社名', '電話番号'];
// 検索クエリの文字列に " が入ると壊れるのでエスケープする
const esc = (v) => String(v).replace(/"/g, '\\"');
kintone.events.on(
['app.record.create.submit', 'app.record.edit.submit'],
async (event) => {
const record = event.record;
// どれか1つでも空欄なら判定しない
if (KEYS.some((k) => !record[k].value)) return event;
const cond = KEYS.map((k) => `${k} = "${esc(record[k].value)}"`).join(' and ');
const resp = await kintone.api('/k/v1/records', 'GET', {
app: kintone.app.getId(),
query: `${cond} limit 2`,
fields: ['$id'],
});
// 編集中は自分自身を除く
const selfId = kintone.app.record.getId();
const others = resp.records.filter((r) => r.$id.value !== String(selfId));
if (others.length > 0) {
record[KEYS[0]].error =
`同じ「${KEYS.join('+')}」のレコードがあります(レコード番号 ${others[0].$id.value})`;
}
return event;
}
);
})();
書くこと自体は40行ほどですが、実運用では次を足すことになります。
- 一覧のインライン編集(
app.record.index.edit.submit)への対応 - レコードが多いときの検索の絞り込み(
limitとfieldsを必ず指定する) - 全角・半角、前後の空白、大文字小文字の違いをそろえてから比べる処理
- サブテーブルの行同士の比較(これは検索ではなく、画面上の行を突き合わせる別の処理)
- 「止める」か「確認して保存できる」かの切り替え
JavaScriptの基本は13章 JavaScript・API・外部連携にまとめています。
JavaScriptとプラグインに共通する限界
どちらもブラウザ側の判定です。 2人がまったく同じ瞬間に保存した場合、両方が「重複なし」と判定してすり抜ける可能性があります。1フィールドで足りるなら、サーバー側で保証される標準機能を使ってください。組み合わせ判定は、この限界を承知のうえで使う機能です。
設定だけで済ませる:重複チェック Pro(無料)
COTSUBUが公開している無料プラグイン重複チェック Proは、上の内容を設定画面だけで実現します。
- 最大5つのフィールドの組み合わせで判定
- ルールごとに「保存を止める」か「確認して保存できる」かを選べる
- サブテーブルの中の重複行も検出(全角半角・空白・大文字小文字の違いはそろえて比較)
- 重複している既存レコードへのリンクを表示
- 新規作成・編集・一覧のインライン編集のすべてで動作
無料・会員登録不要・外部と通信しません。 kintoneの公式APIだけで動くので、自治体のLGWAN環境や、閉じた社内ネットワークでも使えます。
設定はこの3ステップです。
- アプリの設定 →「プラグイン」→「重複チェック Pro」の歯車アイコン
- 「+ ルールを追加」で判定するフィールドを選ぶ(「+項目」で最大5つまで)
- 「保存する」→「アプリを更新」
判定するフィールドのどれか1つでも空欄の場合は、重複とみなしません。「電話番号が未記入の会社をひとまず登録する」といった運用が止まらないようにするためです。
使い分けの早見表
| 状況 | 使うもの |
|---|---|
| 社員番号・型番など、1項目で一意 | 標準機能「値の重複を禁止する」 |
| 会社名+電話番号、物件名+部屋番号 | 重複チェック Pro |
| 見積明細の同じ品番が2行 | 重複チェック Pro(サブテーブル) |
| 別アプリのレコードとの突き合わせ | JavaScript |
| 予約・会議室のダブルブッキング(期間の重なり) | 期間重複チェック |
重複は「入れる前」にも減らせる
重複の多くは、入力の作りで防げます。
- ルックアップでマスタから選ばせる。手入力させなければ表記ゆれは生まれません(→kintoneルックアップ機能の使い方)
- キーになる項目はドロップダウンにする。「東京支店」「東京支社」の両方が生まれるのを防げます
- Excelからの移行時に、先に重複を整理する。移行後に消すより圧倒的に楽です(→11章 Excelからの移行)
移行のときに重複を持ち込むと、あとから「どちらが正しいレコードか」を業務側に確認して回ることになります。ここが移行作業で最も時間を食う部分です。
まとめ
- 1フィールドの重複禁止は標準機能で十分。サーバー側で止まるので確実
- 標準機能は「複数項目の組み合わせ」「サブテーブル内」「条件付き」に対応していない
- ONにできないのは、すでに重複データがあるため。空欄は重複とみなされない
- JavaScriptなら書けるが、一覧編集・表記ゆれ・サブテーブルへの対応で膨らむ
- 設定だけで済ませるなら無料の重複チェック Pro
- JavaScriptもプラグインもブラウザ側の判定。同時保存はすり抜ける可能性がある
よくある質問
kintoneの標準機能で「会社名+電話番号」の組み合わせの重複は禁止できますか
できません。標準の「値の重複を禁止する」は1フィールドごとの設定で、複数フィールドの組み合わせには対応していません。組み合わせで判定するには、JavaScriptか、無料プラグインの重複チェック Proを使います。
サブテーブル(テーブル)の中の重複は禁止できますか
標準機能ではできません。テーブルの中のフィールドには「値の重複を禁止する」の設定項目自体がありません。同じ明細行が2行入るのを防ぐには、JavaScriptかプラグインが必要です。
「値の重複を禁止する」をONにしようとするとエラーになります
そのフィールドに、すでに重複した値が入っているためです。一覧でそのフィールドをグループ化するか、CSVに書き出して重複を消してから設定してください。なお空欄は重複とみなされないため、空欄のレコードが複数あってもONにできます。
JavaScriptの重複チェックとkintone標準の重複禁止は、どちらが確実ですか
標準機能です。標準はkintoneのサーバー側で保証するため、同時に保存されてもすり抜けません。JavaScriptやプラグインはブラウザ側の判定なので、2人がまったく同時に保存した場合にすり抜ける可能性があります。1フィールドで足りるなら標準機能を使ってください。
重複チェック Proは無料ですか
無料です。会員登録も不要で、MITライセンスのため商用でも使えます。外部のサーバーと通信しないので、自治体のLGWAN環境や閉じた社内ネットワークでも動きます。


