サイバーエージェントiOS設計インターンに行った感想
こんにちは。Flutterで個人開発をしている谷口恭一です。
今回は2022年8月16日-18日で開催された「CyberAgent 無視できない!設計が学べる3days iOSハンズオン」に参加した報告をしたいと思います。
インターンの内容
今回のインターンでは主にiOS開発における設計を学びました。フロントエンド開発における設計とは
- MVCモデル
- MVPモデル
- MVVMモデル
- Fluxアーキテクチャ
- Reduxアーキテクチャ
- DDD(ドメイン駆動設計)
- TDD(テスト駆動設計)
- Clean Architecture
などが挙がると思います。これらの設計手法はそれぞれ目的や長所があります。インターン開始までにこれらの設計手法を学ぶ事前課題がありました。インターンではswift, UIKitで書かれた音楽再生アプリをリアーキテクチャしていくというものであり、事前に使用したいアーキテクチャを決定する必要があります。
また、いわゆる「設計」とは単に設計手法を適用することだけではありません。コードの可読性, 保守性, 拡張性を高めるための工夫を考えていく必要があります。自分の場合、具体的には以下のような内容となりました。
- 既存の音楽再生アプリを「MVVMモデル」にリアーキテクチャ
RxSwiftを用いてView層とViewModel層のデータバインディングを実装 - DIの意義を学び、ViewModel層に実装
- ユニットテストを実行してDIの意義を体験する
- コードの可読性を考慮して全体的なリファクタリング
参加する前の技術レベル
現在大学3年生で研究室選びと個人開発に追われています。個人開発ではFlutter×Firebaseで開発をしています
主要技術はFlutterであり、swiftの経験はありませんでした。個人開発アプリではDDDを採用し、riverpodを用いたProviderパターンでstateを管理しています。
設計に関しては普段から考えながら開発はしていましたが、ユニットテストなどのテストは実装したことがなかった状態でした。そこでインターンの目標を次のように設定することにしました。
- swiftを用いたiOS開発ができるようになる。(swiftやUIKitの仕様を理解できるレベル)
- MVVMを用いて「良い設計」理解し目指す。(本インターンの目標と一致)
- 得た知見を次の個人開発に応用する
swift言語やUIKit, RxSwiftの仕様を全く知らない状態であったことが不安でしたが無事参加することができました。
身についたスキル
インターン参加によって確実に身についたスキルを並べようと思います。
- swift, UIKit, RxSwiftの仕様の把握
- MVVMモデルの詳細な理解と実装
- RxSwiftを用いたView層をViewModel層のデータバインディングの実装
今後の展望
Flutterを用いた開発の際にも今回の設計に関する知見は役に立ちます。個人開発レベルでもコードの可読性や拡張性, 保守性を維持することの大切さを学びました。
今後の開発者人生の中でも思い出に残る楽しいインターンでした。
参考にした記事
設計
MVVM
swift関連
RxSwift
Discussion