【CyberAgent】CA Tech Dojo　~Android育成型インターン~　振り返り

## はじめに
こんにちは！岩手県立大学のさとゆーです！
大学では、東北Tech道場というGoogleが後援する、プログラミング道場の盛岡道場の道場主として道場を運営しています。

先日、CyberAgentさんが開催したCA Tech Dojoに参加させていただきました！
あまりにも濃い2週間だったため、皆さんに本イベントの学びを共有しつつ、振り返りとこれから学んでいきたいことを記事として残します。

今回の記事は[株式会社サイバーエージェント様](https://www.cyberagent.co.jp/)の[CA Tech Dojo 2Weeks Android向け育成型インターン](https://www.cyberagent.co.jp/careers/students/event/detail/id=28153の)記事になります！　今後の力になれば幸いです:bow_tone1:

## 参加した理由
### アプリ開発における言語化能力を高めたい
私は、これまでのチーム開発において、質問や説明の際に言葉が詰まってしまう場面が多くありました。
しかし、CA Tech Accelに参加させていただき、質問への回答や説明を行うことで、言語化能力が少しずつ身についてきていると感じていました。今回のインターンでも言語化する機会を増やし、さらに言語化能力を高めていきたいと考えていました。

### 社員さんやインターン生と交流をしたい
私は東北Tech道場でプログラミングサークルとして活動しています。
ハッカソンなどに出場した際に、同じチームの他大学の学生のバックグラウンドを聞いたり、新たな技術領域に触れたりして、プログラミングサークルだけでは味わうことができない、大きな刺激を受けました。今回のインターンでも、学生や社員さんとの交流を通じて、お互いに刺激し合える仲間を見つけたいと考えていました。

## 掲げた目標
### 可読性と拡張性が高い設計をする
過去のチーム開発で、不適切な変数名をつけたことにより、レビュアーに誤った解釈を与えてしまいました。その結果、適切なコメントが得られず、手戻りが発生したことがありました。この経験を通して、本インターンで可読性と拡張性が高いコードを描けるようになりたいと思い、こちらの目標を設定しました。
### 1週間に最低1回は記事を書く
今回は、本インターンを通して、自分のアウトプットを言語化して記事にまとめておくことで、自分だけでなく、みんなのサポートのなればと思い、こちらの目標を設定しました。

### 毎日他のインターン生に教える
前まで先生になりたいと思っており、教えるというところにやりがいを感じていました。教えるという形でアプリ開発における言語化能力を高めたい、かつインターン生の力になればと思い、こちらの目標を設定しました！

## インターン内容
本インターンのテーマは「1人でアプリを開発し、リリースできるようになる」というものでした。実際にQRコードを使用したプロフィール交換アプリを作成しました。進め方は、アプリの必須要件が与えられ。任意で追加要件の実装を行なっていくというものでした。
### 技術選定
- 言語：Kotlin
- ビュー操作：viewBinding
- データベース：Room（友達のプロフィール用）・DataStore（自分のプロフィール用）
- 友達プロフィールリスト：RecyclerView
- QR読み取り・生成：Zxing
- coil（画像読み込み）
- Material3
- 画面の状態管理：StateFlow
    - 初期値が持てるという利点を活かし、アプリ起動時点でなんらかの画面を表示したかったため
- ボタンの非同期処理：SharedFlow
    - 値の変更の通知のみ欲しかったため
- 画面遷移：navigationコンポーネント
### 追加要件
- ダークテーマ対応
- 登録画面の実装
    - DataStoreに何もデータがない場合に登録画面に遷移するように設定
- お気に入り登録
トーストテキストで登録したことを通知して、削除できないようにしました！！
<img
    width=200
    src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989029/9713b8ac-bbdd-07d2-6438-47e4b3fe156d.png"
    /><img 
        width=200 
        src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989029/91712ccb-2279-7bcb-34ac-efcfde75e712.png"
        />
- 友達プロフィール削除機能（😭）↓下の写真を参照
- マイプロフィール入力のバリデーション
- MVVM ＋ Repositoryアーキテクチャ
- <INS>ボタンの非同期処理の時のアニメーション</INS>
    - 特に力を入れたところで、非同期処理している間でもユーザ体験を向上させることができました！

<img
    width=200
    src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989029/447f9f3d-8264-540c-52d7-ee07486e6992.png 
    />

- プロフィール順番切り替え機能
    - お気に入りにしたプロフィールが上に並ぶようにしました！
- ダークテーマ対応

## インターンの振り返り

### 目標の達成度合い
#### 可読性と拡張性が高い設計をする（○）
XMLファイルとFragmentの可読性と拡張性は意識できたと感じました！
フィードバックの中には、いいコードを見ることを心がけたほうが良いとのことだったので、これから意識していこうと思います！
#### 1週間に最低1回は記事を書く（◎）
本インターンで2個の記事をアウトプットすることができました！！
#### 毎日他のインターン生に教える（◎◎）
毎日、インターン生に教え、言語化能力を高めることができました！！
メンター陣からもらったフィードバックの中でも、率先してインターン生をサポートする姿勢や教える仕方が褒められたので、
これからも続けていきたいと思います！！

### 感想
今回のインターンはモバイルエンジニアとして大きく成長できた貴重な経験でした！！

私自身Kotlinを触って間もなく、本番で活かせるかどうかとても不安でした。
しかし、優しすぎる社員さんや他のインターン生のサポートもあって、
今回の2週間で大きく成長を遂げることができました！
そして、この経験を通して、サイバーエージェントの良さや社員さんの雰囲気を間近に感じることができました！！
![DSC09962.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989029/52f49778-e26d-e81a-d2cd-c9cb153c715a.jpeg)

### さいごに
インターン中の様子はTwitterで#catechdojoと検索すると閲覧することができます！

本インターンをサポートしていただいた社員さん方含め、本インターンに参加したインターン生の方々、本当にありがとうございました！！

最高の2週間でした！！！