見出し画像

kintone関数:ちょっと複雑なやりたいことをどう実現するか ~継続的な業務改善を前提とした kintone SIGNPOST的考察 ~

みなさんこんにちは。プロジェクト・アスノートの松田です。
この記事は、kintone Advent Calendar 2021の13日目の記事です。

今回のお題

チェックボックスの選択データを、「カンマ区切りで文字列1行フィールドに持ちたい」

チェックボックスフィールドのデータをファイル出力して、kintone外で使いたい!というケースってあると思います。このとき、通常通りフィアル出力すると、データの形式がちょっと特殊なんですよね。

kintoneのチェックボックス


出力されたチェックボックスのデータ

ファイル出力したチェックボックスのデータ

複数個の選択が可能であるチェックボックスフィールドをデータ出力すると、選択肢の数分の列が出力され、選択されているものに「1」が入ります。

データとして使いたいのは、選択肢の項目名なのに、データ部分には1しか入っていません。これじゃ困りますね。対策法として考えられるのは、チェックボックスで選ばれている選択肢を、カンマ区切りなどで文字列として取り出し、文字列(1行)フィールドなどに入れておくという方法です。
こうしておけば、ファイル出力したデータにも選択肢項目が入って、めでたしめでたしとなるわけですね!

この噂を聞きつけた、全日本きんとん関数芸能協会のきんとん関数芸人の師匠たちの声が聞こえてきます。

師匠N:「あぁ~ それでしたら関数でなんとかなりそうですねぇ」
師匠J:「あ!楽勝そうですね。なんだったら、kintoneにしゃべってもらいましょうか??」

さっそくやってみましょう。

関数を使って頑張ってみる(その1)

チェックボックスのデータに対して使える関数「CONTAINS関数」が2020年12月にリリースされました。

CONTAINS関数を使うと、指定した選択肢がチェックボックスで選択されているかどうか?を判定することができます。値を取り出すためには、IF関数と組み合わせて、選択肢一つずつ計算式を書いてあげる必要があります。
区切り文字のカンマは文字列結合で付けられるので、さっそく作ってみましょう。

お、なんとなくできたようですね!
テストで、3つの選択肢にすべてチェックを付けた状態で、キチンとカンマ区切りにすることができました。

しかし、ここでさらにテストを進めていくと、1つの問題に出会います。
チェックボックスは3つ全部チェックされない場合もあります

単純に結合してみると、カンマの付き方が変・・・

項目が無いのにカンマが入ったり、2つ並んだり

いやいやこれも関数のロジックで解決できますよ! と関数芸人の師匠方は鼻をヒクヒクさせながら得意げに話します。

関数を使って頑張ってみる(その2)

ここでカンマを適切に入れるためのロジックを考えてみましょう。

前の項目と後の項目が存在する場合に、その間にカンマが入る。

Garoon:①
kintone:②
メールワイズ:③

とすると、3つの選択肢を持つチェックボックスの選択パターンは以下の通り。

①, ②,③
①, ②
①, ③
②, ③


これをロジックで整理すると次のようになりますね。

  • ①の後のカンマ: ①(自分)がある かつ ②または③がある場合に入れる

  • ②の後のカンマ: ②(自分)がある かつ ③がある場合に入れる

  • ③の後:カンマはつかない

これをIF関数で表現すると次のようになります。
「かつ」と「または」は、AND関数とOR関数を使って表現します。

コピペ用計算式:

IF(CONTAINS(利用しているCybozu製品, "Garoon"), "Garoon""") &
IF(
    AND(
        CONTAINS(利用しているCybozu製品, "Garoon"),
        OR(
            CONTAINS(利用しているCybozu製品, "kintone"),
            CONTAINS(利用しているCybozu製品, "メールワイズ")
        )
    ), ","""
) &
IF(CONTAINS(利用しているCybozu製品, "kintone"), "kintone""") &
IF(
    AND(
        CONTAINS(利用しているCybozu製品, "kintone"),
        CONTAINS(利用しているCybozu製品, "メールワイズ")
    ), ","""
) &
IF(CONTAINS(利用しているCybozu製品, "メールワイズ"), "メールワイズ""")


一応これでロジックは作ることができました。

しかし、計算式がかなり複雑になってしまいました。カッコが多くてわけわかりません。このロジックを考え出し、そして計算式を作るのにもそれなりの時間がかかってしまいました。

作成直後は記憶がクリアーなので、この計算式が何をどんなロジックで処理しようとしているのかをハッキリと覚えていますが、使い始めて数ヶ月後や1年後に、チェックボックスの選択肢が増えたり修正があったときには詳細を忘れてしまっているかもしれません。計算式の修正も手間がかかりそうです。

今回は選択肢が3つでしたが、チェックボックスの項目数が多くなると、どんどん計算式が長くなってしまいます。たかがカンマのためにこれだけの計算式を書く必要があります。

ちなみに選択肢が4つだとこんな感じ(サイボウズOfficeが増えました)

IF(CONTAINS(利用しているCybozu製品, "Garoon"), "Garoon""") &
IF(
    AND(
        CONTAINS(利用しているCybozu製品, "Garoon"),
        OR(
            CONTAINS(利用しているCybozu製品, "kintone"),
            CONTAINS(利用しているCybozu製品, "メールワイズ"),
            CONTAINS(利用しているCybozu製品, "サイボウズOffice")
        )
    ), ","""
) &
IF(CONTAINS(利用しているCybozu製品, "kintone"), "kintone""") &
IF(
    AND(
        CONTAINS(利用しているCybozu製品, "kintone"),
        OR(
            CONTAINS(利用しているCybozu製品, "メールワイズ"),
            CONTAINS(利用しているCybozu製品, "サイボウズOffice")
        ) 
    ), ","""
) &
IF(CONTAINS(利用しているCybozu製品, "メールワイズ"), "メールワイズ""") &
IF(
    AND(
        CONTAINS(利用しているCybozu製品, "メールワイズ"),
        CONTAINS(利用しているCybozu製品, "サイボウズOffice")
    ), ","""
) &
IF(CONTAINS(利用しているCybozu製品, "サイボウズOffice"), "サイボウズOffice""")

選択肢4つ場合のロジックは、

  • ①の後のカンマ: ①(自分)がある かつ ②または③または④がある場合に入れる

  • ②の後のカンマ: ②(自分)がある かつ ③または④がある場合に入れる

  • ③の後のカンマ: ③(自分)がある かつ ④がある場合に入れる

  • ④の後:カンマはつかない

JavaScriptでちゃちゃっと作ってみた

チェックボックスのフィールドの値は「配列型」という形式になっています。名前を持った箱が用意されて、その中に複数個のデータを入れることができるイメージです。

JavaScriptなどのプログラミング言語では、配列を扱うための便利な関数などが標準で用意されています。

チェックボックスの選択された項目を、カンマ区切りで文字列フィールドに格納する。を、JavaScriptで処理を作ると、以下のようになります。10行程度(実質2行程度)のJavaScriptでシンプルに処理を行うことができます。

(function({
  'use strict';
  kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function(event{
    const record = event.record;
    // チェックボックスの選択値をカンマ区切りで結合した文字列を生成する処理
    const result = record['利用しているCybozu製品']['value'].join(",");
    // 生成された文字列を文字列(1行)フィールドに入れる処理
    record['チェックボックス結合JS']['value'] = result;
    return event;
  });
})();

JavaScriptには、配列の各要素を区切り文字を入れて結合するという、join()メソッドが用意されていますので、これを使うと要素の数を気にせずシンプルに記述することができます。チェックボックスの選択肢が増えたときもメンテナンスする必要はありません

基本機能を活用した、文字列(1行)の計算式と比べて、どちらがシンプルなのか?は考えさせられるところですね。

単純に、
基本機能=シンプル
カスタマイズ=複雑

とも言えないという1つの例です。

もちろん、JavaScriptカスタマイズは、kintoneのスタンダードコースでしか使えません

他にもJavaScriptカスタマイズで計算機能を作る際には、ExcelやCSVファイルからデータを読み込んでレコードを作成したり更新した際には、カスタマイズを動かすことができない、などの制約を理解しておく必要があります。

しかし今回作ってみたレベルの処理であれば、kintoneカスタマイズの仕組みとJavaScriptを少し勉強した程度でも作成し、内容を理解することができるレベルであるとも言えると思います。

プロジェクト・アスノートの記事でも、ドシキンカスシリーズで基本的なkintoneカスタマイズを理解し作れるようになっておくことを推奨しています。
今回のカスタマイズは、ドシキンカスレベル2(イベントオブジェクトベースのカスタマイズ②)が該当します。

また、kintoneのカスタマイズについての基本的な知識を持っておくことは、今後プラグインや連携サービスを使ったり、またアプリ開発に関してプロと会話をする際にも有効活用することができます。

興味のある方はぜひ、勉強してみてはと思います。
こちらの動画でも、概要について紹介しています。

YouTube(プロジェクト・アスノート業務改善道場~ドシキンカス(再生リスト)


kintone SIGNPOSTで検証!

さぁ、それでは最後に、kintone SIGNPOSTを使って検証してみましょう。


2-14 基本機能から考える

基本機能とカスタマイズ開発の使い分けの方針については、まず次のkintone SIGNPOSTを読むべきでしょう。

kintone SIGNPOSTの「2-14 基本機能から考える」で指摘されていうように、カスタマイズの使い所は、「カスタマイズ開発で実現できることか?」ではなく、「カスタマイズ開発でしか実現できないことか?」を確認する。とあります。

この考え方を実際に使う際のポイントは、「~を確認する。」の後に何をするか?

「可能かどうか」を確認し、基本機能で「可能」だから絶対基本機能!
と短絡的に考えてしまうことには注意が必要です。
kintone SIGNPOSTにおいても断言しているわけではありませんね。
確認したあと、どのように考えるべきなのでしょうか。

もう1つ、kintone SIGNPOSTのパターンを見てみましょう。

2-17 未来の変化への備え

kintoneアプリは一度作ったら終わりではありません。
「kintoneアプリの完成は、業務改善のスタートライン」
これはいろいろなところで話しているフレーズですが、kintoneアプリ

kintone SIGNPOST「2-17 未来の変化への備え」の中では、将来の状況変化への対応に備えて、保守を続けていくための費用や体制について言及されています。

体制とお金を取っているから大丈夫、ではなく、私たちが作るアプリも、将来の変更や修正を前提とした設計にしておくべきだと思います。
この考え方に基づいて、機能を作成する手段は何がいいのか?を考えたり、アプリ設計の複雑な部分については、アプリ内に丁寧な説明を残していくような、半年後、来年の自分(引き継ぎ先)に優しいアプリ作成を心がけるべきでしょう。

基本機能とカスタマイズ開発の使い分けについても、「未来の変化への備え」という観点も考慮する必要がありそうです。

じゃぁ、具体的にどっちがいいの?
ということに関しては、あなたの会社のkintone推進体制や、メンバー構成によってどちらを判断するかは変わってきます。

複雑な計算式を使う場合に実際どうするべきなのか?ということについては、以下の記事や動画を参考にしてみてください。今すぐ使える方法を紹介しています。



次に未来の変化への備えを考えた、kintoneの体制と運用について考えてみましょう。

この記事を読まれている人は、一人kintone担当で奮闘されている方も多いと思います。僕も経験があります。
そういうときに僕が心がけていたことは、社内のアチコチで起こる、困ったことや要望、アイデアを自分に集めてくるということです。

5-38 専門家への相談窓口

ちょっと複雑なアプリを作った場合、社内の専門家はあなたです。
なので、あなたが窓口となってメンバーからの相談を受けることが必要になってきますね!

kintoneチームが複数人いる場合は、そのメンバーの間でうまく情報共有を行うことがポイントになります。

4-35 要望箱アプリ

そのための具体的なテクニックとして、kintoneの中に「要望箱」の機能を作ることをオススメします。
kintone SIGNPOSTに書いてあるような、要望箱アプリでもいいですが、もう1つのやり方を紹介します。

グループ(ロール)で窓口を作る

それは、グループ(ロール)で、サポート専用窓口を作ること です。
例えば「kintoneHelp」「きんとんサポート」等、分かりやすい名前のグループを作って、メンバーには自分(他にメンバーがいればその人も)を設定します。

で、社内で「何かあったら kintoneHelp の宛先を付けて、どこでもいいので呟いてください!!」と言いまくります。kintone内のいろんな場所に掲示してもいいでしょう。
これによって、スレッドの中かもしれないし、あるアプリのレコードコメントかもしれませんが、現場を押さえることができます。

この方法のメリットは、利用者が困ったときに、すぐその場で声を出せることです。
デメリットとしては、情報が分散してしまうことですが、この対策として、自分専用のアプリアクションスレッドアクションを駆使して、要望箱アプリにデータを持ってこれるようにしておくことで対策することができます。


2022年も楽しい kintoneライフを!!



いただいたサポートは、今後とも有益な情報を提供する活動資金として活用させていただきます! 対価というよりも、応援のキモチでいただけたら嬉しいです。