皆さん、こんにちは。
2014年度新卒入社の鈴木(@marty-suzuki)です。
現在、AbemaTVのiOSアプリを担当をしています。

昨年末にサイバーエージェントのメディア管轄では、iOS/Androidの業務経験のないエンジニアを対象にした開発合宿の「ネイティブートキャンプ」が行われました。ネイティブートキャンプのiOS編では私が講師を務めさせていただいたので、本記事では講師目線でどういった内容の合宿が行われたのかを紹介していきたいと思います。

ネイティブートキャンプとは?


全4回の講義+課題と2泊3日の開発合宿で、ネイティブアプリ開発のノウハウを短期間で学んで行くものになります。
1回の講義は演習時間も含め3時間ほどで、Swiftの基礎からアプリ開発に関する最低限必要な部分の講義になります。
講義が終わる度に課題を出し、次の講義が開始されるまでに行うという形式をとっていました。
ちなみにiOS編の受講者は24名でした。

IMG_7222

 

講義1日目


講義初回は主にSwiftの基礎・メモリ管理・UIViewControllerのライフサイクルについての講義を行いました。
Swiftを書き始めた際の壁はOptional周りになりそうだと考えていたので、Optional周りを課題に取り上げつつ、基礎を学ぶためにCollection・Enum・条件文なども課題に取り上げました。
基礎部分を学ぶために最初の課題は実行結果をすぐに見ることができるようにするため、Playgroundで実装したものを提出してもらう形式をとりました。

講義2日目


2回目は主にViewまわり全般についての講義を行いました。
どのようにしてカスタムViewを生成し、どうのようにして画面に表示するのかを解説していきました。

View Controller Programming Guide for iOS から引用

初回はSwift基礎やライフサイクルについての講義で動きが少ないこともあってか、アニメーションをライブコーディングしてViewを動かした際に、”おぉ~”という声がセミナールームに響き渡っていました。

講義3日目


3回目はGCDやJSONSerialization、URLRequestなどの通信を行う実装する上では知っておかなければならない部分の講義を行いました。
HTTP通信でAPIにアクセスしてレスポンスが正しく取得できない場合、その状態はATSによって引き起こされているということを初心者だと気づきにくいので、その点についても解説しました。

またAPIにアクセスをして取得したオブジェクトに含まれるURLをWebViewを表示したり、WebView上のリンクのクリックをアプリ上でフックする処理などの解説もしました。

講義4日目


最終日には開発ツールとクラス設計、プロトコル指向についての講義を行いました。
最近ではClean ArchitectureやFluxなどの設計が話題にあがりやすかったりしますが、iOSアプリ開発の基本であるMVCをベースに講義を行いました。

Objective-Cプログラミングの概念 から引用

またプロトコル指向の講義では動物を例に、それぞれの動物が持っている特性をオブジェクト指向で実装する場合とプロトコル指向で実装する比較をしながら講義を行いました。

全4回の講義の内容をもとに最終講義の課題では、GithubのSearch APIの結果をUITableViewに表示するアプリをつくるものになっています。

講義の課題


講義資料と課題はGithub Enterprise上のリポジトリで管理していました。
そのため課題提出用のディレクトリも同じリポジトリ上に

homeworks -> dayX -> student_name

という構成で作成していました。

homework

受講者には課題を自身のディレクトリに追加しイニシャルコミットをしてもらってから課題を進めてもらっていました。
そうすることによって該当の受講者からPRが投げられたときに、課題を進めた分の差分が見やすくなるためです。

講義で講師をするのは私だけでしたが、その他にも課題の添削をするチューターが3名いました。
受講者からPRが来た際、該当のチューターに割り振りを行い、事前にチューター間で共有していた課題で重点的にレビューの必要がある部分を見ていくという形をとっていました。

レビューを行った後に

  • 何かソースに意図がありコメント次第ではマージしても良さそうな場合は、waiting reactionのラベルをつけてレビューイからコメントの返信がきて納得できるものである場合はマージ
  • 使い方が間違っているコードがあった場合は、fix neededのラベルをつけてレビューイからの修正があり次第、再レビューを行う

という形で受講者の課題のケアを行っていました。

pr

 

開発合宿


合宿は東京を離れ、2泊3日で行われました。
合宿での最終課題は

  • 検索APIからオブジェクトを取得
  • 結果をリスト上に表示
  • リストをタップしたら内容をWebViewで表示

の実装を最低限とするアプリ作成でした。
実装に余裕があった際の追加機能は、OAuth認証やキャッシュ、インフィニティスクロールなどがありました。

DSC_3429

この2泊3日の合宿では全受講者が最低限+αを実装していて、無事にネイティブートキャンプを卒業することができました。

集中的に講義を受け、その講義のアウトプットを2泊3日で集中してやり切るというスケジュールだったからこそ、業務でiOSアプリ開発を行ったことがないエンジニアの方がアプリとしてアウトプットすることができたのではないかなと感じております。

 

最後に


初めて講師を経験してみて感じたことは、初心者にわかりやすく伝えるということが非常に難しいということでした。特に頭の中ではどのような処理を行っているのかがわかっていても、それを言葉にして説明しようとするのが難しいなと感じました。

また、初心者がSwiftでiOSアプリ開発ができるようになる文献がWeb上に多くはなかったので、講義と講義の間が1週間しかない中で業務と並行しながらすべての資料を作成していかなけらばならなかったことが最も大変だったなと思います。

日頃インプットしたことをこのような形でアウトプットしていくことで、普段は気にしていなかったようなことにも気づけたり、曖昧になっていた部分を自分なりに整理できたりもしたので非常に良い機会でした。

ネイティブートキャンプで作成したiOSの教材は、mixi-inc/iOSTrainingのSwift版としてPull Requestを投げたものがmasterブランチにマージされています。SwiftでiOSアプリ開発をはじめてみたい方は、是非ご覧ください!

marty-suzuki
2014年新卒入社。配属後、575とAmeba古着屋(現VILECT by Ameba)の立ち上げを担当。2015年に755のリニューアルに伴い、iOS開発チームのリーダーを担当。2017年3月からはAbemaTVのiOSエンジニアを担当。