---
title: gh-extension と aqua で作る GitHub Actions アクション
tags: 
author: [DeNA_Tech](https://docswell.com/user/DeNA_Tech)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/YE6LDW917V.jpg?width=480
description: 2025/10/23に開催されたイベント「CI/CD Test Night #8」の登壇スライドとなります。 イベント概要：https://testnight.connpass.com/event/369890/ アーカイブ動画：https://youtu.be/lBD1JADqL5k
published: October 24, 25
canonical: https://docswell.com/s/DeNA_Tech/5QXJPN-2025-10-24-164631
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/YE6LDW917V.jpg)

gh-extension と aqua で作る
GitHub Actions アクション
2025/10/23
CI/CD Test Night #8
© DeNA Co., Ltd.
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GE513MNLJ4.jpg)

自己紹介
● しらやなぎ たかずみ
● ずみっくす（@srz_zumix）
● https://github.com/srz-zumix
○ 2011年くらい〜
○ C++ Testing Framework
○ CI/CD 関係とか
○ 最近は GitHub Actions
© DeNA Co., Ltd.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/9721Z953ER.jpg)

作った GitHub Actions のアクション
gh repo list --topic actions --visibility=public
© DeNA Co., Ltd.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/DJYZR4K8EM.jpg)

よく使ってるアクション
● post-run-action
○ Post 処理で run 相当の処理が可能なアクション
○ Composite Action で Post 処理するのに便利
● retry-run-action
○ リトライ可能な run アクション
● workspace-git-config-action
○ includeIf でパス限定の git config をセットするアクション
○ Self-hosted runner 向けを想定
© DeNA Co., Ltd.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V7N3DYR978.jpg)

よく使ってるアクション
● kamidana-action
○ Jinja2 template アクション
○ Slack 通知の payload 作成などに利用
● gh-pr-ls-files
○ checkout なしで PR のファイルリスト取得
○ Added/Deleted などでフィルター可能
● labeler-action
○ 今日紹介するアクション
© DeNA Co., Ltd.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YJ99GPM3J3.jpg)

labeler-action
● https://github.com/actions/labeler と同等のアクション
○ 設定ファイルのパス・ブランチ条件で自動でラベル付け
● なぜ同じようなアクションを自作したのか？
○ 過去の PR に対してラベル付けしようとしたところ
head-branch/base-branch 条件が pull_request イベント時
にしか使えないことが発覚
○ バグ修正ついでに機能拡張して個人的に使いやすいものを作成
https://github.com/actions/labeler/pull/873 修正PRは出してはいるがマージされてないので自作した
© DeNA Co., Ltd.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GJ89VDLLED.jpg)

labeler-action の構成
● gh-extension + aqua
● composite action
○ action.yml
● aqua でインストール
● アクションはツール
の呼び出しだけする
steps:
- uses: aquaproj/aqua-installer@ea51… # v4.0.3
with:
working_directory: ${{ github.action_path }}
- name: gh-labeler-kit path
id: gh-labeler-kit
shell: bash
env:
AQUA_POLICY_CONFIG: aqua-policy.yaml
run: |
gh-label-kit --version
echo &quot;path=$(aqua which gh-label-kit)&quot;&gt;&gt;&quot;${GITHUB_OUTPUT}&quot;
working-directory: ${{ github.action_path }}
- name: Labeler
shell: bash
run: |
&quot;${GH_LABELER_KIT}&quot; labeler …
※ スライド掲載用に大幅に省略しています
© DeNA Co., Ltd.
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJLW5MLQ7R.jpg)

gh-extension
© DeNA Co., Ltd.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/47M93Y1KJW.jpg)

gh-extension とは？
● GitHub CLI（gh）の拡張機能
● 誰でも作成、使用ができる gh のカスタムコマンド
○ GitHub CLI 拡張機能の使用
○ GitHub CLI 拡張機能の作成
● 個人的に使っている拡張機能
○ https://github.com/seachicken/gh-poi
○ https://github.com/k1LoW/gh-do
○ https://github.com/k1LoW/gh-triage
© DeNA Co., Ltd.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/P7RGQ9L6J9.jpg)

作った gh-extension
gh repo list --topic gh-extension --visibility=public
© DeNA Co., Ltd.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PJXX5QWDJX.jpg)

gh-extension として labeler 機能を作成
● https://github.com/srz-zumix/gh-label-kit
○ ラベル関係の API を扱う gh-extension
○ Organization のデフォルトラベルを扱いたくて作り始めた
■
API なくて一旦あきらめ中
■
copy / sync コマンドで代用
● gh label-kit labeler サブコマンドで actions/labeler 機能を実装
○ gh-extension を選択した理由は当初はあまりなかった
○ label-kit だしこれに実装しようくらいの判断で決めた
© DeNA Co., Ltd.
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/3JKW69VDJD.jpg)

gh-extension の公開
● gh-extension の実体は gh-label-kit のように gh- で始まる
スクリプト or プリコンパイル済み実行ファイル
● gh extension install でインストール
○ スクリプトの場合は内部的に checkout
■
--pin 指定がない場合はデフォルトブランチ
○ プリコンパイルの場合は Releases からダウンロード
■
© DeNA Co., Ltd.
–-pin 指定がない場合は latest
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE316WMP75.jpg)

gh-extension の公開
● スクリプトの場合は push するだけ
● プリコンパイルの場合はリリースに OS / Arch ごとの
attachments をアップロードする
○ https://github.com/cli/gh-extension-precompile
○ プリコンパイル用アクションで簡単にリリース可能
● gh-label-kit は Go のプリコンパイル済みとして開発
○ どの方法でも良いが、以降この資料は gh-label-kit の構成で説明
© DeNA Co., Ltd.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8EDXVK63JG.jpg)

この時点でのアクション開発の想定
● ランナー環境には gh がプリインストールされている
○ Self-hosted runner だとそうじゃないかもしれないがレアケース
● gh extension install で簡単にインストールできる
● あとは拡張機能のラッパーとして action.yml 用意すれば OK
簡単！
© DeNA Co., Ltd.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V7PPVKYP78.jpg)

aqua
© DeNA Co., Ltd.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/2JV2ZVGVJQ.jpg)

aqua とは？
● https://github.com/aquaproj/aqua より引用
○ Declarative CLI Version Manager written in Go.
© DeNA Co., Ltd.
■
Switch tool versions per project
■
Unify tool versions and how to install in your teams and CI
■
Continuous update by Renovate
■
Lazy Install
■
Ecosystem by Registry
■
Secure
■
Easy to use
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5EGR4L81JL.jpg)

aqua を使い始めた理由
● gh-extension のインストールパスが指定できなかったため
○ 常駐型の Self-hosted runner 運用で困る
○ なんで困るのかは過去の発表を参照してください
■
GitHub Actions Self-hosted runner を 3年間運用したこれまでとこれ
から 〜 分散するワークフローと管理の課題 | ドクセル
■
GitHub Actions x Unity プロジェクトの裏側 | ドクセル
● aqua は AQUA_ROOT_DIR でパス指定可能
● aqua 自体が便利だということを知っていた
© DeNA Co., Ltd.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4JQVGY9N7P.jpg)

aqua でインストール
● gh-extension リポジトリをローカルレジストリとして登録
packages:
- type: github_release
repo_owner: srz-zumix
repo_name: gh-label-kit
description: gh extension of github label api
asset: &quot;{{.OS}}-{{.Arch}}&quot;
format: raw
© DeNA Co., Ltd.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/K74M5WX3J1.jpg)

aqua でインストール
● ポリシーでローカルレジストリを許可
registries:
- type: standard
ref: semver(&quot;&gt;= 3.0.0&quot;)
- name: local
type: local
path: aqua-registry.yaml
packages:
- registry: standard
- registry: local
© DeNA Co., Ltd.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/LJ18WYNZEG.jpg)

aqua でインストール
● ローカルレジストリを参照してインストール
registries:
- type: standard
ref: v4.427.0 # renovate: depName=aquaproj/aqua-registry
- name: local
type: local
path: aqua-registry.yaml
packages:
- name: suzuki-shunsuke/pinact@v3.4.2
tags:
- dev
- name: srz-zumix/gh-label-kit@v0.8.1
registry: local
tags:
- dev
- action
© DeNA Co., Ltd.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GJWZ6G46J2.jpg)

アクションでポリシーを適用
● アクションでポリシーを適用するには
AQUA_POLICY_CONFIG 環境変数でパス指定する必要がある
● 必要なのは実際にインストールするとき
- name: gh-labeler-kit path
id: gh-labeler-kit
shell: bash
env:
AQUA_POLICY_CONFIG: aqua-policy.yaml
run: |
gh-label-kit --version
echo &quot;path=$(aqua which gh-label-kit)&quot;&gt;&gt;&quot;${GITHUB_OUTPUT}&quot;
© DeNA Co., Ltd.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4EZ1YL2R73.jpg)

なぜ AQUA_POLICY_CONFIG が必要なのか
● アクションのセットアップ挙動
○ ${{ github.action_path }} にリポジトリの内容が展開されます
○ git clone ではなく git archive が展開される
○ .git ディレクトリがなく git ワークスペースではない
● aqua は .git ディレクトリがないと規定のポリシーファイルを
読み込まない
© DeNA Co., Ltd.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/Y76LDWV1JV.jpg)

ちなみに
● git archive されるので .gitattributes の export-ignore が効く
○ export-ignore 指定すると archive に含まれない
○ つまり、アクション実行に必要なファイルのみにできる
○ ブログズミ: 【GitHub Actions】export-ignore でアクションのサ
イズを小さくする小技
○ export-subst なんてのもある
■
uses: srz-zumix/labeler-action@$Format:%H$
■
アクションのコミットハッシュを動的に展開できたけど何に使える
のかはわからん
© DeNA Co., Ltd.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/G7513MDLE4.jpg)

完成
して気付いたことが・・・
© DeNA Co., Ltd.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/9J21Z9837R.jpg)

gh-extension + aqua のいいところ
© DeNA Co., Ltd.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/DEYZR4687M.jpg)

Composite Action のメリット
● node 非依存
● 定期的にやってくる node バージョン更新
○ https://github.blog/changelog/2025-09-19-deprecation-of-node20-on-github-actions-runners/
○ https://github.blog/changelog/2024-03-06-github-actions-all-act
ions-will-run-on-node20-instead-of-node16-by-default/
© DeNA Co., Ltd.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/VJN3DYZ9J8.jpg)

gh-extension のメリット
● ローカルで同じことができる
○ action.yml と同じことをやりたいときが割とある
○ Jenkins のときも処理はスクリプトに書いて、ジョブは呼び出す
だけにしろと言われて育てられました
○ aqua でもその便利さを実感している
■
Unify tool versions and how to install in your teams and CI
● デバッグもしやすい
© DeNA Co., Ltd.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/YE99GPZ3E3.jpg)

gh-extension のメリット
● AI Ready である
○ CLI で実行できるのは AI 利活用の上でもメリットがある
○ 特に Git/GitHub に関係のある機能であれば gh-extension として
実装するメリットがある
● gh extension install で簡単に使える
○ aqua でも良いが gh extension install だけで使えるのは楽
© DeNA Co., Ltd.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/GE89VD1L7D.jpg)

gh-extension + aqua のメリット
● 手間をかけずにセキュアになる
○ Attestations に簡単に対応できる
■
アーティファクトの構成証明を使用して構築の実績を確立する GitHub Docs
○ ついでに Immutable Releases も有効にしておきましょう
■
© DeNA Co., Ltd.
Immutable releases - GitHub Docs
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LELW5MQQJR.jpg)

gh-extension + aqua のメリット
● gh-extension 側の対応
© DeNA Co., Ltd.
permissions:
contents: write
id-token: write
attestations: write
env:
RELEASE_TAG: ${{ inputs.ref || github.ref }}
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: cli/gh-extension-precompile@9e2237c… # v2.1.0
with:
generate_attestations: true
go_version_file: go.mod
release_tag: ${{ env.RELEASE_TAG }}
- if: inputs.publish
run: gh release edit --draft=false &quot;${RELEASE_TAG}&quot;
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4JM936KKEW.jpg)

gh-extension + aqua のメリット
● aqua 側の対応
packages:
- type: github_release
repo_owner: srz-zumix
repo_name: gh-label-kit
description: gh extension of github label api
asset: &quot;{{.OS}}-{{.Arch}}&quot;
format: raw
github_artifact_attestations:
signer_workflow: srz-zumix/gh-label-kit/.github/workflows/release.yml
© DeNA Co., Ltd.
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/PJRGQPX6E9.jpg)

aqua のメリット
● aqua がそもそも便利
● アクションで gh-extension をインストールするだけでなく、
gh-extension を開発する上でのツール管理として使える
© DeNA Co., Ltd.
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/PEXX536DEX.jpg)

まとめ
● ローカルでも実行可能なアクションを開発するのがオススメ
● gh-extension + aqua はその構成としてオススメ
© DeNA Co., Ltd.
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/3EKW6Y1DED.jpg)

© DeNA Co., Ltd.
34


