AmebaでAndroidエンジニアとして内定者バイトしてきた
はじめに
今回,CyberAgentの21卒内定者として内定者バイトに行かせていただきました.
僕の場合はAndroidエンジニアを志望しているため,Androidエンジニアとして行かせていただきました.
配属された部署はAmebaです.
このアプリ↓
このアプリ,10年くらい前から存在するらしくて,びっくりしました.
日本でiPhone 3G が発売された頃からあるみたいです.すごいですよね.
このようなアプリの実装に触れるのはとても貴重な機会だったと思います.
そのことを今回は書きます.
コロナウィルスの影響で途中からリモートワークになったりなどして,普段体験できない働き方も体験できたと思います.
本編
トレーナーさん
トレーナーさんはどくぴーさんです.
Twitterはコチラ→どくぴー (@e10dokup) | Twitter
DroidKaigi2020でも登壇されて,動画がYouTubeに上がっています. まだ見てない人はぜひ見てみてください.
目標
今回内定者バイトに参加するに当たり,定めた目標は下の3つです.
- 雰囲気でAndroid開発しているとこを少しでも克服する
- 規模の大きいプロジェクトのコードを少しでも自分なりに解釈できるようになる
- 帰ってからも個人開発のときに応用して成長できるように解釈して学んだことを持ち帰る
僕がAndroid開発に興味を持って始めたのは去年の夏に行われたCA Tech Dojoというインターンシップでした.
そこからよく開発で使われる技術などを主に個人開発で触ってきていたのですが,
「なんでこう動くんだろう」,「この部分のコードはなんで書かないといけないんだろう」などわからないままとりあえず書くということが多々あって雰囲気でAndroid開発してる部分が多数ありそこを少しでも克服したいという気持ちがありました.これが1つ目の目標です.
2つ目の目標は,DroidKaigiのカンファレンスアプリのコードを見たときに規模感に圧倒されて全く読むことができなかったという経験から世の中にリリースされている規模の大きいプロジェクトのコードを通して慣れる+少しでも規模の大きいコードを読むアレルギー的なのが克服できればいいなというとこから来ました.
3つ目の目標は,普段このような規模の大きいコードを元に誰かに教えてもらえたり,わからないことを現役のエンジニアの人に直接聞ける環境がなかったので,教えてもらったことは自分の言葉で解釈して持ち帰って応用できるまで理解しようというものです.
チーム
AmebaのAndroidチームは7人でiOSチームよりも多くてびっくりしました.iOSからAndroidに行く人がいたり人の入れ替えは頻繁にあるみたいですが,僕が行ったタイミングではこのような感じでした.
これは僕が感じた感想なのですが,全員ノリが若いというか頻繁にボケる人がたくさんいてツッコミを入れる人がおらず,ボケっぱなしみたいなことが多々あったりしてとても楽しい雰囲気のチームでした笑
環境
ここでは開発環境的なことについて僕が印象に残ったことを書こうと思います.
入る前までは,「自分がもし実装でわからないことがあったらどういうふうに聞くんだろう.トレーナーさんの席まで行って直接聞くのかな…」や,「業務をするときのトレーナーさんとの席の距離感はどんな感じなんだろう」という面の環境で不安な部分が少しありました.
実際,わからないことがあったらそれを聞くSlackのチャンネルがあったり,トレーナーさんも自分の席の目の前にいて,席との間に仕切りみたいなものも無く,すぐに声をかけることができて,なにか聞くときに躊躇するような環境では全くありませんでした.
また,僕のトレーナーだったどくぴーさんは何か聞くと,席のすぐ隣にあったホワイトボードを使って丁寧に教えてくれて,自分が何か引っかかって理解できていないときは「どこが引っかかってる?」など聞いてくれて自分が完全に理解するまで教えてくれました.
トレーナーさんのサポートはとても手厚かったです.
Slackのチャンネルについてですが,他にも印象的だったのは,業務に関係のないことも話せる雑談チャンネルがあってチームの人と仲良くなれたのもとてもいい環境だったなと思います.
やったこと
Amebaは歴史が長いアプリですが,Kotlin化などはかなり進んでいてマルチモジュール化など積極的に採用している印象でした.
その一環として,まだマルチモジュール化されていない部分のマルチモジュール化とMVPで実装されていた部分をMVVM化するタスクをやらせてもらいました.
そのタスクを終えたあとは,MockKを用いたViewModelのテストを実装するタスクをやり,今まで触れたことのない部分に触れることができました.
リファクタのタスクの次は,どくぴーさんが担当していた新しいネイティブ化させる画面のエラー時のレイアウト表示をGroupieのアイテムとして表示するタスクをやらせてもらいました.
このタスクはPRを出す前にコロナウィルスの影響で一時内定者バイトが中断したため,最後までやりきることができませんでしたが,デザイナーの人が作ったデザインをもとにxmlでレイアウトを作るという個人開発にはないフローを体験することができて楽しかったです.
学び3選
1: BehaviorとStateを使ったLiveData管理
ViewModelにLiveDataを持たすときですが,今までの自分の実装だと,View側に通知したい値の数だけ宣言していました.
しかしそうすると,ViewModelに定義するLiveDataの数も多くなりますし,View側でobserveする数も多くなってしまいます.
そこで,同じ画面上でユーザによって値が複数回変更されるような値はStateというdata classでまとめて定義して,Toastをだすようなエラーが起きたかや,ログインが成功して画面遷移するかどうかのような値をViewに通知したいというときはBehaviorというsealed classでまとめて管理するというやり方をAmebaではしていました.
すぐに自分が趣味で開発しているアプリにも組み込めそうで,きれいにコードを書けることに繋がりそうでとても直感的に勉強になったなという学びでした.
このやり方をするとテストを書くときも,「こういうモックを作ったらこのStateのLiveDataが変わるはず」みたいな感じで「Stateの中のこの値」というような感じで書けていろんなStateやBehaviorのテストを書くとなると,他のテストと統一感が出てテストコードも見やすくかけるなと思いました.
2: Groupieを使ったリスト表示
今までGroupieを使って単純なサーバから取得したデータをリスト表示するということはやったことがあったのですが,データが空のときはその時専用のアイテムを表示したり,リストAの次にリストBを表示したりなど,複雑なリスト表示を作ったことがなく,いつかやってみたいなと思っていました.
そこで,今回の内定者バイトでまさにその部分に触れることができました.
モバイルアプリは狭い画面スペースで色々な情報を載せるため,リスト表示が多用されるので今回のバイトでその部分を手を動かしながら触れることができたのはとても良かったです.
3: MockKを使ったテスト
今までテストは一度も触れたことがなく,今回のバイトでも触れてみたいけどまだまだ自分には縁のないものかなと思っていたのですが,リファクタリングのタスクをする中で触れさせてもらいました.
たとえば,View側でエラー時はToastを出すという実装をしたとき,じゃあ本当にエラーが起きる挙動になったときにToastが出るか調べなければいけないというときにテストを書きます.
このとき,エラーが出るであろう処理をモックして実際にエラーを返すようにします.
このモックを作るというような考え方が今までしたことがなくて難しかったです.
モックしようとしてるメソッドの中身までモックしてしまったり,モックしようとしてるメソッドが同じクラス内にいてうまくモックできなかったりかなりハマりましたが,とてもいい学びでした.
ランチ
どくぴーさんにはランチもたくさん連れて行ってもらいました.
渋谷はおいしいごはん屋さんがいっぱいあって入社前から会社の近くのおいしいごはん屋さんを知れるのもとてもいいなと思いました.
いっぱい連れて行ってもらってありがとうございました!
今見返したらほんとに全部美味しそう…
完全飯テロ
さいごに
去年の夏にCAのインターンに参加してCAと関わるようになり,インターン後も自分はAndroidの分野をまずは得意になろうと決めて最初はCAのTech Jobという長期インターンシップに次は行くこと目標にAndroid開発を続けていましたが,選考を通して内定をいただき,Androidに興味を持ったCAでAmebaのような巨大なソースコードを読みながら与えられたタスクをこなしてPRを出せるほどまで成長を感じられてとても嬉しかったです.
Androidを始めてから半年ちょっとくらいで自分の成長を身を持って感じられていい経験でした.
次また内定者バイトに来ることがあったら更に成長を感じられるように修行したいと思います.
AmebaのAndroidチームの皆さん本当にお世話になりました!ありがとうございました!
Amebaでは最近Pickという新しい機能ができました.
自分のブログ記事にAmazonなどのリンクを貼り付けてそれを通して読者が購入するとその商品の○%の報酬が自分に入るというアフィリエイト機能です.
ぜひみなさんやってみてください.
詳しくは