【kintoneアプリ標準機能】選択系フィールドで遭遇するお化けデータの正体を暴く

この記事の概要

kintoneアプリからデータをファイル出力する時に、時々フォームに存在しないデータがお化けのように現れることがあります。そのお化けの正体を明らかにします。

[2017/12/6 更新] 同様の内容を cybozu developer networkのナレッジノートに投稿したところ、貴重なコメントをいただくことができました。その内容をタイトルおよび本文に反映しました。

対象フィールド:選択系フィールド(ラジオボタン、チェックボックス、複数選択、ドロップダウン)

データ出力時のお化け

みなさんこんにちは。プロジェクト・アスノート代表の松田です。
kintoneを使っていると、時々出くわす怪奇現象?があります。

次のようなkintoneアプリがあります。

データは図のようなものが2レコード登録されています。

このアプリから「ファイル出力」でCSVデータを出力したら、こんなデータが出力されました。(図はCSVデータをExcelで表示して、ヘッダーに色を付けています)

  • レコード番号
  • 文字列(1行)
  • 複数選択[選択肢A]
  • 複数選択[選択肢B]
  • 複数選択[選択肢C]
  • 複数選択[選択肢D]
  • 複数選択[選択肢E]
  • 複数選択[選択肢F]

アプリの複数選択フィールドの設定内容は、次のようになっています。

複数選択フィールドの選択肢

  • 選択肢A
  • 選択肢B
  • 選択肢C
複数選択フィールドの設定内容

複数選択フィールドの設定内容

CSVデータには、複数選択フィールドで設定されていない選択肢のデータが出てきているようです。

なぜこのようなことが起こってしまうのでしょう?

 

お化けの正体

選択系フィールド(ラジオボタン、チェックボックス、複数選択、ドロップダウン)においては、一度設定し運用を開始した選択肢は、その後削除しても、内部的にはデータが残ってしまい、お化け化する。「ファイル書き出し」時や、「言語ごとの名称」設定時にこのお化けが現れる

最初にフィールドに配置した複数選択フィールドには、あらかじめ4つの選択肢がサンプルとして登録されています。通常はこのサンプル選択肢の名称を書き換えて選択肢を設定すると思います。

複数選択フィールドの初期設定

複数選択フィールドの初期設定

そしてkintoneでよくある(kintoneだからこそ)ケースとしては、まず仮に選択肢を設定して使ってみて、必要な選択肢を追加したり、削除や修正しながら、アプリを改良していくというスタイルです。これぞ高速業務改善!という手法ですが、「複数選択フィールド」を使う場合、さらにファイル出力や多言語対応が必要なケースにおいては、お化けデータに注意が必要となります。

今回の場合だと、当初この複数選択フィールドの選択肢を、CSVデータに出力された5つを設定し、フォームを保存してアプリの運用を開始。その後の修正で、選択肢D〜Fは削除したが、この3つがお化け化して、ファイル書き出し時に紛れ込んだ。という経緯だと推察されます。

フィールド設置直後の、まだフォームを保存する前の段階であればこのお化け問題は発生しません。

 

正体を検証してみる(kintone開発環境)

ポイント

今回のようないろんなケースを検証するとき、自分のkintone開発環境を持っておくと非常に有効活用できます。cybozu developper network会員登録すると、無料でずっと使える開発環境を取得することができます。

カスタマイズはできないから開発環境は・・・と思わずに、kintoneを極めたい人はぜひ開発環境を活用することをオススメします。

kintone開発環境を使って、この現象を検証してみます。

まず、簡単なアプリを作って、文字列(1行)フィールドを1つと、複数選択フィールドを設置します。
複数選択フィールドは、初期設定(sample1〜4)のままでフォームを保存(緑色ボタン)し、アプリを更新ボタン(青色)でアプリの運用を開始します。

そして再度アプリの設定を開き、フォーム設定→複数選択フィールド設定画面で、以下のように設定を変更します。

初期設定の4つのサンプル選択肢の3つを書き換え、不要な4つ目のサンプルは削除します。これでフィールドの設定を保存、フォームを保存し、青色ボタンでアプリの運用環境に適用します。この状態で、いくつかレコードを登録して、ファイル書き出しをしてみましょう。

※アプリのオプションメニューにファイル書き出しが表示されない場合は、アプリのアクセス権で、ファイル書き出しの権限があるかどうかチェックしてみてください。

無事(?)消したはずのsample4の項目がCSVに出力されていることが確認できます。

同時に「言語ごとの名称」設定から、フォームの設定を確認してみると、ここにもお化けがいることが確認できました。

 

じゃあ選択肢を書き換えた場合はどうなるか

これも検証してみましょう。

このように、既存の選択肢の名称を変更した場合は、変更前の項目がお化けとして出てくることなく、きちんと新項目名に変わります。

 

ちょっと複雑なパターンも

今度は、3つ登録された選択肢の1つを削除して、新しく選択肢を追加してみましょう。

ファイル書き出しをして確認します。

予想どおり、削除した選択肢はきちんとお化けになっています。
さっきの検証でお化けになったものは、そのまま残っています。

こうして、修正や削除を繰り返すたびに、お化けがズラリと増えていってしまうことになります。

 

考察

アプリのフィールド設定を操作したことで、既存のデータには影響を与えない

一度アプリが運用状態になるということは、すでにデータが登録されることを想定しなければなりません。その選択肢を選ばれたレコードがすでに登録されている場合、 アプリのフィールド設定を操作したことで、既存のデータには影響を与えない という思想となっていることが推察できます。

データの保持に関連している、ファイル出力時のフォーマットや言語ごとの名称設定において表示されるのも同様の考え方ですね。
(フィールドの削除については、削除操作時にデータも削除されるというアラートが表示されます)

でもちょっと・・・?なところ

「既存のデータを保持」することはこれでできていますが、「活用」については以下の点を意識しておくことが必要です。

関連レコード一覧やルックアップで参照するときの絞り込み条件や、一覧表示の絞り込み条件については、現役の選択肢しか使えないようです。アプリデータを活用するときに必要な選択肢は、ちゃんと現役で残しておかないといけないということですね。

「既存のデータとしては保持しておきたいが、新たに入力をさせたくない」という考え方で使うこともできますが、注意が必要です。

 

なんとかお化けを消せないか

一度できてしまったお化けデータをなんとか削除できないかと、いろいろ試してみました。

以下の方法で検証してみましたが、いずれもダメでした。なかなかしつこいお化けですね。

  1. アプリをテンプレート化して、新規にアプリ作成
  2. アプリの再利用で新規にアプリ作成

 

今のところできる対策

このお化け化現象は、今のところどうすることもできませんが、現状できる対策としては、

運用が固まったところで、新規に複数選択フィールドを作り、そこに最新の選択肢をセットする。

というやり方で逃げるしかないと思います。

すでにアプリの運用が開始されていて、レコードが登録されている場合は、旧フィールドを残した状態で新フィールドを追加し、一度ファイル出力して、Excel等で編集して再度読み込みし、新フィールドに引越しをする、という方法でデータの移行が可能になります。

このファイル書き出しのシンプルな手順は次のとおりです。

  1. 既存データをファイル出力
  2. 最新選択肢を持ったフィールドを新規で設定し、既存フィールドは削除(フィールド名は既存フィールドに合わせておく)
  3. ファイル読み込み

※既存データに消そうとしている選択肢が含まれていると、3のファイル読み込み時にエラーがでます。

 

振り返り
  1. 選択系フィールド(ラジオボタン、チェックボックス、複数選択、ドロップダウン)において一度運用を開始した選択肢は、その後削除しても、内部的にはデータが残ってしまう。
  2. ファイル書き出し時のデータや「言語ごとの名称」設定時に削除した選択肢が現れる。(既存の登録データが無い場合も同様)
  3. ファイル書き出し時、1つを選択するフィールド(ラジオボタン、ドロップダウン)では影響がないが、複数選択系フィールド(チェックボックス、複数選択)では列が増えるため、ファイル出力を想定した業務においては注意が必要。
  4. 選択肢の見直しが終わったところで、新たに複数選択フィールドを設置し、データの引っ越しをするしかなさそうだ。
  5. フォームのフィールド設定で選択肢を削除すると、関連レコードやルックアップの絞り込み条件としては使用できない。

▶cybozu developer networkに投稿した記事
【kintone複数選択系フィールド】選択肢を削除してもファイル書き出しデータ、言語ごとの名称設定で残っている

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です