こんにちは。 株式会社ラクスで先行技術検証を行っている「技術推進課」の堀内(id:yhoriuchi)です。
ラクスのスマホアプリ開発ではCI/CD環境にBitriseを採用しているのですが、iOSアプリ開発の一部で使っているだけで十分に活用できているという状況ではありませんでした。
今回、技術推進プロジェクトの一貫としてスマホのCI/CDに取り組み、その中でBitriseを熟知し、最大限活用できるようにしました。
情報量が多くてその全てをお伝えすることはできませんが、調べても情報があまり出てこなかった"Bitrise CLI"をご紹介してみようと思います。
目次
Bitriseとラクスが採用した理由
Bitriseについては多くの記事でも紹介されていますが、概要を理解してもらうには公式サイトの説明が分かりやすいので引用しておきます。
Bitriseはモバイルアプリ開発(iOS, Android, Xamarin, …)における 継続的インテグレーション・デリバリー(CI/CD) プラットフォームをサービス(PaaS)として提供しています。 ソフトウェアプロジェクトの開発・自動化を手助けするためのツール・サービスの集合体です。 数回のクリックであなたのアプリのテストやデプロイ作業を自動化しましょう!
ラクスでBitriseを採用した理由は、スマホ対応に特化していることと、ワークフローと呼ばれる可視化されたフロー図でビルドプロセスが分かりやすくなっていることが大きいです。 また、スマホに特化していることもあってiOS、Androidだけでなく、FlutterやReact Nativeなどにも対応しています。 プラットフォームを問わずスマホアプリ全般をサポートし、充実した機能があるので、Bitriseを使っていて開発で困ることは無さそうに思います。
しかし、Bitriseが万能とはいえ、なんらかの理由でBitriseが停止した際にビルドやデリバリーに影響が出てしまっては困ります。 そんな時にも備えて対策を検討した際に出てきたのがBitrise CLIでした。
Bitrise CLIとは
Bitrise CLIは読んで字の如く、Bitrise Command Line Interfaceのことです。 ローカル実行が可能で、コードがGitHubで公開されているため誰でも利用することができます。当然Bitriseのアカウントも不要です。 これを使えば懸念しているBitrise停止といった不慮の事故に見舞われたとしてもなんとかできそうです。
インストール方法
オープンソースなのでコードをビルドしないといけないのかと考えてしまうかもしれませんが、下記のコマンド一発です。
brew update && brew install bitrise
Homebrewを使いたくない、あるいはLinux環境にインストールしたい場合は下記。(v1.45.1の場合)
curl -fL https://github.com/bitrise-io/bitrise/releases/download/1.45.1/bitrise-$(uname -s)-$(uname -m) > /usr/local/bin/bitrise
環境構築にまで気を配っているところが素敵ですね。
ローカルでの実行方法について
実行方法も至って簡単なのですが、その前にワークフローの設定が記載されたbitrise.yml
を用意する必要があります。
これはイチから作る必要は無く、Bitriseにログインしてワークフローエディタを開くとダウンロードできるようになっているので心配無用です。
具体的には下記のbitrise.ymlメニューからダウンロードできます。
bitrise.ymlの詳細をお見せすることはできませんが、内容は公式サイトが参考になると思います。
ここまで来れば実行は簡単で、bitrise.ymlを保存したディレクトリで下記を実行するだけ。(下記の"SimpleBuild"はワークフロー名)
bitrise run SimpleBuild
すると下記のようにアスキーアートで"BITRISE"のロゴが表示されたあと、ステップが実行されているのが分かります。
ちなみに下記は同じワークフローをbitrise.ioで実行したログです。若干見た目が異なりますが、出力される内容はほぼ同じです。
Bitrise CLI実行時の環境変数
実行が簡単なことがお分かり頂けたと思いますが、通常BitriseでGitリポジトリからソースコードを取得する場合、
リポジトリのURLとブランチ名はワークフローの設定ではなく、1つ上の階層にあるアプリケーションの設定に記載し、ステップの中では用意された環境変数を参照することになると思います。
残念ながらこの設定(環境変数)はbitrise.ymlに記載されないため、自前で環境変数としてexportしておく必要があります。
具体的な環境変数名はGIT_REPOSITORY_URL
とBITRISE_GIT_BRANCH
の2つです。他にもbitrise.ioが使う環境変数はいくつもありますが、弊社では今のところこの2つだけで足りています。
これを毎回exportするのが手間なので弊社ではスクリプトを作って運用することにしました。
参考までに弊社で作成したスクリプト(一部抜粋版)を載せておきます。
#!/bin/sh WORKFLOW=$1 if [ -z "${WORKFLOW}" ]; then echo "第1引数でビルド対象のワークフローを指定してください" exit 1 fi export GIT_REPOSITORY_URL="{{リポジトリのURL}}" export BITRISE_GIT_BRANCH="{{ブランチ名}}" ssh-add ~/.ssh/id_rsa bitrise run ${WORKFLOW}
スゴイと叫ばずにはいられなかった機能
最後に1つだけBitrise CLIでスゴイ!と思った機能を紹介したいと思います。
それがワークフローエディタです。とりあえず下記のコマンドを実行してみてください。
bitrise :workflow-editor
すると、なんということでしょう、ブラウザが立ち上がってワークフローエディタが使えるじゃないですか!
(下記のような画面が表示されます)
スタックと呼ばれる仮想マシンの管理機能が無いので言い過ぎになってしまいますが、これってBitriseの機能そのものだったりします。
オープンソースでここまで使えることに驚きを隠せませんでした。万が一に備えようと調べ始めたCLI環境ですが、十分すぎる機能が提供されているので安心してBitriseを使えると思いました。
最後に
いかがだったでしょうか。Bitrise CLIの情報でお役に立つ内容があったでしょうか。
実のところ、スマホアプリ開発に着手した直後はビルドサーバーを社内に構築しようと考えていました。しかし、ビルドマシンのメンテコスト(機器、OS、SDK、その他ソフトウェアなどのメンテの手間)を考えると割りに合わないと判断し、CI/CD環境を提供してくれるクラウドサービスを利用することにしました。
今回、Bitriseには十分な機能と柔軟な環境が用意されていると改めて知ることができたので、この先もBitriseを活用していくことで開発を効率よく進めていくことができそうです。