お尻の[0]・・・?
Customienをいぢっていると、無意識のうちに[0]
に遭遇する機会が結構多いのではないでしょうか?
例えばアクション番号111でレコードを取得した後、別のアクションで使おうとすると、$111[0]みたいな感じで。
他の例では、(あんまりきれいではないけど)if文を使ってチェックボックスの値を比較しようとしたときに、if(チェックボックス[0] = "ひよこ", ...)
のような書き方をすればチェック項目による条件分岐ができるんだなぁ、、、という。
今回は、 「その辺よくわかってないけど、なんか動いてるからそういうもんだと思ってます!」 という方に向けて、仕組みめいたものをお伝えしてみようかな、と思います。
これらのお尻の[0]
、詳しく話しすぎるとCustomineの良さが損なわれる気がしなくもないんですが、仕組みを知っておくと色々と捗るんじゃないかなぁと思います。
イメージは列車
(はいはい、配列の話ですよネ~) 、とこの手の話題に慣れている方ならもうこの時点で回れ右していただいて大丈夫ですが、kintoneをいきなりやれと言われて、ExcelのノリでCustomineに挑もうとする方々にとって、この配列という概念はあまりなじみがない、かもしれません。
「いやいや、最近のExcelはスピルがあるから!」 という方もこの先は読まなくて大丈夫そうですね😂
まず1つ目の例で挙げた「レコードを取得する」タイプのアクションでは、あるアプリのレコードを全て、もしくは条件を絞って取得しているかと思います。
ということは・・・取得されているレコードは、必ずしも 1つだけではない んですね。
で、たくさん持ってきたこのレコードちゃんたち、実は列車のように並べられている、というのをイメージしていただきたいです。まぁ配列というかリストというか・・・そういうアレなんですけど。
今回、配列というかリストというか、をもうとりあえず 列車 と呼ばせてもらいます。
この列車、車両番号が1からではなく 0から割り振られている と思ってください。なんでやねん、と思うかもしれませんが、その方が都合がいいことがあります。
どうしても気になる方は 「配列 0から」 とかで調べてみてください。
冒頭の例で言うと、アクション番号111で取得したレコードの列車から、先頭車両のレコードだけ用事がある場合が多いので、[0]
という指定を付けているわけです。
とはいえ、レコードを取得するタイプのカスタマイズ、初めのうちは取得するレコードを1つに絞ってあーだこーだすることが多い(ような気がする)ので、この[0]
はなんか勝手についてきてるヘンなヤツにしか見えない、というわけです。
あれもこれも実は列車の仲間
レコード同様、1つのフィールドの中に複数データを格納できるタイプのものはこの列車タイプです。
例えば冒頭2つ目の例で出した チェックボックス もそうですし、 ユーザー選択 や 添付ファイル も。
レコードとフィールドでは規模感が全然違うので、ちょーっとイメージしづらいかもしれませんが、どっちも抽象化すると複数の似たような奴が連なっていて、遠くから眺めると同じ列車タイプなんだなぁ、とぼんやり思ってください。
ちなみに先頭車両が[0]
なので、その次は[1]
で指定できる、という具合になってます。
1つ目が[0]
で2つ目が[1]
ってなんやねん!と叫びたくなるかもしれませんし、叫んでいただいて差し支えありません。(ご近所に迷惑でなければ。)
2つ目の例で挙げたチェックボックスの値を元にした条件分岐、無理やりif文を使おうとすると、チェックボックス[0]
という書き方を要求されがちですが、これはチェックボックスの裏方の仕組みが大事です。
チェックボックスは、チェックされた項目を車両としてつけたり外したりされている、と思ってください。
例えば、チェック項目が たまご
ひよこ
こけこっこ
の3つだったとしましょう。どんなチェックボックスやねん。
このうち、 こけこっこ
以外の2つを選択していた場合、裏方では0両目に たまご
、1両目に ひよこ
が連結した2両編成となっています。
0両目が たまご
かどうかを判定するのが、2つ目の例の if(チェックボックス[0] = "たまご", ...)
という書き方になるわけです。
確かにこの書き方であれば、チェックボックスで たまご
が選択されているかどうかは判定できそうです。
しかし、 ひよこ
が選択されているかどうかを判定する式はどのように書けばいいのでしょうか?
列車の編成は良くも悪くも柔軟
先ほど同様、 たまご
ひよこ
こけこっこ
のうち たまご
ひよこ
が選択されている場合、チェックボックスに ひよこ
が含まれるかどうかを判定しようとすると、 if(チェックボックス[1] = "ひよこ", ...)
と書けば良さそうです。
ところが、列車の編成が ひよこ
こけこっこ
だった場合はどうでしょうか・・・?
今回は ひよこ
は1両目ではなく0両目に鎮座しています。
先ほどの if(チェックボックス[1] = "ひよこ", ...)
と言う書き方は、チェックボックスの1両目が ひよこ
かどうかを判定する式なのですが、今回のケースだと0両目と比較したい、ですね。
更に別の例で、列車の編成が ひよこ
だけだった場合、裏方の列車は0両目しか存在しないことになるので、 チェックボックス[1]
で指定しようとした1両目がなくてエラーになってしまうのです。
つまり何が言いたいかと言うと・・・列車タイプの判定の場合、if文は万能じゃないですよ~、というお話でございます。
ちょっとめんどくさくても、フィールドの値に関する条件で、 含まれる 条件を使うのが安心安全ということです。
Excelに慣れている方にとって、if文は様々な場面で救世主のような存在だったかと思いますので、ついついあちこちで頼りそうになるわけですが・・・こっちの世界ではそれだけでは太刀打ちできないヤツらがいる、ということですね。
補足というかなんというか
「い~やfindif関数があるやろがい」 とツッコみをくださる方、よくここまで読んでくださいましたね。。。ありがとうございます。。。
今回の列車の例え話、じゃあそれを具体的にどう使うの?というお話は敢えてやりません。
多くの場合が関数を使ったテクニカルなお話になり、果たしてノーコード・ローコードを謳うkintoneやCustomineをこれから使ってみよう、という方に伝えるべきことか?と考えると、そこまではいいかな・・・と思ったからです。
逆に、いやいやそれで何か面白いことができるの!?とご興味が湧いた方は、 お試しアプリを用意して [0]
を[1]
にしたらどうだとか[0]
を抜いたら?という実験をしてみてください。
実際に動いているアプリで試して何かが起こっても責任はとれませんので、そこだけはご注意を。。。
それでは皆様、楽しいkintoneライフをお過ごしくださいませ!