単純作業を簡単自動化!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を御覧ください。