3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Pages公開フローを5年ぶりに刷新した

Posted at

はじめに

2021年5月に GitHub Pages を公開するための GitHub Action ワークフローを構築しました。

それから約5年ほど経過しました。当時は最新だった手法も、今では古いものとなりつつあります。

長らくメンテナンスを怠っていましたが、近年の CI/CD における Tips やセキュリティ動向を踏まえ、このたびワークフローを刷新しました。本記事では、2026年1月時点における更新内容を備忘録として残します。

刷新したワークフローは以下となります。

更新方針: 公式ドキュメントへの準拠とセキュリティ強化

基本的には GitHub ドキュメントをベースに、より堅牢で使い勝手の良い構成を目指しました。

actions/upload-pages-artifact, actions/deploy-pages への移行

これまではサードパーティ製のアクションを利用してデプロイしていましたが、2026年1月時点では、GitHub ドキュメントでは actions/upload-pages-artifactactions/deploy-pages を組み合わせるのが標準のようです。

  • actions/upload-pages-artifact: ビルド成果物を一時保存する
  • actions/deploy-pages: 保存された成果物をPagesにデプロイする

これに伴い、リポジトリの「Settings」も変更しました。 Build and deployment > Source の設定を、従来の「Deploy from a branch」から「GitHub Actions」へと切り替えています。これにより、デプロイ専用ブランチを管理する手間がなくなりました。

アクションの指定を「コミットハッシュ」で固定

アクションのバージョン指定を @v4 のようなタグ形式から、コミットハッシュ形式に変更しました。

2025年3月に発生した GitHub Actionsのサプライチェーン攻撃 があったことで関心が高まりました。タグ指定は後から改ざんされるリスクがありますが、コミットハッシュであれば「その時点のコード」であることが保証でき、意図しない悪意あるコードの混入を防げます。

権限(permissions)を最小限に定義

GITHUB_TOKEN に対して「最小権限の原則」を適用しました。

permissions:
  contents: read
  pages: write
  id-token: write

ワークフローに必要な権限(Pagesの書き込みとIDトークンの発行)を明示的に付与することで、万が一トークンが漏洩した際の被害を最小限に抑えます。

手動実行(workflow_dispatch)の追加

CI/CDにおいて「実際に動かしてみないと挙動がわからない」という不安を解消するため、手動で実行できる workflow_dispatch イベントを追加しました。また、ヘッドレスCMS(Contentful)で編集した内容を自身のタイミングで反映させる狙いもあります。

Tips: workflow_dispatch は、対象のYAMLファイルがデフォルトブランチに存在しないとGitHubのUI上にボタンが表示されないため、初回導入時は注意が必要です。

おわりに

2025年は多くのGitHub Actionsを構築・メンテナンスする機会に恵まれました。そこで得たノウハウを、ようやく自身の個人リポジトリにも反映できました。

一度作ると放置しがちなデプロイフローですが、セキュリティの進歩や推奨環境に合わせて定期的にアップデートすることの大切さを再認識しました。

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?