【インターンレポート】LINE MUSICのLINE公式アカウントのメッセージ配信システムの開発

2021年8月から9月にかけて行われたLINE株式会社の技術職就業型インターンシップに参加させていただいたテザー ナイ ウィンです。
今回のインターンシップでは開発3センターサービス開発1室の開発Tチームに所属してLINE MUSICのLINE公式アカウントのメッセージ配信システムに関わる機能の実装や軽微な修正など、実際の開発体験をしました。
このブログでは私がLINEのインターン生として体験したチーム開発と実装した機能についてご紹介させて頂きます。

LINE MUSIC公式アカウント自動メッセージ配信について

開発TチームではLINE MUSICの特定のユーザーに対して、LINE公式アカウントのMessaging APIを利用した情報提供のシステムを開発しています。私もこの開発に参加しました。以下の図はこのシステムのアーキテクチャです。私はこのインターンシップで管理画面の実装とメッセージ作成機能の改修を担当しました。

管理画面の実装

管理画面とは

このシステムの管理画面では、メッセージの配信開始時間、通知のコンテンツに含まれるタイトルやボタンのテキストといったものを設定することができます。FrontendのフレームワークにはReactを、BackendにはKotlin + SpringBootを、データベースにはMySQLを使用しています。私はFrontendに関しては経験がありましたが、Backendの経験はなく、1から学ぶ必要がありました。それでも、メンターの先輩にこまめにZoomでコミュニケーションをさせていただいたので、開発を進めることができました。

開発の流れ

インターンシップは完全リモートでしたが、開発Tチームでは毎日30分間の定例があって一日の流れを確認する場が設けられていました。そのため、現在プロジェクトでどのようなタスクが進行しているのかの確認や、次に着手するタスクについて質問をしたい場合に、チームと相談しやすかったです。開発フローにはスクラム開発を採用していて、チームとしてのベロシティを決めて開発を進めていくことで、プロジェクトの進行度が把握しやすい体制となっていました。個人ではできないチーム開発の経験ができました。LINEのような大きな組織になるとチームによってコミュニケーションの取り方も違ってくるようで面白かったです。

実装したこと

私は最初に管理画面のBackendの実装から始めました。MySQLとの通信についてはData Access Object(DAO)パターンを参考にしてデータアクセス層と他のレイヤーを分離した設計をしました。その次にControllerを実装し、Frontendと通信するためのAPIを実装しました。また、FrontendのReact部分の実装も担当しました。
LINEではPull RequestをMergeするために必ず一人以上のエンジニアにレビューしてもらうことが必要です。そのため、不用意な設計や実装がマージされることを防げますし、ソースコードの質も保証されていると感じました。

管理画面の実装した結果は以下のような画像の通りになります。画面自体はシンプルですが、APIの設計やMySQLのDB設計、 Unit Testなど普段やったことのない開発に触れることができていい経験になりました。

メッセージ作成機能の改修

Flex Messageを動的に作成する

このシステムではメッセージ配信にMessaging APIのFlex Messageを利用します。元々の仕様では、通知に含まれるテキストは基本的に固定のメッセージでしたが、開発の途中でタイトルやボタンのテキストを可変にする仕様が追加されました。その仕様追加によって改修が必要になった管理画面の改修に加えて、メッセージ作成機能の改修も担当しました。Flex Messageでは以下のようなJSONテキストを利用します。LINE公式アカウントからメッセージを送信する際に文字の色、大きさ、配置などが設定できます。このJSONテキストのPropertyを動的に作成する機能を実装しました。

Flex Message Json

"body": {
    "type": "box",
    "layout": "vertical",
    "contents": [
      {
        "type": "text",
        "text": "Brown Cafe",
        "weight": "bold",
        "size": "xl"
      },...

Flex Messageの公式ドキュメントはこちらのリンクで公開されています。

LINE MUSICのLINE公式アカウント自動メッセージ配信はFlex MessageをBatch処理で作成します。最初に示したアーキテクチャ図のCreate Notification Messageコンポーネントが改修部分になります。この改修に合わせて、送信したメッセージ件数をログに残す対応や、例外発生時のエラーハンドリングの追加などの対応も担当しました。

開発の結果

インターンの期間中に、実際に業務で使われるサービスの開発に取り組んだ結果、Webアプリの仕組みなどが見えてきました。開発チーム内だけでなく、他の部署(企画、QAなど)との間でも定期的に連絡を取りあって開発を進めることで、実装している最中に仕様に問題があることが判明した場合でも、順調に開発を進めることができました。

その他社内活動

上記に紹介した開発の業務以外にも、このインターンシップ期間でスキルアップ講座や交流会など様々なイベントもあったので、いくつか紹介したいと思います。

 Zアカデミアの講座

LINE社内ではエンジニアの育成のために取り込んでいる様々な制度がありますが、今回はZアカデミアの「読みやすいコードの書き方」講座を受けてみました。LINEだけでなくZホールディングスのエンジニアの方々が参加されていて、社外のエンジニアと意見交換できる場所となっていて面白かったです。今回はLINEのエンジニアの方が講師を担当し、全部で8回行われました。読みやすいコードを書くためのテクニックの紹介と、それを活用できる場面を理由とともに説明してもらえたので、自分で正しく判断ができる力が身につけたと感じました。

資料なども公開されているので興味ある方は是非ご覧ください!

上級執行役員と交流

LINEのインターン期間でエンジニアの方と交流できるだけでなく、上級執行役員の池邉智洋さんとの交流会にも参加できました。交流会はZoomで行われ、エンジニア関連の質問から上級執行役員なるためにはどう頑張ったらいいのかといった質問まで答えていただき、企業トップの方の考え方が見えるような貴重なイベントでした。

インターン生と交流会

サマーインターンに参加する他のメンバーと一緒にランチを食べながら、話し会うというイベントがありました。それぞれ違う部署に所属しており違う開発や研究をされていることが聞けて自分のモチベーションが上がりました。また他のチームのコミュニケーションの取り方や開発フローなども聞けて勉強になりました。

感想

私はBackend開発は初めてでしたし、多くの人に影響を与えるようなプロジェクトに関わることが不安でした。しかし、メンターの方とコミュニケーションを取りながらステップバイステップでキャッチアップに付き合っていただけたので、このような成果を出すところまでに至りました。インターンシップ参加者のレベルに合わせた業務を担当させていただき、無理なく自分の技術力を磨くことができました。

2021年の夏休みはLINEサマーインターンシップを通して技術力の磨きができたこと、実際にLINEで業務をしているエンジニアの方に自分のコードをレビューしてもらえたこと、他のインターン生との交流ができたことで色々な場面で貴重な体験ができて有意義な夏休みになりました。