Skip to main content

Hugo

git push で本番サーバへの自動同期を実現する

前回の記事では git commit をトリガーに Ansible でローカルの Hugo を自動更新する仕組みを構築した。今回はその続きで、git push のタイミングで本番サーバへの同期も自動化した話を紹介する。 やりたいこと # これまでは本番反映を手動で実行していたが、git push に統合し、push するだけで本番まで反映されるようにしたかった。 git に post-push フックはない # git には post-commit のように「push 後」に処理を実行する post-push フックが存在しない。 代わりに pre-push フックを使う。これは push が実行される直前に呼ばれるフックで、処理が失敗(exit 1)すると push 自体を中止できる。 本番同期に失敗したまま GitHub へ push されるのを防げるため、むしろ都合がいい。 実装 # .githooks/pre-push に本番同期の処理を記述し、実行権限を付与してコミットする。

git commit で Hugo ローカルサーバへの自動デプロイを実現する

このブログは Hugo で構築している。記事作成時は Ansible でローカルの Hugo を更新してプレビューし、確認後に本番へアップロードするフローで運用している。 これまではコミット後に ansible-playbook コマンドを手動で実行していたが、コミットしたら自動で Hugo が更新されプレビューに集中できる環境を作りたかった。 この記事では、git の post-commit hook と Ansible を組み合わせた自動デプロイの仕組みを紹介する。 構成の概要 # このブログは以下の構成で運用している。 役割 内容 記事管理 git リポジトリの files/*.md ローカルデプロイ Ansible Playbook (ansible_connection=local) プレビュー ローカルの Hugo サーバ 自動化の対象は「コミット → Ansible 実行」の部分だ。 なぜ git hook を選んだか # git hook にした理由は以下の通りだ。

このブログを Hugo で構築した理由

はじめに # ブログを始めるにあたって、まず悩んだのがプラットフォームの選定だ。 WordPress をはじめとする CMS は機能が豊富な反面、DB・PHP・プラグイン管理など 運用コストが高い。今回は「書くことに集中できる、軽量で安全な構成」を目指した。 その結果として選んだのが Hugo だ。 なぜ Hugo を選んだのか # 1. セキュリティ # Hugo は静的サイトジェネレーター(SSG)であり、ビルド時にすべてのページを HTML ファイルとして生成する。つまり: SQL インジェクション不可 php等の言語の脆弱性と無縁 さらに Hugo は 単一の Go バイナリとして配布されており、 npm のようなサプライチェーンリスクもない。 依存パッケージがゼロというのは、セキュリティ観点では大きな強みだ。