![見出し画像](https://assets.st-note.com/production/uploads/images/120224992/rectangle_large_type_2_112536c04739046f4ad832691bc51862.png?width=1200)
無視できない!設計が学べる3days iOSハンズオン を終えて
初めに
株式会社サイバーエージェントのインターンに参加しての感想・学んだことについて記述しています。
インターンの概要
期間:2022/9/16~2022/9/18
場所:株式会社サイバーエージェント
内容:iOSアプリ開発における設計を学ぶ
参加背景
個人でアプリを開発しているが、設計についてまで考えていなかった。
設計が大事みたいな記事はたくさんあって、勉強しなきゃという思いはあり、個人で勉強してもどういう基準で責務を分けて、何が「良い設計・よいコード」なのかをちゃんと理解したかった。
課題となるアプリ
課題となるアプリは、ViewControllerに全てをベタ書きしてあるいわゆる「悪いコード・悪い設計」で作られた音楽アプリでした。ちなみにAWAじゃないです。
内容
まずは良い設計や良いコードは何か、そもそも設計とは何か教わりました。
なぜ設計をすべきなのか?
・可読性が上がる
・効率的な処理が書ける
・チームの共通言語になる
MVC・MVVM・Flux…たくさんある設計の中でどれを選ぶか?
・アプリによって考えるべき → 一概に〇〇がベストという選択肢はない
今回のアプリではアーキテクチャは他の設計パターンのベースにもなっているMVVMを採用しました。
その後、すぐに設計を適用すべくリファクタリングを始めました。
しかし、MVCの"C"がViewControllerであると勘違いしていた私にとって、MVVMの理解にとても苦労しました。
ビジネスロジックや共通処理などViewControllerでやるべきでない処理をViewModelに移行するべきということはなんとなく理解できましたが、実際にどのようなコードを書けばそれができるか分からず、とても辛かったです。また勉強不足もあり設計だけではなくSwift言語の初歩的な実装にも詰まってしまい、メンターのともさんには本当に色々教えて頂きました。
また、RxSwiftとMVVMが相性が良いことは知っていましたが、RxSwiftをほとんど使ったことがなくSwiftのクロージャーを使って実装しました。責務は分離できても、元のコード量より多くなってしまいなぜViewModelにこれを書き、ViewContollerではこれを書くのかなど理解に最初の1日を使いました。最終日にはRxSwiftのObservableやPublishRelayなどを教わり、RxでMVVMを実装するとそれがとてもよく分かり、とてもスッキリしました。
これから
今回得た多くのinputをoutputするために、まずは、悪い設計どころか設計を使った気になっていた自分のなんちゃってMVCのコードを全部書き直します。そして、今回学んだことを活かしてMVVMやその他の設計に置き換えてみたり、DI(Dependency injection)を使ったり、新しい機能を追加したりしようと思っています(いや、絶対にやります)。
感想
まず、このインターンに参加してとてもよかったです!iOSアプリ開発における設計やSwiftそのものについてだけでなく、エンジニアとしての勉強姿勢についても、人間性についても多くのことを学べました。インターンを通してあまりに多くの知識を吸収し、「そもそも勉強が足りてないなら、今からクソ頑張るしかない」と考え、もう就活までさほど時間がありませんが死ぬ気で頑張ろうと思いました。この3日間で設計全く分からない(絶望した)状態から、設計めっちゃわかる状態になれたことも今では大きな自信となっています。
これからマジで頑張ります!!
メンターがともさんでよかったです!!
何よりもこのインターンに参加できてよかったです!!!!!!
ともさんをはじめ、株式会社サイバーエージェントの「無視できない!設計が学べる3days iOSハンズオン」運営・企画の方々、採用してくださった人事の宇都宮様、本当に有り難うございました。
この記事が気に入ったらサポートをしてみませんか?