フューチャー技術ブログ

Summer Enginner Camp 2023 参加記

こんにちは、フューチャーのサマーインターン2023 Summer Enginner Camp に参加させて頂いた高橋大翔です!

私は今回、「Goとサーバレスアーキテクチャで体験。100万台超えの大規模スマートセンサーloTプラットフォームに関わってみませんか?」というプロジェクトに参加させていただきました。

インターン生でも技術ブログに入稿出来るということで、今回のインターンに参加した経緯や参加した上で得られたことや感想等を書いていこうと思います。

参加動機

学年が上がってプログラミングも少し出来るようになってきた為実務経験を積んでみたい、という思いが強くなりインターンを考え始めました。その上で、

  1. データサイエンス or サーバーサイド の開発をしたい
  2. 個人的に Golang や Rust の開発に興味あり
  3. 実際のプロジェクトのインフラ周りを見てみたい
  4. 田舎在住なので、フルでは無くてもある程度リモートで行いたい

という願望がありました。そこでインターンを探している時に、競技プログラミングで有名な AtCoder さんのサービスである AtCoder Jobs にて今回のインターンを知りました。インターンの詳細を見て、自分の願望にぴったりなプロジェクトだと思い、今回のインターンに応募させていただきました。

参加前のスキル・経験

  • 学部3年 工学部情報工学科
  • 主要言語 : C++, Python, TypeScript
  • プログラミング歴 : 2年 (大学入学後~)
  • 実務経験 : 無し

C++ は私がはまっている競技プログラミングで使用しており、Python はデータサイエンス系で使用しており、TypeScriptは自分のwebサイトを作る時に使用した程度です。今回のインターンで主に用いる Golang は自分のwebサイトのサーバーサイドで使用した以外は経験がありませんでした。

プログラムは書けるけど、実務での開発を経験したことが無い典型的な大学生のスキルセットだったと思います。

インターンの選考は、1. ES提出, 2. コーディング試験, 3.面接 の順で行われ、競技プログラミングで培ってきた実装力でコーディング試験を結構解くことが出来たのが功を奏した気がします。AtCoderの難易度で言うと茶~緑程度 (最終問題はもっと難しかった) だったと思います。

インターン概要

今回参加させていただいたプロジェクトは題の通り、100万台以上の普及されたIoTデバイスからリアルタイムで送られてくる様々な情報をさばくプラットフォームを構築するのが主な内容です。
Enginner Camp 詳細

今回のインターンでは、ロジックからインフラ、CI/CD等の開発環境まで幅広く触りたいという要望を取り入れてくださり、全体的に触らせて頂くことが出来ました。

1週目

1週目は環境構築で半分以上つぶれてしまいました。というのも、Futureがセキュリティ対策がしっかりされている為、個人開発で行う時の環境構築手順に加えて、プロキシの設定だったり権限周りの設定だったりをしなくてはいけないので、とても大変でした。(ただ初めての経験だったのでそれはそれで良い経験でした。)

初のタスクは、テストの関数のロジックが良くないのでそれを直す、というシンプルなものをやらせていただきました。初めから自分が経験したことの無い「テストを回す」という環境に新鮮味を抱きながら楽しく開発をさせていただきました。

2・3週目

2・3週目は実際に AWS サービスを触り、本番環境にあるデータを必要な場所に移動させるというようなタスクに携わりました。実際にAWSのコンソールに入ると、凄い量のデータやインスタンスが立ち上がっており、これが本物のサービスかと驚かされました。

実際に lambdaの処理を書いて、terraformでインスタンスの設定を書いてロジックからインフラ構築まで一通り経験させて頂き、サーバーサイドの開発として貴重な経験になりました。

4週目

最終週は、インターン生の成果発表会があり2・3週目程は時間が取れませんでした。タスクとしては CI/CD 周りを触らせていただき、チーム開発で負担になる review の補助をするツールの導入を行ったりしました。CI/CDは完全に触ったことが無く、知識も疎かったのでキャッチアップするだけでかなりの時間を要してしまいました。しかし、ここから得られる知識も個人開発では到底経験出来ない新しいものが多くてとても勉強になりました。

インターン中の1日

10:00 ~ 朝会

私のプロジェクトでは、業務開始前に「朝会」というものがあり、ここでは前日の進捗・今日やること・その他共有しておきたいこと等を簡単に言い合う場があります。
これに参加することで、すべきことが浮き彫りになる & 周りの状況を把握出来る のでとても仕事効率が良くなる会だなと思いました。

10:30 ~ 業務開始

Slack に作業スレッドを貼り、そこに今現在行っていることを書きつつ作業を進めます。たまに他の人のスレッドを見に行ってみると、他の人の状況が伺えて少し面白いです。

昼休憩 (適宜)

私のプロジェクトでは、特にこの時間帯が休憩時間という決まりは無く、全体で1時間分の休憩がある感じでした。自分は昼休憩以外にもこまめに休憩を取る方が生産性が高かったのでそうしていました。

休憩後 業務再開

タスクの続きを頑張ります。

~19:00 業務終了

日報と勤怠関係を登録して一日の終了です。
(2,3週目は完全にリモートで行っていましたが、退勤の入力を済ませたらすぐに自分のことに取り組めるのでとても快適で最高でした。)

インターンで学べたこと

チーム開発のフロー

私はチーム開発の経験が、大学のプログラミングサークルで少々やっている程度しかなく、実務でのチーム開発経験が無かったので色々なことが初めてで学びになりました。

例えば moduleやwrapperの作成・運用を積極的に行ったり、命名規則に注意を払ったりと、可読性・再利用性・保守性の高いプログラムの作成の重要性を理解することが出来ました。
また、Githubでの開発フロー (issue,branch,pull request,…) にもなれることが出来たり、CI/CD 周りを触らせてもらってそこらへんに対する理解も深めることが出来ました。

AWS (主に lambda,S3,dynamoDB), terraform

インフラ関連の学びも多々ありました。インフラ周りはちっぽけな個人開発で少し触れたことのある程度で、実際のプロジェクトではどのように運用されているかを見たいというのが自分の願望の1つだったのでとても貴重な経験でした。

実際にlambdaのロジックをGolangで書いてterraformでインスタンスの設定をして…というインフラ周りの一連の流れを触らせていただいたので、今まであまり浮かばなかったイメージを鮮明にすることが出来ました。

業務の共有 (表現力)

私はインターン中に何回か社員の方から頂いたタスクの認識がずれてしまうことがありました。その為タスクを頂いた時は、ずれが起きないようにタスクを貰った直後に自分の言い換え表現で確認を取るようにしていました。

また、疑問点を社員の方に聞く際も、初めは業務の妨げになってしまうのではと思い少し躊躇っていましたが、最終的には分からなかったら聞くことが一番効率的であり同時に自分の認識のずれも抑えられる為、積極的に聞くようにしていました。

自分の頭の中の認識を他者に分かりやすく伝えることの重要性を学ぶことが出来ました。

終わりに

今回のインターンは私にとって初めての実務経験ということで、非常に貴重な経験になったと同時に、インフラ周りや開発のフロー等、様々な学びを得ることが出来ました。また他のインターン生も向上心が高く、プログラミングといっても色々な分野に秀でている方が沢山いてそれも刺激になり、1回り成長することが出来た機会となりました。

今回インターンとして受け入れてくださったフューチャーさん、受け入れ先で支えていただいた社員の方々、共に1カ月間を過ごしたインターンの同期の方々、ありがとうございました!

アイキャッチはPete LinforthによるPixabayからの画像です。