こんにちは!2020年7月にアカツキでサマーインターンシップを行いました栁です!
COVID-19(新型コロナウイルス感染症)、世の中は本当に大変なことになりました。僕のインターンシップ活動も例外ではありません。 なんせ、インターンシップが完全リモートで開催されました。 出社は0回、メンターはおろかアカツキの社員さんと1回も直接顔を見ることなく終わります。
「それじゃインターンシップの意味なくない?」「ちゃんと仕事できるのか心配……」
僕も開始前はそう思いました。でもインターンシップで就職前に一足先に完全リモート勤務を体験できてよかったと今ははっきりと言えます。 インターンシップだったからこそ、完全リモート勤務のいいところと、意識して気をつけるべきところをかなり明確化することができたのです。
3週間の完全リモートインターンシップで自分がどのような活動をしたのか、何に気をつけたのか、皆様に共有します。
はじめに
普段は電気通信大学院の修士2年としてSNS上からフェイクニュースを自動で検出するAIモデルの研究開発を行う傍ら、株式会社justInCase Technologies(jICT)にて少額短期保険サービスのバックエンド開発を行っています。 「修士2年だから21卒じゃないの?」と思う人もいるかもしれません。実は8月から1年間の研究留学を行うために卒業を1年送らせて22卒となる予定でした。コロナのせいで22卒のプランは破綻寸前になってしまいましたが……
そして同じく予定されていたインターンシップはフルリモートに。限られた期間で最初から最後まで完全リモートで活動するのはこれが初めてでした。
このエントリーでは、
- なぜアカツキのインターンシップに参加したのか
- インターンシップの内容と環境
- 実際に活動において気をつけたポイント
- 全体の所感と提言
をまとめました。「コロナの影響でインターンがフルリモートになってしまった……」な学生さんはもちろん、初めてメンターを行うはずがフルリモートとなり不安を覚えるエンジニアの方にも大きなヒントになるでしょう。是非ご一読ください。
アカツキのインターンシップに参加した理由
僕がアカツキの名前を知ったのは自分が学部1年だった頃(2015年)に、アカツキのエンジニアが大学に講演会に訪れたことでした。 そこから時代は流れ、本格的にインターンシップを検討し始めたのは今年開催された逆求人イベントでした。
当時自分はjICTにてバックエンド開発の経験こそあれ、規模の大きいシステムに触れる経験が足りていないのを実感していました。 そのため、大規模システムに触れることができる完全就業形インターンシップで、(留学の影響もあったため)8月までで完了するものを探していました。 アカツキが提供しているゲームはいずれも規模の大きいものが多く、またゲームという性質上ユーザからのリクエスト数も瞬間的に多くなるシチュエーションがあり、そういった状況下でも安定してサービスを提供しているシステムはどのような形で開発・運用されているのか、非常に強い興味を持っていました。
また、事前にインターンシップが完全リモートになることは告げられていましたが、リモートワーク自体はjICTで既にある程度経験していました。 最初から最後までリモートでやるのは初めてでしたが、これまでの経験を活かせば十分出社と同じバリューを提供できると考えました。
以上より、僕はアカツキの完全就業形インターンシップに参加することにしたのです。
実際の活動内容と環境
この章では、完全リモートとなったインターンシップで自分がやったことと、活動の環境を紹介します。
技術的に行った作業
今回はスマートフォン向けゲームアプリのAPIサーバを対象に、以下の実装を行いました。
- 実装予定の新モードと既存モードのアップデートとのすり合わせ
- 既存コードのリファクタリング
前者では、既存機能のアップデートにより新たに追加された機能が、まだ実装前の新モードと矛盾を起こさないように開発中の新モードの手直しを行いました。後者では、自分のメンターがプロジェクトにjoinする前から存在する古いテストコード(いわゆるレガシーコード)のリファクタリングなどを行いました。
勤務環境の紹介
勤務はすべて自宅から行いました。使用するPCは事前にアカツキから送付されたPC(MBP 13")を使いました。 また、自分は実家暮らしでインターネット環境は予め整っていましたが、そうでない人を対象にWi-Fiの貸与も行っていました。
開発においては多くの外部サービス(GitHub, JIRA, Confluence, etc.)を使用しており、一部はVPNを経由する必要はありますが、OneLoginによってシームレスに使えるようにされていました。
社内コミュニケーションは基本Slackを使っており、プロジェクト毎にワークスペースが区切られており、細かくチャンネルは目的別に分けられていました。 また対面での会話を行いたい場合は、Zoomを使用していました。 自分が配属されたチームでは、任意で常時接続用のZoomルームも用意されていて(カメラやマイクの有無はもちろん任意)、朝会や夕会もその部屋で行われました。
気をつけたポイント
この章では、実際の勤務において気をつけたポイントを共有します。
初めてrailsを扱った
自分のメイン言語はPythonであり、railsを扱うのはこれが初めてでした。 勤務開始前にrailsチュートリアルで重要な章を列挙して頂き、事前に一通り読んでおくことで比較的スムーズに勤務を進めることができました。 また技術的にもわからない部分は気軽にメンターの方へ質問ができる状態でした。
アンチパターンとの格闘
技術的な部分では最も手を焼いた部分でした。 例えばrequestを送って挙動を確認するテストコードを例に取ると、既存のものはresponseの構造と対応する値の型のみを確認して、DB内のレコードの変化を一切確認しておらず、だいぶ緩い形をとっていました。これでは起きうる障害を早い段階で捉えることは難しくなってしまいます。
最初は自分は既存テストコードをリスペクトしてその意図を忠実に反映した形にしていましたが、リスペクトすべきは実装の部分であってテストコードではないのを痛感しました。 それを実現するためにテスト上でDBレコードを発行し、request送付後の変化を調べる処理を追加することで対処しました。
やはり規模が大きいのも相まってコードの数も非常に多く、中にはメンターですら首を傾げるような処理もあり、読解の難易度が少し高かったです。 こういったサービスに今後関わるにはこういったアンチパターンを孕んだレガシーコードとの格闘は必須であるため、インターンが終わった後には "レガシーコードからの脱却" を読むことにします。
レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
- 作者:David Scott Bernstein
- 発売日: 2019/09/19
- メディア: 単行本(ソフトカバー)
対面でのコミュニケーションが封じられた
完全リモートは即ち直接面と向かって相談することができないことを意味します。 実際に自分がとったコミュニケーションを調べてみると、大まかにSlack9割Zoom1割でした。
円滑なコミュニケーションのため、Slack上ではこれから実装するトピックのスレッドを立て、そこへのレスポンスで"どんなコードを入れたか"・"どんな結果が返されたか"・"何が原因として考えられるか"・"対策でどんなコードを入れたか"・……といったサイクルをとにかく仔細に入れることを意識しました。 こうすれば、メンターの手が空いた時に読んでもらえる上に、急を要する際はメンションを飛ばすことで手軽に相談できるような環境を整えました。 そしてそれをメンターはもちろんワークスペースのエンジニア達から見える場所に書き記すことで、時にはメンター以外の人からの助力を得ることにも繋がりますし、後から自分が見返してこのようなエントリーを作る際にも役立ちます。 それでも解決が難しければ、Zoom部屋を立ててメンターの方と画面共有でリアルタイムで会話しながら問題解決を目指しました。
これは是非リモートワークの際には試してみて欲しいです。
全体の所感
大規模サービスのコードに触れられた
当初の目的として掲げていた規模の大きいサービスの内情を知ることができたのは非常に大きかったです。 常に多くのチームがそれぞれの目標やタスクに向けて動くことで、発生した問題に対処しつつ新たな要素の追加を実現していることを肌で感じることができました。
完全リモートをいち早く体験できた
1度も出社しない勤務を就職前に行うことで、今後の自分の働き方がどのような形になりうるかを具体化することができました。 情報共有のやり方はこれまでとは大きく違うフォーマットが求められるので、早いうちにそれに慣れる機会となりました。
多くの人々と知り合うことは難しかった
基本的には会話する相手が配属先のチームに限られるので、他の部署の人と会う機会は出社する場合と比べて少なくなりました。 一応人事の方とはリモート昼ごはんで合うことはできましたが、こういった機会を事前にちゃんと用意する必要があり、偶然の出会いが生まれにくいのは少しアカツキの文化を知る際に障壁となりました。
提言
- 完全リモート勤務はタスクをこなす分にはあまり障壁にならないので心配は無用
- 多くの人と知り合う機会は減るので、積極的にコミュニケーションを仕掛けておいて損はない
さいごに
短い期間でイレギュラーとなる勤務の形となりましたが、実際のサービス運営の現場で活動することで、今後の働く形と自分の技術力を磨く大きな経験をさせて頂きました。間違いなく自分の今後を考える上で大きな財産となりました。本当にありがとうございました。