NGW開発BLOG
← 記事一覧へ
·#043

AIが、初めてのWindowsアプリを書いた決裁通知クライアント NgwNotificationClient

オンライン決裁は決裁者を名指しで通知するが、NGWを開かなければ気づけない。文書管理だけのDOCU団体では毎日は開かない。そこでWindowsのトースト通知で知らせる常駐クライアントを、GET方式で、Goで作った。長く手が出せなかった初のWindowsアプリを、AIがあっという間にプロトタイプにした話。

開かないと、気づけない

NGWはブラウザだけで動くWEBアプリケーションだ。端末に専用ソフトを入れず、URLを開けば使える——それが身軽さの源だった。ただ、導入の形は団体によって違う。予定表・特別職の予定・勤怠管理まで日々使う「NGW団体」もあれば、文書管理だけを入れた「DOCU団体」もある(NGWとはで書いたとおりだ)。

DOCU団体では、毎日必ずNGWを開くとは限らない。文書が回ってきた日だけ開けばいい、という使い方も現実にある。ところが、ここにNGWの看板機能・オンライン決裁の落とし穴があった。

オンライン決裁は、決裁者を名指しで特定して通知する。誰の承認待ちかが、はっきり決まる仕組みだ。裏を返せば——NGWを開かないかぎり、自分に決裁が回ってきたことに気づけない。急ぎの案件が、誰にも気づかれないまま卓上で待ち続ける。「開かないと分からない」。これが現場の、静かなもどかしさだった。

Windowsが、教えてくれればいい

そこで、こんな要望が増えてきた。「Windowsのポップアップで、未処理の決裁があると教えてほしい」。画面の右下にふわっと現れる、あのトースト通知だ。NGWを開いていなくても、OSのほうから背中を叩いてくれる。

Windowsのトースト通知。「NGW Groupware Notification」というタイトルで「【未処理】保留中の決裁案件があります 未処理の決裁案件が4件あります。速やかに確認・処理してください」と表示されている

実際のトースト通知。NGWを開いていなくても、Windowsの右下に「【未処理】保留中の決裁案件があります/未処理の決裁案件が4件あります。速やかに確認・処理してください」と出る。決裁が回ってきたことに、その場で気づける。

PUSHか、GETか

実装の岐路に立った。通知の届け方は、大きく二つある。サーバから端末へ能動的に飛ばすPUSHか、端末が定期的にサーバへ尋ねに行くGET(ポーリング)か。ここはAIと相談しながら詰めた。

PUSHは即時性で勝る。だが、常時接続や専用の通知チャネル、到達保証の仕組みが要る。閉域網LGWANをはじめとする自治体のネットワーク事情を思えば、その重さは現実的でなかった。

GETなら、話は単純だ。クライアントが一定の間隔でNGWに「自分宛の未処理決裁はありますか」と問い合わせ、あれば件数を受け取ってトーストを出す。サーバはいつものWEBのまま、特別な常時接続もいらない。AIとの議論の結論は、GETだった。派手さはない。だが、この現場ではシンプルさが最適解だった。

原則を、理由とともに破る

ひとつ、大きな迷いがあった。NGWには当初からの原則がある。「クライアントのPCには、何も入れない」。ブラウザだけで完結する——それがWEBアプリの身軽さであり、導入も更新も軽く保つための思想だった。だが今回は、端末に常駐する小さなアプリ(NgwNotificationClient)を置く。原則からの、はっきりした逸脱だ。

悩んだ末に、それでも置くと決めた。原則は大切だが、原則を守るために現場の困りごとを放置するのは、順序が逆である。守るべきは「身軽さ」という価値であって、「何も入れない」という手段そのものではない。だから、常駐アプリは可能なかぎり小さく、やることは問い合わせと通知だけに絞った。何を守り、どこを破るかを、理由とセットで決める。それができれば、原則を破ることは堕落ではなく、判断になる。

初めてのWindowsアプリを、Goで

これは、現場の要望に応えて作った初めてのWindowsアプリだった。言語はGo。ブラウザとPHPの世界で長くやってきた私にとって、Windowsのネイティブ常駐アプリを、しかもGoで書くのは、正直ハードルが高い。「やりたい。でも、なかなか取りかかれない」——そういう宿題を、たぶん誰もが抱えている。手が届く気がしなくて、つい先延ばしにしてしまう領域だ。

AIに相談したら、あらまあ

思い切って、AIに相談してみた。すると——あらまあ、あっという間にプロトタイプが出来上がった。トーストを出し、一定間隔でNGWに問い合わせ、未処理の決裁があれば知らせる。その骨格が、驚くほど早く立ち上がった。ずっと「高い壁」に見えていたものが、ひとつの相談で、越えられる段差に変わった。

もちろん、プロトタイプは完成ではない。そこからは実機での試験と改修の連続だ。通知の文言、問い合わせの間隔、常駐の作法、端末ごとの癖——実機でしか分からない現実を、ひとつずつ潰していく。(その導入と更新のところにも、また別のひと山があった。詳しくはインストーラの記事に書いた。)試験と手直しを重ね、ようやく「これなら現場に出せる」と納得できるものになった。

AIとの協働作業での学び

AIがくれた最大のものは、コードそのものより「最初の一歩」だった。長く手が出せずにいた領域——Goのネイティブアプリ——に、プロトタイプという橋が一気にかかった。0から1が、一瞬で埋まったのだ。

ただし、1から「現場で使えるもの」へ仕上げるのは、いまも人間の仕事だ。実機で試し、現場の言葉で文言を選び、環境の癖に合わせ込む。AIが0→1を一瞬で作り、現場を知る人間が1→実用へ磨く。 この分担が、いちばん速くて、いちばん確かだった。NgwNotificationClient は、その最初の果実である。ブラウザの外へ半歩だけ踏み出した、NGW初のWindowsアプリだ。