Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GitHub Actions で Flutter アプリの CI/CD をやってます #ゆ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kihara, Takuya
PRO
April 27, 2025
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub Actions で Flutter アプリの CI/CD をやってます #ゆるWeb札幌
ゆるWeb勉強会@札幌 #29 の発表資料。
https://mild-web-sap.connpass.com/event/349770/
Kihara, Takuya
PRO
April 27, 2025
More Decks by Kihara, Takuya
See All by Kihara, Takuya
ゆるWeb勉強会@札幌 紹介 2026年9月版 #seb_sapporo #ゆるWeb札幌
tacck
PRO
0
41
AWS Blocks の紹介 #AWSAmplifyJP
tacck
PRO
0
70
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
410
ゆるWeb勉強会@札幌 #31 #ゆるWeb札幌
tacck
PRO
0
99
Amplify でも Auth0 をいい感じに使いたい! - Cognito Identity Pool を使った認証情報の連携 #auth0
tacck
PRO
0
140
雑食エンジニアの生きる道〜AI時代のこれから #seb_summit
tacck
PRO
1
270
それでは聞いてください「Impeller導入に失敗しました」 #FlutterKaigi #skia
tacck
PRO
0
670
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
760
Amazon Q Developer CLI でゲームと Amplify アプリを作ってみた #ゆるWeb札幌
tacck
PRO
0
91
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.2k
Docker and Python
trallard
47
4.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
750
It's Worth the Effort
3n
188
29k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Building the Perfect Custom Keyboard
takai
2
890
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Transcript
GitHub Actions で Flutter ア プリの CI/CD をやってます 2025/04/26 生活協同組合コープさっぽろ
デジタル推進本部システム企画部 木原 卓也
木原 卓也 Kihara, Takuya / @tacck 生活協同組合コープさっぽろ デジタル推進本部システム企画部 Software Engineer
/ Flutter, TypeScript, Vue.js, React ゆるWeb勉強会@札幌 主催 Amplify Japan User Group 運営メンバー AWS Community Builder Since Q2 2021 Frontend Web and Mobile 好きなフィギュアスケートの技 スプレッド・イーグル
目次 • GitHub Actions とは ◦ GitHub Actions とは ◦
GitHub Actions 費用 • コープさっぽろの CI/CD 環境変遷 • Flutter アプリを CI/CD する ◦ Flutter アプリを CI/CD する ◦ Flutter アプリのビルド手順 ◦ 開発中の検証ビルドの改善話 • GitHub Actions キャッシュ • まとめ
GitHub Actions とは • GitHub 謹製のワークフロー実行環境。 ◦ ブランチ操作・Pull Request操作など、トリガーは豊富。 •
下記のランナー (実行OS) が用意されている。 ◦ Linux (Ubuntu) x64 / ARM64 ◦ macOS x64 / ARM64(M1) ◦ Windows Server x64
GitHub Actions 費用 • 基本的な費用 (各OSの最小スペックでの分単位の料金 米ドル) ◦ Linux x64
2-core: $0.008 ◦ Windows x64 2-core: $0.016 (Linuxの2倍) ◦ macOS x64 4-core: $0.08 (Linuxの10倍) ◦ macOS M1 3-core: $0.08 (Linuxの10倍) • プランごとに無料枠あり (Linuxの費用基準、Windows/macOSはLinux料金で換算) ◦ GitHub Free: 2,000分 = $16 ◦ GitHub Pro: 3,000分 = $24 ◦ 組織の GitHub Free: 2,000分 = $16 ◦ GitHub Team: 3,000分 = $24 ◦ GitHub Enterprise Cloud: 50,000分 = $400
コープさっぽろの CI/CD 環境変遷 • 無の時代 → CircleCI 導入 • CircleCI
→ GitHub Actions へ移行
無の時代 → CircleCI 導入 • アプリの内製化を進める中で、CD/CIを導入することに。 • 当時のメンバーによって、 CircleCI に決定。
◦ 4年ほど前は、iOS アプリをいい感じにビルドできる選択肢は少なかった。 • テスト、ビルド、デプロイが自動になることで、開発者依存から脱却。 ◦ 特にアプリは本番用証明書を手元で管理しなくて良くなった。
GitHub Actions へ移行 • 時は流れ、 GitHub Actions が高機能化 → iOS
アプリも十分にビルド可能に。 • メンバーの入れ替えもそれなりに起こり、GitHubで集中管理の方向へ。 • GitHub Actions だと ◦ すでに GitHub の Organization に入っているので、追加のユーザー管理不要。 ◦ そのため、新規リポジトリでの導入障壁が低くなった。 ◦ 費用の最適化もしたい。(GitHub Actions は完全従量課金) • 書き換えは、基本を抑えればそこまで難しくはなかった。 ◦ どちらもジョブの大半はシェル芸なので。
Flutter アプリを CI/CD する • Ubuntu と macOS のランナーがあるので、 Flutter
アプリもビルド可能。 ◦ ランナーのイメージ情報 https://github.com/actions/runner-images/tree/main ◦ 色々とランタイムがインストール済み。 ◦ それぞれのイメージには Android 環境も含まれている。 ▪ が、 macOS は時間単価高いので Android ビルドするのはもったいない。 • Flutter は入っていないので、 Action でインストールする必要あり。 ◦ flutter-action https://github.com/marketplace/actions/flutter-action
Flutter アプリのビルド手順 • 三段階のビルドトリガーを用意 ◦ 開発中の実機検証ビルド ◦ リリース前の検証ビルド ◦ 申請用の本番ビルド
開発中の検証ビルド • 私の参加前〜参加直後 (CircleCI時代〜GitHub Actions初期) ◦ 開発用ブランチから test/〜〜 のようなブランチを派生 ◦
アプリのビルド番号を他の開発者と事前調整 ◦ そのブランチへの push でビルドワークフロー実行 ◦ 両OS とも Firebase App Distribution へアップロード・実機配信 • 課題 ◦ ブランチへの push でビルドされるので、 細かい修正の push で不要なビルド多発!! ◦ ビルド番号の事前調整が手間。 →改善話は後ほど 1.2.3 (456) のような バージョン + ビルド番号 が、被らないようにしないといけ ない。
リリース前の検証ビルド • dev → stg へマージでビルドワークフロー実行 ◦ Android ▪ Firebase
App Distribution へアップロード・実機配信 ◦ iOS: 検証用アプリ ▪ App Store アップロード・Testflightで実機配信 • 課題 ◦ OSごとに配信環境が異なる。 ◦ プロダクトに関わるメンバーが増えたため、リリース前検証の機会が増加し、手間 が増えた。 ◦ →iOS は Firebase App Distribution も併用するように調整
申請用の本番ビルド • stg → main へマージでビルドワークフロー実行 ◦ 各ストアへアップロード。 ◦ ここは特に変更無し。
開発中の検証ビルドの改善話 macOS での無駄なビルドが発生しないように、ビルドトリガーを調整。 • ブランチのプッシュ → PR へ特定のラベル設定 ◦ ビルドは意図した時
(ラベル設定時) のみ ◦ ブランチを派生させる手間も無し • ビルド番号を事前調整 → ワークフロー実行中に自動採番 ◦ ビルド完了後にコメントし、Firebase App Distribution で見つけやすくする。 ビルドも楽になり、費用も削減。🤗
ラベルでのビルド実行 / ビルド番号の自動採番 実行日時ベースで自動採番
ラベルでのビルド実行 / ビルド番号の自動採番 特定のラベル名のみ実行。 ここで弾くと、ランナーが起動しないので 費用がかからない。
GitHub Actions キャッシュその1 Actions のキャッシュの効果範囲を意識する必要がある。 基本は、Actions を実行したブランチ単位。 下記の階層で、上位のキャッシュは下位で参照できるが、逆はできない。 Flutter のように追加したランタイム、NPMなど大きくなりがちなライブラリ、
ビルドの中間オブジェクトなど、うまく上位でキャッシュを作っておくと効率よくビルドできる。 上位ブランチの キャッシュは参照可能 default branch feature1 feature2 feature1-1 feature2-1 下位ブランチの キャッシュは参照不可 派生関係のないブランチのキャッシュは参照 不可
GitHub Actions キャッシュその2 その他キャッシュの制限 • リポジトリごとのキャッシュ容量上限 ◦ 10 GB •
キャッシュの有効期限 ◦ 最終アクセスから 7 日間 容量を超えたら、有効期限の古いものから自動で無効化・削除されていく。 「その1」をきちんとやっておかないと、全然キャッシュが効かないことになる!!
まとめ • GitHub Actions は手軽に始められて、便利。 ◦ シェル芸おじさんが輝ける場所。 • キャッシュポリシーがやや独特なので、そこはうまく設計しないといけない。 •
macOS のランナーはお高いので、最小限のビルドで使うような工夫を。 • ARM64 のランナーは少し安くなるけど、無料枠に入らないらしい。 ◦ 十分に使っているところであれば、検討しよう。 • パブリックリポジトリは無料なので、まずは気軽にやってみよう!