Monoxer Intern Report #1_ファイル検索機能の追加(sakabe)

はじめに

モノグサ株式会社でソフトウェアエンジニアとして約2ヶ月インターンさせて頂きました、sakabeです。名古屋工業大学で情報系の学科に所属しており、ネットワークに関心があります。

なぜモノグサのインターンに参加したのか

モノグサ株式会社との出会いは、AtCoderJobsでした。私は競技プログラミングに取り組んでいて、AtCoderのコンテストに毎週末参加していました。普段から取り組んでいるコンテストサイトにインターンの求人があり、競技プログラミングを取り組んでいることを評価して頂けそうだと思いました。 面接の段階でいくつか取り組む課題を提示して頂き、その課題に取り組んでみたいと思ったので参加を決めました。

モノグサでのインターンで主に取り組んだことと、その中で得た学びや気づき

取り組んだこと

私が担当したのは、共有ライブラリ(先生が生徒に配信する問題や学習計画、小テストを管理する画面)の改善でした。いくつか小さな課題に取り組みましたが、メインテーマはファイルの検索機能の追加でした。 問題背景として、一部の組織では大量にファイルを作成し共有ライブラリに格納しているので、目当てのファイルを探すのに時間がかかることがありました。 最初に思いついたのは、SQLのLIKE句を使うことでした。しかし、ファイルが増えるに連れて検索に時間がかかることが容易に想像できたためすぐに却下されました。 次に思いついたのは、索引(index)を作ることです。文字列のindexの貼り方が大きく2種類あります。意味ごとに分ける形態素解析と、文字数ごとに分けるN-gramという方法です。簡単な例を紹介します。

f:id:corp_monoxer:20211006164942p:plain

形態素解析では日本語の辞書を元に分かち書きします。そして、単語ごとにindexを作成します。N-gramでは、1文字ずつずらしながらN文字ごとindexを作成します。上記の例だと、京都という検索をかけた時に形態素解析では見つかりませんが、N-gramでは見つかります。 ファイルの検索という用途では、固有の文字列が多いことや検索の漏れが少ない方が良いという理由でN-gramを採用しました。このように、実装方針が立っていない課題を与えられ、解決方法を自分で探すことから始まるので、とてもやりがいが大きかったです。

f:id:corp_monoxer:20211006164952p:plain

得た学び

バックエンド、フロントエンドと役割を分けているのではなく、機能ごとにチームが分かれているので2つの言語を使いました。どちらの言語も初めて触りましたが、簡単な課題から取り組むことで徐々に言語に慣れていきました。 チーム開発は初めてで、大規模なコードはどこから編集していいのか戸惑いました。メンターの方に、コードの探し方を教わり、少しずつコードが読めるようになりました。コードのレビューも丁寧で、他の人が読んだときにわかりやすいコードが書けるようになったと思います。なぜそのように書くのか疑問に思ったときに質問をすると、納得する回答が得られました。

モノグサの社員やメンター、他インターン生とのやりとり

隣に座ったインターン生と何度か話すことがありました。他のインターン生もおやつ会を通してコミュニケーションを取ることができました。ここで驚いたのは、それぞれ取り組んでいることが違うことです。どんなことに取り組んでいるのかとても興味深かったです。 お昼にフリースペースでご飯を食べていると話しかけてくださる社員さんもいて、キャリアの相談に乗って頂きました。モノグサには中途採用の方が多いので、前職の話や転職活動についての貴重なお話を聞かせて頂きました。 メンターの方には、毎日1on1をして頂きました。わからないことを質問すると、すぐに答えが帰ってきたのでとても心強かったです。

インターンを通じての感想

ほとんど開発経験もない私ですが、このようなインターンを体験させて頂けて大きく成長出来ました。本物のチーム開発を体験できたことで、個人の開発では、気にしなかったことにも注意が向くようになりました。気軽に質問をする雰囲気を作って頂いたメンターさんには特に感謝しております。