engineer is my vocation

22卒のAndroidエンジニア

サイバーエージェントのインターン「CA Tech JOB」に参加しました!

f:id:keita_developer:20190913090704p:plain

こんにちは、 @keita_developer です。

 

9/5〜9/27の約一ヶ月間、サイバーエージェントのサマーインターン「CA Tech JOB」に、Androidエンジニアとして参加しました。

 

www.cyberagent.co.jp

 

参加までの経緯

今までにサイバーエージェントの短期インターンハッカソンに参加したことがあり、その中で社員さんから仕事の話を聞くうちに、もっと長い期間でこの会社に関わってみたいと思い、今回のインターンへの応募を決めました。

採用までの流れは「書類」→「オンライン面接(人事)」→「オンライン面接(受け入れ部署)」といった感じでした。人事との面接のタイミングでどんな部署で働きたいかの希望ができるので、あらかじめどんな部署で働きたいかを考えておくと良さそうです。

その中で自分は「新規開発のサービスに携わりたい」と希望したので、「CATS」という組織に配属されました(詳細は後述)

配属された組織

今回自分が配属されたのは「CATS」という組織でした。

f:id:keita_developer:20190924154251p:plain

CATSってどんな組織?
  • CyberAgent Advanced Technology Studio」の略
  • 2018に結成された新しい組織
  • 経験や技術を開発チームに蓄積して、効率よく技術やサービスを成長させることを目標としている → サービス毎に一からチームを組み直す手間を省くため
  • モダンな技術を積極的に取り入れている
  • 強いエンジニアがたくさんいる
  • 現在は主に「WinTicket」という競馬のサービスや、今回自分が携わった新規サービスを開発している。

業務内容 

今回自分の任されたタスクは、新規開発のAndroidアプリの一部画面(2つ)を仕様書とデザインを元に一から実装する、というものでした。一ヶ月の間にレイアウトからロジックまで満遍なく実装することができたので、満足度は非常に高かったです。
 
ただ、まだ世に出ていない新規開発のサービスであるがために、せっかくの成果(画面のスクショ等)を外部に公開することができないのは少し悲しいところです。
 
また、自分が関わった部分のソースコードの話をすると
  • ViewModel
  • Epoxy + Paging
  • LiveData
  • Coroutine
  • Retrofit2
  • Multi-Module
  • Dagger2
  • Navigation
  • Data Binding
  • ObjectAnimator
  • Espresso
上記のような Android Jetpack の要素がたくさん盛り込まれたモダンなプロジェクトになっており、コードを書くのがとても楽しかったです。(と同時にとても勉強になりました)
 
最終週には成果発表会があり、自分の過ごした一ヶ月について再確認するだけでなく、他のインターン参加者の一ヶ月がどのようなものだったのかを知ることができました。
f:id:keita_developer:20190927174010j:plain

学んだこと

MVVMアーキテクチャについて

普段個人開発をしている時は、アーキテクチャについて「色んな層にコード書く必要があって面倒だなぁ」という感想を持っており、何となくで使っていたのですが、実務の大規模なコードを読んだり書いたりする中で、そのメリットを身をもって実感することができました。具体的なメリットとしては、どこに何の処理を記述するかのルールがある程度決まっているので、他のメンバーが書いたコードでも内容をすぐに把握できるということや、別の画面で利用している処理が再利用しやすくなる、ということが有りました。

また、上記のメリットを知ることで、「この層ではここまでデータを加工しておこう」「この層に値を保持しておこう」等の、後々の機能追加や修正を意識しながらコードを書けるようになった気がします。

ただ、コードの量が増えることは確かなので何でもかんでもMVVM(他のアーキテクチャも同様)を導入すれば良いという訳でも無く、それぞれのアーキテクチャについて、プロジェクトに応じてカスタマイズしたり使い分けたりすることが重要なのだな、と思いました。

チーム開発の「あたりまえ」
  • 一目でわかるような関数及び変数への命名
  • コードの統一性(動作が同じなら基本的には他の人と書き方を合わせる)
  • rebase や cherry-pick 等を用いてレビューしやすい綺麗なコミット履歴を作る
  • コードの分かりやすさ > コードの短さ

ここら辺の要素は知識として頭の中に持っていても、一人で開発しているとだんだんと大雑把になってしまいがちな部分であり、今回のインターンの中で実際に手を動かしながらこれらの作業に取り組んだことで、チーム開発をする上での「品質の高い」コードについてより強く意識できるようになりました。

待遇、職場環境など

  • 地方からの参加だったので、交通費と宿泊場所は会社から支給していただきました。特に宿泊場所はオフィスから徒歩5分圏内にあるシェアハウスだったので、通勤がとても快適でした。

 

  • 勤務時間は10:00〜19:00でした(休憩は約1時間)。といってもそこまで厳密な感じではなく、個人の用事やチームの方針などで柔軟に変わっている感じでした。

 

  • 給料は時給1500円でした。給料のためにインターンに来ているわけではないですが、勉強しつつお金ももらえるのはとてもありがたいです。

 

  • MacBookPro(スペック十分)が支給されたり、イスの質が良かったり、コーヒーやお茶が無料で飲めたり、サブモニターも申請したら支給されたりと、作業環境も充実していました。

 

  • 当たり前の話ですが土日祝は仕事が休みだったので、東京観光?を楽しみました。(BIT VALLEY に参加したり、技術書典に参加したり、スマブラの対戦会に参加したり)

 

  • チームの方や人事の方に何度もランチをご馳走していただきました。美味しい料理が食べられるというだけでなく、いろんな社員の生の話を聞くことができたので、とても良かったです。(むしろ一人で昼食を食べる日がほぼ無かった)

 

  • 子会社などを含めるとたくさんの社員がいるおかげか、社内でのサークル活動や部活動が盛んに行われており、社会人になってからも趣味の繋がりを作れるのは理想的だな、と思いました。(人事の方の紹介で、自分はesports部の活動に参加して来ました)

 

まとめ

技術的に多くのことを学び、エンジニアとして成長できたのはもちろんのこと、社員の方々や他のインターン参加者の方々と話をする機会も多々あり、とても密度の高い一ヶ月を過ごすことができました。お世話になったみなさん、本当にありがとうございました!