ノーコードにおけるビジュアルな制御構造

f:id:ironoir:20210119141326p:plain
Tableau Prep

もう転職してしまったのですが、前職ではいわゆるビジュアルプログラミング言語環境に近いものを作っていました(まだまだ機能は足りなかったので、作ろうとしていた、に近いのか?)。コンセプトが似た製品としては、Tableau Prepが一番、有名度とモダンさのバランスがよい気がします(他にも部分的に似ている製品は枚挙にいとまがない)。OutSystems、とかもちょろちょろ名前は聞きますが、実質上、現役のソフトウェアエンジニアが真面目にあれらに取り組むことはない気がします、少なくとも今のところ。自分もその中の一員なので気持ちはわかるのですが、まどろっこしいんですよね、テキスト書く方が楽なので。ただしそれは、本質的なものではなく、単なる歴史上のなりゆきってやつに過ぎないとは考えていますが。。。

www.tableau.com

さて、それはともかく、そういった「ノーコード」製品は十把一絡げというわけでもなく、実現したい内容によってどんな部品を提供するのかが変わってきます。そういった点では別にビジュアルだろうがテキストだろうがプログラミング言語設計の問題ですね。Tableauを例に続けると、それ自体はBIツールなのですが、プロットしたりダッシュボードを作る前にデータの加工を行うための機能がTableau Prepです。そうなるとまずはデータソースを表すアイコンをドラッグアンドドロップで配置して、そのうしろに行いたい加工をまたアイコンで表された部品の中から選んでくっつけていくわけです。詳細な加工方法はそれらのアイコンをクリックして詳細設定画面から行う、というのは大抵どの製品でも同じですね。UNIXコマンドのパイプで処理をつなげていくのに近い見た目になるわけです。

その時に結構苦労して考えていたのが、「条件分岐をどのように実装するのか」でした。正確にはループなども含んだ制御構造ですね。フローチャートなんかだと、条件を表す菱形の図形から分岐の数だけ矢印が出ていますが、今回はそれをそのまま採用するわけにはいきませんでした。というのも、すでに矢印には「データの流れ」という別の意味が組み込まれていたのです。さきほどのUNIXコマンドラインでいうパイプに相当するものです。なので、同じ見た目のものを別の意味で取り込んでしまうとユーザーの混乱を招く恐れがあると思い、その方法では実装できませんでした。この悩みは実はテキストでも同じことで、「コマンドライン上で(1行で)どのように分岐を書くのか」というのと同じことになります。ただ、ビジュアルプログラミング環境は「プログラミング言語の知識がなくても使える」ということを売り文句にしがちなため、複雑な表現をなるべくならば入れたくないというジレンマが生じます。そういう意味でも、例えば矢印の色を変えるとか、そういった小手先の方法では実装する決断に至りませんでした。

if文に限って言えば、数学的にはいくつかの解釈があり得て、例えば条件部分、真の場合の継続、偽の場合の継続の3つの関数を受け取る関数として実装できたりするんでしょうが、それをそのままビジュアル化しても、一般の方がフローチャートなどで思い描く条件分岐とかけ離れてしまいます。言い出したらキリがないんですが、なんとなく、「アイコン(や部品)をつなげてプログラミングなので簡単!」という売り文句には懐疑的になってしまうんですよね。結局、本質的なプログラミングスキルは必要なことは変わらないので。。。