モバイル開発におけるRuby: Fastlane、CI/CD、自動化

著者: IT Sectr 公開日: 2026-02-11 読了時間: 8 分

Ruby はエレガントな構文を持つ動的インタープリタ言語で、Ruby on Railsフレームワークで知られています。モバイル開発では、Rubyは主にFastlaneを通じて使用されます。これはiOSおよびAndroidアプリケーションのビルド、テスト、デプロイを自動化する標準ツールです。Fastlane公式ドキュメントによると、このツールは世界中の10万以上のプロジェクトで使用されています。

重要なポイント

  • Ruby — ビルド自動化のためにFastlaneを通じてモバイル開発で使用される動的言語
  • Fastlane — iOSおよびAndroid開発におけるCI/CDのデファクトスタンダード、Rubyで記述
  • Fastfile — ビルドプロセスを記述するRuby風DSLを使用した設定ファイル
  • MatchとDeliver — 証明書管理とApp Store公開のためのFastlaneアクション
  • Ruby Gems — Fastlaneをプラグインで拡張できるパッケージマネージャー

Rubyとは?

Ruby は1995年にまつもとゆきひろによって作成された動的インタープリタ型オープンソース言語です。Rubyの核となる原則は「最適なシンプルさ」(最小驚愕の原則)です。この言語はブロック(クロージャ)、純粋なオブジェクト指向アプローチ(数値を含むすべてがオブジェクト)、および強力なメタプログラミングシステムで知られています。

Rubyはバージョン3.1からJITコンパイルを備えたYARV(Yet Another Ruby VM)インタープリタ上で動作します。現在のバージョンRuby 3.4(2025)には、デコレータ、改善されたPrismパーサー、RBSによる実験的な型サポートが含まれています。RubyGems — パッケージマネージャー — には20万以上のgemが含まれています。

Ruby on RailsはRubyで構築された最も有名なWebフレームワークですが、モバイル開発ではRubyは異なる方法で使用されます。その主なニッチはFastlaneです。コード署名からストア公開まで、モバイルアプリのライフサイクルのすべての段階を自動化するRubyスクリプトとgemのエコシステムです。

FastlaneのためのRuby構文の基礎

Fastlaneで作業するには、メソッド、do-endブロック、シンボル(:symbol)、ハッシュ構文{ key: value }などのRubyの基本的な理解のみが必要です。Pythonとは異なり、Rubyはインデントではなくendを使用してブロックを閉じます。メソッドは括弧なしで呼び出すことができます — これはFastlane DSLで積極的に使用されています。

ruby
# Fastlaneで使用される基本的なRuby構文
def download_assets(version, platform: "ios")
  paths = {
    ios: "ios/Assets.car",
    android: "android/app/src/main/assets"
  }
  url = "https://cdn.example.com/assets/#{version}/#{paths[platform.to_sym]}"
  puts "Downloading from: #{url}"

  unless File.exist?("temp/assets")
    Dir.mkdir("temp/assets")
  end
  result = system("curl -o temp/assets.zip #{url}")
  raise "Download failed" unless result
end

download_assets("1.2.3", platform: "android")

この例では、download_assetsメソッドはversion引数とオプションの名前付きパラメータplatform(デフォルトは"ios")を受け取ります。#{...}による文字列補間は、値を直接文字列に埋め込みます。unlessはifの反対で、条件が偽の場合にコードを実行します。

Fastlane: Rubyによるモバイルビルド自動化

Fastlane はRubyで書かれたオープンソースツールです。gem install fastlaneでインストールし、モバイル開発者の最もルーティンなタスク(スクリーンショット作成、コード署名、TestFlightやGoogle Play Consoleへの公開)を自動化する一連のコマンドを提供します。

Fastlaneはツールで構成されています:sigh(証明書管理)、match(チーム内の証明書同期)、gym(iOSビルド)、gradle(Androidビルド)、deliver(iOS公開)、supply(Android公開)、snapshot(スクリーンショット)、scan(テスト)。すべてのツールは単一のFastfileからアクセスできます。

大規模プロジェクトでは、Fastlaneは単一パイプラインで50以上のアクションを処理します:バージョンインクリメント、CDNからのアセットダウンロード、ビルド、署名、App Store Connectへのアップロード、Slack通知の送信。パイプライン全体が単一のコマンドで実行されます:fastlane release。

Fastfile: ビルドパイプラインの設定

Fastfile はアクション(レーン)のシーケンスを記述するRuby風DSLファイルです。各レーンは個別のタスクです:beta(テストビルド)、release、screenshots。レーンは渡されたパラメータで他のレーンを呼び出すことができます。

ruby
# Fastfile — iOSアプリビルドパイプライン設定
fastlane_version "2.220.0"

default_platform :ios

platform :ios do
  desc "TestFlightビルドの構築とデプロイ"
  lane :beta do |options|
    increment_build_number(
      build_number: options[:build]
    )
    match(type: :appstore)
    gym(
      scheme: "MyApp",
      export_method: "app-store",
      configuration: "Release"
    )
    upload_to_testflight(
      app_identifier: "com.example.myapp"
    )
    slack(
      message: "Build #{options[:build]} がTestFlightにアップロードされました"
    )
  end
end

betaレーンは順次実行します:ビルド番号のインクリメント(increment_build_number)、証明書の同期(match)、アーカイブのビルド(gym)、TestFlightへのアップロード(upload_to_testflight)、Slack通知の送信。:buildパラメータは名前付き引数としてレーンに渡されます。

FastfileでのAndroid設定

Fastlaneは単一のFastfileで両方のプラットフォームをサポートします。Androidの場合は、platform :android内でgradle、supply、google_play_track_version_codesアクションとともにレーンを使用します。

ruby
platform :android do
  desc "APKのビルドとGoogle Play Internal Testingへの公開"
  lane :beta do
    gradle(
      task: "assemble",
      build_type: "Release",
      flavor: "Production"
    )
    supply(
      track: "internal",
      apk_paths: ["app/build/outputs/apk/release/app-release.apk"]
    )
  end
end

iOSおよびAndroid向け主要Fastlaneアクション

Fastlane には200以上の組み込みアクションが含まれています。以下はモバイル開発にとって最も重要なもので、カテゴリ別に整理されています。

アクションプラットフォーム目的
matchiOSGit経由で証明書とプロビジョニングプロファイルを同期
gymiOS.appおよび.ipaアーカイブをビルド
scaniOSシミュレーターでUIテストを実行
snapshotiOS異なるデバイスでの自動スクリーンショット生成
deliveriOSビルド、スクリーンショット、メタデータをApp Store Connectにアップロード
pilotiOSTestFlight管理:ビルドのアップロード、テスター追加
gradleAndroidGradleタスクを実行:assemble、test、bundle
supplyAndroidAPK/AABとメタデータをGoogle Play Consoleにアップロード
screengrabAndroidGoogle Play向け自動スクリーンショット
firebase_app_distribution両方Firebase App Distributionにビルドをアップロード

Match: 安全な証明書管理

match は開発者間でiOS証明書とプロビジョニングプロファイルを同期するためのFastlane gemです。すべての秘密情報は暗号化されたGitリポジトリまたはS3に保存されます。Matchは証明書がない場合は自動的に生成し、有効期限が切れたら更新します。

ruby
# 新規プロジェクトのmatch初期化
$ fastlane match init

# App Store証明書の作成と同期
$ fastlane match appstore

# チームのDevelopment証明書の作成
$ fastlane match development

# 有効期限切れ時の全証明書の更新
$ fastlane match --force

Matchは開発者だけが知るパスフレーズで秘密鍵を保存します。各開発者は証明書リポジトリをクローンし、matchを実行して現在のプロファイルをインストールします。Appleの証明書の有効期間は1年で、matchが自動的に更新します。

FastlaneとCI/CDシステムの統合

Fastlane は任意のCI/CDプラットフォームと統合します:GitHub Actions、GitLab CI、CircleCI、Bitrise、Jenkins、Xcode Cloud(xcode-build経由)。FastlaneはCI上でfastlane <lane_name>を使用して実行され、いずれかのステップが失敗するとエラーコードを返します。

GitHub Actionsの設定には、Ruby、fastlaneのインストール、bundle exec fastlaneによるレーンの実行が含まれます。iOSビルドにはmacOSランナーが必要です。Androidビルドはより安価なubuntu-latestを使用できます。

yaml
# .github/workflows/deploy.yml — Fastlaneを使用したCI/CD
name: Deploy Mobile App
on:
  push:
    branches: [main]

jobs:
  ios-deploy:
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: "3.3"
      - run: bundle install
      - run: bundle exec fastlane beta
      - env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}

ワークフローはmainへのプッシュ時に実行されます。macOSランナーはFastfileからbundle exec fastlane betaを実行します。MATCH_PASSWORDは証明書の復号化のためにGitHub Secretsを介して渡されます。レーンが完了すると、Slackアクションが通知を送信します。

Ruby GemsとFastlaneプラグイン

RubyGems はRubyのパッケージマネージャーです。Fastlaneはプラグイン(新しいアクションを追加するgem)を通じて拡張されます。fastlane-plugin-versioningプラグインはバージョンを管理し、fastlane-plugin-firebase_app_distributionはビルドをFirebaseにアップロードします。GitHubには500以上のFastlaneプラグインがあります。

プロジェクトルートのGemfileは、再現可能なビルドのためにすべての依存関係のバージョンを固定します。bundle installはGemfile.lockからgemをインストールします。モバイル開発に不可欠なgemには、fastlane、cocoapods(iOS依存関係)、xcodeproj(.xcodeproj操作)が含まれます。

ruby
# モバイルプロジェクトのGemfile
source "https://rubygems.org"

gem "fastlane", "~> 2.220"

plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

Fastlane vs 代替ツール: アプローチの比較

Fastlane は唯一の自動化ツールではありません。モバイルチームにとって重要な基準に基づいて、主要な代替ツールと比較してみましょう。

基準Fastlane (Ruby)Bitrise (Web)Xcode Cloud (Apple)GitHub Actions (YAML)
柔軟性最大(コード)中(ステップ)低(制限あり)
iOS完全サポート完全完全(組み込み)セルフホスト型macOS経由
Android完全サポート完全なし完全
証明書(match)組み込みCode Signing経由自動fastlane経由
ローカル実行はいいいえ(CIのみ)いいえact経由
プラグイン500以上200以上の統合なし20,000以上のアクション

Fastlaneは複雑なパイプラインに対して最も柔軟なツールであり続けています。BitriseはRuby開発者がいないチームに便利です。Xcode CloudはシンプルなiOSプロジェクトに適しています。GitHub Actionsはチームが既にGitHubを使用している場合に最適です。

よくある質問

KotlinとSwiftがあるのに、なぜモバイル開発でRubyを使うのですか?

Ruby はモバイルアプリケーションを記述するためではなく、Fastlaneを通じてビルド、テスト、デプロイのプロセスを自動化するために使用されます。FastlaneはiOSおよびAndroid開発におけるCI/CDのデファクトスタンダードです。

FastlaneはmacOSだけでしか動作しませんか?

Fastlane はmacOS、Linux、Windowsで動作しますが、iOSビルドにはXcodeとmacOSが必要です。Androidビルドは任意のプラットフォームで実行できます。開発者はローカルでmacOSを使用し、CIではiOSにmacOS、AndroidにLinuxを使用します。

Fastlaneを使うにはRubyを学ぶ必要がありますか?

Fastlaneで作業するには、Ruby の基本的な理解で十分です。FastlaneはFastfileでRuby風DSLを使用します。一般的なタスクには、gem、do-endブロック、基本的な構文の知識で十分です。Rubyの深い知識は必要ありません。

Fastlaneにはどのような代替手段がありますか?

代替手段:Gradle(Android、組み込み)、Xcode Cloud(Apple)、Bitrise(Webインターフェース)、GitHub Actions(YAML)。Fastlaneはアクションとプラグインの豊富なエコシステムにより、最も柔軟なツールであり続けています。

Fastlaneは大規模チームに適していますか?

はい、Fastlane は大企業でも使用されています。すべてのアクションと設定ファイルはリポジトリでバージョン管理され、matchはリポジトリまたはS3での証明書の安全な保存を保証します。

まとめ

  • Ruby — ビルド自動化のためにFastlaneエコシステムを通じてモバイル開発で使用される動的言語
  • Fastlane — iOSおよびAndroid向けCI/CD標準:200以上のアクション、500以上のプラグイン、10万以上のプロジェクト
  • Fastfile — 異なるビルドシナリオのためのレーン(beta、release、screenshots)を持つRuby風DSL
  • Match は開発者間のiOS証明書とプロビジョニングプロファイルの同期問題を解決
  • DeliverとSupply — メタデータとスクリーンショットを含むApp StoreとGoogle Playへの公開アクション
  • CI/CD統合 — FastlaneはGitHub Actions、GitLab CI、CircleCI、Bitriseで動作
  • 柔軟性 — Fastlaneはプログラム可能なRubyパイプラインによりBitriseとXcode Cloudを凌駕

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください