はじめまして、MENOUの末澤です。
コアプロダクト開発チームでC#/WPFを使ったデスクトップアプリを開発しています。
重い処理が走っている間、ただ画面を眺めているだけ——そんな経験、ありませんか?
AIの学習となると、この待ち時間は数分から数十分に及ぶこともあります。今回は、この待ち時間を攻めの時間に変えた新機能「ながラーニング」の開発を紹介しながら、デスクトップアプリ開発の面白さを共有したいと思います。
目次
AI学習の待ち時間
“待ち時間”を“攻めの時間”に
攻めの学習機能「ながラーニング」実装!
ステップ1: 学習画面の改善
ステップ2: 学習データの更新
ついに、リリース!
さいごに
AI学習の待ち時間
AIの学習では、一般的にデータが多いほど良いとされていますが、厳密にはデータのバリエーションが豊富であることが大切なポイントとなります。
MENOUでは、1~2枚の画像から学習をスタートし、上手く検出できなかったデータを学習データに追加していくことを推奨しています。
効率よく品質の良い学習が行える仕組みです。
この方法では学習を段階的に進めることで精度を向上させますが、学習が終わるのを待つ時間が発生します。
ここでユーザーの手が止まってしまうという課題が見えてきました。
“待ち時間”を“攻めの時間”に
あるとき、CEOの西本から「攻めの学習がしたい!」という話がありました。
学習の待ち時間で、ユーザーの手が止まっていることに対して「学習結果を見ながら、次に与えるべきデータを用意して、もう一度学習させる。この一連の流れを、学習を止めずにやりたい。」という趣旨のものでした。
学習中に条件は変えられないと思い込んでいた私にとって、固定概念を取っ払うもので、かなり衝撃的だったことを覚えています。
たしかに学習の中で次のデータをAIに教えることができれば、学習は待ち時間ではなくなります。
この新機能はCEO西本によって「ながラーニング」と名付けられ、攻めの学習の開発が始まりました。
攻めの学習機能「ながラーニング」実装!
「ながラーニング」の実装という大役は、私が背負うことになりました。
かなり挑戦的な内容でしたが、良い機能になるという確信もありました。
実装の核心は、学習中のデータを動的に更新するという部分です。
学習処理はUIアプリケーションとは、別プロセスで実行されるため同期を取るのが難しく、かなりリスキーなロジックの変更になります。学習という重要な機能を維持しつつ、挑戦的な変更を行うバランス感覚が必要でした。
さらに、学習中に学習結果をどう見せるのか、UIの検討も必要です。
複数の要素を組み合わせた結果として攻めの学習が可能になるため、検討すべきことは山ほどあります。
でもだからこそ、形になっていくことが楽しかったことを覚えています。
チーム内でも議論した結果、変更範囲が広いためステップを分けて実装を進めることにしました。
ステップ1: 学習画面の改善
まず行ったことは、UIの改善です。
従来の学習画面は、学習曲線というグラフが大きく表示されていました。
このグラフはリアルタイムに更新されるため、どんどん学習が進んでいることはわかりますが、実際にどのような学習が行われているかわかりにくいという課題がありました。
![]()
[Before]学習曲線のみの表示
このため、学習曲線と並べてAIの解析画像も表示し、学習の進行に合わせてリアルタイムに更新するようにUIの変更を行いました。
学習中にリアルタイムにAIの解析画像が見えるようになったことで、上手く学習しているもの、そうでないものが一目でわかるようになりました。
![]()
[After]学習進行に合わせて検出状況を表示!
上の例は順調に学習が進み、検出したいプリント基板の部分が赤く反応しています。
上手く検出できているのが視覚的にわかります。
対して、次の画像は上手く検出してくれていません。
![]()
上手く検出できていない例
上手く検出できていない画像は全体が暗く、明るさによって反応に大きな差が出ています。
次は、暗い画像も学習データに加える必要があることがわかります。
UIの変更によって、学習終了を待たず次に取るべき手段を確認できるようになりました。
こうなると、暗い画像を早く学習データに追加したくなります。
ステップ2: 学習データの更新
先ほどの機能で、上手く検出できていない画像が簡単に見つけられるようになったため、見つけた画像をそのまま学習データに追加する機能を作成しました。
![]()
上手く検出できていなかった暗い画像を学習対象に追加!
上手く検出できていない画像を見つけた場合、画像に正解ラベルを付ける「アノテーション」という作業を行えば、そのまま学習データに追加できます。
この機能によって攻めの学習が実現しました。
こちらはUIの変更はとても少ないですが、学習処理という重要な部分をアップデートしています。
データ更新時の整合性や安全性を確保できるよう慎重に実装しました。
ついに、リリース!
実装が完了したあと、プルリクエストとしてチームメンバーにレビューを依頼しました。
ここで、ボタンのレイアウトや配置のような見せ方の部分などまで、様々な視点でコメントをもらうことができました。
指摘してもらった点を中心にブラッシュアップすることで、自信をもってリリースできる機能となった実感があります。
こうして「ながラーニング」機能は、CEO西本の話から2か月程度でリリースできました。
さいごに
一つの機能のために、UI層もビジネスロジックも自在に手を入れられるのがデスクトップアプリ開発の面白さだと感じています。
「ながラーニング」でも、ステップ1ではUI変更、ステップ2ではロジックの中核に踏み込み、これを掛け合わせることで学習を”待ち時間”から”攻めの時間”へと変えることができました。
UIもロジックも一気通貫で手を動かしながら、ユーザー体験を改善していくことに興味がある方、ぜひ一緒に開発しませんか?
募集要項「ソフトウェアエンジニア(コアプロダクト開発チーム)」に詳しいスキル要件も掲載していますので、お気軽にご覧ください。
![]()
MENOUは一緒に働く仲間を募集中です!
開発メンバーの記事もあります💁