株式会社ZOZOのインターンシップに参加してきました

## 初めまして

初めまして！タイ出身で日本の大学に通っている25卒エンジニアです。

今月は株式会社ZOZOのインターンシップに参加してきました！
バックエンドエンジニアのポジションで、配属部署はFBZというOMOプラットフォームのサービスでした。

## 応募した経験

実際に応募したのは6月など結構前の話でした。
その時は就活が始まったばかりなので、色々な就活サイトに登録しておいて、そこでZOZOの人事からスカウトが来ました。日常にもZOZOTOWNを利用しているので、応募しよう！となりました。

色々な配属部署があるのですが、自分が配属する部署の技術スタックは
- Python
- AWS
- Serverless
- DDD

などなどで、サーバーレスが面白い！と思って応募しました。

そこで直接チームメンバーからの複数回の面接・面談を行なって、参加決定になりました。
他の月はちょっと予定が合わなかったので、11月でのインターンになりました。

## 参加目的

**「ガチバックエンドをやりたい！」**
他のインターンではフルスタック的な感じをずっとやってきて、バックエンドをもっと携わりたい！と思ったので、このチームを応募しました。

**個人開発で経験しにくい、やったことないものもやりたい**なーと思いました。具体的には
- 大規模なデータに携わるのモーデル周り
- 監視
- インフラやクラウド


## インターン概要

基本的にフルリモートですね〜
どこからでも応募できるのですが、初日だけ西千葉のオフィスに行きました。

PCの方は皆Macbook M2 Proです！スペック最高と思ったが、キーボード選べなかったので、JSキーボードでちょっと大変です（いつもUS使っている）
初日は他のインターン生とチームメンバーと交流して、懇親会を実施しました。

出社したい場合は相談する形です。自分は合計2回出社した。
自分のチームは、基本的に作業の時間が多く、決まっているのが朝会とデイリースクラムです。
間はちょこちょこ入る1on1などがある。

> 11:05 ~ 11:35 朝会
16:05 ~ 16:35 デイリースクラム

## インターン日程

1ヶ月の就業型なので、実際の自分の予定でシフトを組む形だが、自分は週3回という形です。
合計として12日で週20時間くらいでした。

> 1日：オンボーディング・交流
2日：環境構築
3日：タスクの説明、ソースコードの理解
4日〜：開発


## やったこと

Python、Serverless Framework、BigQuery、AWSサービスなどに携わっていただきました。
今回のテーマは「リプレイス」になりました。

え！？リプレイス？面白そう！！何をリプレイスするの？

具体的にはZOZOさんは**SQL ServerやVB Scriptを使っているところがあり、そこを剥がして、BigQueryにあるデータを直接参照する**というリプレイスタスクです！

こんなのインターン生が経験できるの？すごく面白そう！と思って頑張って実装しました！

こちらで少し記事を書きました。

https://qiita.com/chanon-mike/items/55efc165d62049237ff1

DDDやレイヤーアーキテクチャーで実装しました。
大変だったところというと、ローカル環境でテストしにくいところです。
Lambdaが何と500個以上（すごい！）持っているのでさすがに難しいというところもありますね。そのため、AWSコンソールのUIからS3やCloudWatchでログやデータを確認したり、テストしてみたりしました。

今回のインターンシップでは、結構大きい変更なのにほぼ指摘なしでレビューが通ったという嬉しい出来事があった！
自分の実力に少しでも自信が上げました！
結果も無事にリリースすることができてよかったです！

## 学んだこと

**技術**
- Layer Architecture、DDD、CQRS概念、イベント駆動、技術選定、サーバーレス、技術的負債・歴史、リプレイス経験、BigQuery、バッチ処理、SQL Server、AWS（S3、CloudWatch、DynamoDBなど）などなど
- 開発歴6年以上 Lambda500個以上を持つ大規模サービスなので、すごくいい経験でした
    - イベント駆動で管理しにくいトレードオフ
    - 技術的負債
    - 大規模サービスで安全性を超重視する

**意識したこと**
- やったこと・学んだこと・気づいたことの全てをログに残す
    - なんと２万８千文字も書いててやばい（笑）
- [15分ルール](https://rookie-programmer.jp/?p=132#:~:text=15%E5%88%86%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%A8%E3%81%AF,%E3%81%9D%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%AF%E7%B5%B6%E5%A4%A7%E3%81%A7%E3%81%99%E3%80%82)
- 質問に関する
    - もっと上手く質問できる人間になりたいけど、だいたい理解しているだなーと思いながら、結局質問しなかったことが多い。
    - 何を質問するのか分からない時に「xxxで自分の認識が合っていますか？」みたいな質問をすることで、思い浮かばない補足が来るので、すごく役に立った！
    - 質問を上手くできるトリックや方法があれば教えてください！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491081/feb7c5ad-255d-00a7-c8af-2524342e5cac.png)
*メモったログの行数*

**反省**
- たくさんフィードバックもらったほうが良かった
    - 自分にはどういう行動をして、何がよかった？どう改善するべきのか？は自分では見えないので、1・2週間ごとにフィードバックもらいたいかな
- レビュー見学など現場エンジニアの考え方ややったことを見た方が良かった
    - 実際に見たらどういう考え方、どう思って行動するのかが勉強になると思う

**今後の課題**
- 自分の技術力にもっと自信を持ったし、自分がまだ足りないところもわかる
    - 6ヶ月間チーム・個人開発をしてアウトプットし続けたが、今は少しインプットが足りない気がする
    - Udemyのコースや書籍を買ってインプットをするべきかも
    - 知識を口頭で説明でき、他の人に説明できるような理解力が必要
- 知識が知りないところ
    - 運用について
        - リリースに関する知識
        - 監視に関する知識
    - クラウドやインフラの知識
    - DB周りの知識
        - スケーリング
        - トランサクション・ロックなど

**良かったこと**
- 応募の時からチームが選べる＋配属チームの現場エンジニアからの面接になるので、雰囲気がわかる
- インターン事前面談でインターンに期待したもの、やってみたいことが聞かれてタスクを考えてくれる
- メンターさんが詳しくソースコードの説明をしてくれました。また、技術選定の背景や歴史的な開発をお話しできて、とても貴重な経験でした


## 最後に

この記事では書かれていない学びや気づきがたくさんあります。
エンジニアとしての成長を感じ、ログや記事を通して書くことで知識が定着するという重要さを実感し、自分に対してのキャリア、イメージが明確になってる気がします。ほとんど実務と同じ経験は得られる1ヶ月だと思います。

この1ヶ月間、本当にありがとうございました！