チームラボのインターン面白かった
どうも。お久しぶりです。森田拓朗です。
なんか会社訪問紹介ブログになってしまっていますが、今年の夏もインターンシップに行ってきた会社に対して、勉強になったこととかを軽く紹介していこうと思います。
今回はチームラボ株式会社という会社に、Android エンジニアのインターンとして参加してきました。
1. 何で受けたか?
チームラボといえば、地域でイベントを行ったり、
チームラボボーダレスやプラネッツなどのデートスポットとしてもアミューズメント施設としても使える、なんか新体験を提供する会社みたいなイメージがあり、アプリを作っているとは最初思っていませんでした。
しかし、この夏、会社をいろいろ調べていくうちに、Androidを割とがっつり開発している会社をどこか受けたいなぁと思い、ふらついている中で、
DroidKaigiなどでもGold Sponsorsになっていたり、公式サイトにもあらゆる分野の会社とのプロダクトが載っていることから、「これはアチィ会社見つけたぜ」と思い、応募しました。
一応、応募フローは、コーディングテスト→面接(自分の場合は1回)という感じでした。
2.日程
1日目にPCの貸し出し+チームラボの、ボーダレス+プラネッツの見学があり、
そこから最終日前日まで完全なリモートワークとなり、最終日は成果報告会というものでした。
せっかくなので見学の画像も最高だったので載せていきます。
最初は、チームラボプラネッツに行ってきました
これ光があらゆる方向から飛んでくる感じの施設(日本語迷子)で綺麗な場所です。
光がウワーッってあらゆる方向で行ったり来たりするので、色々妄想が捗る場所です。
僕はこの時、
西暦2082年、意識のデータ化が可能になり実体が飽和した時代。ネオ東京のデータを集約する施設「Server Planets」内部に特殊工作員としてデータ侵入したモリタは、ネオ東京中のトラフィックが流れ来る光景を目の当たりにし、ただ茫然としていた。(2話)
という設定で、観覧していました(緊張感ゼロ)
そんくらい想像が掻き立てられるし楽しい場所です。
これはみんな寝っ転がって、ドーム上の映像を見る、プラネタリウム的なものかと思ったら、めっちゃ花が多次元的に動き回ります。
これこそThe没入って感じで、動き回る花を見ることで、自分が下に落ちていく感覚だったり、上に昇る感覚だったり、ある種の浮遊体験を味わえる場所です(何を言っているかわかんねーと思うが、そういうことだぜ)
これ熱中しすぎてちょっと酔いましたね。
次にボーダレスの方の写真を少し見ていきます。
中にお茶飲めるレストランがあって、
そこでお茶飲んだんですけど、お茶から花が出ました(何言っているかわかんねーけど、そういうことです)
飲んで動かしたら、花は消えますがしばらくしたらまた、ゆっくり咲きます。(ジョジョ5部のゴールドエクスペリエンスで生命誕生する瞬間みたいな感じ)
これの超絶ビビったことは、お茶を飲みきったら花が消えるんですよね。
位置を、器からセンサーで得ているか思ったら違ったわけです。(温度情報とか送っているのかな。それとも机に仕掛け?)
なんにせよ、どうやってるかわかんないし、
「お茶に花が咲く」という定義を守る徹底っぷり。表現や体験に対しかなりのこだわりが見られました。
まだ写真はありますが、ちょっとこれくらいにしておきます。
田舎生まれフードコート育ちの僕に対して、超絶新体験でした。ありがとうございます。
さて、こっからは開発ですよ!!(忘れるとこだった)
3.内容
とあるアプリのとある1機能を追加するという内容でした。
何故こんなぼかすかというと、実際の案件に関わらせてもらったからです。
しかも僕がやったのは、現状バリバリ走っているプロジェクトだったので、
え、こんな普通に仕事を任せてもらって大丈夫?
と不安になったのを覚えています。
4.開発期間でためになったこと
ここからほとんどの日程、基本的に家でずっと開発していたので、主にためになったことを軽く紹介します。
4-1. アーキテクチャや開発環境
自分の参加したプロジェクトは、オニオンアーキテクチャに基づいており、UI,Domain,Infraにモジュールが分けられていました。
https://qiita.com/cocoa-maemae/items/e3f2eabbe0877c2af8d0
モジュールの中に、各画面や機能構成ごとにディレクトリが分けており、その中はServiceやUseCaseなどの各層にあるべきファイルが格納されています。
役割がはっきりしている分、他者のコードの参考のしやすさがエゲつなかったです。
後、最後の1日に時間余ったので、データの加工部分のUnitテストを作ったのですが、
それも依存が切り離されているおかげで、テストが超絶やりやすくデータの疎通を考えずに加工部分だけテストできました。
巨大なアプリを支えるのはよくできた構成なんですね...。
4-2 質問の仕方
今回のインターンはリモートであるため、近くにメンターさんがいない分、必ず通話やチャットを介して質問する必要がありました。
コミュニケーションコストが高い上に、メンターさんは死ぬほど忙しい方でしたので、即質問して即解決とはならず、かなり配慮して頂いてもある程度のラグが覚悟されました。
特に、電話可能になるまで3時間かかる状態の時は、質問内容をメモ帳にまとめるより、もう自分で出来るだけ作ってしまおうと思い、
ない知識を振り絞り、「多分おかしいけど現状動く実装」を行いPushしたところ、
かなり的確なレビュー+自分の実装の問題点+方針転換のレビューを一斉に頂き、
口頭だけよりもコードを組み合わせることで自分の知識状態がより深く伝わった実感がありました
ケースバイケースかもしれませんが、自分がどれだけ理解しているか?という部分を伝えることがオンラインだとかなり重要な気がしました.
4-3 モダンなライブラリ群
DaggerやFlow(こいつら難解でほぼわかってない)、Groupieなど、ググったら最近の記事しか出てこないようなライブラリ群に加え、
9-patch やUnitTestなどの実装経験もつき、
知識や実装力もかなりついたと思いました。
5.完走を終えての感想
本ブログでは来年受ける人とかにも向けて、素直な感想を心がけています。
5-1. 実案件に関われる
インターン専用の課題が用意されているわけではなく、社会に存在する企業の案件に関われるため、終わった後の実装してやったぜ感は、群を抜いています。
守秘義務で友達に何を実装したかは基本的にいえませんが、システムが完成した場合、自分もインストールして死ぬほどほくそ笑むことでしょう。
この悦びを味わえる課題を、2週間の塩梅で切り分けてくれたチームラボさんには頭あがらへん。。。
5-2. 開発環境が究極的に新しい
使っているモジュールが新しすぎて、「蒸気機関はえーw」って言ってた俺が、リニアモーターカー乗せられた気分くらいでした(意味不明)
新しいライブラリを使うことを結構推奨しているらしくエンジニアにかなりの裁量がある分、開発環境は恐らく超絶新しいです。
知らないライブラリだったり、知識の幅はとんでもなく広がります。
逆に新しすぎて、日本語のドキュメントがほぼないため、英語力渇望する瞬間がありましたね。(勉強しないと)
また、自分のようにKotlinの文法や、Jet Packの基本的なライブラリの使い方などがちょっと浅いと、それ以前で苦しむ時間が多くなった時間もありました(愚問をたくさんしました。。)
5-3. 一人で考えて一人で実装する時間が長い
極力メンターさんも時間を作っていただき、質問に答えてくれる環境を用意していただいていますが、
すべてのエンジニアがその案件専属で関わっている状況はなく、マルチタスクをこなしています。
ゆえに僕たち学生にすべての時間を割いてくれるわけは当然ないため、
今までインターンに比べると、トップクラスに一人で考える時間が多いインターンでした。
逆に、実際に働くときと近いような気がして自分は楽しかったんですが、
人と相談して何かを作っていったり、エンジニアの人柄をもっと知りたい!という感じなら、
ここらへんは、ちょっと消化不良になるかもしれません。。。
6.まとめ
最後ちょっと微妙なこと言いましたが、総合的に見れば最高でした。
特にお会いしたエンジニアの方は、基礎的な知識が身についた上で新しい技術に対して貪欲に探究されている姿勢や
PRでしっかり自分の考えを言って議論しあう姿なども感服したと同時に、
己はもっと鍛えねばと、改めて思いました。
↑業務終了後、電車で届いたメールに一人エモくなってた。
本当に楽しいインターンシップですので、おすすめ!!
森田でした。