5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

fastlaneを使ってiOSアプリをブラウザから爆速確認できるようにした

今週のOSS活動

github.com

この度、fastlaneに新しいアクションを追加して送ったところマージされました。

9月ぐらいに思いついて、コードは大分前に書き上げていたのだけど、テストを書くのが面倒で2ヶ月ぐらい放置した後、重い腰を上げてPRをこしらえた。

他のアクションに比べて気合を入れてテストを書いたら、中の人からめっちゃ賞賛されて嬉しい。

f:id:gigi-net:20151113211658p:plain

fastlaneって何?

fastlane.tools

fastlaneはiOS用のタスクツールで、開発環境の構築やビルドを始めとし、面倒な証明書の更新やβ版配信、iTunes Storeへのサブミットなど、iOS開発に必要なタスクを自動化することができます。

特徴として挙げられるのは、様々な操作が「アクション」として定義されており、 予め用意されたアクションを宣言的に記述するだけで、簡単にiOSアプリ開発用の便利バッチを作成することができる点。

最近注目されていて、Twitterに買収され、Fabricに組み込まれたのも話題になりました。

詳しくは以下の記事を読むと良いかもしれない。

iOSアプリの継続的デリバリーに便利なfastlaneのご紹介 - Qiita

何を作ったの?

今回はこのfastlaneの1アクションとして、Appetize.ioというサービスにバイナリをアップロードする仕組みを実装してみた。

Appetize.io

Appetize.ioは、iOS/Androidのアプリをアップロードすると、謎の技術によりサーバー上でシミュレーターが走り、ブラウザ上でシミュレーターを実行できるサービス。

例えばこんな感じ。

これらを組み合わせることで、iOSアプリの継続的デリバリーが実現されて、最高という感じになった。

どうやって使うの

fastaneを使うには、FastfileというファイルにRuby DSLを記述します。今回のAppetizeアクションは以下のような感じで使える。

lane :appetize do
  xcbuild
  sh ['zip', '-r', '-X', "../app.zip", '../build/*/*.app'].join(" ")
  # upload any way
  appetize(
    api_token: 'yourapitoken',
    url: url,
    private_key: 'yourprivatekey'
  )
  slack(
    message: "new build available #{lane_context[SharedValues::APPETIZE_APP_URL]}"
  )
end

こんな感じで一度定義しておくと、

$ fastlane appetize

あとはコマンド一発でバイナリがブラウザ上で動くようになって嬉しい。fastlaneのSlackアクションなどを使えば、URLをそのまま通知することもできる。

注意する点として、Appetizeに直接バイナリをアップロードすることができず、アプリのパッケージをZIP圧縮して他のサーバーに上げ、そのURLをAppetizeに登録するという仕組みになっていること。

fastlaneにはS3やGitHubリリースにアップロードするアクションがあるので、好きなところに上げればそのまま埋め込める。

その一方で、ZIP圧縮するアクションなどが用意されていなくて、直接shellを叩く必要があってどうにか解決したい。

まとめ

なかなかニッチな感じですが、爆速でiOSアプリのプレビューがブラウザでできるようになったので、どうぞご利用ください。

PRを送った時に、コメントに自動的にシミュレーターをembedする、みたいなことができるようになって夢が広がるかも知れない。

太古の昔は、1台ずつケーブルを繋いで暖かみのある手動ビルドをしていたのに、今やDeployGateやTestFlightがデファクトスタンダードとなり、将来的には端末にインストールするのすら時代遅れになるような感じがします。ゲームとかを動かすにはまだ厳しい感じですが、いろいろと興味深い分野です。

宣伝

爆速デリバリーできるアプリがない方は、ぜひこの本でゲームを作って爆速デリバリーしましょう。