GitHub Actionsで定期的なプロジェクト課題を自動化する

久しぶりにツールを作ったのでメモ。

作ったもの

GitHub Actions “recurring-backlog-item-creator

背景とふりかえり

Issueをテンプレートから定期的に自動作成するユースケースはよくあると思う。 そのとき、下記のような要件があると、GitHubの既存機能では若干面倒だ:

  • issueによって作成間隔が異なる
  • タイトルに年月のような動的なprefixやsuffixをつけたい
  • issueをprojectに登録しつつ、projectのカスタムフィールドを設定する

このような状況では、こんな設定ファイルがあれば解決できる。

issueの作成とprojectへの登録はGitHubのGraphQL APIを使えばできるので、キモはほぼ設定ファイルのフィルタとバリデーションだった。 ということで、フィルタリングとバリデーションを責務とするツールを書いた。 実装言語はGo。

良い点

登録先projectに存在しないフィールドや値を指定した場合に失敗するようにバリデーションしている。 これのおかげで安心して使えるようになった。

設定ファイルを見れば何をしたいかが明確なところも地味にメリットかも。

あとは tagpr いつもありがとう。

反省点

大したサイズにはならないだろうと思ったので、main パッケージ一発、役割別のファイル構成にしたが、この規模でも変更が複数ファイルに分散してやや書きにくかった。 とはいえここから凝集度を上げるにはport-adapterくらいしか知らなくて、この規模のツールでそれはやり過ぎだろう。 いい感じの落とし所が、まだ感覚的にわかってない。

シングルパッケージ構成にしたデメリットはほぼ感じなかった。 ここはむしろシンプルさのメリットのほうが大きかった感じがある。

ハマったところ

userのGitHub projectへのアクセス権はPATが必要…! これに気づくまで、repository permissionの Project.write を持ったGitHub Appのトークンを使ってしまっていた。 恐らく、この権限は既に廃止されたprojects (classic) 機能のものと思われる1。 ここで3時間くらい溶かした。

展望

v1.0 の時点ではフィルタ条件は “月” のみだが、“年” “日にち” “曜日” などを追加する拡張も可能と思われる。

 - name: "Wash My Cat"
    template_file: ".github/ISSUE_TEMPLATE/wash_my_cat.md"
    creation_months: [1, 3, 5, 7, 9, 11]
	creation_day: [10, 20, 30]
	craetion_day_of_week: ["Mon"]

こうやって書けば、奇数月の0つく日、それが月曜ならissueが作られるんだろうか。 このくらい細かい条件で使うなら、cronも毎日実行に設定するんだろう。


  1. たぶん。こことかここを読むとそんな気がする。 ↩︎

更新履歴

  • 2026-08-09: タイトルとURLを変更