あけまして、おめでとうございます。神社のおみくじで、人生はじめて大吉を引きました、silverbirder です。
普段の業務で、Figma のデザイントークンや API のスキーマファイル、i18n のメッセージファイルなどを、フロントエンドへ同期するコミュニケーションが不毛に感じています。そこで、GitHub Actions と Pull Request を活用して、同期コミュニケーションを削減する仕組みを紹介します。
目新しい情報はないかもしれませんが、同じお困りごとを持つ人へ助けになれば、幸いです。
今回紹介する仕組みの核となるのが GitHub Actions の repository-dispatch トリガーです。
このトリガーは、GitHub API を経由して、GitHub Actions のワークフローを起動することができます。そのため、次のように 異なるリポジトリでの GitHub Actions ワークフローを連携できます。

repository-dispatch と create-pull-request は、次の GitHub Actions です。
https://github.com/peter-evans/repository-dispatch https://github.com/peter-evans/create-pull-request
これらの GitHub Actions を使わずに gh などを使って代替できますが、便利なモノを使って楽をします。
GitHub のリポジトリ(username/other)からトリガーだけでなく、他のサービスからでもトリガーできます。例えば、Google Sheets からだと、Google Apps Script から GitHub API を呼べばよいです。

他にも、Kibela の outgoing webhook を、Server が受けて、Server が GitHub API を呼び出す方法があります。

Server は、IFTTT や Zapier のようなサービスでも良いですし、自前のサーバーでも良いでしょう。
schema ファイルから、型を生成したい(yarn codegen)こともあると思います。そういうときは、次のフローを追加します。

git-auto-commit-action は、変更したファイルを git commit するだけの Action です。
create-pull-request だけでも、自動 commit することができます。私は、次のケースで使用しました。
on:
pull_request:
types: [opened]
jobs:
update:
if: startsWith(github.head_ref, 'figma/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm ci
- run: npx style-dictionary build
- uses: stefanzweifel/git-auto-commit-action@v4Figma のデザイントークンや、i18n のメッセージファイルを更新したとき、Preview できる仕組みがあると、画面の確認ができて、良いです。

例えば、vercel や chromatic の preview です。
https://vercel.com/docs/concepts/deployments/preview-deployments https://www.chromatic.com/docs/review
i18n のメッセージファイルをフロントエンドへ同期する GitHub Actions を、紹介します。
| repository | やること |
|---|---|
| username/frontend | i18n のメッセージファイルを利用 |
| username/message | i18n のメッセージファイルを管理 |

## <username/message>/.github/workflows/main.yml
on:
push:
branches:
- main
paths:
- "i18n/**"
jobs:
dispath:
name: Setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: peter-evans/repository-dispatch@v1
with:
repository: username/frontend
token: ${{ secrets.PAT }}
event-type: create-pull-request-message
client-payload: '{"ref": "${{ github.ref }}"}'## <username/frontend>/.github/workflows/main.yml
on:
repository_dispatch:
types: [create-pull-request-message]
jobs:
createPullRequest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v3
with:
repository: username/message
ref: ${{ github.event.client_payload.ref }}
path: "tmp/"
- run: |
mv tmp/message.json src/message.json
rm -rf tmp
- uses: actions/setup-node@v3
- run: npm ci
- run: yarn generate:message
- uses: peter-evans/create-pull-request@v4安心してマージできるように、受け入れテストを整備しておきましょう。
具体的には、cucumberで仕様書をMarkdown(MARKDOWN_WITH_GHERKIN)で管理します。
例えば、次のような仕様書です。
## Feature: Staying alive
This is about actually staying alive,
not the [Bee Gees song](https://www.youtube.com/watch?v=I_izvAbhExY).
## Rule: If you don't eat you die

`@important` `@essential`
### Scenario Outline: eating
- Given there are <start> cucumbers
- When I eat <eat> cucumbers
- Then I should have <left> cucumbers
#### Examples:
| start | eat | left |
| ----- | --- | ---- |
| 12 | 5 | 7 |
| 20 | 5 | 15 |この Markdown も、GitHub Actions で Pull Request するフローに載せましょう。新しいシナリオが追加された場合、(cucumber のライブラリ上) テストコードが存在しないとエラーとなります。
機能で担保したいシナリオを Markdown で管理していくことで、次のメリットがあります。
token に、PAT を渡すように変更すれば解決します。
他の解決策としては、workflow_run のトリガーを使えます。
ただし、デフォルトブランチでのみ動作します。
同期したいファイルを json に変換して、dispatch する event ペイロードに含めようと、当初考えていました。ただ、次の懸念があったため、却下しました。
そこで、同期したいリポジトリの github.ref を event ペイロードに含めて、event を受けた側がソースコードをチェックアウトして使う方針に切り替えました。
GitHub Actions と Pull Request を活用することで、自動的にアプリケーションのソースコードを更新する仕組みを簡単に組み立てられます。 このような Ops があれば、Slack でのメッセージラリーをする回数が減らせられます。ぜひ、ご活用ください。
-
タグ「DevOps」の記事
フィーチャーフラグ(Feature Flag)をご存知でしょうか?これは新機能のリリース制御やABテストを容易にする強力なツールです。しかし、適切な管理ツールなければ、フィーチャーフラグの管理は容易なことではありません。今回は、そんなフィーチャーフラグの管理を効率化するツール、**Unleash**について解説します。
2023-06-29
前々から気になっていた、CI/CD の非ベンダーロックインな Dagger というツールを試してみました。本記事では、試した内容について共有しようと思います。
CircleCIとBackstopJSを組み合わせて、『継続的にWebページの視覚的な変化を監視するツール』を作成しました。
タグ「開発ツール」の記事
ブログ記事のページ下部に、Disqusを設置しています。 急遽、Disqusの上下に良くわからない広告が大量に表示されるようになりました。 Disqusのメール メールボックスを漁ってみると、以下のメールがありました。 Disqusからのメ
2026-02-06
DuckDB WASMとOrigin Private File System (OPFS) を組み合わせ、Google マイアクティビティの履歴をブラウザ内に閉じたまま扱えるようにしたときの設計と学びを整理しました。
Million.devを知り、少し試してみました。Million.jsについて このライブラリは、React DevToolsのProfilerより簡単にプロファイリングできるみたいです。 パフォーマンスのプロファイリングは通常、面倒で時間のかかる作業です。もしもこれを簡単に実行できるのであれば、めちゃくちゃ捗るなとわくわくしました。