AQ Tech Blog

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

作成者: takeshi.aoyagi|2024年09月20日

はじめに

本記事では、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


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

例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\"}"


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

まとめ

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

参考