Monoxer Intern Report #4_API設計と追加(yokozeki)

自己紹介

こんにちは、モノグサでソフトウェアエンジニアのインターンをさせていただいた横関です。 お茶の水女子大学の4年生で、プログラミング言語の基礎理論を扱っている研究室に所属しています。

参加した理由

AtCoderJobsというサイトで夏季インターンを探していたところ、モノグサのインターンに興味を持ち、応募しました。興味を持ったきっかけは、記憶にまつわる課題をソフトウェアの力で解決しているところが創造的で素敵な会社だと思ったことでした。また、期間が長く勉強になることが多そうだったことも魅力的でした。 参加の最終的な決め手は、面接の時の雰囲気が終始穏やかだったことです。

取り組んだこと

今回のインターンでは、Monoxer APIという外部APIにいくつかのAPIを追加しました。インターンの前半はアカウント管理のためのAPIの追加をしていました。後半は主テーマとして、振り分けルールという便利な機能のAPIを新しく作っていました。

Monoxer APIとは
Monoxerはただの学習アプリではなく、塾・学校・会社など、記憶させたいものがある組織に向けて記憶のプラットホームを提供しています。学習者に何を記憶させたいかは、学習者の属性(所属クラスや志望校など)によって変わります。そのためMonoxerには、学籍番号などのID、〇年〇組といった所属など、色々な情報を登録できます。 クラス変更や学習者の追加などが発生した場合、その情報をMonoxerに反映したいときがあります。その反映は管理画面から行うことが出来るのですが、組織の規模が大きい場合は、管理画面からではなく、その組織のシステムから直接行うと便利です。

Monoxer APIは、そのような場面で使われていて、Monoxerサーバーと外部システムとの間のインターフェースとなっています。 f:id:corp_monoxer:20211007120035p:plain

振り分けルールAPIの追加
Monoxerにはクラスという単位があり、クラスごとに学習者に記憶させたいものを指定できます。振り分けルールとは、アカウントをクラスに自動で振り分けたいときに適用されるルールです。アカウントの情報とクラスの情報を組み合わせて、あらゆるパターンでルールを作ることができ、組織の仕組みに柔軟に対応できるようになっています。

インターン前半で取り組んだアカウント管理APIの方はすでにいくつかのAPIが存在していたのですが、後半の振り分けルールAPIの方は既存のAPIがありませんでした。そのため、JSONの構造や、「どのようなAPIを揃えて振り分けルールの管理を可能にするか」という点から考えました。

API設計
どのようなAPIを揃えるかという部分では、分かりやすく使いやすいAPIにするためにきれいな設計を心がける必要がありました。 Monoxer APIは、RESTの原則に基づいてAPI設計されています。リソース指向アーキテクチャについて勉強してみると、統一的で分かりやすく、おもしろいと思いました。

f:id:corp_monoxer:20211007120131p:plain

得た学び

実際の製品のコードを読んだり書いたりする体験ができて、今まで勉強できていなかった部分(読みやすいコードを書く・APIの設計・データベース周辺)が勉強できました。レビューがとても機能していて、社員の方から、可読性に関するレビューをたくさんいただきました。 Scalaという言語を初めて使ったのですが、Scalaについても色々なことが分かるようになりました。

社員さんとのやりとり

初日にメンターさんから1:1の頻度はどのくらいが良いか聞かれ、小まめに見てもらえるとありがたいと答えたところ、毎日1:1を設定していただけることになりました。心強かったです。
レビューやミーティングではどの社員さんも言葉遣いが柔らかく、働きやすかったです。 またコロナ禍で控えめだったのですが、ボードゲームや、社員の方々・他のインターン生との会話も楽しかったです。

さいごに

エンジニアとして働いたことが無かったので、インターンには勉強になることがたくさんありました。モノグサのみなさま、2ヶ月間ありがとうございました。