Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モバイルアプリを継続的インテグレーションで継続的に機能強化

 モバイルアプリを継続的インテグレーションで継続的に機能強化

Masahiko Funaki(舟木 将彦)

September 16, 2022
Tweet

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Technology

Transcript

  1. 3 舟木 将彦(@mfunaki) CircleCI合同会社 Principal Developer Advocate ビジネスを支えるソフトウェアが お客様やマーケットに合わせて 継続して進化していくために不可欠な

    ・CI(継続的インテグレーション) ・CD(継続的デリバリ/デプロイ) の意義や価値、進め方を 技術、ビジネス、経営の言葉で お届けしています。 2000~ ◦ AppleのSiriの前身となるDejima社にて 特許出願を含む製品開発 (車載、家電での音声対話操作) 2003~ ◦ データベースベンダー(Sybase)による買収に伴い 自然言語でのデータベース検索や モバイル環境での対話型検索の開発 2013~ ◦ ERPベンダー(SAP)による買収に伴い ERPのモバイル対応や、 自動車関連(電装パーツ、タイヤ、自動車、 再生可能エネルギー)のイノベーション促進 2018~ ◦ 自動車や小売り、製造、金融といった業界に 対して、 アイデア~コード~プロト~製品/サービス 間の時間差を最小限に 2020~ • アイデア~エンジニアによる実装~アプリやサービス の間を自動化で結び、フィードバックループを高速に 回すため、CircleCI にて Developer Advocate に 自己紹介
  2. 4 Agenda CircleCI について + CI/CD について モバイルアプリ開発における CircleCI の特徴

    iOS / Android / Flutter (クロスプラットフォーム) デモ よくいただくご質問 Q&A 1 2 3 4 5
  3. CircleCIってどんな会社 • 世界最大規模のクラウドCI/CD(継続的インテグレーション/継続的デプロイ)サービス ◦ 22,000以上の組織の 100万以上の開発者が実行する 毎月7億以上のジョブを支えるサービス • ミッション: Manage

    change So software teams can innovate faster • 2011年設立、サンフランシスコに本社 2021/05/11 にSeries Fで1億ドルを調達 (これまでに$315Mの投資、$1.7Bの企業価値) • 600+人の社員 (米国、日本、英国、オランダ、フランス+  リモートワーク)
  4. 9 ソフトウェアはモノからサービスに ビジネスの成長速度を支えるため、ソフトウェアも成長しつづける必要がある → かつて ソフトウェアはモノだったが、これからのソフトウェアはサービス • モノの品質(企業であれば5年償却) 買った時点が一番価値が高く、競合の出現や市場の進化により価値が低下 →

    モデルチェンジやバージョンアップ 開発手法:ウォーターフォール • サービスの品質 常に最高のサービスを使い続ける → 魅力的品質を高めつづける (ペルソナ像やジャーニーを常に見直し ) 開発手法:アジャイル(要件→設計→実装→テストを小さく回す)      ウォーターフォールが進化してもアジャイルにはならない
  5. 11 継続するビジネスを支えるソフトウェア開発を標準化 プラン コード ビルド テスト リリース デプ ロイ 運用

    監視 継続的インテグレーション (CI) 継続的 デプロイ (CD) 自動化できない 非正常系は 自動化できない 自動化できる→継続的であるために自動化すべき ビジネスが継続する限り、ソフトウェアの進化は続く コード追加・修正時は 常にビルド・テスト (最後にまとめてやらな い→早く失敗すれば 早く品質が安定する) サービス停止せず常に リリース/デプロイ (失敗時にはクイックに 修正 / 前バージョンに 戻せる)しくみ 人にしかできない ことは、 細分化した上で できる人が 手を挙げてやる →誰でも見える、  参加できる状態 共有 リポジトリ上 で 常に作業 自動化できる ことは 作業手順の 定義を行い 自動実行させる →依頼しない、 抜け漏れしない 運用・監視しやすい 品質をコードに反映 (必要なデータの取得、 スケーラビリティの 確保)
  6. 14 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orb • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  7. 15 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orb • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  8. 17 CircleCI でモバイルのビルド・テストを高速化する手段 カスタムリソース 最適なパフォーマンスを発揮し、 スピードを向上するリソースを 選択できます。 (Docker, Linux, macOS,

    Windows など) カスタムキャッシュ 制御可能なキーを使用して、実行される すべてのファイルをキャッシュし、ビルドを 高速化します。 並列ジョブ 柔軟で自動化されたプロビジョニングによ り、チームは並列実行を最大限に活用 し、ワークフローが完了するまで待機する ダウンタイムを
 短縮できます。 テスト分割 複数のコンテナでテストを自動的に 
 分割し、RSpec、Cucumber、minitest、 Django、Node などの多くのテストを実行 できます
  9. 18 CircleCI でモバイルのビルド・テストを高速化する手段 カスタムリソース 最適なパフォーマンスを発揮し、 スピードを向上するリソースを 選択できます。 (Docker, Linux, macOS,

    Windows など) カスタムキャッシュ 制御可能なキーを使用して、実行される すべてのファイルをキャッシュし、ビルドを 高速化します。 並列ジョブ 柔軟で自動化されたプロビジョニングによ り、チームは並列実行を最大限に活用 し、ワークフローが完了するまで待機する ダウンタイムを
 短縮できます。 テスト分割 複数のコンテナでテストを自動的に 
 分割し、RSpec、Cucumber、minitest、 Django、Node などの多くのテストを実行 できます
  10. 26 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orbs • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  11. 27 SSH を使用したデバッグ 一番良いトラブルシューティングの方法は、ジョブの実行中に ジョブ環境にセキュアにアクセスして問題をデバッグすることで す。 ビルド環境に SSH で接続できない場合、開発者が取れる道は ひとつです。開発環境に

    CI/CD 環境を再現して、アプリケーショ ン、スタック トレース、およびシステム ログだけを頼りに問題を 正確に特定し、解決しなければなりません。 このようなトラブルシューティングでは、開発者も SRE チームも 膨大な時間を浪費することになります。
  12. 28 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orbs • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  13. 29 Config as Code > UI での設定 • 誰が何を変更したか追跡しやすい •

    Pull Request などでレビューしやすい • ブランチ毎に環境を切り替えることができる ◦ main ブランチ: Xcode 12 ◦ Xcode 13アップグレード用ブランチ: Xcode 13 ◦ UI だと手動で切り替える必要がある • DRY に記述することができる
  14. 31

  15. 36 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orbs • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  16. 37 iOS シミュレーター • macOS VM 上で iOS シミュレーターを起 動することが可能

    • XCode UITest(XCUITest)やスナップ ショットテストなど、iOS シミュレーターを用 いたテストを実行することが可能 • 毎回クリーンな状態で起動・テスト 実行ができる
  17. 38 Android エミュレーター • Android VM 上で x86 Android エミュレーターを起動することが可能

    • Espresso やスナップショットテストなど Android エミュレーターを用いたテストを 実行することが可能 • 毎回クリーンな状態で起動・テスト 実行ができる
  18. 39 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orbs • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  19. 44 Test Insights / Flaky Tests Detection • [GitHub] https://github.com/tadashi0713/circleci-demo-test-insights

    • [Insights] https://app.circleci.com/insights/github/tadashi0713/circleci-demo-test-insights
  20. 45 Test Insights / Flaky Tests Detection • [GitHub] https://github.com/tadashi0713/circleci-demo-test-insights

    • [Insights] https://app.circleci.com/insights/github/tadashi0713/circleci-demo-test-insights
  21. 46 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • SSH デバッグ • Config as

    Code(設定ファイルのコード化), Orbs • iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  22. 48 モバイル開発でCircleCIが選ばれる理由 • ビルド・テストの高速化 • Config as Code(設定ファイルのコード化), Orbs •

    iOS シミュレーター / Android エミュレーター • 管理・可視化のしやすさ(VCS連携・Insights) • 日本語・日本時間帯でのサポート
  23. 50 Android デモ • https://github.com/tadashi0713/circleci-demo-android • リソースクラス(Docker, Linux VM) •

    Orb ◦ Android Orb(Gradle キャッシュなど) ◦ Ruby Orb(fastlane インストール) • Android エミュレーターを使った Espresso テスト • Firebase App Distribution で配信 • Insights ダッシュボード、SSHデバッグ
  24. 51

  25. 52 iOS Demo • https://github.com/tadashi0713/circleci-demo-ios • macOS リソースクラス(large) • Orbs

    ◦ Ruby Orb(fastlane インストール) ◦ macOS Orb to preboot iOS Simulator • iOS シミュレーターを使った XCUITest • fastlane match & Firebase App Distribution で配信 • Insights ダッシュボード、SSH デバッグ
  26. 53

  27. 54 Flutter / React Native • Flutter ◦ https://github.com/tadashi0713/circleci_flutter_demo ◦

    Flutter Orb(SDKインストール、キャッシュなど) ◦ UIテスト、fastlane match、Firebase App Distribution 配信 • React Native ◦ https://github.com/tadashi0713/circleci-reactnative-detox-demo ◦ React Native Orb(インストール、キャッシュなど) ◦ UIテスト、Firebase App Distribution 配信
  28. 57 よくいただくご質問 • CircleCI ではシークレットを管理することができますか? • 可能です ◦ 環境変数(プロジェクト・リポジトリ毎) ◦

    コンテクスト(プロジェクト横断) ▪ コンテクスト内にあるシークレットの利用者を制限する機能 もあります(制限付きコンテクスト) ◦ 全ては HashiCorp Vault で暗号化されています
  29. 60 よくいただくご質問 • デバッグ版などのアプリを配信する機能はありますか? • CircleCI 自体にはその機能はありません。App Store(Test Flight) /

    Play Store にある配信機能や、下記サービスと 連携するのをお勧めします ◦ Firebase App Distribution ◦ DeployGate • fastlane, Gradle プラグインなどを利用して連携が可能です
  30. 61 よくいただくご質問 • fastlane match 以外の iOS コード署名は行えますか? • 技術的には可能です

    ◦ 証明書をbase64暗号化→環境変数に保存します ◦ https://m4rr.medium.com/circleci-2-0-and-the-ios-code-sig ning-df434d0086e2 ◦ 複雑になりがちなので、特殊なケースを除き fastlane match を おすすめしています ◦ CircleCI として動作保証・サポートしていないです
  31. 62 よくいただくご質問 • サポートされている Xcode バージョンはどれですか? • Xcode のアップデート頻度はどのくらいですか? •

    こちらのドキュメントを参考にしてください ◦ https://circleci.com/docs/ja/2.0/xcode-policy/ • SLA のような形では決められていませんが(Xcode/macOSの変更 に大きく依存するため)、通常ベータ版含めXcodeリリースから3営 業日以内に対応されています。
  32. 63 よくいただくご質問 • Android 環境は Docker と Linux VM どちらを

    使えばいいのですか? • Android エミュレーターを使いたい(Espresso など)場合には Linux VM をお使いください • それ以外に関しては、同じリソースクラス(medium, large)だと価格 やビルド時間はあまり変わらない印象です。 状況に合わせてお好きな方を選んでいただくと 良いと思います。
  33. 64 よくいただくご質問 • カスタマイズされた Docker イメージを利用して Android ビルドを行うことは可能ですか? • 可能です

    ◦ こちらのドキュメントを参考にしてください ▪ https://circleci.com/docs/ja/2.0/custom-images/ ◦ CircleCI では Docker レジストリを用意していないので、Docker Hub などを準備してもらう必要があります。