CARTA HOLDINGSのインターンシップ「Sunrise」に参加したレポート

# はじめに
こんにちは、みんみんです。
先日、株式会社CARTA HOLDINGS様主催の**高トラフィックサービス構築プログラム「Sunrise」** に参加させていただきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636687/04f0499a-9e56-41b2-ab32-5455b934d29d.png)
人生初のインターンシップだったのですが、とても楽しく学びが多かったので、本記事では振り返りを含めてインターンでの学びなどを記載します！(注：具体的な詳細情報はネタバレになってしまい今後参加される方の学習機会を損なってしまうので、公開されている情報の範囲で記載します、ご了承ください)

# 自己紹介
まずこの記事を書いている私は何者なのかというところで、軽い自己紹介を書いておきます。

* 愛知の情報科大学院生(27卒予定)
* ネットワークの研究室に所属
* 最近はインフラばっかりいじってる
* 春休みぐらいから27卒は動き始めた方がいいと聞いて就活真っ只中
* インフラエンジニアを志望
* インターンは未経験

# インターンシップ概要
公式の記事から引用させていただきます。

>『高トラフィックを捌きつつ、安定して価値を出し続けるプラットフォームを構築せよ！』
大規模システムの安定運用に携わるエンジニアから、大量リクエストを捌くために必要なアプリケーションの設計・構築について学べます。
秒間数万リクエストを念頭にシステムを改善し安定運用を目指します。

[【27卒】高トラフィックサービス構築プログラム「Sunrise」](https://carta-recruit.snar.jp/jobboard/detail.aspx?id=gk-Dop8kqu8)

具体的な内容としては、GoとAWSの環境が渡されるので、改修することで秒間数万リクエストを捌けるようにするといった内容です。
[3分で分かる学生向けインターン『Sunrise』: 高トラフィックをさばくアプリケーションを構築せよ！](https://techblog.cartaholdings.co.jp/sunrise)

# 参加経緯
私は研究においてインフラ周りの技術を取り扱っていることもあり、将来はインフラエンジニアを目指しています。
様々なインターンシップを調べている中でSunriseを知りました。内容を読むとGoとAWSでパフォーマンスチューニングを行うといったインフラエンジニアにはもってこいの内容で、即座に申し込みました。研究でGoを用いていること、高トラフィックを想定したパフォーマンスチューニングの経験ができること、AWSを実践形式で学習できる機会があること、全てのことが参加動機とマッチングしました。

# 事前面談・事前学習
インターンシップに初めて参加するにあたって色々な不安はつきものです。しかしながらそこのサポート(事前面談・事前学習)もとても手厚かったです。
事前面談では、インターンシップに参加する目的を人事サポーターの方と定めました。物事へ取り組む際に目的を持つかどうかでは成長度合いが全然変わるので、これはとてもよかったです。自分自身の自己分析にもなります。また、技術的な目標だけでなく、パーソナル的な目標も立てるので、エンジニアとして多角的な成長ができました。
事前学習では、環境構築やGoの事前学習として[A Tour of Go](https://go-tour-jp.appspot.com/list)、AWSの事前学習としてAWS Skill Builderより[AWS Technical Essentials](https://explore.skillbuilder.aws/learn/courses/13153/aws-technical-essentials-ri-ben-yu)を学習するようにアナウンスがありました。AWSが未経験の自分にとってはTechnical Essentialsがとても良い教材でした。学習の流れとしては、自分が読む→GPTに読ませて実践形式のハンズオンを作らせる→ハンズオンで手を動かすという流れで学習しました。これおすすめです。

# インターン中の学び
ここから学んだことを記載していくのですが、内容が多いのはもちろん、自分自身で体験したり気づいた方が良いこともあるかもしれませんので留意ください。

## 推測するな、計測せよ
今回のインターンで最初に出てきた格言です。エンジニア全般に刺さるだけでなく、特にインフラなどの低レイヤーを取り扱う人には大切なマインドだと感じました。問題の発見⇒仮説を立てるというプロセスは、エンジニアの方々はよく行っていると思います。Sunriseでは実際に計測するまでを徹底しているのが印象的でした。計測結果は正しいのか、正しいとしてなぜこの結果になったのか、そもそも正しいデータとは何をもって言えるのかといった問題の根本的な原因を突き詰めていくプロセスはとてもためになりました。
仮説で多分こうなるだろうで終わるのではなく、実証してみてこうなったと計測結果を出せた方が根拠としては圧倒的に強いです。(もちろんリスクを伴う実証ではリスクマネジメントを徹底したうえでの話です。)

## 検証は対照実験(変更は1つにする)
当たり前といえば当たり前の話ではあるのですが、変更を加える際は単一の変更にするべきという話です。頭でわかっているからと複数の変更を同時に加えてしまうのは、少し慣れてきたエンジニアにはよくある話だと思います。実装は早くなるかもしれませんが、本当にそれらの変更全てが結果に直結しているのか、問題が発生したときにどの変更が原因となったのかというのを特定することが非常に困難になります。結果的に、作業のロールバックが発生することに繋がるため、変更は単一に絞った方が良いでしょう。
Sunriseにおいては、細かくIssueを立てて、一つのIssueの中では単一の変更のみを行うといったプロセスを徹底していました。自分が担当していないIssueでも何を変更して、結果はどうなったのかというのが見やすくなったので、このプロセスは良かったと思っています。Issueの立て方や書き方も経験がなかったので勉強になりました。

## チーム開発においてのアイデア
チーム開発で起こりうる問題として、実装方法やアイデアの衝突による仲違いがあると思います。自分が思いついたアイデアには愛着が湧くため、それを押し通したくなるのは人間として当然の動きです。そのため、他の人のアイデアは握りつぶしたくなるという場合もあるでしょう。しかし、チームでの開発においてこのマインドは大きな問題になりうる可能性があることに注意した方が良いです。
チームでの問題解決は「アイデア vs アイデア」ではありません。「チーム vs 問題」の構図をチームメンバーが把握しておいた方が良いです。自分のアイデアを伝えるときは、一度客観的に見つめ直して、どのようなアイデアなのかを説明したうえでチームに共有し、選定するようにした方が良いです。これは、チーム全体の認識のすり合わせにも直結するのでしっかり話し合いましょう！また、アイデアを聞く側もアイデアに対しての批評を徹底することが大事です。アイデアに対しての批評は、人に対しての批評ではないということを話し手と聞き手が理解し合えていれば、議論はよりスムーズに進むと思います。

## 技術はトレードオフ
皆さんは技術選定をするとき、どのようにしていますか？個人開発や趣味では、好きな技術や使い慣れた技術を用いることもあるかと思われます。しかし、顧客に提供するサービスにおいてそのような技術選定は、適切でないかもしれません。顧客が求めているサービスの本質的な部分、根本的な問題はなにかといった部分を明確にしたうえで、適切な技術を選定することが重要となります。
ここで出てくるのがトレードオフです。どのような技術にもメリットとデメリットが存在します。メリットしかないハイテク技術があれば全人類その技術を使うだけなので、エンジニアの仕事は激減するでしょう。我々エンジニアが考えなければならないのは、実装においてメリットとデメリットを合わせたうえで適切だといえる技術とその根拠だと言えます。
例えば、処理が早くなるライブラリ的なものを実装に組み込もうとする場合を考えます。一見、処理が早くなるならそれを使うべきだと思うかもしれませんが、多角的にそのライブラリの処理を追った方が良いです。ライブラリの中でデータはどのように扱われているか、前までの実装とデータが変わったりしないか、障害発生時にデータはどこまで担保されるのかなど考えられる視点は無数にあります。それらを網羅的に考えるのは大変ですし、100%これが良いと断言できなくなるかもしれません。だからこそ、我々エンジニアは問題にクリティカルな結果を出せる技術を選定する必要性があるといえます。

## 学ぶのは楽しい
他にもインターン中に得た学びはたくさんあります。ここには書いていませんがAWSやGoの技術的な学びもたくさんありました。パーソナル的な学びも数えきれないぐらいありました。チーム開発でのサイクルの回し方やマネジメント、自己分析などの経験を積むことができました。知的好奇心が毎日刺激され続けて楽しかったです。

# Sunriseのここがすごい
ここからは、Sunriseの5日間のプログラムで良かったものを記載していきます。
参加を迷っている方は参考にしてみてください。

## 90分の開発サイクル
Sunriseでは各チームごとに90分開発⇒進捗報告を繰り返します。サイクル毎に何を行うか、時間配分はどうするか、進捗報告の資料はどうするかといったことを取り決めて行うのでタイムマネジメント能力が身に付きます。
また、他のチームの進捗状況が分かるので、技術的な学びや進捗報告の仕方も参考になります。
これもSunriseの特徴だなと思ったのですが、各チームが競争するのではなく協力し合ってよいという部分です。実装に詰まったりしたときに他のチームにアイデアを聞いたり、協力し合えるのもよい環境だなと感じました。

## サポーターによるフィードバック
Sunriseでは、各チームに技術サポーターと人事サポーター1人ずつの計2名のサポーターさんがついてくれます。
2日目と4日目、インターン後日にサポーターさん2人との面談があります。
面談では、困っていることや悩んでいること、事前面談で決めた目標の達成度合いなど様々な相談ができます。また、それぞれのサポーターさんからSunrise中の自身の動きについてのフィードバックがもらえるので客観的な自分の良い点、改善点をもらえる貴重な機会です。自分の強みやもっと良くなる部分を見つけられる機会なのでこの面談はめちゃくちゃ良かったです。

## Ajiting
CARTA HOLDINGS様のオフィスにはAJITOという社内BARがあります。一日の開発が終わった後は、ここでお酒を飲みながら話をしたりすることができます。インターン中に社内エンジニアの方によるLT会なども開かれ、楽しく話を聞くことができました。縦横の繋がりが広がるいい文化だと思います。(写真はLT会のときのものです、ピザとお酒おいしかったです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636687/c5667123-93a3-4145-8537-6f66a07b8def.png)

## ランチ休憩(PLAZA)
オフィスにはPLAZAというフリースペースがあり、毎日そこでランチを食べました。景色良し、お弁当のボリューム良し、コスパ良し(ランチチケットにより実質無料で提供していただきました)の最高の環境です。昼食はサポーターさんや講師の方も一緒に食べるので雑談も弾むとても楽しい時間でした。噂によると色んな役職の方がPLAZAを利用しているとのことで、野生のエンジニアとも遭遇できるらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636687/7e3fe987-1241-4b09-ba5f-994ac857329d.png)
↑東京タワーを見ながらのランチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636687/d6c16547-ed72-41b0-b445-798c1cde7612.png)
↑PLAZA内のカフェでコーヒーブレイク

## おもしろいプログラム盛りだくさん
上記で紹介したプログラムはほんの一例です。他にも懇親会や、他のチームメンバーと話す朝会、オフィスツアー、社員の方々やCTOによるCARTA HOLDINGS様の会社説明など語り切れないほどのプログラムがあります！
興味のある方はぜひ参加していただきたいです。
余談ですが、Slackの文化がとても活発で、リアルタイムにコメントする文化があり、とてもハマりました。

# まとめ
色々語りましたが、Sunriseは自分にとってとても学びと楽しさに溢れたインターンシップでした。エンジニアにおいて求められるスキル、人物像の解像度が自分の中ではっきりと定まったと感じています。
自分が成長できたのは、チームメンバー、Sunrise生、サポーターの方々の支えがあったからだと思っています。みんな良い人ばかりで感謝がつきません、ありがとうございました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636687/187f19df-29fd-4909-a076-353e02703833.png)