単純作業を簡単自動化!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
ワークフロー実行結果イメージ
例2:pull request作成時にBacklogに連携したい
項目 | 詳細 |
---|---|
ワークフロー名 | Comment On Backlog |
実行タイミング | タイトルに「backlog-課題番号」が含まれているpull requestが作成されたとき |
処理内容 | pull requestのタイトルにある番号に該当するBacklogの課題にコメントを投稿する |
使用してみた感想 | pull requestを作成する度にBacklogに連携する手間が省けて作業効率が向上した |
GitHub設定
- BACKLOG_API_KEYを設定
- Backlogの個人設定 > 個人設定 > APIでトークンを作成
- 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を使って作業効率を向上させましょう。
参考
アジアクエスト株式会社では一緒に働いていただける方を募集しています。
興味のある方は以下のURLを御覧ください。