iOSブートキャンプに参加し、MVVM+Repository+DI に挑戦して見えたこと
はじめに
本記事は、会津大学2年生でCS分野を学びつつ、ほぼ未経験の状態からiOSブートキャンプに挑戦し、4か月間でどのように学び、どのように変化したのかをまとめた記録です。
主に、
・なぜ参加をしたのか
・どんな設計思想で取り組んだのか
・何を学び、何が変化したのか
を振り返ります。
最終的に、4か月間の開発を通じて、Best Growth賞をいただくことができました。
この経験は、人事の方々やメンターの皆さんの支えがあってこそ得られたものです。改めて、感謝の気持ちを込め、記録として残させていただきたいと思います。
iOSブートキャンプの概要
本プログラムは、4ヶ月間にわたり月1回の講義と課題に取り組む形式で実施されました。
講師はサイバーエージェントのiOSエンジニア社員の方2名。
実務の視点も交えながら、基礎から応用まで段階的に学ぶ構成でした。
開催は3回が会津、最終回は東京で成果発表という流れでした。
カリキュラムの流れ
Day1:基礎の理解
Swiftの基本文法やメモリ管理、SwiftUIの導入を学び、iOS開発の土台を固めました。
Day2:UIと状態管理
SwiftUIでの状態管理や画面遷移など、アプリらしい構造を理解しました。
Day3:実践的な開発内容
非同期処理やHTTP通信などを扱い、実際にAPIを利用したアプリ開発へと進みました。
毎回講義後には宿題があり、インプットとアウトプットを繰り返す形式で理解を深めていきました。
1. 参加前の状態(Before)
iOSブートキャンプに参加する前の私は、iOS開発に関してほぼ未経験でした。
・Webフロントエンドに軽く触れていた
・Swift未経験
・MacBook未所持(iOSブートキャンプをきっかけに購入)
・大学でC / Java / JavaScriptを学習
・iOSの設計やアーキテクチャはほぼ理解していない状態
2. iOSブートキャンプに参加した理由
〇 ネイティブ開発に興味があったから
Web開発をしている中で、「自分の作ったものが、誰かのスマートフォンのホーム画面に並ぶ」ということに強く興味があって自分のアプリが誰かの生活の一部になっているというのがいいなと思いました。
また、ブラウザを開かなくても、日常の中に自然に溶け込むプロダクトを作ってみたいや、アニメーションやスクロール、触れた瞬間のフィードバックなど、モバイルならではの体験設計に挑戦したいと感じたことが、ネイティブ開発に興味を持ったきっかけです。
〇 会津大学のOBの方から開発に関して吸収したかった
今回のメンターさんの1人に会津大学のOBが参加しており、自分が通っている大学のOBがどのような仕事や開発をしているのかを間近で見て、得た情報を吸収し今後につなげていきたいと思いました。
3. 掲げた目標
・モバイルネイティブ開発のスタンダードを知る
・設計について学ぶ
・できるだけメンターさんに質問する
単に、「完成させる」だけではなく、
“なぜ、その設計であるのかを説明できる状態になる”ことを意識しました。
4. 技術選定と設計思想
技術スタック
- 言語:Swift 5
- UIフレームワーク:SwiftUI
- アーキテクチャ:MVVM + Repository + Dependency Injection
- 通信:URLSession
- テスト:XCTest
特にこだわったポイントとしては、責務分離と変更に強い設計です。
〇 MVVMで役割を明確にする
・View:UI描画に専念
・ViewModel:状態管理・ロジック担当
UIとロジックを分離することで、変更の影響範囲を小さくできることを実感しました。
〇 Repositoryでデータ取得を抽象化
API通信の実装詳細を隠蔽し、データ取得元を意識しなくても良い構造を目指しました。
その結果、
・本番API通信
・Mockデータ
をViewModelを変更せずに切り替え可能にすることができました。
これは「とりあえず動く」から「変更に強い構造を作る」への大きな転換でした。
〇 DI(Dependency Injection)の実践
依存を外から注入することで、
・実装の差し替えが可能
・テストが書きやすい
・密結合を避けられる
という設計の意味に気づき、少しずつ理解することができました。
最初は難しく感じていましたが、徐々に設計の面白さを感じられるようになりました。
5. テストへの取り組み
今回、特に挑戦したのがテストでした。
これまでは「動けばOK」でしたが、それに加え「意図通りに動くことを保証する」ことを意識し、取り組みました。
〇 取り組んだこと
・無限スクロールが正しい条件でのみ発火するか検証
・不要なAPI通信が走らないか検証
・テスト専用のUserDefaultsを用意し、永続化を安全に検証
テストを書くことで、設計が整理されていないとテストできないことに気づきました。
設計とテストは切り離せないものだと実感しました。
6. UI/UXで意識したこと
「機能要件を満たす」だけでなく、使っていて心地よい体験を重視しました。
・お気に入り時のアニメーション
・Empty Stateの工夫
・無限スクロール
・ローディング演出
細部の積み重ねがアプリの完成度を高めることを学びました。
7. Best Growth賞をいただけた理由(自己分析)
ありがたいことに、今回の参加からBest Growth賞を受賞することができました。
自分なりに振り返ると、次の3点を意識していたことが賞獲得につながったと大きく感じています。
① 技術を“理解する”ことにこだわった
設計に関して表面的に真似をするのではなく、
・なぜこの構成なのか
・なぜ責務を分けるのか
・なぜテストが書けるのか
を考え続けました。
② わからないことを放置しなかった
自分で調べる → 仮説を持つ → それでも不明点があった場合、質問をする
この流れを繰り返すことを意識し、理解を深めました。
回答をもらうだけでなく、理解を深めるための質問を心がけました。
③ 設計まで見据えて課題に取り組んだ
単に完成させるのではなく、以下を意識しました。
・将来の変更に耐えられるか
・テスト可能な構造か
・責務は明確か
「作る」というよりも“どう作るか”を考えたことが評価につながったのではないかと思っています。
8. メンターさんと話していて一番印象に残った学び
iOSブートキャンプ中に、メンターさんがおっしゃっていた
「これからは技術的な“広さ”よりも、“深さ”が重要になる」という言葉が強く印象に残っています。
新しい技術に触れられる環境だからこそ、つい“できることの幅”を増やすことに意識が向きがちでした。
しかし本当に価値を生むのは、「なぜそう設計するのか」「なぜその実装なのか」を説明できる深さなのだと気づきました。
AIが発達し、実装のスピードが加速する時代だからこそ、
設計意図を考え抜ける力や、技術を構造的に理解する力がより重要になるのではないかと感じています。
今後は広く触れるだけでなく、
自分なりに“掘り下げきった”と言える技術領域を持てるよう、学習を続けていきたいと思います。
9. 人事の方との振り返りで得た気づき
iOSキャンプ終了後、人事の方と振り返りの時間をいただきました。
今回は同じ大学の参加者が多く安心感がある環境でしたが、「もっと周囲から学べたのではないか」という気づきがありました。
このことを踏まえ、これから参加するインターンで意識したいことは、
〇 質の高い質問をする
→ 前提を整理し、仮説を持ち、成長につながる質問をする。
〇 周囲からより多くを吸収する
→ 設計思想や実装方針を積極的に聴きにいく。
〇 周囲を巻き込みながら成長する
→ 進捗共有や議論を通して、環境ごと成長する。
技術だけでなく、コミュニケーションも磨くべきスキルだと学びました。
10. 4ヶ月の学びと感謝
この4か月を通して強く感じたのは、本当に人に恵まれた環境であったということです。
Swift未経験で不安だらけの状態からのスタートでしたが、
・技術的に丁寧に向き合ってくださったメンターの皆さん
・成長を見守り、背中を押してくださった人事の方々
の存在があったからこそ、最後までやり切ることができました。心から感謝申し上げます。
11. これから
今回の経験はゴールではありません。
・アーキテクチャの比較理解
・設計の深掘り
・技術の“深さ”を磨くこと
を継続していきます。
「なんとなく作れる」から「相手にわかりやすく説明できるエンジニア」へ。
今回の経験を土台に、さらに成長していきたいと思います。
その他、今回の活動で作ったもののコードと、より詳しいことをまとめたものは以下に掲載しています。
Github URL: https://github.com/omomi-moti/ca-bootcamp-movie-app
