はじめに
メディア事業本部で新規プロダクトの開発を担当している石塚(@ij_spitz)です。
今回はデータ分析エンジニアでiOS開発未経験だった僕が、(完全に1人ではないにしろ)iOSプロジェクトで開発を進められるようになるまでの過程をお話したいと思います。
サーバーサイドなどでのプログラミング経験が多少あって、これからiOSの開発をやっていきたい方の助けになれば幸いです。
目次
- 筆者の開発経験
- iOSをやることになった経緯
- 開発前にやったこと
- 開発中にやったこと
- まとめ
筆者の開発経験
初めに自分の開発経験について軽く触れておきます。
僕はGunosyに入社するまでは某ソーシャルゲームの会社で1年ほどPythonを使った社内システム開発やデータ分析基盤の開発を主にやっていました。
Gunosyに入社してからは主にニュースアプリの「グノシー」を担当し、SQLやjupyterを使った分析を2年ほどやって今に至ります。 コードはたまにPythonで集計用のバッチを書いたり、GoでAPIの修正をしたりする程度でそこまで開発をバリバリやっていたわけではなく、もちろんiOSやAndroidのクライアント開発もやったことがありませんでした。
iOSをやることになった経緯
Gunosyで新規プロダクトを開発する際は、スモールチームかつ1人1人が幅広い開発領域を担当することを意識しています。
今回はもともとデータ分析エンジニアだった僕とサーバーサイドエンジニアの2名で開発を始めることになったので、必然的にどちらか、または両方が未経験のiOSを書く必要がありました。 開発がスタートした後、iOSエンジニアがJOINして現在は3名で開発しています。
Gunosyでの新規プロダクトの開発についてもっと知りたい方はこちらのスライドをご参照ください。 speakerdeck.com
また、Gunosyのエンジニアは多くのエンジニアが複数の技術領域にまたがって開発を行っています。 例えばクライアントエンジニアがiOSとAndroidを両方書いたり、AndroidエンジニアがAPIを書いたりといったことが通常の業務内でごく自然に行われています。
こういった会社の文化があったので周囲からの理解やサポートが得られやすく、僕がiOSに挑戦する上でも大きな助けになりました。
開発前にやったこと
まず開発が始まる前にAppleが用意しているiOSのチュートリアルを実施しました。 チュートリアルの内容としては記事に沿ってXcodeで実装を進めていくと「FoodTracker」という1つの料理記録アプリが作れるようになっています。
このチュートリアルを通して
- Xcodeの使い方
- Storyboardを使ったUIの構築方法
- ViewControllerのライフサイクルやUIとの紐付け
- TableViewやStackViewの使い方
- NavigationBarの使い方や画面遷移の方法
- データ構造の定義とデータの永続化方法
などのiOSを開発する上で必要となる基本的な内容を抑えることができます。 Swiftの文法などについての詳細な解説はないので、チュートリアル前に文法だけはさらっておくとチュートリアルを効率的に進めることができると思います。
また、ありがたいことに開発が始まる前に実際にLUCRAのiOSを開発しているエンジニアからもいくつかのポイントをレクチャーしていただきました。
- クライアント開発について
- 特徴や楽しいところ辛いところ
- クライアントアプリがどうやって動いているのか
- 画面の作り方とAutoLayout
- Xcodeの使い方
- Swiftの文法
- delegateパターンやextensionについて
- 実際のレポジトリを見つつアーキテクチャーの説明
開発中にやったこと
これで実際に開発を進めていく訳なんですが、そうあっさりとiOS開発ができるようにはなりませんでした(当たり前ですが)。
現在のプロジェクトではGunosy社内の既存プロダクトを参考に、RxSwiftを始めとして各種ライブラリが入ったMVVMの構成になっています。
とりあえず開発を進めていたのですが、iOSの知識は上記の 開発前にやったこと
程度しかないため、Xcodeの使い方やSwiftの文法、APIとの通信やデコード周り、RxSwiftなどの各種ライブラリなどの自分の理解していない複数の要素が組み合わさっていて、自分が何がわからないのかすらわからないという状態になってしまっていました。
そこで実際の開発に加えて並行して、ライブラリをできるだけ使わずにAPI通信をして天気を表示するクライアントアプリの開発も行っていました。 当初使っていたライブラリは APIKit , R.swift の2つで、いったん完成させてそこまでの理解が進んだら RxSwift や他のライブラリを導入してみたり、MVVMの構成にしてみたりと1つずつ理解していけるように進めていきました。
使用した天気APIはこちら。
またモブプロ(ペアプロ)も非常に勉強になりました。 iOS開発ではXcodeという独特なエディターを使用するため、モブプロをすることによってエディターの使い方だったり、ショートカットだったり、基本的な開発の流れがわかるので、非常におすすめです。
特にiOS開発では1つの操作をするのに複数の方法が存在するので、それらを知る上でも有益です。 例えばAutoLayoutはコードで指定する方法もあれば、Storyboardで指定する方法もあります。さらに下図のようにStoryboardで指定する場合でも、右下のボタンから指定する方法もあれば、左のサイドバーを右クリックしてからドラッグアンドドロップして指定する方法もあります。
モブプロについては広告技術部から詳しい記事が出ているのでそちらも参考にしてもらえればと思います。
まとめ
今回のプロジェクトを通して、iOS開発と一言で言っても、実際のプロダクトは複数の要素が組み合わさってできている場合が多いので、そこを1つずつ理解して自分にできること・できないことをハッキリさせていくことが大事だなと実感しました。
またXcodeというエディターの使い方やiOSの基本的な実装方法や開発の流れを知る上でモブプロ(ペアプロ)は非常に有効な手段なので、周りに詳しい人がいる場合はぜひ積極的にお願いしてやってみると学習の近道になるはずです。
このような過程を経て、iOS開発が未経験だった僕もなんとか他人の力を借りながら、iOS開発ができるまでになりました。 サポートしてくれた方々にはこの場を借りてお礼を申し上げます。ありがとうございました。
弊社では自分の専門領域を活かしつつも、担当領域を広げてプロダクトを開発・改善していきたいエンジニアを募集していますので、ぜひ気軽にご応募、お声がけください。