こんにちは、技術部モバイル基盤グループの茂呂(@slightair)です。
今回は、ちょっと地味ではありますが、クックパッドのiOSアプリ開発を支えているスクリプト群について書きたいと思います。
日々iOSアプリ開発を行うとすれば、Xcodeまたはその他のお気に入りのエディタでコードを書き、ビルドと実行を繰り返して開発を進め、アプリが完成したらサブミット、めでたくリリースという流れになると思います。
場合によってはこうした開発の所々をサポートするツールを使うこともあるでしょう。クックパッドでもいくつかのツールを使っていますし、場合によっては自作することもあります。
ツールを導入することで解決できることであればそれでよいですが、もうちょっと気の効いたことをして欲しい、リリースフローなど自分たちのアプリ開発の進め方の都合で発生する繰り返しタスクを省力化できないか、というような比較的小さな問題を解決するために、僕たちは今回紹介するようなスクリプトを用意しています。
これらのスクリプトはだいたい Ruby で書かれています。
Makefile などから呼び出されているスクリプトもありますが、最近は fastlane をよく使っているので、fastlane action として実装し直そうという動きもあります。今回紹介したようなスクリプトの中で汎用的な action として分離できるものがあれば、公開していきたいと考えています。
クックパッドではiOS/Androidに詳しいモバイルアプリ開発エンジニアはもちろんのこと、このようなモバイルアプリ開発をより効率よくするために活躍できるエンジニアを募集しています。
開発支援系
アプリ開発を支援するスクリプト群を紹介します。利用ツールのバージョンチェック
クックパッドのiOSアプリ開発では CocoaPods, Carthage, clang-format, SwiftLint, SwiftFormat などのツールを使っています。 数が多い上にこれらのツールの更新頻度はバラバラで、バージョンによって動きが違ったりします。複数人でアプリを開発しているので、環境によって期待している効果が得られないと困ってしまいます。そのため、各開発者の環境に期待しているバージョンがインストールされているかチェックするスクリプトを用意しています。ライブラリ群のインストール
クックパッドのアプリは CocoaPods と Carthage を併用しています。 CocoaPods は Objective-C で書かれた静的リンク可能なライブラリ群を、Carthage は Swift のライブラリ群をインポートするために使っています。 何故このように使い分けているかというと、CocoaPods で導入しているライブラリの一部が静的ライブラリであってuse_fr
ameworks!
が使えないからです。
またフレームワークが増えるほどアプリ起動に時間がかかってしまう問題を防ぎたいというのも理由です。
CocoaPods と Carthage のコマンドを叩き、Carthage がチェックアウトしたライセンスファイル群を CocoaPods の acknowledgements.plist
にマージするスクリプトを用意しています。
また、Carthage にはこの記事を書いている時点では更新のあったライブラリだけをビルドし直す仕組みがなかったので、ビルド時間を抑えるために更新が必要なライブラリだけをビルドするスクリプトを用意していました。
この問題への対応はすでに PRが出てマージされているので、新しいバージョンではこの処理は必要なくなりそうです。
前述のツール群のバージョンチェックとあわせて make でこの操作を実行できるようにしています。
各開発者は手元へ最新のコードを fetch した後に make
コマンドを実行することで、チームで期待されている開発環境にそろえて開発に取り掛かることができるようになります。