ほりすのぶろぶろぶろぐ

ほりすのぶろぶろぶろぐ

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

CA Tech Dojo(AndroidアプリKotlin編)という最高のインターンで最優秀賞をもらった話

題目の通り、CyberAgentCA Tech DojoAndroidアプリKotlin編)に参加してきました。
そして、最優秀賞いただいちゃいました!
www.cyberagent.co.jp

運営からメンターさん、インターン生まで全てが本当に最高のインターンだったので、2週間を振り返りながら色々書いていきます。
機密に触れないのであれば、どんどん書いちゃってと言ってくださったので、どんどん書きます笑
来年以降、また開催されることがあれば、参加を検討している学生に参考になればと思います。

自己紹介

自分がどういうバックグラウンドを持っていて、どういう意図でこのインターンシップに参加したかをお話しします。
興味ないよって方は飛ばしてご覧ください。

プログラミング歴

2019/08/17現在のこのブログ自体のタイトルにもあるように、現在情報学部ではなく、趣味でプログラミングをやっています。
授業で少しCをかじっていた程度で、プログラミング自体を始めたのは実質2019/01くらいです。
始めはJavaから始め、他のサーバーサイドやフロントなどのWeb系は一切触っていませんでした。

子供達にプログラミングを教える長期インターンの関係で6ヶ月ほどAndroidJavaで触っていましたが、Kotlin firstとなった今、ずっとKotlinで開発したいと思っていました。
android-developers.googleblog.com

参加の流れ

そんな中、実力的にも時期的にもちょうど良いtech dojoが開催されることを知り、即座に申し込みました。
グレーゾーンなので面接の内容とかはあんまり言及できないのですが、選考スピードもめちゃめちゃ早くて、

「ああ...これがサイバーエージェントか...!!」

って感動したのを覚えています。

参加が決まってから実際に当日を迎えるまでに約1ヶ月ほどありました。
このインターンシップのテーマが

プログラミング経験のある学生を対象に約2週間でAndroidアプリ開発の基礎スキルを身に着けていただくキャンプ形式のインターンです。

事前課題やハンズオン形式の学習で理解を深め、活躍する現場社員に質問しながら、課題に沿ったAndroidアプリを完成させることを目指していただきます。

「1人でアプリを開発しリリースできるようになる」というゴールを達成できるようなものを想定しています。

という養成型プログラムでした。
要約すると、
Androidの経験はないけれど、サーバーサイドやiOSなどの開発をしてきた人たちが、2週間でAndroidアプリを1人で作れるようになる」
というコンセプトです。


とはいえ、自走力が必要なので、この1ヶ月の間にAndroidの基礎や、Kotlinの基礎を叩き込んでおくのは必要不可欠です。
インターン参加後に参加者達が口を揃えて


「もっと基礎を勉強していればよかった」


と言っていました。
せっかく現場の前線で活躍されているプロのAndroidエンジニアの方にメンターとしてついていただくのに、
基礎の基礎ばかりを聞いてしまっては時間がもったいないという意味です。


tech dojoに参加を検討している方は、少なからずKotlinに、Androidに興味を持っていると思うので、
そこを興味だけでなく行動に落とし込んで、事前学習してから参加することを強くお勧めします。
得られるものの大きさがだいぶ違うので。

参加するにあたって

自分は、Kotlinはあまり触ったことがなかったですが、Android開発経験はありました。
拙作ですが、プログラミングを始めてから約4ヶ月ほどでPlay Storeにアプリをリリースしたことがあります。
恋人用に作ったのであまり拡散はしていませんが...笑

f:id:kurutabrog:20190818205604p:plain
乾かすちゃん
https://play.google.com/store/apps/details?id=com.kurus.kawakasuchan



そのため、ある程度の基礎や簡単な流れは分かっていました。
ですが、完全に独学で学んできたので、現場のプロであるメンターさんに質問できる環境に憧れてこのインターンシップに申し込みました。
(本当に申し込んで大正解でした)



せっかくの機会なので、ただ脳死で参加するだけではなく、目標を決めて参加しようと心がけ、インターンシップ期間中はこの目標を常に意識して取り組んでいました。

  • 設計を意識した開発
    • 要件を満たすだけなら簡単かもしれないけれど、実務を意識して初めから設計を取り入れ、メンターさんにアドバイスをもらいたかった。
  • 大人数開発を見越したgitの扱い
    • 基本的には単独で開発をするのですが、機能ごとにbranchをきってプルリクエストを投げたり...(自分で承認するけど笑)
  • 質問の
    • エラーが出たからすぐ質問するという姿勢ではなく、自分で調べうる解決策をいくつか試した上で、自分の考えを持った上で質問する。
    • そうすることでメンターさんも「何がわかっていて」「何を教えてもらいたいか」が明確にわかるので互いにWin-Winかなと。
  • 繋がりを大事に
    • 積極的に参加者や社員さんと話し、仲良くなる。
    • 横のつながり:情報系学部じゃなかったし、学生のAndroidエンジニアが少なかったから友達欲しかった...
    • 縦のつながり:つよつよエンジニアやバチイケな社員さんとお話ししてモチベーションあげたい


自己評価ですが、結果的にこれら全て大成功でした。
やっぱり目標もって取り組むことは大事だなと思いました。



というわけでここまでが自己紹介諸々でした。
次章からインターンシップの内容に言及します。

インターンシップ内容

上述したように、このインターンシップでは、2週間で、Androidアプリを「1人」で開発してリリースできるようになることが目標なので、基本的には与えられた課題を1人で開発します。
そして、わからないことや、躓いたところがあればSlackもしくは直接メンターさんに質問できるような内容です。


参加者は今回が16名で、4人組×4班に別れて、それぞれの班に1人メンターさんがつくような形です。
個人開発だけど班に別れる理由はおそらく、

  • メンターさんが教えやすいため
  • 参加者同士で教えあえるため
  • 参加者の仲を深めるため

でしょうか。
実際、各班プログラミング歴長めの人であったり、Android経験者がうまい具合にバラけていたのでそんな感じだと思います。




本章では、開発に関してと、それ以外のランチや社内見学などを分けて記述していこうかと思います。

開発

ここまで読み進めていただいても、正直まだインターンのイメージを掴めていない人は多いと思います。
なので、実際にどういった課題だったかと、自分がどんな物を作ったかを簡単にご紹介します。


課題内容にも特に機密は含まれてないそうなので、ブログに書いちゃっていいそうです。
さすがです。

課題内容(プロフィール交換アプリ)

16名全員が同じ内容の課題にチャレンジします。以下の要件をクリアしていれば、他にどんな機能を付け足そうと、どんなUIにしようとそれは個人の自由となります。
そのため、コードにも見た目にもオリジナリティが生まれる内容となっています。


実際には、自身のプロフィールをQRコードを使って交換するアプリを作成します。 プロフィールに含む情報は以下のとおりです。

  • フルネーム
  • GitHubアカウント(必須入力)
  • Twitterアカウント

これらの情報を元にQRコードを生成し、これを他人に読み取ってもらうことで自分の情報を渡せるようにします。
読み取った側は、それらの情報を永続化した上でリスト表示できるようにします。
そして、交換した人のアカウント名をタッチするとそのWebページをアプリ内で見れるようにします。


要するに、インターン生同士でQRコードを読み取り合って自身のプロフィールを交換する、いわゆる名刺交換のようなアプリを作りました。
お互いにアプリが入っていないと機能しませんが笑



以下は自分の作品です。UIは最終日に徹夜で間に合わせたものなので、ところどころ残念ですけどご容赦ください。
fabとか色合いひどい...笑

f:id:kurutabrog:20190818223207p:plain
app



要件以外での機能面のオリジナリティとしては、

ですかね。


機能よりも実装(コード)面で力を入れました。実装面で指定というか推奨されていたのは、SQLite、RecyclerView、WebView程度だったので、使ってみたいやつ全部使っちゃいました。

  • Navigation/Jetpack(画面遷移)
  • Databinding(MyProfile画面とか)
  • Kotlin Coroutine(非同期処理)
  • ViewModel/Jetpack(MVVM)
  • Room(データベース)
  • Glide(画像処理)
  • Dagger2(DI)
  • Retrofit/GSON(API)


設計の構造は以下の通りです。発表資料のくりぬきで。

f:id:kurutabrog:20190818225146p:plain
MVVM

よくあるMVVMのカタチですね。
これまでudemyとかで写経学習はしたことがあるのですが、MVVMを自分で1から実装するのは初めてだったので、責務の分離とか、Dagger周りがかなり難しかった...
理解しづらい概念もメンターさんに聞くと抜群にわかりやすい回答が返ってくるので、この機会にやって正解でした。
とはいえ、2週間で要件を満たす必要があるため、初めから上記のライブラリを全て使うのではなくて計画的導入するなどの工夫が必要でした。



はじめに定めた目標である、設計にこだわること、つまづいても色々試してみてからわからない点を言語化して質問することを意識しながら開発を進めていきました。
その結果、🏆最優秀賞🏆として選出していただきました。
めちゃめちゃ嬉しいです。いまだに余韻がすごい...。
もらったabemaくんのバンカーリング可愛い。

f:id:kurutabrog:20190818230718p:plain
戦利品



モダンなライブラリを計画的に使い、実装仕切ったところや、インターンシップの取り組み姿勢を評価していただいたそうです。
嬉しい。



まだプログラミングは始めてから半年ちょいですが、本業の材料系の研究そっちのけでAndroid開発にハマって毎日触ってきたのが報われた感があって興奮しています。
文面では伝わらないかもしれないですけど、しています。



実は、一度大阪に戻った時に休学届けを出してきました。東京でAndroidエンジニアとして経験を積みたいと思って。
大学院では、材料系の研究と経営学を学んでいるのですが、忙しすぎてどちらも中途半端になっていたので、この機会にと思い決意しました。
10月からはインターンが決まっていないので、どこかで長期インターンしたいなあ。



ということで、開発面はこれくらいにして次からは日常生活や雰囲気をお伝えできればと思います!
長いですけどもう少々お付き合いください。

開発以外

雰囲気とか

雰囲気は総じてめっちゃ良いです。本当に良かった。
良かったって言えとかいわれてないです。ほんとうに、よい。


とにかく社員さんの人柄が抜群によくて、
今回の運営責任者である、ななさん(@utsu_nana)をはじめとした人事のみなさんの暖かさであったり、
メンターさん4名だけでなく、業務中に遊びにきていただいて質問にも快く答えてくださった最強のAndroidエンジニアさん。
本当に全員が優しく、そして本気でこのインターンシップを良いものにしようという雰囲気が感じられました。


先生と生徒とか、社員と学生、みたいにガチガチな関係を強いられるのではなくて、学生も大人として扱っていただけるし、すごくフランクに話しかけてくださるので、伸び伸びと2週間が過ごせました。



そしてインターン生の仲の良さ。
これは自分で言うのもなんなんですけど、人との繋がりを大事にするっていう目標を意識して、ほぼ毎日チームビルディングもかねて退勤後にインターン生とご飯に行くっていう流れを作ったの最高に良くないですか??笑
蒙古タンメン行ったり焼肉行ったり、飲みに行ったりして毎日楽しかった。
その代わりお金がなくなったのと、太った感じするのが副作用。

業務中

社食連れて行ってもらったり、

f:id:kurutabrog:20190818233703j:plain
(人事のゴッティさん(@masagotty)の山盛りカレー)

社内見学行ったり
f:id:kurutabrog:20190818234050j:plain
(社長室)

毎日お弁当とか、連れて行ってもらった渋谷ランチ美味しかったり

(写真撮るの忘れた...)

至れり尽くせりの毎日でした。


総括

最終日、ななさんが、

「みんなで、お世話になったメンターさんにサプライズでメッセージ書こう」

って企画していた裏で、

インターン生でななさんにサプライズでメッセージ書こう」

っていう逆サプライズをしました。


メンターさんに渡し終えて、ななさんが締めるところでの

「「ちょっと待ったー!」」

の段階で涙がでていたななさんをみて、インターン生は全員エモさを感じていました。


こんなに激アツで、こんなにエモいインターンありますか?
初めてのインターンがこのインターンで良かったです。


ここで得た開発の知見と、人との繋がりを大事にして、これからも頑張りたいと思います。


2週間ありがとうございました。
f:id:kurutabrog:20190818235040j:plain