サイバーエージェントの3days iOSハンズオンに参加してきた
こんにちは。sansai(@sansai_dev)です。
今回株式会社サイバーエージェントの3daysインターンシップに参加してきたので、そのことについて書いていきたいと思います。
どんなインターン?
今回参加したインターンは「無視できない!設計が学べる3days iOSハンズオン」です。
期間: 2022/09/16 〜 2022/09/18
開催場所:サイバーエージェントのオフィス(アベマタワーズ)
お前、iOSやってたっけ?
知っている人もいるかもしれませんが、実は私はiOSエンジニアではなく、普段はReactやNext.jsを書くWebフロントエンドエンジニアです。そんな私がなぜiOSのインターンに参加したのでしょうか。
理由としては大きく分けて2つあります。
- いろいろやってみたかった。
- サイバーエージェントという会社をもっと知りたかった。
というのが今回参加した大きな理由です。
まず1つ目ですが、私は元々、iOSエンジニアを目指していました。というのも高専に入学してからまず勉強したのがSwiftでした。ですが周りにWebエンジニアが多いことやiOS開発の難しさに足が止まってしまい、Web中心に勉強することが多くなりました。色々な会社のサマーインターンの選考を受ける中で、もっと他の職種も見てみようというような機運が高まり、ちょうど見つけたのがこのインターンでした。
2つ目ですが、このインターンがオフィスで開催されるのが個人的には大きなメリットでした。CAのオフィスを見ることができる・現場の雰囲気を味わえるというのがとても興味がありました。
なにしたの?
今回のインターンでは音楽アプリのソースコードをリファクタリングするという内容でした。渡されるソースコードはメンターの皆様がわざと悪い風に書いてくださったもので、それを私たち学生が良い設計に書き換えていく。というのを3日間で行いました。
良い設計/悪い設計とは?
ダメな設計
- 関心・責務が意識されていない
- ViewController に全ての情報を含めている
- 大量のロジック(function)・状態 (state)
- ディレクトリ構成もめちゃくちゃ
- ViewController に全ての情報を含めている
- テストしづらい (運用する際に副作用に気づくことができない)
- DIされていない
- アクセス修飾子がめちゃくちゃ
- 全て public / internal で公開されている
良い設計
- 責務がしっかりと分離されている (関心の分離)
- View層 と ロジック層 がしっかりと分離されている
- ディレクトリの構成もしっかりとできている
- テストしやすい (機能追加・仕様変更の際に副作用に気付きやすくなる)
- MockでDIしやすいように作れているか
- アクセス修飾子もしっかり意識できている
- internal で公開するものと private で閉じるものがしっかりと意識できている
今回のインターンでのメインは「設計」なのでとにかく設計についてたくさん教えていただきました。自分は今まできちんと設計について考えたことがなかったので、上記のことを意識するようにしながら3日間頑張りました。
成果
メイン画面にMVVMというアーキテクチャを適用しました。この記事に詳しく書いたので、よかったら覗いていいね押しといてください()
懇親会が楽しすぎた
インターンの成果発表会が終わった後、みんなでご飯を食べに行ったのですが、そこでもたくさんお話を聞けてすごく楽しかったです。僕は二次会にも参加したのですが、そこでもサイバーエージェントという会社の良さについて熱く語ってくださって、本当に魅力的な会社だなと思えました。ちなみに僕はまだ18歳なのでひたすら柚ジンジャーとコーラを飲んでました。何杯飲んだか分かりません。
感想
正直、普段 Webばかりしているので今回のiOSインターンでは置いてかれることばかり心配していてとても不安な気持ちで参加していました。ですが、メンターの方も他の参加者もすごく優しくて基礎の基礎から質問してもとても分かりやすく解説してくださり、初学者の自分でもなんとか完走することができました。今回成果物としてよくできたとは言えませんでしたが、悪いコードを見てなぜこれが悪い設計なのかを説明できる。良い設計に実際に書き換えることができる。という当初の目標は達成できました。Webから飛び込んできた私を受け入れてくださった運営の方々には本当に感謝しかないです。サイバーエージェントという会社、そしてそこに所属するエンジニアの方々の人柄の良さ、技術力の高さ、視座の高さにはとても驚かされました。自分ももっともっと頑張らないといけないなと思えたインターンでした。本当にありがとうございました。