ほりすのぶろぶろぶろぐ

ほりすのぶろぶろぶろぐ

非情報系から最高のエンジニアを目指す旧帝大学生

【CA Tech JOB】CA Tech Dojoからの成長

ほりすです!例のごとくインターンに参加してきたので、振り返りブログを書いていきます。

はじめに

今回は、CA Tech JOBというインターンに10/3~10/31まで参加してきました! www.cyberagent.co.jp

以前、CA Tech Dojoに参加した記事を書いたのですが、JOBは同じ株式会社CyberAgentが開催しているインターンです。

kurutabrog.hatenablog.com

両者を簡単に説明すると、
Dojoは2週間で課題のAndroidアプリを1人で作りきるという「養成型」だったのに対し、JOBでは事業部や子会社に配属されてエンジニアとして実際にプロダクトを開発していく「実践型」です。

Dojoが始まった際のヒアリングで"Jobに行きたい"と伝えていたのですが、念願のインターンに参加できて感無量です。


通常であればDojoの次にCA Tech Challengeというハッカソン型のプログラムもあったのですが、日程が合わなかったので参加できませんでした...


他のJob生も振り返りブログを書いていると思います。 そこで少し他の人と差別化を図るためにも、 DojoからJobに参加した自分ならではの視点で振り返りブログを書いていければいいかなと思います。

CA Tech Dojo〜CA Tech JOB参加前

Dojoは、基本的にはプログラミング経験は割とあるけれど、あまりAndroidアプリをやってこなかった人向けに開催されたものでした。


自分は、これまでAndroidアプリしか作ってこなかったものの、プログラミングをはじめたのが2019年1月中旬頃だったので約8ヶ月の経験しかなかった状態です。

Dojoでやったことの詳細は上記の記事から読んでいただければと思いますが、Kotlin/Androidの基礎は比較的わかっている状態だったので、
・ Kotlin Coroutine
・ Dagger2
・ Room
・ Navigation
・ ViewModel
・ LiveData
etc...
の、Googleが推奨している設計であったり、ライブラリをはじめとした技術を「使ってみて」アプリを作りました。


メンターさんのサポートもあって、最優秀賞を取ることができたのですが、この時点で自分に足りないものも多くあるなとも感じていました。

- チーム開発
 - PRで議論したい
 - Gitを使いこなしたい
 - 他の人のコードをみながら吸収したい
- 実務経験
 - 上記のライブラリを「使ってみた」だけではなく、より高度な次元で使いこなせるようになりたい
 - 効率的に開発するためのツールや設計、実装方法を知りたい
- サービス志向の考え方
 - 実際にリリースするプロダクトのユーザー体験向上に貢献したい

つまり、1人ではなかなか達成できないようなことに挑戦したい欲がでてきていました。


これらの自分の足りないところを自覚することができたのもDojoでの良い収穫だと思っています。

CA Tech JOB

やったこと

自分は、Androidエンジニアとしてメディア事業部でJOBをさせていただきました。
メディア事業部にはAbemaTVマッチングエージェントなどの子会社がそれぞれの事業を展開しています。
その中でもCATS(CyberAgent Advanced Technology Studio)という、いわゆる新規事業開発部署に参画しました。


新規事業開発部ということもあり、今回手がけたプロダクトも例に違わず口外禁止です。
そのため、サービス面よりも技術面、なおかつコアでない部分で習得したところを書いていきます。



新規事業ということもあり、100%Kotlinかつ、しっかり考えられたモダンな設計/技術選定がされていてかなり勉強になりました。

学び

個人では体験しづらい技術やツールに触れることができた

固められたCI/CD

これまで個人で開発してきて、CI/CDの概念などは聞いたことはあったものの、使ったことはありませんでした。

pushしたときやmergeされたとき等、多くのCIが走り、ビルドやテストしてくれる便利さに感動しました。

さらにCATSでは独自でスクリプトを作成し、複数のAndroid端末でスクリーンショットを撮り、その差分を元にCIを走らせることもしていました。

.config.yml も一通り読んだので、個人で開発するときにCIの構築をしてみようというきっかけにもなりました。
「このスクリプトどういう意味ですか?」
とメンターさんに1聞くと5くらいの回答が返ってくるのも控えめに最高です。

Kotlinスクリプト

普段、Androidで開発する際はライブラリ等の依存関係をまとめるのにGroovyを使用すると思います。

CATSでは、KotlinスクリプトでVersion管理をしていて、
「こんなこともできるのか...」と関心の嵐でした。

マルチモジュール

今までは、デフォルトのappモジュールに全ての機能を詰め込むような、いわゆるモノリシックな構成での開発しか経験はありませんでしたが、初めてマルチモジュールに触れることができました。


サービスの特性に沿ったモジュールの切り方をしている部分を触る実装があり、結構苦しんだ

複雑なDagger

Daggerは上述した感じでDojoで「使ってみた」程度だったので、実務でのDaggerの複雑さ、絡み合うDIに触れることができて良い経験。


ただ、最初結構苦しんだ

DataBinding等のキャッシュいたずら🎃

Android StudioをStableでないVersionを使っているのが原因なのかわからないけれど、branchにcheckoutするとDataBindingやDaggerのキャッシュが残ってしまってビルドができないことがあった。


Clean Buildも聞かないので、
rm -rf ~/.gradle/cachesでglobalのキャッシュを綺麗にする必要がありました。
ビルド待ち時間でPRみれたりしたけど、めちゃめちゃ長かった...。

これも結構苦しんだ

個人レベルでも活用できそうな技術に触れられた

前述のツールや技術は、なかなか個人でするのにはハードルが高い部類ですが、もちろん明日から活用できそうな技術にも触れられました。

  • Arrow
  • Test
    • テストを書くタイミング、意味、書き方
    • 個人ではほとんど書いたことがなかったけれど、Unitテストくらいはガンガン書いていこう
  • Epoxy
    • 色んなViewTypeのレイアウトを組み合わせてRecyclerViewに表示できる優れもの
  • Paging
    • 小さい単位でデータを取得してリストに表示する
  • Protocol Buffers

そのほかにもDojoで使用したライブラリのより高度な使い方を知ることができた。



知って終わりじゃありません。
手を動かすまでが学習です。

というわけで書きました! 初Qiita!

qiita.com


f:id:kurutabrog:20191102144706p:plain
成果発表LTのスライドからの引用


技術のキャッチアップをするために一つサンプルアプリを作ってまとめてたら知らないうちに卒論の分量超えてました。

チーム開発

自分の専攻は「材料系&経営」で自動車の材料強度の研究をしていたため、周りにWeb系の開発をしている人が1人もいませんでした。
9ヶ月目にして初のチーム開発、楽しみでした。

PRレビュー最高

PRレビューは、自分の中で勝手に怖いイメージがありました。 (良さそうと思って書いたコードに厳しい口調で修正を命じられるような)


心配とは裏腹に、すごく丁寧に優しい口調でレビューをしてくださり、かなり勉強になりました。
f:id:kurutabrog:20191103113626p:plain
少ない変更のPRでもめちゃめちゃアドバイスいただきました。


ほかにも、チームの方のPRやコードを見るだけでもかなり多くを吸収できたと思います。

git最高

正直これまでgitは、branch切ってadd、commit、pushくらいしか使ってこなかったので、実践的に使うのはここが初めてでした。
(個人開発だとする機会なさめ)


一番の収穫としてはrebaseの悦びを知れたことですね。
commit履歴が綺麗になると幸せな気分になりますね(?)


これも、知って終わりじゃありません。
アウトプットするまでが学習です。


というわけで参加してきました。mixi git challenge

github.com

まだ、ブログはかけていないのですが、このイベントもすごく濃い1日でした。
こんなの知るかって内容から、ちゃんと考えれば解ける問題まで幅広く用意されてあり、gitへの造詣が少し深まりました。


ペアプロ

厳密にはペアプロではなかったですが、1日30〜60分時間をとっていただき、メンターさんに質問をしたり実際にコードを書いているところを見せてもらったりしました。


この時間、かなり良くて、
・緊急ではない疑問を聞ける時間
・人がやっているところを見て吸収できる

という点で有用だったと思います。

今後自分がメンターをする機会があればこのような時間を設けようとすら思ったくらい良かったです。

自分は基本的には今まで色々デフォルトで突き進んできたのですが、メンターさんが使っていたiTermやzshを使うようになりました。 そしてvimmerへの道も歩み始めましたw


今まで知らなかったことを知れる機会、無知の知を自覚してそれを吸収できたのは自分の中ではかなり大きかったです。

日常生活

毎日いろんな社員さんとランチに行きました。
1人で食べた日は1回もなかったくらいです。
そしてほぼ財布も開いたことがなかったです。

渋谷近辺の和食/海鮮にたくさん連れて行ってもらって幸せの極みでした。 f:id:kurutabrog:20191103132540j:plain
f:id:kurutabrog:20191103132643j:plain


メンターさんや人事の方にセッティングしていただいたのはもちろん、自分で社内のAndroidエンジニアの方を誘ってランチご一緒していました。
せっかくのなので自分から動いて機会を作っていくマインドは大事かなと。


他にも11Fのカフェドリンク無料券もらったり
f:id:kurutabrog:20191103133109j:plain


終業後にスマブラに誘っていただいたり
(自信のあるネスで行ってボコボコにされた) f:id:kurutabrog:20191103133211j:plain


渋谷のマンスリーマンションを手配していただいた経験はすごく貴重でした。
(ハロウィンが被って地獄絵図だったのは置いといて)

Dojo→JOB

人生で初めて参加したインターンDojoでした。
Dojoでは、
・自分が書いたコードをプロのエンジニアの方にレビューしてもらえること
・定められた要件に沿ってしっかりとアプリを作りきること
・個人開発ではあるけれど、時にはチーム/他のインターン生と助け合って行くこと
CyberAgentの社員の方々の温かさ
を体験することができました。


Dojoで、自分の弱点/足りないものを知り、そしてCAの採用の本気さと人の良さを知りました。


そうすると、その次には
自分の弱点を埋めたい、どこまで通用するかを知りたい、技術力の高さを体験したい、もっとつながりを増やしたいと思うようになりました。

JOBは、上記の欲求を全て満たせる最高の環境だったと思います。


そしてこれらの欲求はDojoに参加していなかったら、気づくのはまだ先だったかも知れません。
養成型→実践型の順に体験したからこそ早く気づくことができましたし、環境を提供していただくまでの早さもさすがCAという感じでした。



JOBに参加した結果、
・知らなかったことを知ることができた(無知の知を自覚)
・より高度な技術に触れ、使用する機会を得た
・ランチを通して縦横のつながりができた
・5倍成長した
今後の自走スピードが格段に上がった

というように、Dojoで得た知識や考えを実践で生かし、さらにそこで見えた課題に対してのアプローチ方法を学ぶことができました。
自分的には、今後自走していくために何をするべきか、どうしていくかを吸収することができたのが1番大きいかなーと思っています。


1ヶ月間本当にお世話になりました!!