去年に引き続きLINE KYOTOにて、サマーインターンシップを開催しましたので、その様子をご紹介いたします。今年は去年の2倍の期間となる2週間のハッカソンコースで、新型コロナウィルス感染拡大防止の観点からオンラインでの開催となりました。
今回のインターンシップでは「LINEで実際に使われている技術を体験し、チーム開発を通じて、今後に繋がる学びを得ていただく」を目的に課題に取り組む形式で行いました。
オリエンテーション
今回は計13名の方にご参加いただきました。
オンライン開催ということもあり、首都圏、関西圏の他にも九州の学生にも参加いただくことができました。
初日から二日目にかけてはオリエンテーションを実施し、期間中に利用する技術、UXやプロジェクトマネジメントについて説明しました。
終始オンラインでのインターンになることを考慮し、できる限り一方的なコミュニケーションにならないようにオリエンテーションの際はZoomの機能を利用したインタラクティブなレクチャーを実施しました。


課題説明
今回のハッカソンのテーマは、「メッセンジャーアプリを開発しよう」というLINEらしいテーマとなりました。
学びたい技術の希望や経験から3チームに分かれて、開発に臨みました。
機能要件ごとに難易度が定めらており、競争形式でないものの、各チーム自発的に高難易度の実装にチャレンジしていました。
中にはHell以上の難易度の実装に自主的に取り組む参加者もいて、社員側が驚かされるシーンもありました。
3つの難易度
- Normal:今回の参加者であれば、問題なくクリア出来るレベル
- Nightmare:2週間で正しく実装を完了させるにはそれなりの覚悟が必要なレベル
- Hell:突き詰め始めると終わりがない、文字通り地獄のようなレベル

開発
2日目午後からいよいよ本格的な開発がスタートします。
プライベートクラウドの「Verda」や各種オープンソースソフトウェア、GitHub EnterpriseなどLINE内で実際に利用しているものを中心にどの技術を選定するか、というところからチーム内で決定していきます。また実質7~8日の期間の中で開発を行うため、限られた時間の中でチーム内で方向性を決め、役割分担し、優先順位をつけて開発する必要があります。
全てオンラインという制約の中で、SlackやZoom、Confluenceなどをフル活用し、メンターに相談を重ねて、開発を進めることになります。
朝と夕方にはチームメンバーがメンターに今日担当したことと明日のやることを共有し、進捗確認しながらアドバイスをもらいました。


エンジニアとの交流
オフラインでのコミュニケーションが持てない中、気軽にふらっと質問できる「オフィスアワー」というものを実施しました。京都オフィスに在籍する様々な分野のエンジニアがZoom内に待機していて、入退室や質問がいつでもできる取り組みです。
オフィスアワー内でヒントを得て、実装が進んだことも度々あり、想像以上に効果があったと思います。

成果発表会
最終日の発表会では技術部門の役員やエンジニアリングマネージャーを集めて成果発表会を開催しました。チームごとにデモを見せながら技術についての説明を行い、最後に苦労した点や学んだ点について発表しました。

「メッセンジャーアプリを開発しよう」というシンプルなテーマながら、三者三様のこだわりが見られました。具体的な内容をチームごとに紹介します。
チームMoon
3チームの中で唯一ネイティブクライアント(iOS)での開発となったチームMoon。最も大きなこだわりポイントとしては、「無限にいいねがもらえるSNS」でした。
これはリアルタイムで無制限にいいね!が押せる機能となっていて、LINEには搭載されていないということもあってレビューにあたった社員も夢中でいいねを連打していました。
その他の代表的な機能は
- LINEアカウントでログイン
- 独自IDによる友だち検索&個人チャット
- グループチャット
- トークルーム・友だち削除
- 無限いいね
Moonの成果物の概要図や利用した技術


Load Balancerを利用した複数台のサーバ構成に手こずりつつも、
リアルタイムでのチャットやいいねを実装できたことで大きな学びを得られたようでした。
チームCony
ConyはWebアプリケーション形式での開発を行いました。「スケーリングを目指し、LINEのクローンアプリを開発する」をコンセプトの掲げ開発に取り組みました。
実装した機能も多く、スタンプ機能についても上手く盛り込めていました。
主な機能は下記の通り
- 1on1チャット, グループチャット
- リアルタイム未読表示
- リアルタイム既読表示
- スタンプ送信
- 通知
- LIFF認証によるログイン
- LINEアカウントと名前、画像、一言が同期
- グループ招待、アイコン自動生成
Conyの成果物の概要図や利用した技術


Load Balancerの扱いやNode.jsの仕様で苦戦したこと、
時間が足りなかったことでHbaseやkafkaを使ったより高度な機構にチャレンジできなかったことが心残りとなりました。
一方で複数VMでスケーリングを意識しながら、開発をしたことによって4,000人が同時に利用しても問題なく使える設計になっており、
大規模ユーザーを想定して開発するLINEのスタイルを疑似体験することができたようでした。
チームBrown
BrownもConyと同じくWebアプリケーション形式での開発を行いました。特にこだわったポイントとしては、シンプルなUIと高速な動作となっており、初見の方でも操作に迷わず、簡単にスレトレスなく利用できる印象を受けました。
主な機能は下記の通り
- 1on1チャット, グループチャット
- LINEアカウントでのログイン
- グループチャット
- プライベートとパブリックグループの機能
- ダイレクトメッセージの実装
- SPAでサクサク動作
Brownの成果物の概要図や利用した技術


コンフリクトに悩まされつつも、チーム開発の楽しさや進め方などを体験できたことやメンターのレビューを通して新しい気付きを得られたことが良かったようです。
まとめ
2週間と決して長くない、限られた開発期間でしたが、各チームがそれぞれしっかり話し合って、進め方や機能実装、デザインなどを工夫し、チームごとに特色が生まれていました。
また、アプリをまず動く状態にしてから徐々に細かい機能を追加していくという進め方をとっているチームもあり、これはLINEの実際の開発現場でもよく用いられている開発手法です。
インターン中に使用した技術の一覧
Server-side | 言語 | Python, JavaScript |
ライブラリ | flask, Socket.io, SQLAlchemy, Tornado, TorMySQL, Sequelize | |
Front-end | 言語 | JavaScript, Swift |
ライブラリ | LIFF, LINE SDK, React, Socket.io, MessageKit, Push.js | |
フレームワーク | Vue.js, Express.js, Koromo | |
外部API | - | LINE login |
Database | - | MySQL, Redis |
Infrastructure | - | Verda(Private Cloud), Docker, Jenkins |
インターン生が触れた技術や実際に開発したプロダクト、メンターの所感、インターン生それぞれの感想を見るかぎり「LINEで実際に使われている技術や開発手法を体験し、チーム開発を通じて、今後に繋がる学びを得ていただく」という本インターンの目的に沿ったインターンを実施することができのではないかと思います。
ご参加いただいた皆様ありがとうございました!
11月にはLINEが主催するテックカンファレンス、「LINE DEVELOPER DAY 2020」が開催されます。
詳細は公式Twitterにてアナウンスしますので、ご興味のある方はぜひフォローしてください。
LINEの技術関連情報を発信する公式Twitter