株式会社COTSUBU
kintone

kintoneで重複を禁止・チェックする方法|標準機能とプラグイン

宇田川 将也|8分
kintone重複チェック入力チェックプラグインJavaScript

kintoneで重複を防ぐ方法は3つです。1つのフィールドだけなら標準機能の「値の重複を禁止する」、「会社名+電話番号」のような組み合わせやサブテーブル内ならJavaScriptか無料プラグインを使います。標準機能は設定画面のチェックボックス1つ、プラグインも設定だけで済みます。

まず標準機能でできるか確かめる

kintoneには「値の重複を禁止する」という設定があります。

  1. アプリの設定 →「フォーム」を開く
  2. 重複を禁止したいフィールドの歯車アイコン →「設定」
  3. 「値の重複を禁止する」にチェック
  4. 「保存」→「アプリを更新」

これで、同じ値のレコードを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ステップです。

  1. アプリの設定 →「プラグイン」→「重複チェック Pro」の歯車アイコン
  2. 「+ ルールを追加」で判定するフィールドを選ぶ(「+項目」で最大5つまで)
  3. 「保存する」→「アプリを更新」

判定するフィールドのどれか1つでも空欄の場合は、重複とみなしません。「電話番号が未記入の会社をひとまず登録する」といった運用が止まらないようにするためです。

使い分けの早見表

状況 使うもの
社員番号・型番など、1項目で一意 標準機能「値の重複を禁止する」
会社名+電話番号、物件名+部屋番号 重複チェック Pro
見積明細の同じ品番が2行 重複チェック Pro(サブテーブル)
別アプリのレコードとの突き合わせ JavaScript
予約・会議室のダブルブッキング(期間の重なり) 期間重複チェック

重複は「入れる前」にも減らせる

重複の多くは、入力の作りで防げます。

  • ルックアップでマスタから選ばせる。手入力させなければ表記ゆれは生まれません(→kintoneルックアップ機能の使い方)
  • キーになる項目はドロップダウンにする。「東京支店」「東京支社」の両方が生まれるのを防げます
  • Excelからの移行時に、先に重複を整理する。移行後に消すより圧倒的に楽です(→11章 Excelからの移行)

移行のときに重複を持ち込むと、あとから「どちらが正しいレコードか」を業務側に確認して回ることになります。ここが移行作業で最も時間を食う部分です。

まとめ

  • 1フィールドの重複禁止は標準機能で十分。サーバー側で止まるので確実
  • 標準機能は「複数項目の組み合わせ」「サブテーブル内」「条件付き」に対応していない
  • ONにできないのは、すでに重複データがあるため。空欄は重複とみなされない
  • JavaScriptなら書けるが、一覧編集・表記ゆれ・サブテーブルへの対応で膨らむ
  • 設定だけで済ませるなら無料の重複チェック Pro
  • JavaScriptもプラグインもブラウザ側の判定。同時保存はすり抜ける可能性がある

→ kintone導入支援の詳細 → kintone無料プラグイン一覧 → kintoneおすすめプラグイン10選

よくある質問

kintoneの標準機能で「会社名+電話番号」の組み合わせの重複は禁止できますか

できません。標準の「値の重複を禁止する」は1フィールドごとの設定で、複数フィールドの組み合わせには対応していません。組み合わせで判定するには、JavaScriptか、無料プラグインの重複チェック Proを使います。

サブテーブル(テーブル)の中の重複は禁止できますか

標準機能ではできません。テーブルの中のフィールドには「値の重複を禁止する」の設定項目自体がありません。同じ明細行が2行入るのを防ぐには、JavaScriptかプラグインが必要です。

「値の重複を禁止する」をONにしようとするとエラーになります

そのフィールドに、すでに重複した値が入っているためです。一覧でそのフィールドをグループ化するか、CSVに書き出して重複を消してから設定してください。なお空欄は重複とみなされないため、空欄のレコードが複数あってもONにできます。

JavaScriptの重複チェックとkintone標準の重複禁止は、どちらが確実ですか

標準機能です。標準はkintoneのサーバー側で保証するため、同時に保存されてもすり抜けません。JavaScriptやプラグインはブラウザ側の判定なので、2人がまったく同時に保存した場合にすり抜ける可能性があります。1フィールドで足りるなら標準機能を使ってください。

重複チェック Proは無料ですか

無料です。会員登録も不要で、MITライセンスのため商用でも使えます。外部のサーバーと通信しないので、自治体のLGWAN環境や閉じた社内ネットワークでも動きます。

宇田川 将也/ 代表取締役

2024年に総務省の地域活性化起業人として島根県海士町に着任。役場に住み込んで業務改善に従事し、kintoneで電子決裁や定期健診管理を構築しました。

経歴を見る

この記事について相談する

貴社・貴団体の状況に合わせて、最適な進め方をご提案します。

30分相談を予約する