Monoxer Intern Report #14_手書き領域のフィードバック改善

自己紹介

モノグサの2023年のサマーインターンに参加させていただきました、北村と申します。(この北村さんとは別人です) 所属は千葉大学大学院の1年で、プログラム検証の研究を行っています。

参加を決めた理由

AtCoder Jobs の求人を拝見して、記憶定着にまつわるサービス開発という革新的なプロジェクトに目を惹かれたのが大きな要因です。 さらに AtCoder や ICPC のスポンサーとなっていたことも認知していたため、競技プログラミングに造詣が深い会社なのだと推察し、応募に至りました。

取り組んだこと

主に手書き領域のフィードバック改善に取り組みました。

当初の手書き形式の問題は学習者がなぜ間違えたのかわからないケースが多く、ユーザビリティの低下を招いていました。

(形が悪い)

(線が1本多い)

手書き文字の評価器は、お手本を元にユーザーの書いた文字を評価し、それぞれの画のスコアと文字全体のスコアを返す仕組みとなっていました。

文字全体のスコアが一定値を超えた場合不正解と判断し、スコアの高い画を赤く表示することでユーザーにどの画の形が悪いかを伝えています。さらにこの際、書き順が異なるなどの画は黄色で表示します(これは正誤に影響しません)。

しかし正解不正解の判定は文字全体のスコアのみで行われる上に、文字全体のスコアが一定以上であることと画のスコアが一定以上であることは同値でないため、なぜ間違いなのかがわかりにくいケースが多々ありました。

そこで、評価器がなぜそのスコアに評価したかの評価理由を返すよう改良しました。これは評価フローにおいてどこの if 文を通ったかなどを見て判断する形で組み込みました。 評価理由はデータの圧縮と実装の軽さの観点から、エラーコードのような数値で表現しています。

それに加え、取得した評価理由とパラメータを用いてアプリ側で適切なフィードバックテキストを表示する機能を追加しました。 フィードバックは吹き出し形式で表示することで視覚的にも情報が得られやすいものとなっています。

※この機能は当記事公開時点では未リリースです。
※画像は開発段階のものであり、リリースされるものと異なる場合があります。

これにより、学習者が不正解の理由を一目で理解できるようになりました。実際に使ってみても、以前と比べて間違えた時の納得感が増えたように感じます。

学び

入社当初は競技プログラミングと簡単な web 開発の経験しかありませんでしたが、実践的な業務を通じて GitHub での PR→レビュー→マージの流れや、仕様変更に強いコード設計の考え方を学びました。 さらに PR の過程でデザイナーさんと方針のすり合わせのためにやりとりすることもあり、組織的な開発プロセスについて多くの知見が得られました。 Kotlin でのコーディングは初めてでしたが、既存の洗練されたコードから学ぶことで強い静的型付けによる型安全性を実感することができました。

インターンの感想

社員さんと交流する機会が多くありましたが、ユニークな方が多く毎日が楽しかったです。それだけでなく、各々がモノグサをより良くしようという意志を持ち、自発的に動いているのを実感しました。 社内の雰囲気が厳しすぎず緩すぎず、まさに「ものぐさで行こう」というバリューを体現しているように感じました。

また、インターンであるにもかかわらずプロダクトの改良に向けてしっかりコードを書かせていただき、多くの学びが得られました。 実際に広く使われているコンテンツに自分の書いたコードが組み込まれていると考えると、不思議な気持ちになります。

非常に価値ある経験をさせていただき、大変感謝しています。