<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hugo on Blackratel Blog</title>
    <link>https://blackratel.com/blog/tags/hugo/</link>
    <description>Recent content in Hugo on Blackratel Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 blackratel</copyright>
    <lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blackratel.com/blog/tags/hugo/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>git commit で Hugo ローカルサーバへの自動デプロイを実現する</title>
      <link>https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/</guid>
      <description>&lt;p&gt;このブログは Hugo で構築している。記事作成時は Ansible でローカルの Hugo を更新してプレビューし、確認後に本番へアップロードするフローで運用している。&lt;/p&gt;&#xA;&lt;p&gt;これまではコミット後に &lt;code&gt;ansible-playbook&lt;/code&gt; コマンドを手動で実行していたが、コミットしたら自動で Hugo が更新されプレビューに集中できる環境を作りたかった。&lt;/p&gt;&#xA;&lt;p&gt;この記事では、&lt;strong&gt;git の post-commit hook と Ansible を組み合わせた自動デプロイの仕組み&lt;/strong&gt;を紹介する。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;構成の概要&#xA;    &lt;div id=&#34;構成の概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a7%8b%e6%88%90%e3%81%ae%e6%a6%82%e8%a6%81&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;このブログは以下の構成で運用している。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;役割&lt;/th&gt;&#xA;          &lt;th&gt;内容&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;記事管理&lt;/td&gt;&#xA;          &lt;td&gt;git リポジトリの &lt;code&gt;files/*.md&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ローカルデプロイ&lt;/td&gt;&#xA;          &lt;td&gt;Ansible Playbook (&lt;code&gt;ansible_connection=local&lt;/code&gt;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;プレビュー&lt;/td&gt;&#xA;          &lt;td&gt;ローカルの Hugo サーバ&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;自動化の対象は「コミット → Ansible 実行」の部分だ。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;なぜ git hook を選んだか&#xA;    &lt;div id=&#34;なぜ-git-hook-を選んだか&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%81%aa%e3%81%9c-git-hook-%e3%82%92%e9%81%b8%e3%82%93%e3%81%a0%e3%81%8b&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;git hook にした理由は以下の通りだ。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>git push で本番サーバへの自動同期を実現する</title>
      <link>https://blackratel.com/blog/posts/git-push-production-sync.ja/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/git-push-production-sync.ja/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blackratel.com/blog/posts/git-hook-ansible-auto-deploy.ja/&#34; &gt;前回の記事&lt;/a&gt;では &lt;code&gt;git commit&lt;/code&gt; をトリガーに Ansible でローカルの Hugo を自動更新する仕組みを構築した。今回はその続きで、&lt;strong&gt;&lt;code&gt;git push&lt;/code&gt; のタイミングで本番サーバへの同期も自動化&lt;/strong&gt;した話を紹介する。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;やりたいこと&#xA;    &lt;div id=&#34;やりたいこと&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;これまでは本番反映を手動で実行していたが、&lt;code&gt;git push&lt;/code&gt; に統合し、push するだけで本番まで反映されるようにしたかった。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;git に post-push フックはない&#xA;    &lt;div id=&#34;git-に-post-push-フックはない&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#git-%e3%81%ab-post-push-%e3%83%95%e3%83%83%e3%82%af%e3%81%af%e3%81%aa%e3%81%84&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;git には &lt;code&gt;post-commit&lt;/code&gt; のように「push 後」に処理を実行する &lt;code&gt;post-push&lt;/code&gt; フックが存在しない。&lt;/p&gt;&#xA;&lt;p&gt;代わりに &lt;strong&gt;&lt;code&gt;pre-push&lt;/code&gt; フック&lt;/strong&gt;を使う。これは push が実行される直前に呼ばれるフックで、処理が失敗（exit 1）すると push 自体を中止できる。&lt;/p&gt;&#xA;&lt;p&gt;本番同期に失敗したまま GitHub へ push されるのを防げるため、むしろ都合がいい。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;実装&#xA;    &lt;div id=&#34;実装&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%ae%9f%e8%a3%85&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;.githooks/pre-push&lt;/code&gt; に本番同期の処理を記述し、実行権限を付与してコミットする。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>このブログを Hugo で構築した理由</title>
      <link>https://blackratel.com/blog/posts/why-hugo.ja/</link>
      <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blackratel.com/blog/posts/why-hugo.ja/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;はじめに&#xA;    &lt;div id=&#34;はじめに&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;ブログを始めるにあたって、まず悩んだのがプラットフォームの選定だ。&lt;br&gt;&#xA;WordPress をはじめとする CMS は機能が豊富な反面、DB・PHP・プラグイン管理など&#xA;運用コストが高い。今回は「&lt;strong&gt;書くことに集中できる、軽量で安全な構成&lt;/strong&gt;」を目指した。&lt;/p&gt;&#xA;&lt;p&gt;その結果として選んだのが &lt;strong&gt;Hugo&lt;/strong&gt; だ。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;なぜ Hugo を選んだのか&#xA;    &lt;div id=&#34;なぜ-hugo-を選んだのか&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e3%81%aa%e3%81%9c-hugo-%e3%82%92%e9%81%b8%e3%82%93%e3%81%a0%e3%81%ae%e3%81%8b&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;1. セキュリティ&#xA;    &lt;div id=&#34;1-セキュリティ&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Hugo は静的サイトジェネレーター（SSG）であり、ビルド時にすべてのページを&#xA;HTML ファイルとして生成する。つまり：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SQL インジェクション不可&lt;/li&gt;&#xA;&lt;li&gt;php等の言語の脆弱性と無縁&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;さらに Hugo は &lt;strong&gt;単一の Go バイナリ&lt;/strong&gt;として配布されており、&#xA;npm のようなサプライチェーンリスクもない。&#xA;依存パッケージがゼロというのは、セキュリティ観点では大きな強みだ。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
