はじめに
参加しているエンジニアコミュニティーで開催された輪読会にてiOSテスト全書を読み、その後同コミュニティーで開催されたBitrise体験会に参加しました。
その際に学んだBitriseの導入部分と、一人体験会で触ってみたGithub Actions(記事を読みながらやっただけ)の簡単な比較をCI素人目線でまとめたいと思います。
CI素人と書きましたが、最近までCIという言葉も知りませんでしたので、
CIとは?
Continuous Integrationの略で、継続的インテグレーションと呼ばれています。
開発者が書いた新しいコードとマスターブランチ(トランク)を頻繁に統合するプロセスです。新しい機能開発のためにブランチを作成する場合、つぎにマージするまでの期間が長くなるにしたがって変更量が多くなり、マージ作業が大変になるだけでなく、問題が含まれるコードの特定と分離が難しくなります。一回のコミットでの変更量を小さくして頻繁にマージすれば、問題の発見が早くなり対処が楽になります。問題発見のオーバーヘッドを小さくするために自動化されたテストを行います。
CI対象
ソース : iOSアプリ(Swift)
管理 : Github(Public)
体験後のざっくり比較
Bitrise
メリット
GUIでポチポチ設定できる
ログが見やすい
デメリット
使い放題ではない
無料プランは 300クレジット/月使える(2クレジット/分 消費してた)
Github Actions
メリット
Githubだけで完結する
Publicリポジトリであれば無料で制限なく使える
デメリット
セットアップが少し大変(ymlファイルを書かないといけない)
ログが見にくい
セットアップ手順
かなりざっくりとですが、BitriseとGithub Actionsのセットアップ手順をまとめておきます。
Bitrise
1. Bitriseアカウント&Workspaceを作成
2. PublicなGithubのレポジトリを選択
3. ブランチを指定
4. Xcodeのバージョンを指定
5. 動かしてみる
Bitrise上でやっても良いし、Githubから指定した動作をして動かしても良い
Github Actions
1. GithubのレポジトリからGithub Actionsを始める
2. 自動生成されるymlファイルを修正してコミット
自由にカスタマイズできるようですが、まずは動くものという事で、Github Actionsの記事を参考に書いて見ました。〇〇〇〇は対象のソースから取得してください。
(自動生成されたものでも動くような気もしますが、けっこう修正しました)
name: iOS starter workflow
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
name: Build and Test default scheme using any available iPhone simulator
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Show Xcode version # Xcodeのバージョンを表示
run: xcodebuild -version
- uses: actions/cache@v1 # キャッシュを使う
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: CocoaPods
if: steps.cache-cocoapods.outputs.cache-hit != 'true'
run: pod install
- name: Build
run: xcodebuild
-workspace 〇〇〇〇.xcworkspace
-scheme 〇〇〇〇
-sdk iphonesimulator
-configuration Debug
build
- name: Run tests
run: xcodebuild
-workspace 〇〇〇〇.xcworkspace
-scheme 〇〇〇〇
-sdk iphonesimulator
-destination 'platform=iOS Simulator,name=iPhone 11 Pro Max'
clean test
3. 動かしてみる
下記のような条件にしましたが、自由に変えて対象の動作をすればビルドとテストが動きます。
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
感想
Github Actionsのymlを書くところでかなり詰まりました。というか今でも正しい書き方が分かってなく。。。(間違いあればご指摘頂けると嬉しいです)
基本的には、設定が簡単でログも見やすいBitriseを使っていきたいなという思いが強くなりましたが、Github ActionsはGithubだけで完結するが良いので勉強は継続していこうと思ったり。
私が参加させて頂いたBitrise体験会の動画(1時間弱)は、主催者の記事(1番下)から100円で見れます!
今回の記事では導入部分だけですが、体験会ではより高度なことも勉強できました。
体験会参加者の記事も要チェックです。
参考