Monoxer Intern Report #12_タスクの検索性改善

自己紹介

モノグサのソフトウェアエンジニアインターンに参加した山田です。現在は東京大学農学部でイネの研究をおこなう傍ら、ut.code();というプログラミングサークルでWeb開発をしています。

参加を決めた理由

私が今夏のインターンで達成したかった目標は以下の2つです。

  1. 個人開発やサークルでの開発からステップアップし、本格的な開発を学ぶ
  2. ソフトウェアエンジニアとして働くイメージをつけ、今後のキャリアを具体的に決める

モノグサのインターンでは、実際のプロダクト開発に関わる中でこれらの目標を達成し、自身の成長に繋げられると考え、参加することにしました。

取り組んだこと

記憶アプリMonoxerでは、学習者はタスク(課題)を使って学習しています。組織によっては大量のタスクを据え置き型で配信しており、多い場合には学習者あたり1,000件以上のタスクを抱えています。そのため、学習者が特定のタスクを探すには、タスク一覧画面で大量にスクロールをする必要がありました。

そこで本インターンでは、「Deep Link」と「タグ検索」という2つのアプローチでこの問題に取り組みました。

Deep Linkとは、ユーザを特定のアプリに遷移させ、指定したアプリ内コンテンツに誘導するリンクのことです。従来のMonoxerでは、Deep Linkを使ってアプリを直接開くことはできましたが、アプリ内の特定のコンテンツに誘導する機能はありませんでした。

そこで、アプリ側(iOS/Android)で、

という形式のリンクを踏むとアプリが開き、タスク画面に遷移する機能を実装しました。 管理者がDeep Linkを使って学習指示を行う方法としては、以下の2通りを想定しています。

1つは、Web管理画面上で生成したリンクを塾や学校等で用いている外部サービスで共有し、学習者にリンクをタップしてもらう方法です。 もう1つは、Web管理画面上で生成した二次元コードを印刷し、学習者に端末のカメラアプリから読み取ってもらう方法です。二次元コードは、node-qrcodeを使ってフロントエンド側で生成しています。

以前より、URLから直接タスクを開きたいという要望は複数寄せられており、確かなニーズがありました。本機能により、管理者はより簡単に学習指示を行えるようになり、学習者はスクロールせずに特定のタスクにアクセスできるようになりました。

タグ検索

もう1つのアプローチは、管理者がタスクにつけたタグ(例: #8/31日分宿題)を使って絞り込みを行う機能です。従来のMonoxerでは、Web管理画面上ではタグを使ってタスクを管理していましたが、アプリ側ではタグを活用できていませんでした。

そこで、アプリ側(iOS/Android)でもタスクについたタグを使って検索する機能を実装しました。具体的には、検索窓の横にある絞り込みアイコンを押すと、タグで絞り込むための画面が表示され、複数選択でタグを絞り込むことができます。 選択可能なタグ一覧を取得するにあたっては、2つの方法を検討しました。

1つは、APIサーバーにタグを取得するためのAPIエンドポイントを追加する方法です。 もう1つは、APIサーバーからタスク一覧を取得する際に、すべてのタスクからタグを重複なく抽出する方法です。

この判断は悩みましたが、APIエンドポイントをむやみに増やすべきではないこと、学習者あたりのタスク数が最大1,700程度でありパフォーマンスに影響しづらいことなどから、最終的には後者を採用しました。

本記事の執筆時はまだレビュー段階ですが、タグによる絞り込み機能についても根強いニーズがあり、もしリリースされれば、管理者による学習指示のやり方を大きく変えることになるのではないかと考えていて、楽しみにしています。

インターンの感想

本インターンでは、SwiftとKotlinを使う機会が多かったです。どちらもはじめて触れる言語でしたが、既存のコードや公式ドキュメントを読み、詰まったら積極的に質問していたため、思いの外、詰まることはほとんどありませんでした。そのため、未経験の開発言語の募集であっても、恐れずに突っ込んでもよいという学びがありました。

一方で、ソフトウェア開発全般の知識面では困ることがあり、開発効率という点でも、人より手戻りが多かったように思います。この部分に関しては、実務経験というより基本的な理解が不足していることが問題だと認識しています。コードを書けるようになるだけではなく、どうして動くのか、どうしてそう書くのかといった仕組みや原理に近い部分も理解する必要があると感じました。

また、取り組んだテーマの難易度やインパクトの大きさなどから、インターン生ながら責任感とやりがいを感じながら働くことができました。そのおかげで、期間中は終始楽しく開発ができ、あらかじめ設定していた目標も達成でき、非常に充実したインターンとなりました。 貴重な経験をさせていただき、ありがとうございました。

Monoxerに限らず、世の中には解決したい記憶にまつわる苦しみがまだまだたくさんあります。記憶の苦しみを一緒に解決したいという方は、ぜひ採用サイトをご覧ください! モノグサでは職種問わず一緒に働ける方を募集しています! careers.monoxer.com