🙆

[インターン] CARTA HOLDINGSのSunriseに参加した。

2025/04/14に公開

2025年の3月に1週間、株式会社CARTA HOLDINGSの『Sunrise』というインターンシップに参加しました!!
たくさんの学びと成長、そして、楽しさも味わえた。そんな充実したインターンでした。

インターンの概要

開催概要

期間: 2025年3月23日~27日 (5日間)
形式: オフライン
参加者: 全国の学生 16名
チーム構成: 4人1組 × 4チーム
サポーター: 各チームにエンジニア1名、人事1名が付き、開発に集中できる環境を提供。
参加者の印象: 大学院生など優秀な方も多く、刺激的な環境でした。

課題

最初に渡されるのは、素朴に書かれた初期アプリケーションとAWSインフラ環境
渡されたWebアプリケーションを改善し、大規模トラフィックに耐えうるアプリに改善する

https://techblog.cartaholdings.co.jp/sunrise

選考プロセス

  • 書類選考
  • エンジニア面接
  • 適性検査
  • 人事面接
  • 参加確定!!

エンジニア面接

  • 提出した制作物について、「なぜその技術を選んだのか?」「なぜその選択をしたのか?」「他の選択肢は?」といった質問がされた。
  • 技術選択の論理的な思考力を見られていると感じ、CARTAのテックビジョン「本質志向」に通じるものがあると思った。

面接に関しては、エンジニア・人事どちらも雑談のような感じで進められたので、リラックスして面談を進めることができた。

全体の流れ

講義:改善するアプリの説明と開発をするうえでの重要な考え方
開発:各チームが1サイクル約1.5時間で作業をして、作業の進捗を他のチームへ共有

ルール
開発の時間のみ開発ができる
夜中とかにコード変更をするのはNG
コード変更ができるのは4日目の18:00まで5日目は資料作成のみ

内容
1日目 講義+開発
2日目 開発
3日目 開発
4日目 開発
5日目 発表準備+発表会

1日目:講義+開発

午前

自己紹介とアイスブレイクゲームで、参加者同士の交流が行われた。
開発環境のセットアップの確認(Docker、AWS CLIなど)とサポート

午後

講義と開発を行った。
講義
まず、開発環境について説明があった。具体的には、各参加者に割り当てられたIAMユーザーの配布や、開発作業で不可欠となるAWS CLI を使うための設定などが共有された。

次に、今回のインターンシップで改善対象となるアプリケーションの概要について解説があった。このアプリケーションがどのようなサービスを提供するものであるか、そしてそれを支えるAWSのインフラがどのような構成になっているのかが説明された。さらに、実際にアプリケーションをデプロイし、基本的な動作を確認した後、負荷をかけるデモンストレーションも行われ、改善前の状態を把握することができた。

最後に、開発を進める上での重要な考え方がいくつか提示された。情報工学における「最適化」の考え方に基づき、「あらゆる場合に最適な万能な方法や設計は存在しない」ということ、そして問題を解決する際には「推測するな、計測せよ」というUNIX哲学の格言に従い、データに基づいて判断することの重要性が強調された。また、チーム開発を円滑に進めるために、Issueには客観的な事実(見たこと)を具体的に記述し、関連するリンクやスクリーンショットを添えるといった、効果的な情報共有の方法についても指導があった。

開発
開発の最初のサイクルでは、まずチーム内で独自のルールを定めることから始めた。具体的には、IssueやPull Requestの書き方を統一することにした。これは、ルールがないまま進めると情報が乱雑になり、後の成果発表などで困ると考えたためである。私自身は、このルール統一の一環としてIssueテンプレートの作成を担当した。

次に、アプリケーションの現状のパフォーマンスを調査した。初期状態では4台のEC2インスタンスが稼働していたが、まずは個々のインスタンスが持つ本来の性能を把握するため、構成を1台に変更して計測することにした。

この1サイクル目の作業内容を発表したところ、講師陣からフィードバックがあった。特に指摘されたのはIssueの書き方についてであり、「改善内容が分かりにくい」点や、「どのような変更を行い、その結果どのような効果が得られ、それに対してどう考えたのか」を明確に記述する必要があるとのことであった。さらに、「スクリーンショットなどを活用し、変更前と変更後の状態を比較できるように示すべきだ」という具体的なアドバイスも受けた。

1日目を終えて
特に印象に残っているのは発表フェーズでのフィードバックである。指摘は的確で、自分が今まで疎かにしていた部分なので、心をえぐられるような思いであった。コメントされた課題については、今後の開発で改善していきたいと強く感じた。

一方で、チームの雰囲気は非常に仲が良かった。サポーターの方からも1日目にしては、雰囲気が良いと言われた。話し合いには全員が積極的に参加できており、この良い状態のまま最終日まで進めればと感じた。チーム開発では、時に他者を見下すような態度をとる人がいることもあるが、今回のチームにはそうしたメンバーはおらず、誰もがお互いを尊重し合っている。そのため、議論は非常にスムーズに進み、心地よく開発に取り組むことができた。

2日目と3日目、4日目

2日目から4日目にかけては、1日を通して開発作業と進捗発表を繰り返す日々であった。開発時間においては、チーム内でタスクを分担し、「調査」「可観測性の向上」「パフォーマンス向上」のいずれかに注力して作業を進めた。

私は、主に「調査」と「可観測性の向上」に関する作業を担当した。

「調査」においては、まずアプリケーションのどこに性能上のボトルネックが存在するのかを特定することから始めた。また、出力されるエラーログを詳細に分析し、システム内部で何が起きているのかを把握しようと努めた。特に、EC2インスタンスのログに繰り返し記録される特定のエラーに着目し、その根本原因を調査した結果、RDSのコネクション数不足が原因であることを突き止めた。これを受けて、関連するデータベース設定項目の調査も行った。

「可観測性の向上」に関しては、まずAWSのCloudWatchを利用して、ロードバランサーに到達したリクエストの総数を可視化する仕組みを構築した。さらに、それらのリクエストに対して、アプリケーションが正常に応答できた件数も表示できるようにし、システムが処理すべきアクセスのうち、どれだけの割合が失われているのか(あるいは成功しているのか)を定量的に把握できる状態を目指した。加えて、アプリケーションの仕様としてアクセス記録がデータベースに保存されることになっていたため、そのデータが実際に正しく永続化されているかを確認するための手段も実装した。

5日目:発表準備+発表

最終日である5日目は、成果発表とその準備に充てられた。

発表準備
まず発表形式がGitHubのIssueを利用するものであったため、これまでに積み重ねてきたIssueの内容を整理・改善する必要があった。具体的には、過去のIssueの中で根拠や変更点が分かりにくい記述を修正し、最終発表に適した形になるよう発表用のIssueを新たに作成した。さらに、チームメンバー間で互いのIssueをレビューし合い、記述の抜け漏れや不明瞭な点がないかを確認する作業も行った。
発表
各チームに発表20分、質疑応答10分、合計30分の持ち時間が与えられた。質疑応答は、インターン期間中お世話になった講師陣や現場のエンジニアの方々から行われた。中には、我々チームが全く想定していなかった角度からの質問もあり、的確に答えるのに苦労する場面もあった。それは正直なところ、少し辛い経験でもあった。

社内雰囲気と懇親会

社内雰囲気
インターンシップ期間中に感じた社内の雰囲気は、一言で言うと「とても明るい」ものであった。特に印象的だったのは、終業後の社員交流スペースである「PLAZA」や「AJITO」の様子である。これらの場所には、夕方になると常に10数名の社員が集まって和やかに雑談しており、社員同士の仲が良いという印象を強く受けた。

また、執務環境にも工夫が見られた。通常の作業スペースだけでなく、一人で集中して作業に取り組める個人用ブースや、静かに集中するための専用区画などが用意されており、多様な働き方に対応している点は面白いと感じた。さらに、社内の随所に遊び心を感じさせるデザインや仕掛けがあり、働く環境にもユニークさを追求している点が興味深かった。

懇親会
インターンシップ期間中、初日と最終日の業務終了後には懇親会が開催された。

初日の懇親会では、参加者全員でお弁当を食べながら、ボードゲームを楽しんだり、自由に雑談したりする時間であった。和気あいあいとした雰囲気で、非常に楽しかった。ボードゲームでは優勝者に景品が用意されており、私自身ももう少しで景品を獲得できそうなところまでいったのだが、惜しくも逃してしまい悔しい思いをした。

最終日には、社員交流スペースである「AJITO」で、インターンシップの「お疲れ様会」が開かれた。ここでは、「Sunrise」に参加したメンバー全員で、5日間の楽しかった出来事や苦労した点などを語り合い、互いの健闘を称え合った。

感想

1日目、2日目あたりは、issueの書き方で指摘を多く受けた記憶がある。
3日目からは粗さは残るが、初期のころと比べるとissueの書き方よりも内容の指摘をしてもらえるようになった。でもやはり、理由付けが弱い印象が残る。
4日目に作ったcloud watchのダッシュボードがメンバーに好評で「エラー検知がしやすくなった」といわれたときはうれしかった。
また、4日目の午後始まってすぐに、目標の秒間30,000リクエストを達成できたときは、今までの頑張りが報われた気がした。
そのあと、メンバーたちとすぐに、本当に達成ができているのか?なんで目標達成できたのか?などと議論したときのことを思い出すと、Sunrise期間中に学んだことが身に付き始めていると感じた。
5日目は、発表時間を押してしまったことが印象的だった。タイムマネージメントを今後は意識しようと思った。
5日間を通して、AWSを使用したインフラ周りの知識と実践経験、cloud watchなどを使用したエラー検知の知識などを付けることができた。
何度も試行錯誤をして、頭がパンクしそうになりながら5日間を駆け抜ける経験は、苦しい時もあったが、とても楽しかった。終わりに近づくにつれて「あ~この時間も後少しで終わってしまうのか」という気持ちが何度も溢れていた。とても濃密な5日間で、この経験と思い出は忘れることはないと思う。

Discussion