アプリエンジニア育成に取り組んでいます
こんにちは、ピクシブで新規事業部に所属しています、ああうえ(@_kwzr_)と申します。普段のプロダクト開発に加えて、全社的なモバイルアプリ領域の開発体験の向上に取り組んでいます。
最近モバイルアプリの世界ではネイティブなフレームワーク以外の開発手段を採用するものが増えてきましたね。
また、ネイティブアプリ開発の進化によって、iOSではUIKitからSwiftUI、AndroidではAndroid ViewからJetpack Composeが採用されることが増えてきました。
モバイルアプリ領域の中で採用できる技術が増えてきたことで、最近は採用したいエンジニアと、世の中にいるエンジニアの技術的なミスマッチが起こりやすくなってきたと感じます。
ピクシブのアプリでは、ビューアーなどの閲覧体験が重要になってくるものが多かったり、ライブ配信・視聴機能や、ドロー機能など、ネイティブでないと開発が難しいものが多くあり、Flutterなどのクロスプラットフォームフレームワークは採用しづらいです。
また、新たなフレームワークへの移行も重要なため、ここ数年はUIKitとSwiftUIの知識が必要になってきます。
そこで2022年の2月より、モバイルアプリエンジニアの不足を解消するために、iOS・Androidアプリエンジニアの育成プロジェクトを開始しました。
他の言語での開発経験がある学生さんをアルバイトとして迎え入れて、モバイルアプリの学習に取り組んでもらっています。
メンターはiOS 2人、Android 2人で回していて、そこまでコストが掛けられているわけではないですが、ハマったことや質問したいことをSlackや振り返り会で回答しています。
例: iOSの学習内容
まずは、Appleが提供しているアプリ開発のチュートリアルに取り組んでもらいます。SwiftとXcodeを使った開発に慣れてもらうことが目的です。SwiftUI・UIKitの両方がありますが、UIKit→SwiftUIという順番で取り組んでもらっています。これはSwiftUIを触った後にUIKitを触りたくないだろうという単純な理由です。
developer.apple.com (余談ですが、2022年4月くらいにiOS App Dev Tutorialsが突然更新されて、学習内容が変わってしまうということが起きました。そういうこともあるよね)
Appleのチュートリアルを完了させた後、名著であるiOSアプリ設計パターン入門を読んでもらい、ViewとDomainの処理を分けることを意識したコードの雰囲気やパターンの名前を知ってもらいます。
その後、自分で考えてコードを書いてもらうステップを用意しています。
テーマとしてpixivアプリのようなものを作る課題を用意しています。Figmaのデザインファイルを見ながら、インターネットで調べて自分でコードを書いていきます。
メンターがいなくても答え合わせができるように完成プロジェクトと、参考動画が用意されています。UIKitを使ったXcodeの操作は難しいので、動画があると便利ですね。
課題は現在、以下のようなものが用意されています。これができるようになれば、基本的なSNSのクライアントアプリを実装することができそうですね。
- 課題1: イラストを2列で表示する仕組みを作ってみよう
- 課題2: おすすめのヘッダーを作ってみよう
- 課題3: ランキングのセクションを作ってみよう
- 課題4: イラストの情報を取ってきて表示しよう
- 課題5: ViewModelを作ってみよう
- 課題6: 通信中(ロード中)の挙動を作ってみよう
- 課題7: 無限スクロールを実装してみよう
- 課題8: いいねボタンを実装してみよう
- 追加課題: iPadだったら4カラムにするようにしてみよう
- 追加課題: 通信に失敗したときにエラー画面を表示してみよう
- 追加課題: SwiftLint・SwiftFormatを導入してコードを綺麗に保ってみよう
- 追加課題: 文言を翻訳してみよう。SwiftGenやR.swiftを利用して安全に文言を取得できるようにしてみよう
- 追加課題: イラスト詳細画面を作ってみよう。スワイプで前後の詳細画面に移動できるようにしよう
- 追加課題: イラスト詳細画面でいいねしたらホーム画面にも反映されるようにしよう
- 追加課題: ViewModelのユニットテストを書いてみよう
学生さんがハマったポイント
SwiftやiOSの学習でアルバイトの学生さんがハマったポイントをいくつか共有します。初学者が何でハマるかは割と貴重な?情報な気がするので、何かの参考になれば嬉しいです。
- iOS App Dev Tutorialと最新版XcodeのUIが違う
- Swiftわからない
- guard letの意味がわからない
- closureの型の書き方がわからない
- closureの即時実行がわからない
- async/awaitがわからない
- sharedインスタンス(Singleton)がわからない
- DispatchQueueがわからない
- ??(Nil-Coalescing Operator)がわからない
- Combineでstore(in: $cancellables)を書かないとsinkが呼ばれない
- UIKitがわからない
- NavigationControllerがわからない(Push遷移、モーダル遷移とは?)
- Cell Configuration・DiffableDataSourceとは?
- Storyboardで下に行くほど手前側にViewが表示されること
- コードからStoryboardを使ってViewControllerを初期化する方法がわからない(真っ黒になってしまう)
- SwiftUIがわからない
- $の意味
- SwiftUIではどのようなアーキテクチャが良いのか
- Xcodeわからない
- StoryboardのSceneの消し方がわからない(backspaceで消えた)
- iPadのシミュレーターではなくMy Mac(Designed for iPad)でビルドしていて、ハマった
iOSの学習内容を公開します
社外の人にも使っていただけるように、課題と解答が書かれたDocCチュートリアルと、ステップごとのプロジェクトを公開します!
おわりに
アプリエンジニアを志望する学生さんが増えてくれると嬉しいです!
また、ピクシブでは育成に興味のあるアプリエンジニアも募集しています!