hirarafu’s diary

twitter:@heb1tigo

MIXIのインターン最高だった〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!!!!!!!!!!明日以降も出社させてください

はじめに

8月19日から9月30日までの一ヶ月半MIXIインターンをさせていただきました。

普段参加記は書かないんですが、あまりにも楽しすぎたのでインターン期間中に行った作業内容の一部とか個人的に感じた会社の雰囲気などを書こうと思います。

参加したプロダクト

インターンにはminimoという「サロンスタッフを直接予約できるサービス」のバックエンドとして参加しました。 一ヶ月半のインターン期間を得てサービスが参加前よりもさらに好きになったので本題に入る前にminimoのサービスについて少し紹介します。

minimodel.jp

 『minimo』の一番の特徴は、サロン(店舗)を予約するのではなく、施術をしてくれるスタッフ個人を予約するという点です。一般的に「旅行に行く」「ご飯を食べに行く」際にはホテルやレストランといった店や施設を検索し、予約すると思いますが、美容施術の場合は、店や施設よりも、施術スタッフ個人との相性やセンス、スキルが大事なポイントになります。そうしたユーザーの気持ちに応えるべく『minimo』では「どのサロンに行くか」よりも「誰に施術をしてもらうのか」の観点で、美容サロンの検索・予約ができる仕様にしています。

またメニューは、ヘアやネイル、マツエク・マツパ、アイブロウ、エステ・リラクゼーションなど多様なジャンルに対応していて、さらにminimo限定価格、minimo限定メニューなど独自のコースを豊富に取りそろえているのも、特徴の一つです。“コスパよく、自分に合った施術を受けたい”と考えるユーザーから高い支持を獲得しています。

10周年を迎えた『minimo』。これまでの成長と今後のビジョンについて事業部長に聞いた

minimoは施術スタッフ個人に対して予約が出来るWeb、アプリの両方で展開されているサービスです。施術スタッフの方がどのような事が得意かという事がプロフィールから確認できますし、過去の施術写真から実際に施術後のイメージがしやすいだけでなく、予約後にスタッフの方と直接やり取りすることが出来るため、自身が求めている施術イメージに近い体験がかなりしやすいサービスだと思います。

私自身もインターンの選考を受ける前に実際に使ってみて、使いやすかったのでそこからずっとminimoで美容院の予約をしてます。めちゃくちゃいいサービスなので是非。

行ったタスク

行ったタスクは大まかに分けると以下の3つです。

  • minimoで使用されている管理ツールのPerlからGoへの移行の一部
  • GitHub Actionsを用いた複数リポジトリに跨がるCI/CDの特定のタイミングでの通知機能の追加
  • 既存のCI/CDのGitHub Actionsへの移行

全体的にコードの量が多くて、でっか....でっかいなぁと思いながら作業してました。調査8割、コードを実際に書く時間が2割みたいな割合だった気がします。

タスクに関しては最後にやったので記憶が鮮明で特に思い出深いCI/CDの移行について詳細に書きます。

GitHub Actionsへの既存のCI/CDの移行

minimoの管理ツールではECSでサービスの運用がされており、コードに変更 を加えてPRを出しPR上で特定のコメントを打つとCodeBuild上でimageがbuildされてECRのimageが更新され、minimoの複数リポジトリから生成されたimageを保持するリポジトリ(imageをECSの更新を行うCI/CDに用いるための情報を付随させて管理をしている)の情報を更新するCI/CDが存在しています。

PR上での動作を元にCI/CDを発火させるためGitHub Actionsを一度呼び出してからCodeBuildでメインの処理を行うような記述になっており、

  • Logが分散する
  • 複数サービスに依存しているため管理の手間が増える
  • GitHub Actionsの方が簡潔に書ける

などの理由からCodeBuildが行っている上で述べた処理部分を丸々剥がして全部GitHub Actionsへと移行するというタスクを行いました。

review、staging、productionの複数の環境の条件、環境内でのmainへの更新かどうかなどの複数の条件があるためWorkflowが個別に分けられており、別々のWorkflowからCodeBuildが呼び出される形式になっていたので、Codebuildの処理をGitHub Actionsに起こす際に共通化出来る部分はGitHub ActionsのSummaryや全体のLogの見やすさを考えてComposite Actionsで共通化して移行を行いました。

移行自体の処理がほぼ終わった後実行時間を測ってみるとCodeBuildに対応する移行後の処理が1.5倍ほどの実行時間になっており、これはまずいと思いながら実行時間が遅い原因を調べた後Dockerのキャシュや、DockerビルダーのBuildkitの機能として備わっているキャッシュマウントなどの試行錯誤で実行時間を短縮しようとしたのですがうまく行かず、インターン期間の終了が迫っていたためSelf Hosted Runnerのスペックだけ上げることによって移行前とほぼ同等の実行時間になるように解決しました。移行後のGitHub ActionsのCPU使用率を見てみると100%に張り付いている瞬間があったのでSelf Hosted Runnerのスペックを上げることは適切ではあったものの、最終的にキャッシュで実行時間を短縮できなかったのがかなり悔しいです。

このタスクに関連する反省点として、キャッシュの試行錯誤に時間をかけすぎてSelf Hosted Runnerのスペックを上げて移行後のCI/CDをmainにマージするのがインターン終了日当日になってしまい、マージ後考慮できてないユースケースが発覚してrevertして最終成果発表数分前まで作業するというような状態になったので、最初にSelf Hosted Runnerのスペックを上げて本番環境にマージしてしまって正常に動いていることを確認した後に残りの時間でキャッシュの試行錯誤を行えばよかったなという気持ちになりました。

タスク内容以外に関して

会社は渋谷の駅直結の場所にあり、社内に社食があります。しかもめちゃくちゃ安いです。1g1円のビッフェ形式なので僕の場合は量をかなりとっても600円ほどにしかならず、最初の週でおいしいな〜と思いながらバクバク食いまくって血糖値スパイクでまともに昼食後作業ができなくなるのを経験してから以後はちょっと控えめにするようになりました。

昼食の時間には定期的に他の事業部のインターン生やエンジニアの方とのランチの機会なども提供してくださり、自身の事業部以外のこともかなり聞くことが出来ました。最終日は前日の日曜日に業務とは関係ないパソカタしてたら気がついたら夜周ってて三時間ほどしか睡眠が取れなかったので昼食会に出席した際に血糖値の上昇に耐えられず半分寝てしまっていました。本当に申し訳ありませんでした。

また、インターン生自身がやりたいことをめちゃくちゃ尊重してくださって、私はPerlからGoへの移行をメインで行う予定で参加してインフラはあまり触る予定ではなかったのですがGoのコードを読んでいたら自身で作業するだけなら使用料金的に絶対にさわれないような業務のインフラとの関連箇所が出てきてインフラへの興味が膨れ上がり、インターン3日目以降からメンターの方にずっと「インフラやりたいです」と言いまくってたら前半の終わり頃からCI/CDのタスクを任せていただけるようになりました。インフラ全然分からなかったんですがインフラ担当の方々に質問をしまくり、とても丁寧に回答をいただけたので本番環境に紐付いたCI/CDを改善するようなタスクをあまり躓く事なく進めることが出来ました。タスクとは関係ない部分でもminimo全体のインフラ構成を質問する時間を定期的に設けてくださったり、インターン期間中にあったAbemaにminimoを紹介していただくという施策の番組放映中のインフラ対応に参加させていただけたりしたので本当にありがたかったです。

minimoでは事業部内のコミュニケーションが活発なため、インフラ以外のCS、QA部門の業務内容についても業務をされている方に個人的に質問しに行けば詳細に教えてくださったのでインターン期間中でminimo全体のかなり広い範囲について知ることが出来て最高でした。CSの業務内容やこれからの展望に関して教えていただけるような機会も設けていただいたためtoCサービスの根幹であるCS業務の解像度がかなり深まり、ユーザーの方々に対して真摯に向き合っているからこその問題や、サービスを使われている方の体験がよりよくなるこれからの改善方法などを知れてよりminimoへの好きの気持ちが強くなりました。

最後に

MIXIminimoにバックエンドで参加したのですが、会社内のコミュニケーションが盛んなお陰でいろんな方と関わることが出来て、気がつけば最終的には事業部全体、会社全体について詳しくなった状態でインターンが終了していました。

インターン楽しかった〜〜〜〜〜!!!!本当に楽しかったです。どれぐらいかというとリモートでの参加も可なのに前半は毎日通勤4~5時間かけて意地でも出社するぐらい楽しかったです(後半はホテルから通う事になったので通勤時間はとても短くなりました)。本当に楽しかったので楽しかった!最高だった!以外に特に言うことがなくて楽しかった最高だった連呼botになってます。インターン終わってほしくなくて最終日の朝寝不足も相まって感情的になってホテルでちょっと泣きましたし、最終成果報告会で謝辞を述べる際に泣いてしまわないか発表当日はかなり心配でした。実際は発表練習の時間に当てようと思っていた時間が前述した作業で消し飛んで練習してない状態で発表を行う事になり、その状態で部屋に入ったら現地にいる方だけでも十数人の方が参加してくださっていたため、寝不足と練習不足と緊張で上がりまくって超早口で喋ってしまい泣くことはなかったですが。一ヶ月半本当にあっという間すぎて発表が終わった後も「インターン終わりたくない〜このまま出社させてください。残りのタスクがしたいです。」と言いまくっていたのですが、終わっちゃいました。めちゃくちゃ楽しかった分とても寂しいです。本当は今日も出社したいです。大学の授業がなければ....他のインターン生の方みたいに10月以降も参加出来たのに.....。

....名残惜しいですが終わってしまったものはしょうがないので、最後は元気よく謝辞を述べて参加記を締めくくります!

インターン本当に楽しかったです!メンターのFさん、人事のOさん、minimoバックエンドチームの方々、フロントエンドチーム、QA、CSの方々、アプリチームのRさん、関わってくださった皆さん本当にありがとうございました!!!!!!!!!!!!!!!!!!!!!!!!