株式会社COTSUBU
kintone

kintoneで条件によって項目を出し分ける方法|表示・非表示の切り替えと注意点

宇田川 将也|11分
kintone表示制御入力フォームプラグインJavaScript

kintoneの標準機能では、レコードの値によって項目を出し分けることはできません。フィールドの設定に「条件によって表示する」という項目がないためです。実現するには、公式APIの kintone.app.record.setFieldShown() を使ったJavaScriptを書くか、設定だけで済む無料プラグイン項目の表示切替を使います。

そして、始める前に必ず押さえておく点が1つあります。隠した項目の値は、そのまま保存されます。 後半で詳しく書きます。

標準機能でできること・できないこと

やりたいこと 標準機能
常に表示する/しない(項目を置く・置かない) できる
ユーザー・組織・グループごとに見せない できる(フィールドのアクセス権)
レコードの値によって表示を切り替える できない
「その他」を選んだときだけ理由欄を出す できない
プロセス管理の状態によって項目を隠す できない
関係ない項目をグループにまとめて畳んでおく できる(グループ化。ただし手で開閉する)

kintoneのフィールドのグループ化は標準機能で使えるので、関連する項目をまとめて折りたたんでおく形はまず試す価値があります。ただし開閉は人が手でやるもので、値によって自動では変わりません。

「全部出しておく」と何が起きるか

条件で出し分けられないなら全部出しておけばいい、と考えたくなります。起きるのは次の2つです。

  • 入力する人が迷う。 個人のお客様を登録しているのに法人番号・部署名が並んでいると、「これは埋めるべきか」を毎回考えます
  • 空欄だらけのレコードが残る。 詳細画面を開いても半分が空欄で、どこを見ればいいか分かりません

項目数が20を超えたあたりから効いてきます。入力の迷いは、そのまま入力ミスと問い合わせになります(→kintone導入が失敗する典型パターン)。

JavaScriptで書くとどうなるか

kintoneには、指定した項目の表示・非表示を切り替える公式API kintone.app.record.setFieldShown(フィールドコード, 表示するか) があります。画面のHTMLを自前でたどる必要はありません。

「区分が『法人』のときだけ、法人番号・部署名・担当役職を出す」最小の例です。

(() => {
  'use strict';
  const COND = '区分';
  const HIT = '法人';
  const TARGETS = ['法人番号', '部署名', '担当役職'];

  const apply = (record) => {
    const show = !!record[COND] && record[COND].value === HIT;
    TARGETS.forEach((code) => {
      kintone.app.record.setFieldShown(code, show);
    });
  };

  kintone.events.on(
    [
      'app.record.create.show',
      'app.record.edit.show',
      'app.record.detail.show',
      // 条件の項目が変わったその場で切り替える(イベント名に項目のコードが入る)
      'app.record.create.change.区分',
      'app.record.edit.change.区分',
    ],
    (event) => {
      apply(event.record);
      return event;
    }
  );
})();

25行ほどです。ポイントは2つあります。

  • show イベントだけでは足りません。 画面を開いたときだけ判定すると、区分を「個人」から「法人」に変えても項目が出てきません。change イベントを必ず入れます
  • change イベントの名前には、項目のフィールドコードがそのまま入ります(app.record.create.change.区分)

グループの開閉は kintone.app.record.setGroupFieldOpen(グループのコード, 開くか)、スペースは kintone.app.record.getSpaceElement(要素ID) で要素を取って自分で隠します。要素IDを付けていないスペースは取得できませんので、フォームの設定で先に付けておきます。

JavaScriptカスタマイズの基本は13章 JavaScript・API・外部連携にまとめています。

実運用で足りなくなるところ

足りないところ 何が必要になるか
条件が「等しい」以外(含む・より大きい・空欄でない) 条件の種類ごとに判定を書き分ける
条件を「かつ」「または」で組み合わせる 判定を配列にして回す作りに変更
ルールが5本、10本に増える 条件のたびにコードを編集。現場では変更できなくなる
項目をアプリから消した フィールドコードが無いとエラーで止まる。存在チェックが必要
隠した項目の値を空にしたい 保存時に値を消す処理を別に追加(表示の切り替えとは別の話)

最後の1つは、次の章の内容とセットで考えてください。

いちばん大事な注意:隠した項目の値は保存される

setFieldShown もプラグインも、やっているのは「見えなくすること」だけです。 項目に入っていた値は、そのまま保存されます。

区分を「法人」にして法人番号に 1234567890123 を入力し、あとから区分を「個人」に変えると、法人番号の欄は画面から消えます。それでも保存すると、法人番号には 1234567890123 が入ったまま残ります。 一覧に法人番号の列を出せば見えますし、CSVに書き出しても出てきます。見えないことと、入っていないことは別です。

アクセス権の代わりにはならない

もう1つ、こちらのほうが重大です。項目を隠しても、人に見せないようにはできません。 ブラウザの開発者ツールを使える人は、隠した項目の値を見られます。給与・評価・個人情報のように「その人に見せてはいけない」情報は、必ずkintoneのフィールドのアクセス権で守ってください(→10章 権限とセキュリティ)。

表示の出し分けは、「見せたくない」ではなく「見せる必要がない」ときに使う機能です。

目的 使うもの
個人のお客様に法人番号の欄を出さない(見せる必要がない) 項目の表示切替
一般社員に給与の項目を見せない(見せてはいけない) フィールドのアクセス権

この線引きを間違えると、「隠してあるから大丈夫」と思ったまま情報が残ります。迷ったらアクセス権です。

必須項目を隠すと保存できなくなる

隠した項目がkintone標準の「必須項目」で、かつ空欄のままだと保存できません。画面には見えないのにエラーが出るため、入力する人は何が起きたか分かりません。条件で出し分ける項目は、標準の必須設定を外しておいてください。 そのうえで「表示しているときだけ必須にしたい」なら、条件付き必須と組み合わせます。

設定だけで済ませる:項目の表示切替(無料)

COTSUBUが公開している無料プラグイン項目の表示切替は、上の内容を文章の形の設定画面で作れます。

もし [区分] が [法人] と等しい なら、[法人番号][部署名] を 表示する

  • 条件は「等しい/等しくない/含む/より大きい/以上/より小さい/以下/空欄/空欄でない」。複数の条件を「かつ/または」で組み合わせられる
  • 対象は、項目・サブテーブル・グループ・スペース(要素ID付き)
  • グループは「表示/非表示」と「開く/閉じる」のどちらを切り替えるか選べる
  • 新規作成・編集・詳細で動作。条件の項目を変えると、その場で切り替わる

無料・会員登録不要・外部と通信しません。 kintoneの公式APIだけで動くので、自治体のLGWAN環境や、閉じた社内ネットワークでも使えます。ライセンスの条文はプラグインのライセンスに掲載しています。

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

  1. アプリの設定 →「プラグイン」→「項目の表示切替」の歯車アイコン
  2. 「+ ルールを追加」で条件を作る(「+ 条件を追加」で増やし、「すべてに当てはまるとき/どれか1つでも当てはまるとき」を選ぶ)
  3. 「そのとき、次のものを[表示する/隠す]」を選ぶ
  4. 対象を「+ 項目を追加」「+ グループを追加」「+ スペースを追加」で並べる
  5. 「保存する」→「アプリを更新」

知っておくべき動きのルール

  • 条件に合わなくなると、対象は自動で元に戻ります(「表示する」ルールなら隠れ、「隠す」ルールなら表示されます)
  • 同じ項目を複数のルールが指しているときは、1つでも「隠す」になれば隠れます
  • 条件にはサブテーブルの中の列は使えません。サブテーブル自体は隠す対象に選べます
  • 一覧画面では切り替わりません。新規作成・編集・詳細の3つの画面で動きます
  • 要素IDが空のスペースは選べません。フォームの設定で先に要素IDを付けてください
  • アプリから削除した項目が設定に残っていても、エラーにはなりません

「隠す」「必須にする」「編集させない」の使い分け

条件によって画面を変える方法は3つあり、やりたいことが違います。

やりたいこと 使うもの 項目は見えるか
関係ない項目を画面から消したい 項目の表示切替 見えない
条件のときだけ入力を求めたい 条件付き必須 見える(未入力だと保存できない)
値は見せるが、変えさせたくない 条件付き入力禁止 見える(編集できない)
その人に見せてはいけない フィールドのアクセス権(標準機能) 見えない(権限で守られる)

判断の順番はこうです。見せてはいけない情報か → アクセス権(ここは迷わない)。その値をあとで読む必要があるか → 読むなら条件付き入力禁止(承認後の金額のように「記録は残すが触らせない」場合)。読む必要もないか → 項目の表示切替。そのうえで、表示している項目のうち埋めてほしいものに条件付き必須を重ねます(→kintoneで「条件によって必須」にする方法)。

たとえば顧客管理アプリで、区分が「法人」のときだけ法人番号を扱う場合は、次の3つをセットにします。

設定 内容
項目の表示切替 区分が「法人」のときだけ、法人番号・部署名を表示する
条件付き必須 区分が「法人」なら、法人番号を必須にする
標準の必須設定 外しておく(隠したまま必須だと保存できない)

出し分けるより、アプリを分けたほうがよい場合

表示の出し分けは万能ではありません。条件の分岐が3つ以上あって使う項目がほとんど重ならない/入力する人も分かれている(法人担当と個人担当が別部署)/一覧に出したい列が条件ごとにまったく違う、という場合はアプリを分けたほうが運用が楽になります。

一覧画面では出し分けが効かないことが理由です。入力画面は条件で整理できても、一覧は全員が同じ列を見ます。逆に、条件が1つか2つで一覧は共通でよいなら、出し分けが向きます。アプリを分けると集計が面倒になるので、そこまでの分岐でなければ1つのアプリのままにしてください(→5章 アプリ設計の基本)。

一覧側で「関係あるレコードを目立たせたい」場合は、隠すのではなく色を付けます(→kintoneの一覧で条件に合う行に色を付ける方法)。

まとめ

  • kintoneの標準機能では、レコードの値による項目の出し分けはできない
  • 全部出しておくと、入力の迷いと空欄だらけのレコードが残る
  • 公式APIの kintone.app.record.setFieldShown() で切り替えられる。change イベントを必ず入れる
  • 隠した項目の値は、そのまま保存される。 見えないことと入っていないことは別
  • これはアクセス権ではない。 開発者ツールを使えば隠した値は見られる。見せてはいけない情報は必ずフィールドのアクセス権で守る(→10章 権限とセキュリティ)
  • 隠す項目に標準の必須設定を付けたままにすると、保存できなくなる
  • 設定だけで済ませるなら無料の項目の表示切替
  • 「隠す」「必須にする」「編集させない」は目的が違う。重ねて使う

→ kintone導入支援の詳細 → kintone無料プラグイン一覧 → kintoneで「条件によって必須」にする方法

よくある質問

kintoneの標準機能で、条件によって項目を隠せますか

隠せません。フィールドの設定に「条件によって表示する」という項目がないためです。標準でできるのは、フィールドのアクセス権でユーザー・組織・グループごとに見える範囲を決めることまでで、レコードの値による切り替えはできません。

隠した項目に入っていた値はどうなりますか

そのまま保存されます。見えなくなるだけで、消えたり空になったりはしません。「法人」で入力したあとに「個人」へ変えても、法人番号の値は残ったまま保存されます。値を残したくない場合は、保存前に値を消すカスタマイズが別に必要です。

項目を隠せば、人に見られないようにできますか

できません。これは見た目を隠す機能で、アクセス権ではありません。ブラウザの開発者ツールを使える人は、隠した項目の値を見られます。人に見せてはいけない情報は、kintoneの「フィールドのアクセス権」で守ってください。

必須項目を隠しても大丈夫ですか

危険です。隠した項目がkintoneの「必須項目」で、かつ空欄のままだと保存できません。画面には見えないのにエラーが出るため、原因が分からず止まります。条件で出し分ける項目は、標準の必須設定を外しておいてください。

項目の表示切替プラグインは無料ですか

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

宇田川 将也/ 代表取締役

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

経歴を見る

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

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

30分相談を予約する