Unifinityで発表者の順序をランダムに決めるアプリを作る

テックポエム

本記事はUnifinity Advent Calendarの1日目の記事になります。

自社製品でのAdvent Calendarですので、エンジニアメンバーでUnifinityに関するいろいろな記事を作って、完走を目指していこうと思います!

さて、初日なので、本日はシンプルなアプリを作っていきたいと思います。

スクラムでのレトロスペクティブ

弊社プロダクトチームでは「スクラム」の取り組みを進めており、毎週末に開催している「レトロスペクティブ」で各自が「KPT(Keep,Problem,Try)」を発表してメンバー間で共有し次に生かす、という振り返りを行っております。
ここでは発表順は自由としているのですが、空気を読みあってなかなか発言者が出てこない、という問題がありました。

この待ち時間がもったいないので、発表者をランダムに決めるジェネレーターをUnifinityで作ることにしました。
UnifinityアプリはSQLiteを使うことができますので、DBに参加者を登録しておき、SQLiteの「ORDER BY RANDOM()」を利用して、参加者をランダムに並び替えた結果を表示する、というものです。

アプリ開発


それでは、DB定義から始めていきます。

アプリ開発1.png

まず、参加者を登録する「メンバー」テーブルを用意します。欠席している場合は結果から除きたいので、「出席しているかどうか」の状態を記録できるようにフィールドを作成しておきます。

アプリ開発2.png

そして、初期データにメンバーの名前を入れておきます。

アプリ開発3.png

また、ランダムに並び替えた結果を格納するための「結果」テーブルを作っておきます。こちらは名前だけを格納するのでフィールドも1つです。

これでDBの準備は完了です。


次に画面を作っていきます。画面には3つの要素を配置します。

アプリ開発4.png
左側にはその時の出席/欠席を設定できるようなインターフェースを作りたいので、サブフォームを用意し、後で作成するサブフォーム用の画面を「リスト」形式で表示する設定にします。

右側には結果を表示するための表を用意しておきます。こちらは「結果」テーブルに紐づけておくだけでOKです。

続いてチェックボックスと名前を表示するための、サブフォーム用の画面を作ります。

アプリ開発5.png

赤枠部にはチェックボックス、青枠部はラベルです。それぞれデータセットを使って、「メンバー」テーブルの「出席」と「名前」に紐づけます。これを、左側に作成したサブフォームに内容に設定しておきます。
これだけで、簡単にチェックボックスを用いたインターフェースを作ることができます。

そして、結果を生成するボタンを配置すれば、画面は完成となります。


最後にボタンを押した際の処理を作成していきます。

アプリ開発6.png
UnifinityにはSQLを実行した結果に対して、foreachのようにループ処理する「データベース/カーソル(繰り返し開始)」という機能があるため、こちらで次のSQLを実行します。
SELECT *
FROM member
WHERE exist = 1
ORDER BY RANDOM();
これで、出席メンバーがランダムに並び変わるので、これを「結果」テーブルに格納します。
画面にはデータセットで「結果」テーブルが紐づいている為、「コントロール/更新」をするだけで、画面に結果が反映されます。
これで、アプリが完成です。

このアプリを使うことで、レトロスペクティブの発表順序で悩む必要が無くなり、便利に活用することができました。

アプリ開発7.png