【インターンレポート】LINEのAndroidアプリにおけるデータ修復機能の開発

こんにちは。LINE夏インターンシップ技術職就業型コースに参加した今枝俊輔です。私は中央大学情報工学科3年であり、普段は競技プログラミングコンテストへの参加や強化学習の研究、4足歩行ロボットの製作などを行っています。

今回のインターンでは、LINEコミュニケーションプラットフォーム開発室のLINEコミュニケーション基盤開発チームに所属し、簡単なコード改善、機能の開発を通して様々な体験をしました。インターンは全てリモートで行いましたが、メンターの池永健一さんとこまめにビデオ通話を行い、細やかな指導をしていただきました。

本ブログでは、担当した機能「データ修復機能」の開発とインターン活動で経験できたことについて紹介します。

データ修復機能の開発

担当業務

データ修復機能とは、クライアントとサーバーの間でデータ不整合が生じた場合にデータを修復する機能です。
すでにデータ修復機能は実装されていたのですが、その機能を手動で実行させるためのデバッグ画面の開発を担当しました。

設計から始め、実装、テストを行い、それぞれの工程でレビューをしていただきました。

この中でも、特に工夫した”設計”について、以下で詳しく説明します。

設計

実装をする前に設計ドキュメントを作ることとなり、クラス図を作成しました。
メンターと設計内容について何度も協議をおこないブラッシュアップをした結果、以下のクラス図が完成しました。

このクラス図では、以下のように4つのレイヤーに分けて設計しています。

  • Activity Layer
    画面の生成や、下位レイヤークラスのインスタンス生成などを行います。
  • View Control Layer
    画面上のボタン操作の処理や、表示の更新などを行います。
  • Use Case Layer
    画面表示とは直接関係のない、行いたい処理(今回の場合はデータ修復処理 など) を行います。
  • Repository Layer
    データベースやファイルなどの操作を行います。

実装に着手する前に設計ドキュメントを作成することで、各レイヤーに配置されるクラスの責任が明確になり、コードの可読性やメンテナンス性の向上が図ることができたと思います。

クラス図などの設計ドキュメントの作成は初めてでしたが、一から丁寧に教えていただいたことで書き上げることができました。
また、レイヤーを分けた設計のメリットについても身をもって知り、大規模プログラミングの基礎に触れることができたと感じました。

インターン活動で体験したこと

各種教育

データ修復機能を作成するにあたって、私はサービス開発を行ったことがなかったのでAndroid Studioの使い方やKotlinの仕様について1から学ぶ必要がありました。また、企業における開発の特徴である多人数での開発も初めてであり、大規模開発特有のチーム開発におけるGit/GitHubの便利な用い方なども教えていただきました。

他にも、UMLの書き方やLayered Architectureに関する知識、Unit Testの行い方、CI toolsの扱い方についても教えていただきました。具体的なLINEの仕組みやLINEでの開発プロセスだけではなく、その他の企業でも活用できる汎用的な知識も教えていただくことができ、インターン終了後にも活かすことができるご指導をいただけました。

特にペアプログラミングによって手厚くサポートしていただいたため、その点について以下で詳しく説明します。

ペアプログラミング

今回のインターンは全てオンラインで行われたため、ペアプログラミングもZoomを用いてAndroid Studioの画面を共有しつつコーディングを行いました。以下の写真は実際にペアプログラミングを行なった際の様子です。

私がコードを書きつつ、気になる部分があればその場でメンターに質問をしたり、メンターから指摘をいただいたりしながら進めていきました。コーディング内容だけではなく、Android Studio, Jenkins, Git/Githubなどのtoolの使用方法やdebug technicやtest technicなども教えていただくことができました。

このペアプログラミングは、インターンシップ期間はほぼ毎日1時間から2時間ほどさせていただきました。ペアプログラミングの時間に全てコーディングしてしまうのではなく、設計の大枠を相談し大まかにコーディングのみ行なって、後で一人で細かなところをコーディングするという形での実装もさせていただきました。インターンシップの中で最も能力の向上に直結した体験だったと思います。

勉強会

このLINEインターンシップでは機能開発の他にも、勉強会や交流会に参加させていただきました。以下ではその一部を紹介します。

Code Readability

LINE株式会社には、社内のプログラムの可読性の向上を図るために、エンジニアに向けた講義とその動画、資料があります。実際にインターン生としてコーディングを行うために、この動画の閲覧を行いました。ボリュームは各1時間で全8回という比較的長めの講義でしたが、その分、コードの可読性を上げるためのテクニックを教えるだけではなく、そのテクニックを使う理由が詳しく説明されていました。そのため、特殊な状況下でテクニックがそのまま利用できない場合であっても、自分で正しい判断ができるようになる講義内容でした。また、大規模開発における可読性の向上の重要性を初めに教えてくださったことで、学んでいることの必要性を意識しながら受講することができました。

こちらに紹介記事があるので、興味がある方はぜひご覧になってみてください。

Android App開発チームでの勉強会

LINEのエンジニアの方々が毎週順番に発表内容を用意し、共有するという内容の勉強会です。内容は特に統一されているわけではなく、さまざまな分野を取り扱っていました。

サービス開発初心者である私には高度な話題が多かったですが、その分幅広い知識を取り入れることができました。

Review Committee

一週間おきに、LINEのエンジニアが書いたプログラムを、講師役の方が可読性の観点から評価し解説するという内容の勉強会です。この講師役の方はCode Readabilityの講義を行っていた方であり、Code Readabilityの復習を実際のプログラムで行うことができる良い機会でした。

チーム内交流

インターンでは、実用的な知識を教えていただくだけではなく、チーム内での交流も行うことができました。配属チームでのオンライン飲み会や、少人数でのCoffee breakを設定していただき、ゲームをしたりお話したりいたしました。

オンラインでのインターンの開催だったので、「LINEでの開発フローを知る」という点のみを教えていただく形になるのだろうと思っていましたが、交流の場を多く設けていただき、「LINEに就業したらどういう生活になるのか」という点まで想像できるほど、密に交流させていただきました。

インターン生交流会

交流はLINEの社員の方のみではなく、インターン生同士でも行うことができました。同年代の同じ業界に興味を持つ学生と交流することができ、貴重な経験となりました。実際に私は、この交流会でインターン生と連絡先を交換し、繋がりを持つことができました。

あとがき

私は今回が初めてのインターンであり、6週間という長い期間だったことも相まってインターン開始前は不安が大きかったですが、初日から飲み会に参加させていただいたことで緊張がほぐれ、楽しんで就業することができました。また、今回のインターンシップはサービス開発という私が初めて扱う分野であり、初めは右も左もわからない初心者でした。しかし、最初から本題のデータ修復機能に取り組むのではなく、簡単なタスクをこなして業務に慣れてから本題に取り掛かれるようにスケジュールを組んでいただけたため、段階を踏んで成長することができ、最終的にはスムーズに開発が進められるほど実力の向上に繋がりました。

サービス提供に興味がある方は、長期インターンがおすすめです。開発経験を積むことで効率的に技術を習得することができ、LINEで実際に働いた際のイメージを持つこともできました。興味のある方はぜひ長期インターンにエントリーしてみてください!