🤖

モバイルアプリ開発にGitHub Actionsの導入を検討してみた

2023/07/31に公開

こんにちは、horitamonです。

なんだか最近モバイル界隈でもGitHub Actionsを採用し始めた方が増えている気配を感じています。
自分が開発しているアプリのCIでも採用できないものか?と思いまして、お試しで作ってみたところの知見をまとめていきます。

※こちらの記事は2023/6/20に開催されたpotatotips #82 iOS/Android開発Tips共有会にて、私が登壇してお話しした内容を書き起こしたものです。

GitHub Actionsとは

みなさまご存知GitHubが提供するCIツールです。
ホストはLinux, Windows, macOSを選択可能。
つまりiOSアプリもビルドできちゃうわけですね。

料金体系

パブリックリポジトリであればなんと無料!
オープンソースの開発者を応援する姿勢が伝わってきます。

プライベートリポジトリであっても月2,000分〜無料枠があります。
ただし無料枠の利用時間は「リポジトリ1つあたり」ではなく「所有するリポジトリすべて」で計算されるようです。

また注意点として、無料枠を超えた分の料金がホストのOSによって異なります。

  • Linux: $0.008
  • macOS: $0.08
    (2023年7月時点)

…macOSの方がLinuxの10倍です。結構衝撃的な差。
もしiOSの実行時間が無料枠を大きく超えることが確実な場合、Androidと比べて大きく差分が生じることは認識しておく必要がありそうです。

詳しくはオフィシャルなご案内を確認してください。
https://github.co.jp/features/actions

動作確認の方法

今回私が導入しようとしたリポジトリはプライベートだったため、最初の数回の動作確認こそ本番で動かしてみていたのですが、

  • 流石にずっと使っていると枠の残りが気になる
  • pushしないと動かないのでめんどう
  • commitログが汚れる

という難点がありましたので、ローカルで動かす方法を探りました。

Actを使ってローカルで動作確認してみる

色々調べた結果見つかったのがこちらのActというツールでした。

https://github.com/nektos/act

こちらのツールを使えば、yamlファイルをpushしたりトリガーを発生させたりせずとも、コマンドひとつで手元でビルドフローを実行できます。

Macであればセットアップは簡単2ステップ!

  1. Dockerをインストール
  2. Homebrewでactをインストール
$ brew install act

※実際にはDockerのインストールやらHomebrewのインストールやら未対応の場合は他にも手順が必要ですが割愛します

ここまで簡単であれば、Github Actions上での自動化のみならず、開発者で共通のビルドツールとしてmakefileのような使い方をしてもいいかもしれません。
…と思ったら、公式のReadmeでもおすすめされていましたね。

I love make. However, I also hate repeating myself. With act, you can use the GitHub Actions defined in your .github/workflows/ to replace your Makefile!

ざっくりとしたシステム構成

今回動作を確認しようとしたVoicyのアプリは、もともとfastlaneを使用してアプリをビルドするフローが整備されていました。
そのため今回はシンプルにGithub Actions上でfastlaneを呼び出す構成にします。
また出来上がったアプリケーションファイルは、Github Actionsのupload-artifactという機能を使って、Githubからダウンロードできるようにしてみます。

基本的な使い方

ガイドを見れば基本的な使い方がマスターできます。

基本的には実行するyamlファイルと、トリガーとなるイベントを引数で指定する形でコマンドを入力します。

※Apple silliconのMacを使っている場合は--container-architecture linux/amd64を指定しないとエラーが出ます。

$ act -W .github/workflows/build.yaml push

またシークレットとしてリポジトリに環境変数(jsonファイルをエンコードしたものやストアキーなど、ソースコードで管理したくない情報)を登録している使用する場合、下記の方法でキーの値を渡すことができます。

  1. -sで引数として渡す
$ act -s SECRET=”xxxxxx”
  1. .secretファイルを作成して--secret-fileでパスを渡す
$ act -W .github/workflows/build.yaml --secret-file .secret

.secretファイルはシンプルに変数名と値を各行に羅列するだけでOKです。

GOOGLE_SERVICES_JSON="xxxxxx"
STORE_PASSWORD="xxxxxx

artifactの保存先指定

ActはDocker上で動作するため、ビルド成果物はローカルに保存されるわけではありません。
下記のコマンドで成果物の保存先パスを指定することができます。

$ mkdir -p /artifacts 
$ act push --artifact-server-path /artifacts

まとめ

  • ローカルで動かせばビルド時間を消費せずに済む
  • 簡単2ステップでセットアップ完了!
  • シークレットも簡単に渡せる
  • ビルド生成物もローカルに保存できる
    • メンバーのリリース作業共通化にも使えるかも?

というわけでみなさんも導入を検討してみてください!

Voicyテックブログ

Discussion