はじめに
こんにちは!北九州工業高等専門学校情報システムコース4年の吉本胡葉です。普段は、中学校を卒業してから5年間、ものづくりを学べる高専という学校に通っていて電子制御や情報通信などを学んでいます。2024年3月の1ヶ月間、CA Tech JOBで「ABEMA」のNativeチームに参加し、その中でAndroidモバイルアプリの新機能開発に携わらせていただきました。本記事では、私が「ABEMA」の開発業務を通して学んだことや感じたことを紹介します。サイバーエージェントの就業型インターンに興味がある方の参考になれば嬉しいです。
CA Tech JOBとは
CA Tech JOBは、株式会社CyberAgentのあらゆる職種に向けた1ヶ月間の実務型インターンシップです。年間を通じて募集されており、開始月の3ヶ月前までに応募し、3回の面接を経て参加することができます。インターンの形態は、オフラインで出社頻度も週3日以上推奨されていますが、個々のニーズに柔軟に対応されています.
私は会社やチームの雰囲気を掴みたい,現場で使われている技術について深く知りたいと考えていたため、週5日のオフラインで参加させていただきました。その際、交通費と宿泊施設を支給してくださり、とても過ごしやすい環境を作ってくださいました。
配属先について
私は本インターンシップで「ABEMA」に配属させていただきました。ABEMAは2016年4月に本開局した、新しい未来のテレビとして展開する動画配信事業で、24時間編成のニュース専門チャンネルやスポーツ番組、オリジナル恋愛リアリティーショーなど多彩な番組をユーザーに届けています。
私が参加させていただいたNativeチームは、ABEMAのiOS・Androidアプリを開発しているチームです。私はその中でもAndroidモバイルアプリの開発を担当しました。
Androidモバイルアプリの開発チームでは、AndroidTVの開発チームと合同で実装に関する相談や情報共有のための会議、プロジェクトごとのミーティング、個々の社員に焦点を当てたコーヒーブレイク、そして新卒Androidエンジニアで開催している勉強会などが行われています。技術や業務に対しての熱心さや暖かい雰囲気があるチームでした。
インターンシップの目標
私は、CyberAgentの働き方や業務の雰囲気を知るため、業務で使用されている技術や実装方法を学び自分の力を伸ばすために本インターンシップに参加しました。
この目的を達成するために、「プログラムの論理的な説明をできるようになる」「社員さんに沢山質問、お話する」の2つの目標を立てて1ヶ月のインターンシップ期間を過ごしました。
タスクについて
本インターンでは「ユーザーが次にみるコンテンツを訴求する機能」回遊枠の作成を担当させていただきました。作成したモジュールはユーザーの作品の視聴履歴に基づき、作品をお勧めするモジュールとなっています。ABEMAは長く開発されているサービスでありながら、新しい技術も積極的に取り入れて開発がされています。そこで今回、UIをJetpackComposeで既存のUIと同じ見た目で作ったり、APIのレスポンスからUIで利用するデータにマッピングする作業を行いました。
作業の流れは以下のとおりです。
– UIパターンと作品のドメインモデル定義を追加作成 & 該当箇所のテストプログラム実装
– 実装箇所のクラス図を作り実装に用いるクラスや新しく作成する関数の設計- JetpackComposeを用いたUI作成
– APIリクエスト〜UI表示までのつなぎこみ
– 実装箇所の共有
業務の中では、「プログラムの論理的な説明をできるようになる」という目標を達成するため、抱いた疑問をそのままにせず積極的に調べたり質問したりすることを徹底しました。例えば、ABEMAの仕様やこの技術が採用されている理由、関数の粒度などです。またコードレビューではプロジェクトの特性に合わせるための指摘をいただくことがあり、修正する中でなぜこの仕組みを採用しているのかどんな効果を持つようになるのかなどたくさん学ぶことができました。また、学んだことはtimesチャンネルや日報、朝会夕会の議事録に記入し復習に利用していました。
技術面での学び
ABEMAのNativeアプリのレイヤー構成とテストプログラムについて
ABEMAの大規模なプログラムの流れを掴むためのタスクとしてまず、UIパターンにおけるドメインモデルの定義の追加を行いながら、Nativeチームが採用している技術や、アーキテクチャ、レイヤー構成などを学びました。その後、実装した箇所が正しく動作するかの確認のため、テストプログラムを実装しました。この際、テストプログラムの目的として「何かプログラムで変更を加えてもユーザーの意図した動きを担保する」や、「長期的な開発効率の向上」があることを学びました。全てを網羅的にテストするのでなく持続的なアプリの成長に繋げるために、必要なテストとは何かを考えることが大切だと意識する機会となりました。
クラス図の作成
ABEMAのNativeアプリがどのようにデータを取得し、UIとしてアプリに表示しているか、モジュールがどのファイルでどのように作成されているかを学ぶためにクラス図の作成を行いました。クラス図の作成のため、他のモジュールがどのように作成されているか確認する機会がたくさんあり、なぜこの実装方法が採用されているか、関数がどのような役割を持っているかなど調べたりトレーナーさんに質問させていただくことで学ぶことができました。この時作成したクラス図は実装時に参考になり、自分にとって難しいタスクでも解決の道筋が見える効果があり、進捗の把握や共有に役立ちました。
JetpackComposeを用いたUI作成
次に、今回作成するモジュールのカードUIをJetpackComposeで作成をしました。JetpackComposeとは、Kotlinの言語でUIの開発ができるAndroidの宣言型UIツールキットです。アプリのUIをレンダリングできる宣言型APIを提供していて、UIの記述とメンテナンスが容易になる効果を持っています。
ABEMAは長く開発されているサービスですが、段階的にComposeが導入されています。そのため本タスクでは、既存のAndroidViewで実装されたカードUIをComposeで再度実装する必要がありました。そのためデザイナーさんと連携をとり、ボタンのリップルサイズの確認をさせて頂いたり、デザインレビューをいただいたり、実務ならではの貴重な体験をさせていただきました。
技術面以外での学び
技術面以外でもたくさんの学びがありました。私は就活中の期間でCA Tech JOBに参加したのでCyberAgentの社員の方がどのように就活を進めてきたか、どのような勉強をしているかランチやチーム内1on1でお聞きすることができました。トレーナーさんに23卒のAndroidエンジニアの方、他の事業部の方とお話したいとお伝えしたところ、ランチでは23卒のAndroidエンジニア10名全員との交流、ABEMAだけでなく他の事業部の方の話を聞いて事業部ごとのチームの雰囲気や仕事の進め方などお聞きすることができました。
また、疑問をそのままにせず積極的に調べたり質問したりすることを1ヶ月間徹底することで背景情報の理解することの大切さを学びました。背景理解を徹底することでプロジェクト内での考え方が身につき、壁に突き当たった時でも応用した考え方ができることが本インターンでわかりました。
社員の方は、開発しているサービスについて一番に考え、エンジニアチームだけでなくデザイナーさんやPMさんと連携をとっているところが印象に残っています。例えば、ミーティング、Slack上での質問や技術に対する議論などです。
コミュニケーションがとても活発で、ユーザーが使いやすい、より質の高いサービスを作り上げるために行動されているところがとても印象的で自分の将来の目標について考え直すきっかけになりました。
まとめ
CA Tech JOBでは、インターンを通して多くの技術の知識を学んだり、将来どんなエンジニアになりたいかの解像度を上げることができました。また、社員さんとの交流を通して、CyberAgentの雰囲気を知ることができました。1ヶ月のインターンは自分にとって初めてで不安な気持ちもありましたが、社員さんの手厚いサポートのもと、ユーザーのことを考えてサービスを作り上げていく楽しさややりがいを感じることができて参加することができて本当によかったと感じています。
最後になりますが、トレーナーさん、担当人事の方、ABEMAの皆さん、交流して頂いた社員の皆さん、本当にありがとうございました。