Kintoneで月ごとの自動採番を実現する方法(YYMM+連番)
更新日:2025年05月29日
Kintoneを活用していると、「案件番号」や「顧客番号」の自動採番が求められることがよくあります。
Kintone標準の「レコード番号」では、ただの通し番号で、年月や分類などの情報が入っていないため、実務では物足りない場面も多く見られます。
今回は、JavaScriptだけで実装できる月ごとに連番で採番するコードをご紹介します。
目次
実装する採番仕様
- 対象フィールド:案件No
- 採番形式: YYMMNNN(例:2505013 → 2025年5月の13件目)
- 月が変わると連番は001にリセットされます(例:2506001)
実装コード(サンプル)
(function(){
'use strict';
kintone.events.on('app.record.create.submit', function(event) {
const appId = kintone.app.getId();
const record = event.record;
const targetField = '案件No';
function formatYearMonth(date) {
return String(date.getFullYear()).slice(2) + ('0' + (date.getMonth() + 1)).slice(-2);
}
const now = new Date();
const currentYm = formatYearMonth(now);
const body = {
app: appId,
query: `作成日時 = THIS_MONTH() and ${targetField} != "" order by 作成日時 desc limit 1`,
fields: [targetField]
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {
const records = resp.records;
let newSerial = '';
if (records.length > 0 && records[0][targetField]?.value) {
const lastValue = records[0][targetField].value;
const lastSeqStr = lastValue.slice(-3);
const nextSeq = ('00' + (parseInt(lastSeqStr, 10) + 1)).slice(-3);
newSerial = currentYm + nextSeq;
} else {
newSerial = currentYm + '001';
}
record[targetField].value = newSerial;
return event;
}).catch(function() {
record[targetField].error = '採番に失敗しました';
return event;
});
});
})();
実装コードをステップごとに解説
1. 保存イベントを指定する
kintone.events.on('app.record.create.submit', function(event)
このイベントは、新規レコードが保存される直前に実行されます。
作成画面上では番号は表示されませんが、保存後に自動で採番されます。
2. アプリID・レコード情報・対象フィールドの準備
const appId = kintone.app.getId();
const record = event.record;
const targetField = '案件No';
ここでは必要なアプリID、保存対象のレコード情報、フィールドコードを準備しています。
3. 現在の年月を YYMM 形式で取得する
function formatYearMonth(date) {
return String(date.getFullYear()).slice(2) + ('0' + (date.getMonth() + 1)).slice(-2);
}
const now = new Date();
const currentYm = formatYearMonth(now);
formatYearMonth() 関数では、年と月をそれぞれ2桁に整えて、「YYMM」形式の文字列を作っています。
4. 今月の最新レコードから最終連番を取得する
const body = {
app: appId,
query: `作成日時 = THIS_MONTH() and ${targetField} != "" order by 作成日時 desc limit 1`,
fields: [targetField]
};
このAPIクエリは、今月すでに保存されている案件Noを持つレコードの中から、最新の1件だけを取得するものです。
月ごとにリセットするために THIS_MONTH() を活用しています。
5. 採番を生成してフィールドにセットする
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {
const records = resp.records;
let newSerial = '';
if (records.length > 0 && records[0][targetField]?.value) {
const lastValue = records[0][targetField].value;
const lastSeqStr = lastValue.slice(-3);
const nextSeq = ('00' + (parseInt(lastSeqStr, 10) + 1)).slice(-3);
newSerial = currentYm + nextSeq;
} else {
newSerial = currentYm + '001';
}
record[targetField].value = newSerial;
return event;
取得したレコードがあれば、末尾3桁の連番を+1して新しい番号を作成します。
今月の初回であれば「001」からスタートします。
まとめ
今回は、月ごとの連番の付け方についてご紹介しましたが、
自社のルールに合わせた柔軟な採番ロジックを作ることも可能です。
- 重複しない番号を部署や担当者ごとに振りたい
- 月末処理や帳票出力とあわせて番号を使いたい など
「こういう採番ってできるの?」「うまく動かないけど見てほしい」など、
気になることがあれば、お気軽にご相談ください。
【監修】株式会社ススム
株式会社ススムは、京都を拠点として、小規模〜中小企業の皆さまに向けて、 WEBを活用した集客支援や、業務の効率化をサポートしている会社です。
専門的な内容も、できるだけわかりやすく整理し、 安心して読み進められるように構成しています。