単純作業を簡単自動化!GitHub_Actionsの活用例紹介

    単純作業を簡単自動化!GitHub_Actionsの活用例紹介

    目次

      はじめに

      本記事では、GitHub Actionsの具体的な活用例について紹介します。
      「GitHub Actionsの名前は知っているけど、具体的に何ができるのかわからない」という方や、「GitHubでの作業を自動化したい」と考えている方の理解に役立てば幸いです。
      もしGitHub Actionsが何かわからない方はAQ TechBlogで渡邊さんが執筆したGitHub Actionsを使ったCI/CDの記事をぜひ参考にしてください。

      簡単にGitHub Actionsの紹介

      • GitHub ActionsはGitHubが提供しているサービスで、簡単に説明すると「GitHub上で手動で行う作業を自動化できるサービス」です。

      • ワークフローはリポジトリ内のYAMLファイルで定義され、簡単に編集することができます。

      • 以下はGitHub Actionsでよく使用される項目の一部です。 詳細はGitHub公式のGitHub Actionsのワークフロー構文で確認できます。

      name:ワークフローの名前を定義

      name: Label issues

      on:ワークフローのトリガーを指定

      on:
      issues:
      types:
      - reopened
      - opened

      jobs:ワークフローの実行内容を定義

      jobs:
      label_issues:
      runs-on: ubuntu-latest
      permissions:
      issues: write
      steps:
      - run: gh issue edit "$NUMBER" --add-label "$LABELS"
      env:
      GH_TOKEN: $
      GH_REPO: $
      NUMBER: $
      LABELS: triage

      活用例

      具体的なシチュエーションを基にGitHub Actionsの活用例を紹介します。

      例1:バージョン管理をGitHubで手間をかけずに行いたい

      項目 詳細
      ワークフロー名 Create Release Note
      実行タイミング releaseブランチにPull Requestがマージされたとき
      処理内容 releaseブランチにマージ後自動でリリースノートが自動作成される
      使用してみた感想 リリースの度にリリースノートを作成する手間が省けるので作業効率が向上した

      ファイル構成

      • .github/release-drafter.yml
        リリースノートのテンプレートを定義しています。
      • .github/workflows/create-release-note.yml
        リリースノートを自動生成するためのワークフローを定義しています。

      コードの説明

      実行タイミングをreleaseブランチに対してpull requestがマージされた時に指定

      pull_request:
      types:
      - closed
      branches:
      - release

      pull requestがマージされている場合のみ実行

      if: github.event.pull_request.merged == true

      リリース時の日時を取得し、それを環境変数として設定

       name: リリース日時を設定
      id: release_datetime
      run: echo "RELEASE_DATETIME=$(date -d '9 hours' +'%Y-%m-%d-%H-%M-%S')" >> $GITHUB_ENV

      release-drafter.ymlを使ってリリースタグとリリースノートを作成

      - name: リリースタグとリリースノートを作成
      env:
      GITHUB_TOKEN: $
      RELEASE_TAG: Release-$

      uses: release-drafter/release-drafter@v5
      with:
      tag: $
      name: $
      version: $
      publish: true


      ソースコード

      .github/release-drafter.yml

      name-template: 'v$RESOLVED_VERSION'
      tag-template: 'v$RESOLVED_VERSION'

      change-template: '- $TITLE @$AUTHOR (#$NUMBER)'

      change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add to disable code blocks.

      version-resolver:
      major:
      labels:
      - 'major'
      minor:
      labels:
      - 'minor'
      patch:
      labels:
      - 'patch'
      default: patch

      template: |
      ## Changes
      $CHANGES

      .github/workflows/create-release-note.yml

      name: Create Release Note

      on:
      pull_request:
      types:
      - closed
      branches:
      - release

      permissions:
      contents: read

      jobs:
      release:
      permissions:
      contents: write
      pull-requests: write
      if: github.event.pull_request.merged == true
      runs-on: ubuntu-latest
      steps:
      - name: リリース日時を設定
      id: release_datetime
      run: echo "RELEASE_DATETIME=$(date -d '9 hours' +'%Y-%m-%d-%H-%M-%S')" >> $GITHUB_ENV
      - name: リリースタグとリリースノートを作成
      env:
      GITHUB_TOKEN: $
      RELEASE_TAG: Release-$

      uses: release-drafter/release-drafter@v5
      with:
      tag: $
      name: $
      version: $
      publish: true


      ワークフロー実行結果イメージCreate Release Note実行結果

      例2:pull request作成時にBacklogに連携したい

      項目 詳細
      ワークフロー名 Comment On Backlog
      実行タイミング タイトルに「backlog-課題番号」が含まれているpull requestが作成されたとき
      処理内容 pull requestのタイトルにある番号に該当するBacklogの課題にコメントを投稿する
      使用してみた感想 pull requestを作成する度にBacklogに連携する手間が省けて作業効率が向上した

      GitHub設定

      • BACKLOG_API_KEYを設定
        1. Backlogの個人設定 > 個人設定 > APIでトークンを作成
        2. Githubリポジトリ > settings > Secrets and variables > Actions > New repository secretで以下の内容のアクセストークンを作成
          • name*: BACKLOG_API_KEY
          • Secret*: Backlogで生成したアクセストークン

      ファイル構成

      • .github/workflows/comment-on-backlog.yml
        Backlogにコメントを投稿するためのワークフローを定義しています。

      コードの説明

      実行タイミングをpull requestが作成された時に指定

      on:
      pull_request:
      types: [opened]

      環境変数に連携先のBacklogの情報を設定(要変更)

      env:
      PROJECT_KEY: "Backlogのプロジェクトキー"
      BACKLOG_DOMAIN: "Backlogアカウントのドメイン名"
      API_KEY: $

      pull requestのタイトルからBacklog課題番号とタイトルを抽出し、環境変数に設定

      - name: PRタイトルから課題番号とタイトルを抽出
      id: extract_backlog
      run: |
      BACKLOG_NUMBER=$(echo "$" | grep -oE 'backlog-[0-9]+' | sed 's/backlog-//')
      PR_TITLE=$(echo "$" | sed -E 's/backlog-[0-9]+ //')
      echo "BACKLOG_NUMBER=$BACKLOG_NUMBER" >> $GITHUB_ENV
      echo "PR_TITLE=$PR_TITLE" >> $GITHUB_ENV

      課題番号が存在する場合のみ、Backlogにpull requestの情報をコメントとして投稿

       - name: バックログにコメントを投稿
      if: env.BACKLOG_NUMBER != ''
      run: |
      PR_URL="$"
      BACKLOG_NUMBER=$
      PR_TITLE="$"
      COMMENT="[${PR_TITLE}](${PR_URL})"
      API_URL="https://$/api/v2/issues/$-${BACKLOG_NUMBER}/comments?apiKey=$"
      curl -X POST "$API_URL" \
      -H "Content-Type: application/json" \
      -d "{\"content\": \"$COMMENT\"}"


      ソースコード

      .github/workflows/comment-on-backlog.yml

      name: Comment On Backlog

      on:
      pull_request:
      types: [opened]

      env:
      PROJECT_KEY: "Backlogのプロジェクトキー"
      BACKLOG_DOMAIN: "Backlogアカウントのドメイン名"
      API_KEY: $

      jobs:
      comment-on-backlog:
      runs-on: ubuntu-latest

      steps:
      - name: リポジトリをチェックアウト
      uses: actions/checkout@v2

      - name: PRタイトルから課題番号とタイトルを抽出
      id: extract_backlog
      run: |
      BACKLOG_NUMBER=$(echo "$" | grep -oE 'backlog-[0-9]+' | sed 's/backlog-//')
      PR_TITLE=$(echo "$" | sed -E 's/backlog-[0-9]+ //')
      echo "BACKLOG_NUMBER=$BACKLOG_NUMBER" >> $GITHUB_ENV
      echo "PR_TITLE=$PR_TITLE" >> $GITHUB_ENV

      - name: バックログにコメントを投稿
      if: env.BACKLOG_NUMBER != ''
      run: |
      PR_URL="$"
      BACKLOG_NUMBER=$
      PR_TITLE="$"
      COMMENT="[${PR_TITLE}](${PR_URL})"
      API_URL="https://$/api/v2/issues/$-${BACKLOG_NUMBER}/comments?apiKey=$"
      curl -X POST "$API_URL" \
      -H "Content-Type: application/json" \
      -d "{\"content\": \"$COMMENT\"}"


      ワークフロー実行結果イメージComment On Backlog実行結果1Comment On Backlog実行結果2

      まとめ

      ここまで読んでいただきありがとうございます。
      GitHub Actionsはリポジトリの設定や利用時間によって料金が発生する可能性があるので注意は必要ですが、自由度が高く、面倒な作業を自動化させるのに効果的です。
      ぜひ皆さんもGitHub Actionsを使って作業効率を向上させましょう。

      参考

      アジアクエスト株式会社では一緒に働いていただける方を募集しています。
      興味のある方は以下のURLを御覧ください。