kintoneの「必須項目にする」は常に必須という設定で、条件を持てません。「区分が法人のときだけ会社名を必須にする」を実現する方法は3つです。運用でしのぐ(アプリを分ける・プロセス管理で差し戻す)/JavaScriptを書く/無料プラグインで設定する。設定だけで済ませたい場合は3つ目が最短です。
標準の必須設定にできること・できないこと
アプリの設定 →「フォーム」→ フィールドの歯車 →「必須項目にする」。これだけです。
| やりたいこと | 標準機能 |
|---|---|
| 常に必須にする | できる |
| ほかの項目の値によって必須を切り替える | できない |
| ステータス(プロセス管理)によって必須を切り替える | できない |
| 条件によって項目を表示/非表示にする | できない |
| 未入力の理由を画面に説明する | できない(「必須です」のみ) |
| サブテーブルの列を条件付きで必須にする | できない |
標準の入力チェックとして用意されているのは、必須のほかに「値の重複を禁止する」「数値の最大値・最小値」「文字列の最大文字数・最小文字数」程度です。どれも条件を持てません。
「全部必須」にすると現場が回避する
条件が付けられないなら全部必須にすればいい、と考えたくなります。これは高い確率で失敗します。
個人のお客様を登録するときに法人番号が必須だと、現場は「-」「なし」「0000000000」を入れます。入力は通りますが、そのデータは検索にも集計にも使えません。 必須チェックを通すためだけの文字が増え、後から「これは本当に法人番号がないのか、入れ忘れたのか」が判別できなくなります。
入力ルールが現場の実態と合っていないと、こうした回避が起きます。これはkintone導入が失敗する典型パターンの1つです。
標準機能だけでしのぐ代替策
プラグインもJavaScriptも使えない場合、次の3つが現実的な代替です。
代替1:アプリを分ける
「法人用」「個人用」でアプリを分ければ、それぞれのアプリで常時必須を設定できます。
- 向く場合:入力する項目が条件によって大きく違う。入力する人も分かれている
- 向かない場合:レコードをまとめて集計したい。条件の分岐が3つ以上ある
分けたアプリの集計は、関連レコードや集計用アプリでまとめる設計になります(→5章 アプリ設計の基本)。
代替2:プロセス管理で差し戻す
プロセス管理で「申請 → 確認 → 完了」の流れを作り、確認する人が未入力を見つけたら差し戻します。
チェックそのものは自動化されません。 人の目に頼る運用ですが、承認者が1人に決まっている業務なら実務上は機能します。
代替3:入力の作りで減らす
- 条件ごとに使う項目をグループ(フィールドのグループ化)でまとめ、「法人のときはこのグループを埋める」と見出しで示す
- ドロップダウンの初期値を空にして、選ばせる
- 項目名に「(法人のみ)」と書く
いずれも入力漏れを減らすだけで、防げはしません。
JavaScriptで書くとどうなるか
「区分が法人なら、会社名と法人番号を必須にする」を保存時に止める例です。
(() => {
'use strict';
const IF_FIELD = '区分';
const IF_VALUE = '法人';
const REQUIRED = ['会社名', '法人番号'];
// チェックボックス・添付ファイル・ユーザー選択は配列で入っている
const isEmpty = (field) => {
if (!field) return false; // フォームに無い項目は判定しない
const v = field.value;
if (Array.isArray(v)) return v.length === 0;
return v === null || v === undefined || String(v).trim() === '';
};
kintone.events.on(
[
'app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit', // 一覧のインライン編集
],
(event) => {
const record = event.record;
if (record[IF_FIELD] && record[IF_FIELD].value !== IF_VALUE) return event;
let ng = false;
REQUIRED.forEach((name) => {
if (isEmpty(record[name])) {
record[name].error = `「${IF_FIELD}」が「${IF_VALUE}」のため必須です`;
ng = true;
}
});
if (ng) event.error = '未入力の必須項目があります';
return event;
}
);
})();
record[項目].error を入れると、その項目の下に赤い文字が出て保存が止まります。event.error は画面上部にまとめて出すメッセージです。
プロセス管理のアクションで止める場合
「完了にするときだけ、対応内容を必須にする」は、保存時ではなくアクション実行時の判定になります。
kintone.events.on('app.record.detail.process.proceed', (event) => {
if (event.action.value !== '完了' ) return event;
if (!event.record['対応内容'].value) {
alert('完了にするには「対応内容」の入力が必要です');
return false; // false を返すとステータスの変更を止められる
}
return event;
});
実運用で足りなくなるところ
上の40行で最小構成は動きますが、条件が増えるとコードが増えます。
- 条件の種類(等しい/等しくない/含む/空欄でない)
- チェックボックスや複数選択の「その値が選ばれているか」の判定
- ルールが10本になったときの管理(現場の人が条件を足せない)
- 項目をアプリから消したときに、コードがエラーで止まらないようにする
一番大きいのは最後の管理の問題です。 条件を1つ変えるたびに開発者に依頼が必要になり、運用が止まります。JavaScriptカスタマイズ全般の基本は13章 JavaScript・API・外部連携にまとめています。
設定だけで済ませる:条件付き必須(無料)
COTSUBUが公開している無料プラグイン条件付き必須は、上の内容を文章の形の設定画面で作れます。
もし [区分] が [法人] と等しい なら、[会社名][法人番号] を必須にする
設定は3ステップです。
- アプリの設定 →「プラグイン」→「条件付き必須」の歯車アイコン
- 「+ ルールを追加」で、条件の項目・値・条件の種類と、必須にする項目を選ぶ(「+項目」で増やせる)
- 「保存する」→「アプリを更新」
| できること | 内容 |
|---|---|
| 条件の種類 | 等しい/等しくない/含む/空欄/空欄でない |
| 対応する項目 | チェックボックス・複数選択・ユーザー選択(その値が選ばれているかで判定) |
| エラーの出方 | 項目の下に「必須です(『区分』が『法人』と等しいため)」と理由つきで表示 |
| 動く画面 | 新規作成・編集・一覧のインライン編集 |
理由を表示するのが実務では効きます。「必須です」だけだと、入力する人は「なぜ今これが必要なのか」が分からず、問い合わせが来ます。
無料・会員登録不要・外部と通信しません。 kintoneの公式APIだけで動くので、自治体のLGWAN環境や閉じた社内ネットワークでも使えます。空白だけの入力は空欄とみなし、設定した値の前後の空白は無視します。
無料版の対象はレコード本体の項目に対する単一条件です。複数条件の「かつ/または」、サブテーブルの列、プロセス管理のアクションごとの必須チェックは有料版で提供予定です。
使い分けの早見表
| 状況 | 使うもの |
|---|---|
| 常に必須 | 標準の「必須項目にする」 |
| 入力する項目も人も大きく分かれる | アプリを分ける |
| 「区分が法人なら会社名を必須」 | 条件付き必須 |
| 「完了にするときだけ対応内容を必須」 | JavaScript(process.proceed) |
| 別アプリの値を見て判定したい | JavaScript |
まとめ
- kintoneの標準の必須設定は常時必須。条件は持てない
- 全部必須にすると「-」「なし」で回避され、データが使えなくなる
- 標準だけでしのぐならアプリを分ける/プロセス管理で差し戻す
- JavaScriptなら書けるが、条件が増えると現場で変更できなくなる
- 設定だけで済ませるなら無料の条件付き必須
- 入力を止めるときは、必ずなぜ必要なのかを画面に出す
→ kintone導入支援の詳細 → kintone無料プラグイン一覧 → kintoneで重複を禁止・チェックする方法
よくある質問
kintoneの標準機能で「条件によって必須」にできますか
できません。フィールド設定の「必須項目にする」は常に必須という設定で、ほかの項目の値による切り替えはできません。JavaScriptか、無料プラグインの条件付き必須を使います。
プロセス管理で「ステータスを進めるときだけ必須」にできますか
標準の設定だけではできません。プロセス管理にアクション実行時の必須チェックの機能はないためです。JavaScriptなら app.record.detail.process.proceed イベントで判定し、未入力なら false を返してステータスの変更を止められます。
全部を必須にしておけば済むのではないですか
使われなくなります。個人のお客様の登録で法人番号を必須にすると、現場は「-」や「なし」を入れて回避します。そのデータは後から集計にも検索にも使えず、必須にした意味がなくなります。
条件付き必須プラグインは、サブテーブルの中の項目にも使えますか
無料版では対象外です。サブテーブルの列を条件や必須の対象にする機能、および複数条件の「かつ/または」は、有料版で提供予定です。無料版はレコード本体の項目に対する単一条件に対応します。
条件付き必須プラグインは無料ですか
無料です。会員登録も不要で、MITライセンスのため商用でも使えます。外部のサーバーと通信しないので、自治体のLGWAN環境や閉じた社内ネットワークでも動きます。


