
インターン概要
インターン先
株式会社CARTA HOLDINGS
稼働日
11/4〜12/26 (稼働20営業日、フルリモート)
技術力評価会・フィードバック日
1/9(現地:東京本社)
インターンでやったこと
- Web メディアに新規機能を追加する業務を行なっていた。
- 社内向けツールやエンドユーザー向けサービスに関連する機能を追加した。
ここがすごいよ
- 全く存在していない機能を、一番最初の機能立ち上げミーティングから参加して、OJTとビジネスサイドの方と話し合って創っていく
- なんでこの機能が必要なのか、どのように使われていくのかまで考えて、設計・実装に落とし込むところまでできる
- OJT の方と機能について相談するだけではなく、ビジネスサイドの方と直接やりとりをしてシステムについて決められる
- 考えた機能の要件やUIはビジネスサイドの方と直接話し合いながら設計を固めていく
- インターン期間中の成果について実際に会社で働いている社員同士で行われるものと同等のフィードバックが現役のエンジニアから受けられる
- コーディングの視点に立って、設計や実装・開発手法について良かった点、もっと良くできる点が知れる
- ビジネスの視点に立って、ビジネス的な価値を最大化するにはどういう取り組みが必要かという視点を与えてくれる
インターンの充実していた点
- まだ形になっていない構想を自分で煮詰められる
- 今回のインターンで行った実装は、これまでのサービスには全く存在しない機能であったため、その機能をどのように使えるようにするのか、どうやって実装するのかを全て考えられる
- 自分で実装する意味を考えて、必要だと思ったものを作りたい形で作れる(推しポイント①)
- 意図も実装方式も明確なタスクを与えられて、これをやっておいてね、というわけではない
- タスクは自分で分解して、力を入れる場所を決められる
- その実装が必要な理由、力を入れなければいけない理由について考えられる
- 自分で考えても分からないところがあったらすぐに聞いてフィードバックが受けられる
- 既存の要件や追加機能の意図など、理解できていない文脈について質問できて、納得できるまで話し合いができる
- 社員さんとめちゃめちゃ話せる!!(推しポイント②)
- 毎日の 1on1 で OJT の方と話す機会がある
- 定期的に人事さんと、事業部外のエンジニアの方に今の課題を相談できる機会がある
- コミュニケーションの取り方や、どういう風に開発を進めていけば良いかなど、今の自分の在り方を一歩引いた場所からアドバイスをいただける
- 事業部を横断してエンジニア社員さんと交流できる 1on1 の文化
- エンジニア同士で他の事業部の方とコミュニケーションを取れる文化が根付いているのが面白い
- 地方学生は特に実際に働いているエンジニアの方と会話して、エンジニアリングの話を聞く機会はほぼない
- 普段どういう風に開発をしているのか、これまでどういうことをやってきたのか、何を意識しているのか、趣味は何かなど、実際に働いている方と会話することでエンジニアとして働く将来をより明確にイメージできるようになった
- どういう社員さんが働いているのか、人となりがかなり分かった
- 現役エンジニアによる技術評価会・評価会のフィードバック会
- 自分がインターン中に力を入れて設計・開発した部分について資料にまとめて、現役のエンジニアと語り合える
- コーディングについてもっと良くなる点を聞いて、どうすればいいのか、なぜかそれが良くなるのか深掘りできる
- CARTA のエンジニアとして求められる、事業をエンジニアリングするために必要な見方がどのようなものであるかを知れる
開発
設計
インターンの始まったタイミングで、ビジネスサイドの方とOJTの方と私で新規機能についてのミーティングが行われた。ミーティングの中で、機能の意図や何を実現したいのかをビジネスサイドの方と共有できた。またインターン生である私にも新規機能についてどのような意見があるかを求められて、積極的に話し合いに参加していく姿勢と感覚が得られた。ここからコミュニケーションを取る感覚を掴んで、それ以降ビジネスサイドの方との調整をスムーズに行えた。
コーディングについて
新規機能をリリースするために、複数の環境で動くシステムを理解する必要がありました。OJT の方に全体の概要を説明していただき、既存のコードを読み解いていきました。
こうした大きなシステムに対して途中から開発に参加して、機能を追加するという経験はほとんどなかったので、手探りの中でやっていきました。OJT の方に教えていただいた Ask Devin に感動していました。Ask Devin が無かったらこんなに早く実装を終わらせられなかったと思います。Devin に関連するデータがどのように流れていくのかをかいつまんで説明してもらって、その部分のコードを読み解く中でシステムを理解していきました。
サービスは、それぞれ別の難解な設計のもとに機能を実装していてその部分を紐解く必要があり、その部分にかなり苦労しました。
今回の機能の肝となるのは、マップを提供するライブラリとそれに対する状態管理でした。このサービスでは WebGL ベースの比較的新しい WebGIS ライブラリを採用していました。以前からこのライブラリを利用した地理情報系サービスを個人的に作成していたので、その経験がかなり役に立ちました。(それがなかったら、この短期間でエリアに関連する機能を一通り実装し切るのは難しかったと思います。)こうして自分の過去の経験が意外なところで繋がって、価値を提供できる体験は初めてのことだったのでとても興味深く感じていました。やはりこうした基本となる知識を持ち合わせていると、0 から覚えるよりも圧倒的に早く物事を進められるので、いろんな技術に触るのは大切だなと思っていました。またそのためにはいろんな領域に対する知見を活かせる場所にいるのも大切であると感じました。
今回特に苦戦したロジックの部分では、一度機能を作成したのちにパフォーマンスが全く納得できず、もう一度作り直しました。パフォーマンスが悪化している理由には目星がついていて、OJT の方と相談しながらどのように対処すると良いかを考えました。そして設計を練り直し改善ができました。
クソデカ PR 問題
実装の中で常に見通しの立たない中で開発していました。なにがうまくいくかも分からず、手探りで機能を作ってみる状態がほとんどでした。そうして形になった機能をまるごと PR にしてしまったため、クソデカ PR が量産されていました。それぞれの PR の中にはアプリ全体で機能を実現するために加えられた変更が全てに含まれていました。
見通しの立たない開発の中ではどうやっても綺麗に分割できないのではないかと思っていたのですが、もっと PR の作り方を柔軟にしていいのだと教えていただきました。今作成したい機能はそれぞれどんな要素が組み合わさって実現されているのか、それぞれはどんな前提知識の元に何を実現したくて実装されているのか、それを明確にして PR を分解していくのが大切であるのだと学びました。未知の問題に対して初めから分解して取り組める人はいない。これからその知見を活かして丁寧な PR とレビュー依頼を行っていきたいと思います。
この問題は以前の SUNRISE インターンのフィードバックの中でも指摘されていなかったのですが改善できていませんでした。なのでかなり悔しい点でもあります。ただこれは前のインターンのときにはやらなければいけないという気付きを得て、今回のインターンで具体的にどのような手段があるのかを学べたので今後は改善していけると考えています。
人間関係・カルチャー
様々なエンジニアの方との 1on1
今回のインターンでは1つの事業部の中で働いていて、フルリモートだったのも相まって、他の事業部についてタスクの中で知ることはほとんどありませんでした。しかし制度を使って、様々な事業部のエンジニアの方と 1on1 をしました。趣味の話をしたり、事業部の話を聞いたり、マネジメントの話を聞いたり、インターン期間中合計で 13人の方と 1on1 をしていました。
これがかなり面白かったと感じています。技術のことが好きで、自分のプロダクトに熱意があって、面白いと思いながら前のめりにやっているんだなと感じる人たちが多くてそれがとても魅力的でした。そうやって交流を深めながら、技術の話もして、わいわいやっていける環境があるのがとても素敵だなと思っていました。
OJT / エンジニアメンター からの学び
OJT の方と 前の SUNRISE インターンから引き続きのメンターさんとお話する機会がありました、これが良かったと思っています。まず OJT の方は人柄をいいなぁと思っていたのですが、それは置いておいて…。
リーダとして立ち回る状況はどのように生まれたのか、何をしてきたのか、何を大切にしているのかを OJT の方にかなり深掘りして聞いていました。
OJT の方は状況を見る視点の持ち方が全く見たことのないタイプで、組織的に仕組みから良くしていこう。仕組みを良くすれば人もうまく回るという感覚を持っているのだと感じました。しかもそれを実践されていて、そのサイクルが良い風に働いているように感じたので、なるほどなぁと思っていました。OJT の方を自分の仮想的な将来像と仮定してみて、そうすると自分は何をしなければいけないのだろうと考えてみるのはどうかとメンターさんからのアドバイスをいただきました。そこからそのように考えて質問をするようになりました。
またメンターさんから頂いたアドバイスとして、なぜそう考えたのかを聞いてみるのはどうか、と言われました。たとえ話し合いの中で同じ結論に至ったとしても、相手と自分では知っている知識も違うし、思考の経路や重要視していることも違います。なので、たとえ同じ答えに至ったとしてもその過程を聞くことで知見を広げるきっかけになると言われて、とても納得しました。それ以降はインターンの中で、なぜそう思ったのかを聞くように意識していました。
過去の自分の行動をどのように考えるのか
フィードバック面談の中で、メンターさんや人事の方に言われたこととして、自分の行動をどのように振り返るべきなのかについて考えるようになりました。
具体的には過去の自分が並んでできるようになったことがあって、それを軽視していはいけないというお話です。フィードバック面談の中で基本的に今の自分ができていないことにどのように向き合えば良いのかという話をしていたので、もっとできるようになったことに目を向けてみるべきではないかと言われました。それを機にもっと自分ができること、できたことに注目して、それを強くアピールしてもいいのではないか考えるようになりました。大学では基本的にそのように考えるようにはしていなくて、とうのもとんでもなく複雑で大きい課題が目の前に大量に積み上がっているので、後ろ見ずで新しくできるようにならなければいけない環境でできたことを振り返る余裕を持っていませんでした。しかしインターンを通じて自分ができること、できるようになったこと、できるようになりたいことを明確にしながら取り組むのが、今の自分の立ち位置を確認するために大切であると考えるようになりました。
ref:
今の自分の居場所で背伸びして頑張る
今の自分の居場所で背伸びして頑張るという考え方についてインターンを行う中で考えるようになりました。最終的な目標、あるいは野望があるのは良いのですが、それをどのように自分に近づけていくのかというを具体的に考えたことがありませんでした。
様々な事業部のエンジニアの方や OJT の方との 1on1 を通じてエンジニアの人たちを見ていて、それぞれ昔の自分がやらなきゃいけないことと、やれたほうがいいことを見つけていって、現状の自分から背伸びして挑戦してみるという姿勢を取っているのではないかと考えていました。そうして自分のできることとできるようになることを小さく広げていって、それを積み重ねて理想の自分に近付けていくのは現実的で良いアプローチなのではないかと感じるようになりました。
総括
大学の中で個人で開発をしているときは、自分のスキルは自分の内側に閉じているものでしかなく、それがどんな価値に変換できるかを調べるのは難しいです。現状を見て、学習して、思考して、形にして、使ってもらう。組織の中で誰かが必要としているものを生み出して、どのような価値が生まれたのかを検証していくのは、個人でやっているよりも魅力的であると感じました。ビジネスの知識などはまだほとんど持ち合わせていないのですが、人を見て、人の行動を見て、人のいる組織を見てそれをもっと良くしていく、自分だったらこうできると変えていく、そのために考え、行動を起こす働き方は面白いと思いました。
評価会フィードバックの中で選択できる手札を増やすというのはとても大事だなと思いました。エンジニアリングしかり、コーディングしかり、コミュニケーションしかり何か行動を起こすときには、今自分の手元にある選択肢から選ぶことになります。逆に全く知らないアプローチは選べないのです。そして自分がどんな手札を持っていて、どういう風に選んでいるのか客観的に分析するのは難しいです。技術力評価会とフィードバックの場では、資料作成の中で自分自身がどんな手札を既に持っていて、新しくどんな手札を手に入れたのかを分析するだけではなく、他のエンジニアの方から客観的にどんな手札を持っていて使っているのかを教えていただけます。これによって無意識にやっていたけど実際はとても重要だったことや、全く認識できていなかった別の選択肢が蓄積されると感じました。そうやってもっと自分の長所を伸ばしていける仕組みが組織として根付いているのはかなり魅力的に感じました。
最後に OJT の方、エンジニアメンターさん、人事さんに感謝を。
付記
懇親会のお寿司
