はじめに
こんにちは。Future Engineer Camp 2020に参加しました齋藤です。
インターンシップやその前のできごとを書いていきます。
なお、今回隣のチームのインターン生だった中山さんの記事が既に技術ブログにあります。そちらもぜひ参考にしてください。
インターンシップ参加前の技術経験
インターンシップに参加する前の技術経験は次の通りです。
- 使用言語:
- C++: 競技プログラミング、研究、授業
- Python3: 趣味、授業
- Go: 入門書を一通り終えた
- 開発経験: 技術系アルバイト、インターン一切なし
- 資格: 応用情報技術者
このように、開発を業務として行ったことはない状態でした。
インターン前
参加するきっかけ
私は競技プログラミング(競プロ)に取り組んでおり、競プロサイトAtCoderと就活支援サイトであるサポーターズ共催のインターン説明会イベントに参加しました。いくつかの企業の説明を受けた上で、フューチャーが
- ITコンサルながら、開発、実装、運用まで行っており、高い技術力を持った方が多数在籍していること
- 「初めてに挑戦する」「ないものはつくる」といった理念に惹かれたこと
- インターンが4週間と結構長く、学びが多そうと感じたこと
などの理由でフューチャーのインターンに参加したいと思いました。
インターン選考
インターンの説明はこちらをご覧ください。
フューチャー夏のインターン2020。リモート開催予定です
技術系のインターンEngineer Campは10個のコースに分かれており、(2)スマート工場IoT設計開発を選択しました。理由としてはバックエンド開発に興味があり、また、研究がIoTに関係していたからです。
選考はES+コーディング試験→オンライン面接1回でした。面接は受入プロジェクトから2名が面接官で、研究や技術的な話が中心でした。また、雰囲気は終始和やかで、殺伐な雰囲気は感じませんでした。
コーディング試験はほぼ競プロらしい問題で、しかも、後半の問題は結構な難易度だと感じました。フューチャーが競プロの活用に積極的なのは承知していましたが、それでも意外でした。ただ、インターン中に競プロの活用理由として「既存のライブラリやツールの活用では解決できない時に、競プロの力が活きてくる」といった旨の発言を聞き、なるほどと思いました。
無事合格になり、インターンに参加することが決まりました。
インターン中
インターンシップは終始リモートで、4週間行われました。実施時間は平日に1日8時間でした。
社員の方々もリモートワークでした。社員さんの中には「プロジェクトの他の社員と実際に会ったことがない」という方もいらっしゃって、リモートワークに完全に対応できていると感じました。Slackやビデオ会議ツールを活用して、業務に取り組みました。
開発概要
プロジェクトは工場システムの開発で、物流の状況や製造計画情報を作業員の端にはいったアプリ上で管理・閲覧できることです。私が行ったのは工場システムのアプリのバックエンド開発で、概要は以下の通りです。
- Swaggerを用いたREST API定義
- DynamoDBのテーブルの設計
- ハンドラや、DB操作をGoで実装
- テストの実装、実施
使用技術
次の技術を使用しました。
- Go言語
- Swagger (go-swagger)
- AWS
- DynamoDB
- Lambda
- API Gateway
また、開発環境として、次のものを使用しました。
- Git / GitHub
- CircleCI
学んだこと
4週間で多くのことを、技術面、開発面のそれぞれで学べたと思います。まずは技術面から。
- Go言語での開発のお作法(エラーハンドリング等)
- コードレビューを受けたり、既存のコードを読んだりして、身に付けました
- Table Driven Test(TDT)の仕方
- コードが書きやすいし、読みやすい
- DynamoDBや、LambdaなどのAWS技術の理解
- DynamoDB(NoSQL)のキーの種類、特徴
綺麗なコーディングや、テストは、趣味での開発ではおろそかになりがちですが、しっかりと学べたと思います。
続いて、開発面です。
- GitHubを用いた開発手法
- ドキュメント整備
- GitHubにdocs/にまとめられていて、随時更新
- Circle CIを用いたテストの設定方法
- Slackでのコミュニケーション
チーム開発の流れや、コミュニケーションツールの活用方法を学べましたし、今後も活用できると感じました。
感想・振り返り
インターン全体を通して、次のことを感じました。
- バックエンド開発を実際に近い業務ができ、業務のイメージが掴めた
- Go言語は書きやすいし、読みやすい
- 今後も学んでいきたい言語
- 決められた時間内に仕事を行うことの大変さ
- だらけずに時間内にパフォーマンスを発揮する重要性を感じました
- タスクの割り当てが親切で、成長を実感できた
- タスクが修正→実装→設計+実装とステップアップしていくのが良かったです
- Future Tech Blogがとても参考になった
- 開発で困って検索したときにトップに出ることがよくありました
- 積極的な技術発信は好印象でした
まずはバックエンド開発の主要な技術や、開発について、多数の学びがありました。社員さんからのコメントなどからの収穫も多く、インターンに参加して良かったと感じました。
また、コミュニケーションの重要性も感じました。ドキュメントが十分に整っていても、新たに機能を追加するときなどには社員さんとのやりとりは必要不可欠でしたし、特にわからないことを明確にすることが重要だと感じました。
今回のインターンで多方面のことで多くの学び、気づきがあったと実感しました。
今後に向けて
次のことを今後取り組みたいと思っています。
- 開発でのコミュニケーション能力を磨く
- 作業ログの作成等を積極的に行う(特にリモートワークで重要)
- 分からないこと・行ったことを明確にして伝える
- 学んだ技術を個人で一から使ってみる
- swaggerの環境構築など
- インフラ面の理解も深めたい
最後に
実際の開発業務の形で様々なタスクを取り組み、様々なコメントを頂いたことは大きな学びになりました。
受け入れてくれたプロジェクトのみなさま、HRのみなさま本当にありがとうござました。