Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Github Actions self-hosted runners のすゝめ
Search
nade
March 15, 2023
Programming
0
510
Github Actions self-hosted runners のすゝめ
CA.Swift #16
https://cyberagent.connpass.com/event/233745/
nade
March 15, 2023
Tweet
Share
More Decks by nade
See All by nade
Server-Driven UI入門: 画面のStateを直接受け取るアプローチ
kazumanagano
4
2.9k
タップルのサービス特性に合わせた設計方針を考える
kazumanagano
0
160
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
110
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
8
4.4k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
91
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
4
8.6k
App Size Optimization への挑戦
kazumanagano
1
1.3k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2.2k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
3.7k
Other Decks in Programming
See All in Programming
ソフトウェアテスト徹底指南書の紹介
goyoki
1
110
自作OSでDOOMを動かしてみた
zakki0925224
1
1.4k
Flutterと Vibe Coding で個人開発!
hyshu
1
260
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
140
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
590
コンテキストエンジニアリング Cursor編
kinopeee
1
700
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
380
A Gopher's Guide to Vibe Coding
danicat
0
170
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
490
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
570
実践 Dev Containers × Claude Code
touyu
1
250
AWS Serverless Application Model入門_20250708
smatsuzaki
0
130
Featured
See All Featured
Building an army of robots
kneath
306
46k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
A better future with KSS
kneath
239
17k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
A Tale of Four Properties
chriscoyier
160
23k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
GraphQLとの向き合い方2022年版
quramy
49
14k
For a Future-Friendly Web
brad_frost
179
9.9k
Transcript
@kazuma_nagano / nade 2023/03/15 CA.Swift Github Actions self-hosted runners のすゝめ
自己紹介 なで( @kazuma_nagano ) 2019 サイバーエージェント 入社 タップル iOSチームリーダー 2
登壇中の疑問、感想等 #ca_swift にてツイートしていただけると 大変喜びます🙇 3
アウトライン 1. ネイティブにおける CI / CDの主な役割 2. ビルドコスト増加に伴うリスク 3. Github
Actions self-hosted runners の紹介 4. Bitrise → Github Actions への移行 5. まとめ 4
ネイティブにおける CI / CDの主な役割 5
ネイティブにおける CI / CD の主な役割 自動テスト( CI / Continuous Integration
) アプリ配布( CD / Continuous Delively ) 6 Build Test Prepare Feedback Build Submit Store Prepare Distribute
環境構築はキャッシュを駆使してチューニング可能 自動テスト( CI / Continuous Integration ) アプリ配布( CD /
Continuous Delively ) 7 Build Test Prepare Feedback Build Submit Store Prepare Distribute タップルにおけるビルド時間(2023)
参考文献 8 https://bitrise.io/blog/post/tune-your-bitrise-workflows-using-cache-in-steps
(主題)どちらもビルドで時間的コストの大半を使う 自動テスト( CI / Continuous Integration ) アプリ配布( CD /
Continuous Delively ) 9 Build Test Prepare Feedback Build Submit Store Prepare Distribute ビルドコストは増 加していく
ビルドコスト増加に伴うリスク 10
ビルドコスト増加に伴うリスク 1. ビルド時間は年々増加していく 2. 実行時間に準じた課金体系の標準化 11
1. ビルド時間は年々増加していく 12
13 9年弱のコードベース 成果物のキャッシュされていな いライブラリ群 Kotlin Multiplatform Mobile ビルド時間は年々増加していく タップルにおけるビルド時間
14 ビルド時間は年々増加していく タップルにおけるビルド時間(2023)
15 ビルド時間は年々増加していく タップルにおけるビルド時間(2025?) ?
1. 実行時間に準じた課金体系の標準化 16
実行時間に準じたクレジットベースのプラン 17 Bitrise https://bitrise.io/pricing
実行時間に準じたクレジットベースのプラン 18 Circle CI https://circleci.com/ja/pricing/
実行時間に準じたクレジットベースのプラン 19 Github Actions(GitHub-managed Standard) https://github.co.jp/pricing#compare-features
実行時間に準じたクレジットベースのプラン 20 Xcode Clound https://developer.apple.com/jp/xcode-cloud/
実行時間に準じたクレジットベースのプラン • iOS向けSaaSはどこもビルド時間ごとの課金体系が主流で値上げ傾向 • プランごとのクレジットがなくなるとCIが止まってしまうことも • チームの拡大や生産性の向上により線形に価格上昇していく • マシンスペックに応じて実行時間ごとの価格が上昇していく ◦
一般的にクレジット消費が2xになっても実行時間は1/2にはならない 21 ビルド時間の増加がプロダクト開発の潜在的なリスクになっている
Github Actions Self-hosted Runnersの紹介 22
Github Actions self-hosted runner の紹介 • 自分達で管理する実マシンやAWS EC2などの仮想マシンをGithub Actionsの実 行マシンに指定できる機能
• 基本的にはGithub が提供するself-hosted runner アプリケーションを実行できる マシンであればどのマシンでもOK • Github Actions上からのインターフェースはほぼ変わらない • 実行時間の制限はほぼなく(35日)、マシンスペックも好きなものを選べる 23
Github Actions self-hosted runner の紹介 ビルド実行時の実行マシンのラベル指定のみ 24 name: '[iOS] Test
App' on: workflow_dispatch: jobs: build: runs-on: - self-hosted - macOS timeout-minutes: 120
Github Actions self-hosted runner の注意点 • Private Repository のみの利用推奨 ◦
forkされた場合に悪意のあるプログラムがマシン上で実行できてしまう ◦ Publicな場合はGithub Actionsが無料で利用できるので不要かも • 基本はMac 1台につき1つのマシンのみの提供 ◦ Mac OSの規約上1物理マシン上に2つのOS(ベースOS + Docker) • 複数の会社でのシェア等はMac OSの利用規約で禁止されている ◦ 24時間単位での貸し出しのみ 25
グループのインフラチームの管理する myshoes を通して 物理マシンを利用 Cyberagent myshoes の 紹介 26 https://speakerdeck.com/whywaita/cyberagent-oss-cicd-myshoes-cicd2021
Bitrise → Github Actions への移行 27
今日話さないこと • Bitrise、Github Actions の特徴、比較 • 実際のワークフローの構築の仕方 • それぞれのコストの話 28
Bitrise → Github Actions への移行 • 基本的な CI / CD
に必要な機能においては代替手段あり ◦ キャッシュ管理(CocoaPods, Gem, Ruby, Java, Gradle, SwiftPM) ◦ スケジューリングビルド • 事前にワークフローの実行をfastlaneにまとめておくことで容易に移行可能 ◦ 証明書管理 → fastlane match、ビルドコマンド → fastlane gym • Bitriseにしかない機能は代替案を用意する必要あり 29
Bitriseにしかない機能の代替案を用意する タップルで利用していたBitriseにしかない機能 • Sandbox Tester 作成などの2FAが必要なワークフロー • SlackからのCIの実行 • アプリのQRコード配布
30
Bitriseにしかない機能の代替案を用意する 31 Sandbox Tester 作成などの2FAが必要なワークフロー • Fastlaneには課金のSandbox Userの作成など、Appleの非公式APIを利用した機 能がいくつかある ◦
api_key認証に対応していないため2FAを通過する必要がある • Bitriseには「一度2FAした認可(cookie)を保持する」機能がある ◦ Appleの2FAはリクエストされた地域外から利用すると即時無効化される ◦ Bitriseでコンソール上からマシンが2FAをリクエストし、その場でユーザーに コードを教えてもらうことで解決している https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 32 Sandbox Tester 作成などの2FAが必要なワークフロー Github Actions self-hosted runners を利用している場合、実行マシンと、ユーザーが
同じ地域にいる場合はローカルで通したcookie情報をsecret経由で更新して使うことで Github Actions上で認証を通すことは可能- • ~/.fastlane/spaceship/[email] にあるcookieをCI上でも設置する https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 33 SlackからのCIの実行 Bitriseの Slackからのwebhook実行 + Slackのワークフロー • 簡単に誰でもアプリが配布できるように https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 34 SlackからのCIの実行(要実装) Slack App + Github Actions API にて実装することで代替(In
progress) https://api.slack.com/apps
Bitriseにしかない機能の代替案を用意する ビルド済みのipaの端末へのダウンロードURLを Bitriseが生成してくれる機能 施策テスト時など、特定のブランチのアプリを渡してや りとりする際に利用されていた 35 アプリのQRコード配布
Bitriseにしかない機能の代替案を用意する 36 アプリのQRコード配布 → Firebase App Distribution に完全移行 Firebase App
Distribution • Firebase 内のベータ版アプリ配布の機能 • 利用は完全無料 • Fastlane用の実行プラグインもある • Googleアカウントごとに制御可能 タップルでも以前から併用していたがこれを機に完全移行 https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 37 アプリのQRコード配布 → Firebase App Distribution に完全移行 いつの間にかアプリごとのURLが取得できるようになっていた https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 38 アプリのQRコード配布 → Firebase App Distribution に完全移行 Q: アプリ配布時にダウンロードURLが取得できる?
https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 39 アプリのQRコード配布 → Firebase App Distribution に完全移行 Q: アプリ配布時にダウンロードURLが取得できる?
YES. 下記の環境変数に結果が格納されている (移行時にはなかった) lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] https://firebase.google.com/docs/reference/app-distribution/rest/v1/projects.apps.releases#resource:-release
Bitriseにしかない機能の代替案を用意する 40 アプリのQRコード配布 → Firebase App Distribution に完全移行 fastlaneでのipaのアップロード後、アプリURL(+QR)をSlackに投稿
実際のGithub Actions 移行後のパフォーマンス 41
実際のGithub Actions 移行後のパフォーマンス 42 30min → 9.5min と300%削減🎉(フルキャッシュ状態)
実際のGithub Actions 移行後のパフォーマンス 43 • Bitriseで価格帯からスペックの良いマシンが利用できていなかったことによるマシン スペック差が大きそう • Git CloneがBitrise上よりGithub
Action上のほうが2min早いことも • キャッシュの管理がBitriseより柔軟 https://firebase.google.com/products/app-distribution 30min → 9.5min と300%削減🎉
まとめ 44
まとめ • iOSのCI / CD SaaSは実行時間ベースの課金体系が主流になっており、価格が上 がってきている • Github Actions
self-hosted runners を利用することで実行時間や消費クレジッ トを機にすることのないCI / CD 環境を構築できる • Bitrise → Github Actions への移行は基本的には可能 • 高いマシンスペックを活用することで大幅にCIの実行時間が短縮できる場合も 45
ありがとうございました! #ca_swift にて感想お待ちしてます🙇 46