どうも、ギルドワークス 前川です。京都からリモート作業を行っていますが、この二週間は、祇園祭でとんでもない人出となっております。
リモートでの開発に必要なもの
ギルドワークスでは、Webサービスだけでなく、iOSやAndroidの開発もリモートで行ってきています。その中で、最近一つのパターンとなっているのが「可能な限り初期に継続的ビルド(CI)を導入する」ことです。
もちろんCIは手段でしかありません。その目的は、「全員が同じものを見て確認する」ためです。対象がWebサービスならば、例えばHerokuにデプロイされたものを正として扱ってやれば、事は済みます。
しかしiOS開発では、そうはいきません。全員が「同じもの」を見ることが非常に重要ですが、それにはCIされた成果物を共通の場所においておき、それを参照する、これしかありません。
ここは結構厳格にやらなければいけない、と私は思ってます。例えばレビュー指摘をしても「ここは自分の環境では動いてますんで」などと言われると、そこで会話が止まってしまい、フィードバックが割と根本から絶たれてしまうのです。
「masterにpushされたものが唯一にして絶対の正」これを守るのは、簡単で、そしてもとても即効性のある、リモートiOS開発改善の処方箋なのです。
ギルドワークスが利用しているサービス:Circle CI
iOSのビルドはまだまだローカルJenkinsが主要だとは思いますが、リモートワークを掲げる当社としては、やはりCIを行ってくれるWebサービスを使用したいところです。
というわけで、ギルドワークスが利用しているサービスがCircle CIとなります。
Circle CIは”Experimental Setting(実験的な設定)”ながらもiOSのビルドを行うことができます。しかも、ビルド速度に制限はかかってしまうものの、Private レポジトリを含めて無料 でCIサービスを利用できます。
詳しい設定は、以下の公式ドキュメント(英語)をご覧ください。
iOSビルドの便利ツール、Schenzen
CircleCIでは、基本的にコマンドラインでビルドを実行していきます。
一応Xcodeにもxcodebuildというビルドツールが付属しているのですが、設定項目が結構多く、なかなか使いこなすのは大変です。また、iOSのファイル配布型式であるIPAファイルを作るのには、別のコマンドを色々叩く必要があり、大変です。
そんな時便利なのが、schenzenというコマンドラインツールです。
このツールを使えば、環境変数さえ適切に設定していれば、以下のように非常にシンプルなスクリプトで、ipaのビルドから、DeployGateなどのベータ配布サービスへの配信までやってくれます。
ipa build ipa distribute
これらのサービスを活用して、ギルドワークスでは、以下の様なデプロイメントパイプラインを、手軽に組むことができています。
これからのCIのトレンド
こういったギルドワークスでの取り組みを踏まえて、先日大阪の「CI勉強会」という勉強会で発表をしてきました。
タイトルは、「ポストJenkins時代のビルド戦略」
Jenkins一択時代から、色々なサービスを組み合わせる時代へ。今、結構大きな転換点が来ていると思っています。新しいツールやサービスとしっかり向き合って、自分たちの組織に最適な解を導きたいですよね。
もし、このようなCI周りの技術的悩みがおありなら、ギルドワークスにお気軽にお問い合わせください!