はじめに
どうも、Shakkuです。
普段はQiitaで記事を書いたりしています。 qiita.com
今回は、2024年8月19日(月)〜8月23日(金)に5日間開催された フラー株式会社 様主催の「FULLER Engineer Internship 2024 Summer 」に参加してきたので、そのお話をしたいと思います。
インターンシップの様子はこちら↓から。
参加した経緯
就活に向けて今年の夏は、自分の得意なGo言語をバックエンド領域で活用できるベンチャーから大きめな会社まで幅広い会社のインターンシップに参加したいなと思い、インターンシップを探していました。
そんな中、バックエンドでGoが使われていて、あの有名な長岡花火大会やハードオフといった企業の公式アプリを作っているイケイケな企業を発見し、ここだ!と思って応募してみました。
初めての新潟だったため、美味しい白米たくさん食べるぞーと意気込みながらワクワクして参加しました。
インターンシップの内容
今回のインターンシップでは、フラー様が開発している長岡花火公式アプリのフォトギャラリー機能を題材に、「大量アクセスが見込まれるデータを効率よくユーザーに配信する方法」をテーマに学びました。
どんなタスクをしたか
長岡花火公式アプリには、過去の花火大会の花火写真を見ることができる「フォトギャラリー」機能があります。画像追加のたびにアプリのアップデートをしなくてもいいように、各画像はWebでホスティングし、アプリが画面を開いたタイミングで都度ダウンロードする実装になっているそうです。 都度のアプリアップデートが必要ないというメリットがある一方で、ユーザが画像を見るたびに通信が発生するため、データ送信量を気にする必要があります。また、花火大会当日は会場が混雑しており電波状況が悪化しやすいため、効率よく画像を配信する基盤が重要となってきます。
そのため今回のインターンでは、「大量アクセスが見込まれる画像データを効率よくユーザに配信する方法」を基礎編・実践編・応用編に分けて実装しました。
基礎編
基礎編ではフォトギャラリーのアプリケーションに提供するWeb APIサーバーを実装しました。
net/http
パッケージを使用して、フォトギャラリーに表示される画像一覧を返却するAPIを実装しました。EC2へのデプロイなどもありましたが、この辺は経験があったため難なくできました。
実践編
実践編ではWeb APIサーバーの実装を改良し、S3から取得してきた画像ファイルをリサイズしながら配信する基盤を実装しました。
はじめにimage/jpeg
パッケージやimaging
パッケージを使用した、画像のリサイズ方法を学び、その後実際にAWSのS3と接続して画像を取得し、リサイズしてからクライアントに画像を返すといった実装をしました。
ローカルとEC2上では、AWS SDKの初期化フローが少し異なってくるため、フラグでローカルかどうかを指定できるようにしたりと、実践編ならではの実装もありました。
応用編
応用編では、APIのGraceful Shutdownやさらに細かい画像加工など、よりディープな内容を学びました。
ご飯
インターンシップ中は社員の方にランチに連れて行ってもらったり、お弁当が提供されたりと色々食べました!
朝食はホテルで新潟県産の美味しいお米を食べ、お昼には生姜焼きやへぎ蕎麦など、美味しいものをたくさん食べられて幸せでした。
懇親会が無かった日の夕飯は、同じインターンシップ参加者の人と色々食べに行きました!新潟はラーメン消費量が全国1位だったり2位だったりとかなりのラーメン県で、それもあって美味しいラーメンをたくさん食べられました。
感想
AWSを触ったことがあってもGoでAWSを呼び出したことがなかったり、簡単なテストは書いたことがあってもモックの知識が浅かったりと、実務的なGoの使い方についての知識が足りなかったので学びが多かったです。
また、PullRequestをするたびにメンターの方から「もっとこうした方がいいよ!」と細かいところまでアドバイスをくださり、なんとなく使ってしまっていたメソッドの使い方や、変数名、テストケースの書き方・配置場所をしっかりと考え直すことができたのでとてもよかったです。
社内の雰囲気もとても良く、社員の皆さんがイキイキと開発をしているからこそ、「お客様と共に化学反応を起こしながらアプリを創る」というフラー様の特徴が成り立っているんだなと強く感じました。
社員の皆さんから新潟の魅力もたくさん教え込まれたので、いつか観光でも足を運びたいなと思います!
ありがとうございました!
おまけ
フラー様はGoのフレームワークとして「Goa」というフレームワークを推しているそうで、独自のDSLでAPIサーバーやAPIクライアント、Swagger、テストコードなど、さまざまなものを生成できる面白そうなフレームワークでした。
インターンシップ内でも応用タスクとしてGoaを触ってみましたが、なかなかに難しく理解しきれなかったので、いつかちゃんと触ってみたいなと思いました。