2022年8月~9月にかけてLINE技術職インターンシップ・ハッカソンコースを開催しましたので、その様子をご紹介します。
昨年・一昨年に続き、新型コロナウィルスの感染拡大に対する予防の観点からオンラインでの開催となりましたが、募集段階から多くの方に興味をお持ちいただき、最終的に総勢15名の方々にご参加いただきました。
このコースは、本格的なチーム開発を体験していただくこと、新しい技術に挑戦して今後につながる学びを得ていただくことなどを目的としています。今年は5名を1チームとして、全3チームに分かれて実施しました。
それでは、全13日程に及ぶ開催の様子を順にレポートしていきたいと思います。
Day1~3 オリエンテーション
今年のハッカソンは全13日間の日程となっており、最初の3日間はオリエンテーションを行いました。
昨年は全10日間で開催しましたが、本格的な開発に入る前の導入段階=環境のセットアップ等にしっかりと時間をかけていただき、十分な開発期間を確保したいという意図で変更しています。
オリエンテーションはいくつかのパートに分かれますが、まずはじめにハッカソンを主催する京都開発室の室長よりハッカソンのキックオフとしてコンセプトやテーマに関する説明がありました。
なお、社員もインターン生も、LINEのデザインチームが作成したオリジナル背景を壁紙にしています。
開発テーマ
今回のハッカソンのテーマは「フードデリバリードライバーアプリ」です。
一昨年からLINEグループのサービスとなり、京都開発室のメンバーも開発に携わっている「出前館」に関連するテーマを設けました。
このテーマですが、様々な角度の技術的課題に対して開発できることが最大のポイントになっています。
クライアント観点では、地図を中心としたユーザインタフェース設計や、双方向の通信を用いたアプリの設計を行うため、開発を行う上で検討事項が多くなるテーマを用意したかったという背景があります。
またサーバーサイド観点では、WebSocketやgRPCなどを用いた双方向の通信、インフラ構築、DB設計に加え、ユーザーや店舗の位置などを考慮したドライバーのアサインのアルゴリズムの検討など、多様な課題を解けるようにしています。
それぞれの経験や希望をもとに各5名ずつ計3チームに分かれて開発に臨み、最低限の機能要件が定められている以外は技術選定からアーキテクチャ、目玉となる機能の企画についてもチームの判断に委ねられました。
昨年のメッセンジャーアプリとは異なり、データのモデリングや仕様など設計面で考えることが少し増えたため、それによりチームの個性が出しやすいテーマとなったかと思います。
また今年は、「競争が生まれることでチーム間のナレッジシェアや交流に壁を作って欲しくない」というメンターたちの想いもあり、順位付けを敢えて行わないことにしました。
ただし、各チームの頑張りは様々な観点で称えたいということで、工夫した点や努力した点に応じた複数の賞を用意しました。
技術オリエンテーション
LINEのハッカソンは、実際にLINEのエンジニアが開発を行っている環境と同じ環境で開発を進めていけることも醍醐味のひとつです。
メンターとしてハッカソンの運営に携わっている京都開発室の現役エンジニアたちが順々に登壇し、各ツールのセットアップガイドやレイヤーごとの詳細なガイダンスを実施していきます。
ガイダンスではアーキテクチャに踏み込んだ内容なども話されており、WebSocketのデモや、ドメイン駆動設計、マイクロサービスなどをトピックとして扱いました。
この時間は早く手を動かしたい気持ちに駆られたりもするのですが、終わってみれば座学の内容も非常に勉強になった、とインターン生の方々からはとても好評でした。
交流会
3日間のオリエンテーション期間中には、ささやかな交流会も実施しました。
始まったばかりでまだ少し緊張感も残っている様子?ですが、せっかくの機会なので肩の力を抜いて他のインターン生や社員たちと親睦を深めました。
Day4~12 開発
開発
3日間のオリエンテーションが終わり、4日目からはいよいよ本格的な開発がスタートします。
LINEのプライベートクラウド「Verda」や各種オープンソースソフトウェア、GitHub Enterpriseなど、LINE内で実際に利用しているものを用いてどのように開発を進めるかをチーム内で決定します。
全てオンラインという制約がある中で、SlackやZoom、Confluence、Miroなどをフル活用し、メンターに相談を重ねて開発を進めていきます。
ファーストレビュー
開発を本格化させる前に、レビューを通してメンターたちと壁打ちを行います。
このファーストレビューでは、どういった技術選定を行ったのか、またその技術選定に関してどのような過程があったのか等を共有してもらい、それに対してレビューしました。
また2週間でのマイルストーンを検討して、最低でもこの機能は達成する、といった指針を各チームに定めてもらっています。
これにより早い段階で各チームが目指すプロダクト像を明確にし、開発を進めることができました。
また、要件をもとにしたデータのモデリング、アーキテクチャなどの設計に関してもレビューを行いました。
オフィスアワー
開発期間中には、例年好評のオフィスアワーも開設されました。
これは、インターン生が何か相談ごとや質問をしたいと思った際に、いつでもメンターとコンタクトが取れる常設Zoomです。
基本的には毎時、メンターが誰か1人以上は常駐するようにしています。
オフィスアワーでは、動作確認していて動かない、等の技術的な質問を受けたりしますが、中にはメンターとしても想定外だったすぐには解決できないようなバグや実装周りの問題などが発見されることもありました。
その際にはメンターも一緒に考えながらデバッグをしたり、解決策を調べたりしていました。
そのような時間を一緒に過ごすことで、エンジニアリングとは何か、課題解決とは何か、という部分をより実務に近い形で伝えることができるのがオフィスアワーの良さでもあります。
また、ハッカソンの課題に関すること以外の質問もOKでしたので、参加者の方が気になっている技術について雑談ベースで話したりもしていました。
ちなみに、各チームごとのSlackチャンネルにはメンターも参加しているため、ちょっとした相談であればSlack上で解決されていました。
2on1
中盤には、2on1としてメンターとインターン生の面談も実施されました。
経験やスキル、興味・関心がある技術領域と親和性の高いメンターがアサインされ、全員30分ずつ行いました。
まさに目下で進行しているハッカソンに関する相談はもちろんのこと、広く技術に関する話題やキャリアに関する相談なども見られました。
現役エンジニアとClosedな空間でしっかり話せる貴重な機会を用意しました。
シャッフルランチ会
開発真っ只中とはいえ、時には一息ついて周りと懇談する時間も必要ということで、チームの垣根を越えて行うシャッフルランチも実施しました。
Day13 成果発表会
最終日はいよいよ成果発表会が開催されます。
これまで伴走してきたメンターはもちろん、それ以外のLINEのエンジニアたちも参加してくれました。
少しの緊張感もありつつも、和やかなムードで各チームの発表がスタートしました。
各チームの特徴的だった点を簡単に紹介していきます。
チームBrown
チームBrownの開発したアプリは、実際のドライバーアプリを調査してUIを参考に開発を進めるなど、ドライバーに対するアプリとしてUXの完成度が高かったです。
サーバーサイド観点では、かなりの本数のAPIが作られていて、馬力のある開発をしていた印象を受けました。
またオブジェクトストレージを使った開発は全チームのうち唯一であり、アーキテクチャ面でもよく考えられていました。
チームCony
チームConyの開発したアプリは、ダークモードの実装やアプリがバックグラウンド時の状態管理等、正常系以外の部分も考慮できていた点が素晴らしかったです。
サーバーサイド観点では、Kubernetes, Redis, 音声認識, WebSocketなどの様々な技術を駆使していて、完成度が高いシステムになっていた印象です。
また、ドキュメンテーションに力を入れていたのも良いと感じたポイントでした。
チームJessica
チームJessicaの開発したアプリは、「ドライバーが注文を受ける」ユーザーストーリーに着目してUI(ヒートマップ等)及びシステムを構築していた点が特徴的で面白かった点です。
全チームの中で最も活発にコードレビューを行っていた印象があり非常に良いと感じました。
また、ドライバーのマッチングの最適化をグラフ理論を用いて実装に落とし込んでいたのは唯一の事例でしたので、その点も素晴らしかったです。
表彰式
すべてのチームの発表が終わったら、いよいよ表彰式に入ります。
既述の通り、今年は敢えて順位をつけず、各チームの工夫や努力を個別に評価する方針を取っています。
どのチームも素晴らしい成果物を発表してくれたので、メンターたちも大いに悩みつつも、今年のハッカソンの各チームの表彰結果は下記の通りに決定しました。
チームBrown | グッドUX賞 & チャレンジャー賞 |
---|---|
チームCony | グッドUX賞 & 完成度賞 |
チームJessica | インテリジェンス賞 & チーム開発賞 |
それぞれの賞は、メンターから見て下記の基準で評価されています。
- グッドUX賞・・・ユーザーへの配慮が感じられるような優れたUI/UXを実現できたかどうか、また魅力的なデザイン性の画面を作成した点や、実際に使う場合を想定して実装されている点等を評価しました。
- チャレンジャー賞・・・使用したことのない技術に挑戦し、うまくいかない部分に関しても原因を特定して解決できたかどうか、または解決できない場合にはうまくリカバリができたか等を評価しました。
- 完成度賞・・・多数のユーザーがいてもサーバ台数を増加すればスケールするアーキテクチャ設計になっている点、音声認識など実用的な機能が多い点、エラー処理やアプリがバックグラウンドにいる際の通信など、製品として必要な機能をよく考慮して開発されている点を評価しました。
- インテリジェンス賞・・・ヒートマップによる需要表示や、ドライバーアサインの全体最適化を最小費用流問題として定式化して解く等、アルゴリズムを活用した課題解決を実施した点を評価しました。
- チーム開発賞・・・リーダーシップや役割分担などが適切にできていることに加え、SlackでのGithubのPull Requestの通知機能の活用や、PRレビューの適切な実施など、ツールを活用してチーム開発を促進していた点を評価しました。
オンラインではありますが、賞状も用意して表彰式も行いました。
まとめ
以上で 2022年 LINE技術職インターンシップ・ハッカソンコースはすべて終了です。
限られた期間の中ではありましたが、本格的なチーム開発体験、新しい技術へのチャレンジ、それらを通した学びの機会になっていれば嬉しいです。
ご参加いただいた皆様、本当にありがとうございました!
インターンシップ・ハッカソンコース中に使用された技術の一覧
Server side | Language | Python, Go |
Framework・Library | Django, Gin, Gorm, Gorilla | |
Technique | gRPC, WebSocket | |
Client side | Language | JavaScript, TypeScript |
Framework・Library | React Native | |
Technique | gRPC, WebSocket | |
音声認識API | - | CLOVA Speech |
External Service | - | Google Maps Platform |
Database・Storage | - | MySQL, Redis, Verda Object Storage |
Infrastructure | - | Verda (Private Cloud), Docker, Kubernetes, Virtual Machine |