はじめまして!エムスリーのデジカルチームでソフトウェアエンジニアとしてインターンシップに参加した藤原です。
この記事ではインターン中に行なったタスク内容とエムスリーでのインターンシップの感想や学びをお伝えします!
エムスリーでの働き方などをお伝えして、インターンや就職を考えている他の学生の参考になることを願っています!
自己紹介
私は普段は東京理科大学の修士1年でデジタル通信に関する研究を行なっています。 UWB(Ultra Wide Band)という高精度な測距測位精度を誇る通信方式の研究をしています。この技術は位置測位システムなどに活用されています。具体的にはAirTagやiPhoneなどにも活用されており「探す」にも使われている技術です。
業務内容
インターンシップの業務内容は実際のチームにアサインされ、2週間で環境構築・実装・テストを行い、チケットを消化していくスタイルです。
また、タスクの内容もメンターの方と相談しながら、選択できるフルオーダーメイド型という部分も魅力です。私がアサインされたチームのプロダクトである、デジカルはクラウド型の電子カルテサービスで7000件を超える導入件数の実績がある大規模なプロダクトです。
このような大規模なサービスならではのタスクをいただき、技術的にも成長したいと思い、その旨を伝えたところ、パフォーマンス向上に関するタスクをいただきました。
具体的なタスク内容としては、「ブラウザで2本のチャンネルでロングポーリングしている部分を1本化することによってリクエスト数を削減する」というタスクです。ここからタスクの背景や詳細をお伝えしていきます。
前提
まず、前提として、規模が大きくなるにつれて増えつつあるデジカルのリクエスト数を削減したいという思いがあります。
背景
タスクの背景としては、現在、デジカルにおいてコネクション数が増え、リクエスト数が増加しています。その中でロングポーリングしている2つのチャンネルがリクエスト数の約26%を消費しています。この部分を最適化することによってリクエスト数の削減につながります。具体的にはロングポーリングしているチャンネルを1本化できれば、期待値としては約13%ほどのリクエスト数削減が期待できます。
そのため、ビジネス面や今後の実装面でも非常にインパクトが大きいタスクになります。
技術スタック
ロングポーリングの部分はDSPSというGo製のPub/Subサーバーのライブラリを用いて実装しています。
DSPSを用いるメリットとしては、Redisとの連携、JWTの設定が容易、ライブラリ化されているため、実装を簡潔に行えるという点があります。
その他、バックエンドはRuby(Ruby on Rails)、フロントエンドはTypeScript(React)を用いています。
取り組んだタスク
やったこととしては大きく3点あります
- DSPSにおいてロングポーリングを1本化するための新しいチャンネルを定義
- バックエンド側で新しいチャンネルにリクエストを送信できるような実装
- フロントエンドで処理が重複しないように共通化
ロングポーリングの処理はDSPSサーバーとPub/Subサーバー両方で動いている部分もあったため、DSPSサーバーで通信を行えるように一部移行しました。DSPSサーバーへの移行部分や、フロントエンド処理の共通化は今後の移行の際の助けになれば嬉しいです。
また、DSPSサーバーへの切り替え、チャンネルの1本化により、既存のテストに通らなくなる部分も多かったため、テストコードの修正も行うことができました。
インターンシップを通しての感想
エムスリーのインターンシップでは様々な貴重な経験ができ、間違いなく今後の私にとって、糧となると思いました。具体的な要素をこれからお伝えします。
「やっていき」の精神
エムスリーのソフトウェアエンジニアの最大の特徴としては、バックエンドやフロントエンドなどといった役割が分かれておらず、タスクベースでフロントからインフラまで一貫して実装するという部分です。私自身、フロントエンドの経験が少なかったため、実装のキャッチアップや技術を身につける部分に手こずってしまう部分は多かったですが、一気に集中して取り組んだため、この短期間でもかなり理解が進み、実装をやり切ることができました。また、メンターの方とペアプロのような形でサポートをしていただく機会もあり、細かな作法や開発手法についても学ぶ部分が非常に多かったです。
年次に関わらずできる人に任せていく文化であり、その前提には技術力の高い人々が集まっている環境であるからこそだと感じました。
また、技術が目的ではなく、プロダクトをより良くしていくために高い技術力を活かしていきます。プロダクトをより良くしていきたい、という思いが開発へのモチベーションにつながるという部分は自社開発ならではのメリットだと思いました。私もプロダクトに情熱を注いで開発に取り組みたいと思っているので、その環境の中で開発できたのが良かったです。
社内の雰囲気を肌で感じることができた
インターン期間中は社員と同じように定例ミーティングやイベントに参加させていただき、社内の雰囲気を肌で感じることができました。
朝にはDaily Scrumという前日の進捗確認と当日のやることを擦り合わせる会があるため、リモートでもアラートを上げやすい環境にあります。また、zoomではチャットが常に盛り上がっているため、伝えたいことを伝えやすい環境にあり、コミュニケーションミスが起こりにくい環境になっている点が非常に良いと思いました。
Tech Talkという社内のLT会や、社内のエンジニアが一同に集まってナレッジを共有し合うミーティングにも参加させていただきました。インターンシップに参加する前にエムスリーの印象として、ギークな人々の集団、というイメージがありましたが、まさにそれを体感するような会でした。そのような環境で過ごすことで常に刺激を受け続けることができる環境にあると思います。また、自分の基準を常に高い位置に置ける環境にあると思いました。
エムスリーの公式テックチャンネルでもその雰囲気を感じることができると思うので興味のある方はぜひ見てみて下さい!
大規模サービスに触れることができた
大規模なプロダクトのリクエスト数を削減し、パフォーマンスを向上させる、という経験は学生では中々経験する機会はないと思います。そのようなタスクを任せていただき、実装できたのは非常に稀有な経験になり、今回の経験が自分の頭の中のリソースにストックされることにより、今後のエンジニア人生において助けになる時が来るのではないかと感じました。
おまけ
2週間のインターンシップの内、初日と最終日に出社するのですが、出社日にはランチをご馳走になったり、業務後には飲み会にも誘っていただきました!
業務関係なく、就活の話や今後の人生の話、その他色々な話をすることができ、密度の濃い、忘れられない2週間になりました!
最後に
一般的なインターンシップは学生何人かに対して、開催されるところが多いと思います。エムスリーのインターンシップは基本的には期間中は学生1人がチームにアサインされ、メンターがついて実際のタスクを遂行していくスタイルです。このためフルオーダーメイドで非常に密度の高く、成長できる環境が整っています。技術的に難しい部分、苦労する部分も多かったですが、それを乗り越えるたびに成長を実感しました。
興味がある方はぜひエントリーしてみてください!