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を活用した集客支援や、業務の効率化をサポートしている会社です。

専門的な内容も、できるだけわかりやすく整理し、 安心して読み進められるように構成しています。