株式会社COTSUBU
kintone

kintoneで連番・自動採番を作る方法|レコード番号の限界とJavaScript・プラグイン

宇田川 将也|8分
kintone自動採番連番プラグインJavaScript

kintoneの標準機能に、自由な形の連番を振る仕組みはありません。あるのは「レコード番号」だけで、これはアプリ全体の通し番号です。「A-2026-0001」のように接頭辞や年度を付けたい場合は、JavaScriptを書くか、設定だけで済む無料プラグイン自動採番を使います。

レコード番号でできること・できないこと

レコード番号は、アプリを作ると自動で付いてくるフィールドです。保存すると1から順に振られます。

できること できないこと
一意であることが保証される(サーバー側で採番) 接頭辞や記号を付ける
同時に保存されても重複しない 年・年度・月ごとに1に戻す
何もしなくても自動で入る 桁数をそろえる(0001 の形)
一覧・検索・絞り込みで使える 部署や種類ごとに番号を分ける
— 途中から別のルールに切り替える

レコード番号で足りる場面

  • 社内だけで使う番号。「この案件はレコード番号42です」と言えれば十分な場合
  • アプリ間のひも付けのキー。ルックアップのコピー元として使う場合(→kintoneルックアップ機能の使い方)
  • とりあえず動かしたい最初の1アプリ

レコード番号ではダメな場面

  • お客様に出す番号。見積書・請求書・受付票に「42」とだけ書くわけにはいきません
  • 年度ごとに1から振り直したい。自治体や学校の受付番号は、ほぼこの形です
  • 既存の採番ルールに合わせたい。紙やExcelの時代の番号を引き継ぐ場合
  • 欠番が問題になる。レコードを削除すると、その番号は二度と使われません

最後の欠番は、監査や帳票の突き合わせがある業務でとくに問題になります。「1番から100番まであるはずなのに98件しかない」という状態が普通に起きます。

CSV移行のときの注意

レコード番号は、CSVで読み込んでも引き継げません。 読み込み先のアプリで1から振り直されます。旧システムの番号を残したい場合は、文字列(1行)のフィールドを別に用意して、そこへ読み込んでください。移行の手順は11章 Excelからの移行にまとめています。

JavaScriptで年度リセットつきの採番を書く

「A-2026-0001」で、4月始まりの年度が変わったら0001に戻る採番の最小の例です。絞り込み用に「年度」の文字列フィールドを1つ用意します。

(() => {
  'use strict';
  const NO = '管理番号';   // 文字列(1行)
  const FY = '年度';       // 文字列(1行)。絞り込みを速くするための補助
  const PREFIX = 'A';
  const DIGITS = 4;

  // 4月始まりの年度
  const fiscalYear = (d) => (d.getMonth() + 1 >= 4 ? d.getFullYear() : d.getFullYear() - 1);

  kintone.events.on('app.record.create.submit', async (event) => {
    const record = event.record;
    if (record[NO].value) return event;          // すでに番号があれば触らない

    const fy = String(fiscalYear(new Date()));
    const resp = await kintone.api('/k/v1/records', 'GET', {
      app: kintone.app.getId(),
      query: `${FY} = "${fy}" order by ${NO} desc limit 1`,
      fields: [NO],
    });
    const last = resp.records.length
      ? Number(resp.records[0][NO].value.split('-').pop())
      : 0;

    record[FY].value = fy;
    record[NO].value = `${PREFIX}-${fy}-${String(last + 1).padStart(DIGITS, '0')}`;
    return event;
  });
})();

25行ほどです。ゼロ埋めの桁数をそろえてあるので、文字列のまま並べ替えても数値の順番と一致します。JavaScriptカスタマイズの基本は13章 JavaScript・API・外部連携にまとめています。

この書き方の落とし穴

短く書ける代わりに、実運用では次の問題にぶつかります。採番は「一度ずれると直すのが大変」な処理なので、事前に知っておいてください。

1. 同時保存で番号がぶつかる

2人がほぼ同時に保存すると、両方が「今の最大は0007」と読み、両方が0008を振ります。JavaScriptはブラウザ側で動くため、この競合を防げません。 1日に数件のアプリなら滅多に起きませんが、窓口や受注のように人が同時に入力するアプリでは現実に起きます。

対策は「保存したあとに同じ番号がないかを確かめ、あれば振り直す」ことですが、そこまで書くとコードは倍以上になります。

2. 最後のレコードを消すと番号が再利用される

「最大+1」方式の落とし穴です。0008まで振ったあと0008を削除すると、次に保存したレコードにもう一度0008が振られます。すでに0008番で請求書を出していたら、同じ番号の請求書が2枚になります。

3. JavaScriptが動かない経路がある

登録の経路 JavaScriptによる採番
レコード追加の画面から保存 動く
一覧のインライン編集 別のイベントの指定が必要
モバイルアプリ・スマホのブラウザ 別のイベントの指定が必要
CSVの読み込み 動かない
REST API・外部システムからの登録 動かない

CSV読み込みで番号が空のレコードが大量に入ると、あとから手で埋めることになります。

4. 桁があふれる

0001〜9999を使い切ったあと、次は10000になります。桁数が変わると文字列の並べ替えが崩れ、「最大+1」の判定も狂います。上限に達したら止める処理が要ります。

5. 番号を手で書き換えられる

フィールドが編集可能なままだと、誰かが上書きできます。disabled を立てる処理を足すことになります。

設定だけで済ませる:自動採番(無料)

COTSUBUが公開している無料プラグイン自動採番は、上の内容を設定画面だけで実現します。

  • 接頭辞(例:INV-)+日付部分+区切り+ゼロ埋めの連番で番号を作る
  • 日付部分は「なし・西暦4桁・西暦2桁・年月・年度」から選ぶ
  • 連番を1に戻す単位を「しない・年・年度・月」から選ぶ(年度の開始月も指定できる)
  • 同時に保存して番号がぶつかったときは、保存後に自動で振り直す
  • 番号のフィールドは手で書き換えられないようにする
  • 桁数の上限に達したら、番号がずれないよう保存を止めて知らせる

無料・会員登録不要・外部と通信しません。 kintoneの公式APIだけで動くので、自治体のLGWAN環境や、閉じた社内ネットワークでも使えます。

設定はこの5ステップです。

  1. 番号を入れる「文字列(1行)」フィールドをアプリに用意する
  2. アプリの設定 →「プラグイン」→「自動採番」の歯車アイコン
  3. 番号を入れるフィールドを選び、接頭辞・日付部分・区切り・連番の桁数を決める
  4. 「連番を1に戻す単位」を選ぶ(年度なら開始月も選ぶ)。見本で番号の形を確かめられます
  5. 「保存する」→「アプリを更新」

番号は新しいレコードを保存したときに決まります。作成中の画面では空欄です。再利用して作ったレコードにも、新しい番号を振ります。

なお、いまはPCの画面に対応しています。モバイル画面への対応は無料版で予定しています。既存レコードへの一括採番は有料版で提供する予定です。

採番の形を決めるときのコツ

番号の形は、あとから変えると過去のレコードと混ざります。最初に決めてください。

迷いどころ おすすめ
桁数 想定件数の10倍で決める。年500件なら4桁
年の表記 西暦4桁。2桁は2100年で詰まる
区切り文字 ハイフン。スラッシュはファイル名やURLで扱いにくい
部署コードを入れるか 入れない。部署が変わると番号の意味が変わる。部署はフィールドで持つ
年度か年か 官公庁・学校・建設は年度、それ以外は年が多い

とくに最後の「部署コードを番号に埋め込まない」は、あとで効いてきます。番号は「一意に指せること」だけを担当させ、意味はフィールドに持たせるのが、アプリ設計の基本です(→5章 アプリ設計の基本)。

まとめ

  • kintone標準にあるのはレコード番号だけ。接頭辞・年度リセット・桁そろえはできない
  • レコード番号は削除で欠番になり、CSV移行では引き継げない
  • JavaScriptなら25行ほどで書けるが、同時保存・番号の再利用・CSV読み込みで穴が開く
  • 設定だけで済ませるなら無料の自動採番。同時保存でぶつかっても保存後に振り直す
  • 番号の形は最初に決める。部署コードは番号に埋め込まない

→ kintone導入支援の詳細 → kintone無料プラグイン一覧 → kintoneで重複を禁止・チェックする方法

よくある質問

kintoneの標準機能で「A-2026-0001」のような番号を自動で振れますか

振れません。標準にあるのはレコード番号だけで、これはアプリ全体の通し番号です。接頭辞を付けたり、年度ごとに1から振り直したりはできません。JavaScriptか、無料プラグインの自動採番を使います。

レコード番号は欠番になりますか

なります。レコードを削除しても、その番号は使い回されません。10番を消すと9番の次は11番です。また、レコード番号はアプリごとの採番なので、別のアプリには同じ番号が存在します。

CSVでレコードを移行すると、レコード番号は引き継げますか

引き継げません。レコード番号は読み込み先のアプリで1から振り直されます。旧システムの番号を残したい場合は、文字列(1行)フィールドを別に用意して、そこに読み込んでください。

JavaScriptで採番すると番号が重複することはありますか

あります。「今ある番号の最大+1」を求める方式は、2人がほぼ同時に保存すると同じ番号を読んでしまいます。無料プラグインの自動採番は、保存したあとに同じ番号がないかを確かめ、あれば後から保存した方を振り直します。

自動採番プラグインは無料ですか

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

宇田川 将也/ 代表取締役

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

経歴を見る

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

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

30分相談を予約する