Android
 Computer >> コンピューター >  >> システム >> Android

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

私たちの日常には、毎日こなさなければならない反復作業が数多くあります。こうした作業は、退屈で難しく、単調に感じられることも少なくありません。

しかし、日々のタスクにひたすら苦労する代わりに、それらを誰か、あるいは何かに委任すればどうでしょうか。自分の時間を自由に使えるようになり、リラックスする余裕も生まれます。

Androidアプリを開発したことがある方なら、次のようなタスクがいかに面倒かを実感しているはずです。

  • テストの実行
  • 新しいコードをマージする際に、アプリが正しくコンパイルされることの確認
  • アプリのビルドと公開

では、これらのタスクは誰に任せるべきでしょうか?同僚に頼む?それでは同僚が別の誰かに回すだけになり、誰の時間も節約できません。しかも、同僚に迷惑をかけたくはないものです。そこで解決策となるのが——

GitHub Actionsです。👐

GitHub Actionsとは?

GitHub Actionsとは、リポジトリ内で何らかの出来事が発生した際にトリガーできるコマンド群のことです。その本質は設定ファイルであり、「何を」「いつ」実行するかを記述したコマンドのリストが含まれています。

この設定ファイルはYAML形式(.yml)で記述され、以下のような例になります。

name: My GitHub Action

on: pull_request

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1

それでは、上記の例を分解してみましょう。

  1. アクションに名前を付けます(My GitHub Action)【任意
  2. このアクションをいつ実行するかを指定します(プルリクエストがオープンされたとき)
  3. アクションがトリガーされた後に実行されるタスク(jobs)のリストを開始します
  4. 最初のタスクはbuildアクションです
  5. runs-onコマンドは、このジョブを実行するランナー(仮想サーバー)をGitHubに伝えます。Windows/Mac/Linuxから選択できます
  6. 各ジョブには複数のフェーズを持たせることができ、stepsキーワードでグループ化します
  7. usesキーワードは、スクリプトにどのアクションを実行するかを指示します

これは非常に短い例で、GitHub Actionsの全機能を網羅しているわけではありませんが、設定ファイルの構造を垣間見るには十分でしょう。

以降のセクションでは、開発サイクルを効率的かつ効果的に保つためのアクションを作成していきます。

なお、すべてのGitHub Actionsファイルは、プロジェクトのメインフォルダ配下にある.github/workflowsというパスに配置する必要があります。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

プルリクエスト用のGitHub Actionを作成する方法

個人プロジェクトでもチーム開発でも、アプリケーションの安定性を確保することは極めて重要です。したがって、プルリクエストをマージしようとする際には、アプリが正しくコンパイルされ、すべてのテストが通過していることを確認するのが理にかなっています。

先ほどの例では、リポジトリのコードをチェックアウトする方法を示しました。今回のアクションでは、さらに以下のステップを追加します。

  1. JDKバージョンのセットアップ
  2. 仮想環境のパーミッション変更
  3. テストの実行(存在する場合)
  4. アプリケーションのビルド
name: Android Build

on: pull_request

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1

      - name: Set Up JDK              # 1
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Change wrapper permissions  # 2
        run: chmod +x ./gradlew

      - name: Run Tests                   # 3
        run: ./gradlew test

      - name: Build Project               # 4
        run: ./gradlew assemble

ご覧のとおり、各ステップにはそれぞれ固有のプロパティや属性が設定されています。

すべてを詳しく説明はしませんが、公式ドキュメントで各自確認できます。ほとんどのステップに共通するのがrunキーワードで、この属性は実行するコマンドを指定します。

✋ 2番目のステップが必要なのは、仮想環境でGradleコマンドを実行できるようにするためです。これがないとコマンドを実行できません。

アプリ公開用のGitHub Actionを作成する方法

アプリを初めて公開してしまえば、再公開はある種の雑用のようなものになります。

バージョン番号を上げ、APKをビルドし、Google Play Console経由で提出するなど、地味な作業の連続です。

このプロセスも、別のGitHub Actionで自動化できます。ただし、このアクションは前述のものより少し複雑で、GitHub Secretsを使用する必要があります。

簡単に言うと、GitHub Secretsとは、機密性の高い情報をリポジトリの環境変数として保存する仕組みです。今回は以下の理由で必要になります。

  1. アプリに署名する必要がある
  2. ビルド済みアプリをGoogle Playストアへ提出する権限を、このアクションに与える必要がある

まず、GitHub Secretsの作成方法を見てみましょう。

  • リポジトリのメインページでSettingsタブをクリックします
GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】
  • 左側のメニューに「Secrets」という項目があります
GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】
  • シークレットを作成するには、New repository secretボタンを押します
GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

準備が整ったところで、アプリを公開するためのスクリプトを見てみましょう。

name: Android Publish

on:
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1

      - name: Set Up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Change wrapper permissions
        run: chmod +x ./gradlew

      - name: Run Tests
        run: ./gradlew test

      - name: Build Project
        run: ./gradlew build

      - name: Build Release AAB      # 1
        run: ./gradlew bundleRelease

      - name: Sign AAB               # 2
        uses: r0adkll/sign-android-release@v1
        with:
          releaseDirectory: app/build/outputs/bundle/release
          signingKeyBase64: ${{ secrets.SIGN_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.STORE_KEY_PASSWORD }}
          keyPassword: ${{ secrets.KEY_PASSWORD }}

      - name: Deploy to Play Store   # 3
        uses: r0adkll/upload-google-play@v1
        with:
          serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT}}
          packageName: com.tomerpacific.laundry
          releaseFiles: app/build/outputs/bundle/release/app-release.aab
          track: production

お気づきかもしれませんが、このアクションはworkflow_dispatchで実行されるようになっています。これは何を意味するのでしょうか?基本的に、GitHub上から手動でこのアクションをトリガーできるようにするものです。

もちろん、mainブランチへのpush時に実行するよう設定を変更しても構いません。

上記スニペットの「1」とマークされたステップで、アプリの.aabファイルをビルドします。次に、Android Studio内でビルドする場合と同様に、この.aabファイルに署名する必要があります。

ここで初めてGitHub Secretsが登場します。以下のシークレットを作成しましょう。

  • 署名キー(secrets.SIGN_KEY)
  • キーエイリアス(secrets.ALIAS)
  • ストアキーのパスワード(secrets.STORE_KEY_PASSWORD)
  • キーのパスワード(secrets.KEY_PASSWORD)

.aabファイルに署名できたら、Google Playストアへデプロイできます。このステップではもう少し作業が必要です。GitHub Actionに対して、Google Playでアプリをデプロイする権限を付与しなければならないからです。では、どうやって行うのか?答えはサービスアカウント(Service Account)です。

サービスアカウントの作成方法

サービスアカウントとは、あなたが作成するエンティティであり、やり取りするサービスやアプリケーションに対して、あなたの代理として動作していることを伝えるものです。

今回のケースでは、GitHub ActionがGoogle Playストアとやり取りし、アプリの新バージョンをアップロードできるようにします。

サービスアカウントを作成するには、Google Cloud Consoleにアクセスしてください。アカウントをお持ちでない場合は、先に作成しておきましょう。メインページの左側メニューに「Service Accounts(サービスアカウント)」という項目があります。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

クリックすると、ウィンドウ右側に既存のサービスアカウント一覧が表示されます。

新しいアカウントを作成したいので、ウィンドウ上部にある作成用ボタンを押します。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

開いたウィンドウで、サービスの名前を入力します。説明も追加できます。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

ここで入力した名前が、このサービスアカウントの一意の識別子となります。

次のステップでは、このサービスアカウントにロールを割り当てるよう求められます。「Select A Role」ドロップダウンから「Basic → Editor」を選択してください。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

最後のステップでは、「Grant users access to this service account」セクションの両方の欄にあなたのメールアドレスを入力します。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

完了ボタンを押したら、このサービスアカウント用のキーを作成する必要があります。このキーを使って、アクションがGoogle Playに対して自身を認証します。

キーを作成するには、サービスアカウントのメイン画面で「Actions」ラベル下の縦三点リーダーをクリックし、表示されたメニューから「Manage keys(鍵を管理)」を選択します。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

このウィンドウで「New Key」ボタンを選択し、表示されたメニューから「Create new key」を選んでキーを作成します。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

次に、新しいキーの形式を選択できます。デフォルトはJSONなので、そのまま選択された状態にして「Create」をクリックしましょう。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

操作が完了すると、ファイルがコンピュータにダウンロードされます。このファイルにはサービスアカウントに関するすべてのデータが含まれており、再ダウンロードはできないため、必ず保管してください。

このファイルの内容を使って、GitHubシークレット(secrets.SERVICE_ACCOUNT)を作成します。

最後に、Google Play側にもこのサービスアカウントを認識させる必要があります。そのためには、Google Play Consoleにログインし、「Setup → API Access」へ移動します。

ページを下にスクロールすると「Service Accounts」というセクションがあります。先ほど作成したサービスアカウントが表示されているはずです。「Grant Access」リンクをクリックしてください。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

開いた設定画面で「App permissions」へ移動し、このサービスアカウントがやり取りするアプリケーションを選択します。

「Account permissions」では、「releases」セクションの項目をすべてチェックします。その他の設定項目もよく確認し、チェックを残すか外すかを自分で判断することを強くおすすめします。

設定が完了したら、右下にある「Invite user」ボタンをクリックします。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

招待が送信されれば、ストアへの公開アクションを実行できるようになります。

GitHubでアクションを監視する方法

リポジトリに定義されているアクションを確認するには、「Actions」タブをクリックします。このタブには、定義済みのワークフローと、すでに実行されたワークフローの一覧が表示されます。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

左側には定義済みのアクション一覧が、右側には実行履歴が表示されます。特定のアクションを詳しく見たい場合は、クリックするだけでOKです。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

アクションがworkflow_dispatchで実行されるように定義されている場合は、手動実行用のボタンが表示されます(上の画像参照)。

特定のワークフローの実行結果を見たい場合も、Workflowsのメインページから該当する実行をクリックすれば確認できます。アクションの実行に失敗した場合は、ここで原因を調査しましょう。

最初のアクションは、プルリクエストがオープンされたときにトリガーされる設定になっています。正しく動作していれば、次のように表示されるはずです。

GitHub ActionsでAndroidアプリ開発を自動化する方法【CI/CDパイプライン構築ガイド】

以上で完成です!

まとめ

長い道のりでしたが、アプリケーション向けのCI/CD(継続的インテグレーション・継続的デリバリー)パイプラインを構築するために必要な要素をすべて解説しました。

GitHub Actionsの実際の設定例を見てみたい方は、筆者のリポジトリを参考にしてみてください。TomerPacific/LaundrySymbolsでは、洗濯表示シンボルをKotlinで解説するアプリのActions設定を確認できます。

GitHub Actionsについてさらに詳しく知りたい方は、GitHub Actions公式ドキュメントを参照してください。CI/CDをはじめ、あらゆるジョブを実行するアクションを発見・作成・共有し、完全にカスタマイズされたワークフローを組み合わせることができます。

  1. IFTTTでAndroidスマホを自動化する方法!知っておきたい便利アプレット7選

    IFTTTは「If This Then That(もし〜なら、〜する)」の略称です。ウェブベースのサービスで、条件文を使ってさまざまなサービス同士を連携させることができ、サービス名もここに由来しています。こうした連携によって作られるものは「アプレット(Applet)」と呼ばれ、非常に強力な機能を実現できます。 IFTTTはウェブサービスですが、Androidアプリも提供されており、スマートホームサービスとの統合にも対応しています。これにより、数多くの機能を文字通り手のひらの中に収めることが可能になりました。もちろん自分でアプレットを作成することもできますが、本記事ではAndroidユーザーに

  2. AndroidにMicrosoft Edgeをインストールして使いこなす方法

    Microsoftの「Edge」は、標準ブラウザとして快適に使える機能が満載です。すでにサポートが終了したInternet Explorerとは比べものにならないほど完成度の高いブラウザです。Edgeがお気に入りの方なら、スマートフォンでも同じ体験を楽しめるようにするのがおすすめです。この記事では、AndroidにEdgeブラウザをインストールする手順と、その後の便利な使い方について詳しく解説します。AndroidへのEdgeのインストール手順Android版Edgeは、GoogleやFacebook、Microsoftなどが共同開発したブラウザエンジン「Blink」をベースにしており、PC版