独自フォーマットの連番を自動採番して、レコードを登録する

目次

概要

見積書や請求書を管理するアプリでは、「YYYYMMDD-E001」のような独自フォーマットで連番を付けて、レコードを登録したい場面がよくあります。
これを手動で管理すると、番号の重複や抜け漏れが起きやすくなります。

本記事では、レコードを保存するタイミングで自動的に連番が採番されるサンプルプログラムを紹介します。
採番管理の手間をなくしつつ、一意性を保ったシステム運用を実現できます。

完成形

デモ環境

デモ環境で実際に動作を確認できます。
https://dev-demo.cybozu.com/k/60/ (External link)

ログイン情報は cybozu developer networkデモ環境 で確認してください。

アプリの準備

  • アプリストアの 商品見積書パック (External link) を使います。
  • 「商品見積書パック」に含まれる「見積書」アプリのフィールド「見積番号」を次のように設定します。
    • 「必須項目にする」にチェック
    • 「値の重複を禁止する」にチェック

サンプルプログラムの適用手順

本サンプルプログラムでは、Cybozu CDNの Luxon ライブラリを利用しています。
そのため、kintoneに適用する際は、Luxonライブラリとサンプルプログラムの両方を指定する必要があります。

ライブラリとJavaScriptファイルの追加

  1. ライブラリを追加します。
    「見積書」アプリの設定画面から「JavaScript / CSSによるカスタマイズ」を開きます。
    「PC用のJavaScriptファイル」の「URL指定で追加」をクリックし、次のURLを入力します。
    https://js.cybozu.com/luxon/3.7.2/luxon.min.js
  2. サンプルプログラムを追加します。
    後述の サンプルプログラム をエディターにコピーし、ファイル名を「sample.js」、文字コードを「UTF-8(BOMなし)」で保存します。
    拡張子が「js」であれば、ファイル名は任意です。
    「アップロードして追加」をクリックして、保存したファイルをアップロードします。
  3. 「保存」ボタンをクリックし、最後に「アプリを更新」をクリックします。

読み込み順序が逆になるとプログラムが正しく動作しません。
必ずLuxonライブラリがサンプルプログラムよりも上(先)に配置されていることを確認してください。
追加後のイメージは次のとおりです。

サンプルプログラム

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
 * Autofill number sample
 * Copyright (c) 2026 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

(() => {
  'use strict';
  // レコード追加、編集画面の表示前処理
  const eventsShow = ['app.record.create.show', 'app.record.edit.show', 'app.record.index.edit.show'];
  kintone.events.on(eventsShow, (event) => {
    const record = event.record;
    if (('app.record.create.show').indexOf(event.type) >= 0) {
      record.見積番号.value = '';
    }
    record.見積番号.disabled = true;
    return event;
  });
  // レコード追加画面の保存前処理
  kintone.events.on('app.record.create.submit', async (event) => {
    let recNo = 1;
    const record = event.record;
    const date = luxon.DateTime.local();
    const params = {
      app: kintone.app.getId(),
      query: 'order by $id desc limit 1',
      fields: ['$id']
    };
    try {
      const resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params);
      if (resp.records.length === 0) {
        recNo = 1;
      } else if (resp.records.length > 0) {
        recNo = parseInt(resp.records[0].$id.value, 10) + 1;
      }
      // 自動採番を見積番号に設定する
      const autoEstNo = `${date.toFormat('yyyyMMdd')}-E${('000' + recNo).slice(-3)}`;
      alert(`見積番号 ${autoEstNo} を登録します`);
      record.見積番号.value = autoEstNo;
      return event;
    } catch (err) {
      record.見積番号.error = '見積番号が取得できません。';
      return event;
    }
  });
})();

使用したAPI

  1. レコード追加画面を表示した後のイベント
  2. レコード編集画面を表示した後のイベント
  3. レコード一覧画面のインライン編集を開始したときのイベント
  4. イベントハンドラーを登録する
  5. レコード追加画面で保存するときのイベント
  6. アプリのIDを取得する
  7. kintone REST APIリクエストを送信する
  8. APIのURLを取得する
  9. 複数のレコードを取得する
information

このTipsは、2026年5月版kintoneで動作を確認しています。

公式コミュニティ

kintone開発者同士で質問や知見を共有し、学び合うことができます。