<?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 或る阿呆の記</title><link>https://hack-le.com/tags/hugo/</link><description>Recent content in Hugo on 或る阿呆の記</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Thu, 05 Nov 2026 08:53:37 +0900</lastBuildDate><atom:link href="https://hack-le.com/tags/hugo/index.xml" rel="self" type="application/rss+xml"/><item><title>サイト大改造</title><link>https://hack-le.com/wordpress-to-hugo-migration/</link><pubDate>Wed, 04 Nov 2026 23:26:03 +0000</pubDate><guid>https://hack-le.com/wordpress-to-hugo-migration/</guid><description>&lt;p&gt;2012年10月にLivedoorブログから始まった当サイトは、2016年7月にWordPressに移行しました。そしてそれから10年、おおよそ二回目のサイト大改造となる、Hugoへの移行を実施しました。&lt;/p&gt;&#10;&lt;p&gt;きっかけはサイバー攻撃の激化です。WordPressだとメンテナンスがたいへんだなぁと思いました。それだけだと大仰なことをしたなという感じですが、まぁ元々、うちのサイトでWordPressの機能は大して使っていなかったので、やめたいなぁという気持ちもありましたので。ちょうどよかったかなと思います。何よりせっかくのAIがWordPressだと手足を縛られている感じになりますし。&lt;/p&gt;&#10;&lt;p&gt;逆に言うと、機能をあまり使っていなかったので比較的すんなり移行できた、とも言えます。まぁ意識はしていて、少しずつプラグイン依存を減らしていたんですよね。カスタムフィールドの利用もやめましたし。その積み重ねがあったから出来た、のはあったな。&lt;/p&gt;&#10;&lt;p&gt;サブブログの邪悪なAI記事サイトを先行で試すことができたのも良かったです。なんでも作っておくものだな。ただあのサイトはメディアファイルの扱いがなかったので、それについては新たに改修が必要で、アーキテクチャはまた少し複雑になってしまいましたが…。ま、仕方ないですね。&lt;a class="link" href="https://hack-le.com/ai-wordpress-hugo/" target="_blank" rel="noopener"&#10; &gt;AIの力を借りつつWordPressサイトをHugoに移行&lt;/a&gt; 見ると無駄な複雑さがわかるかと思います。&lt;/p&gt;&#10;&lt;p&gt;まーまだ予約投稿機能作ってないとか、コメント機能がないとか（過去コメントの閲覧はできます）、色々ありますけどね。一応一通りは動いている、はずです。動いてないところは随時改修していく所存です。&lt;/p&gt;&#10;&lt;p&gt;今後とも、当サイトをよろしくお願いいたします。&lt;/p&gt;&#10;</description></item><item><title>AIの力を借りつつWordPressサイトをHugoに移行</title><link>https://hack-le.com/ai-wordpress-hugo/</link><pubDate>Sun, 01 Nov 2026 00:00:00 +0900</pubDate><guid>https://hack-le.com/ai-wordpress-hugo/</guid><description>&lt;p&gt;久しぶりのセルフホストな記事。&lt;/p&gt;&#10;&lt;p&gt;このブログはまだWordPressなんですが、サブブログをWordPressからHugoに移行しました。理由は主に昨今のサイバー攻撃の激化のためです。WordPressが悪いというわけではないのですが、アタックサーフェスの大きさやPHPの特性を考えると、正直これからの時代厳しいように思われました。毎日のように「プラグインの更新してないぞ」「このIPアドレスから阿呆みたいなブルートフォースアタックきてるぞ」という通知がくるのも疲れましたし。&lt;/p&gt;&#10;&lt;p&gt;なので、昔に戻ってスタティックなコンテンツ配信に徹しよう、というような感じです。&lt;/p&gt;&#10;&lt;h2 id="wordpressからhugoへ"&gt;WordPressからHugoへ&#10;&lt;/h2&gt;&lt;p&gt;今回手始めに移行したのは、AIに記事を書かせている邪悪なサイトです。こんな感じに変わりました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/4c18bf39ad7feab65dab790a189436fa-699x492.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;before&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/8a3acbd3dd44c0b47589270fe46742b3-699x493.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;after&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;なんだかんだで移行まで3日くらいかな。正直AIなかったらしんどすぎて無理ってなったと思います。でも移行を決めたのはAIによるサイバー攻撃の激化のためなので、AIのおかげで言っていいのかどうかは微妙なところです。&lt;/p&gt;&#10;&lt;p&gt;ここからまた色々と手を加えつつ運用をして、課題を洗い出しながら、本ブログであるこのサイトの移行の準備を進めます。このサイトは14年続いているだけあって色々な歴史が不思議なHTMLタグとなって残っているため、すんなりとはいかないでしょう。AIにめっちゃ調査させながら進めていくことになるでしょうね。かなり時間がかかると思います。仕方無い。来月中にできるといいな。&lt;/p&gt;&#10;&lt;h2 id="全体の構成"&gt;全体の構成&#10;&lt;/h2&gt;&lt;p&gt;さて、構成ですが、元々の構成は極めてシンプルでした。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD&#10;cf(Cloudflare)&#10;wp(WordPressコンテナ)&#10;cf ---&gt;|トンネル| wp&lt;/pre&gt;&lt;p&gt;これが今回、ちょっと複雑になりました。というのも、私は自作の管理アプリケーションがあり、そこで記事の執筆などもしたいためです。こんな感じのアプリでやってます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hack-le.com/images/uploads/2026/10/209db6e9e19dbc87e24b33e530223f49-699x501.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;記事執筆と管理系のがずらずらと。ちなみにサイトトップの古のアクセスカウンタもこのアプリケーション上でウィジェットを作っています（アクセス解析自体はOSSのUmamiを使わせていただいております）。ウィジェットのみグローバルに公開して、内部のアプリケーションはLAN内限定です。&lt;/p&gt;&#10;&lt;p&gt;執筆機能は重要です。そもそもWordPressを使っていたのも、ぶっちゃけWYSIWYGで編集してその場で公開できなきゃいやだいという運用上の理由が大きかったです。デザインはどうでもよい。なので、Hugoに移行するとしてもエディタを用意できることはマストでした。このへんはAIのおかげでやれるようになったと言っていいでしょう。&lt;/p&gt;&#10;&lt;p&gt;ただこういうややこしいことをする以上、Hugo側の管理と衝突するために、アーキテクチャはどうしても考えるところが生じます。今回は以下の構成に行き着きました。&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TD&#10;subgraph Internet["インターネット"]&#10;User["閲覧者ブラウザ"]&#10;end&#10;subgraph Cloudflare["Cloudflare Edge"]&#10;CDN["Cloudflare DNS / CDN"]&#10;CFTunnel["Cloudflare Tunnel Edge"]&#10;end&#10;subgraph Server["自宅・ホストサーバー（完全閉域）"]&#10;subgraph Delivery["配信基盤 (Docker)"]&#10;TunnelApp["cloudflared コンテナ"]&#10;Caddy["Caddy Webサーバー (ポート開放なし)"]&#10;StaticFiles["静的ファイル (HTML / CSS / 画像)"]&#10;end&#10;subgraph Management["執筆・ビルド基盤"]&#10;Dashboard["Web管理画面 (Blog Dashboard)"]&#10;Hugo["Hugo (静的サイト生成)"]&#10;Source["Markdown記事"]&#10;end&#10;end&#10;%% 閲覧フロー&#10;User --&gt;|HTTPS| CDN&#10;CDN --&gt; CFTunnel&#10;CFTunnel -.-&gt;|アウトバウンド常時接続| TunnelApp&#10;TunnelApp --&gt; Caddy&#10;Caddy --&gt;|読み取り専用| StaticFiles&#10;%% 執筆フロー&#10;Dashboard --&gt;|記事保存| Source&#10;Dashboard --&gt;|ビルド実行| Hugo&#10;Source -.-&gt; Hugo&#10;Hugo --&gt;|HTML出力| StaticFiles&lt;/pre&gt;&lt;p&gt;Hugo環境はコンテナに隔離して、cloudflaredよりトンネル経由で外からアクセスする感じです。Cloudflare依存になってるやんと見えますが、まぁそうなんですが、別に使えなくなったらVPSからfrpなりなんなり使った構成に切り替えればいいだけなので、まぁいいかなと。さらに言えばサイト公開するマシンはそれ専用にする予定です（まだ徹底はできていない）。&lt;/p&gt;&#10;&lt;p&gt;そんで、記事の生成とかビルドの実行とかは、全部管理アプリケーション上でやる構成ですね。一言で言えば管理アプリケーションが正本となる構成です。Hugoリポジトリは中継地点ないしバックアップの役割になります。なのでCI/CDによるホスティングではないです。これによる制約はいくつかあります。主に運用上の制約は以下になるでしょうか。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;管理アプリケーションとHugoのホスティング環境が同一のマシン上にあること（変えてもいいんだがややこしくなり思想から外れる）&lt;/li&gt;&#10;&lt;li&gt;普段は管理アプリケーションからHugoリポジトリのpush/pullを実行するが、Hugo側のデザイン変更時（特に記事データに特殊な記法を挿入する時）はローカルのHugoリポジトリでpushする、2つのワークフローが存在すること&lt;/li&gt;&#10;&lt;li&gt;CI/CDでブランチごとにホスティングしてステージング環境作るとかはできない（できないことはないが構成と運用がややこしくなり、設計思想から外れる）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この制約は受け入れることになります。&lt;/p&gt;&#10;&lt;p&gt;別の考え方としてリポジトリを正本とする考え方もあり、まぁそちらのほうがアーキテクチャは綺麗になると思うんですが、なんか無駄に複雑な運用になりそうだったのでやめました。どうせ運用者も僕だし。&lt;/p&gt;&#10;&lt;h2 id="再び個人サイト激動の時代に"&gt;再び個人サイト激動の時代に…&#10;&lt;/h2&gt;&lt;p&gt;とまぁこんな感じでやっていて思ったんですが、AIで楽になったと言っていいんですかねぇ…。25年前は専門じゃなくてもやる気があれば頑張ってサイトを持つことができたと思うんですけれど、今はこれちょっとどうなんでしょう…。&lt;/p&gt;&#10;&lt;p&gt;トンネル技術とコンテナが揃った時には、個人サイトやセルフホストがまたやりやすい時代になった！と思ったのですけれど、サイバー攻撃がヤバいから守備を固めよう、WordPressはよくない、でも運用が不便になって更新しなくなったら元も子もないから利便性も高めよう、みたいなことを考え始めると、AIによる効率化以上に、トータルの難易度自体は上がり続けているような気がします…。&lt;/p&gt;&#10;&lt;p&gt;いやまぁ、僕がややこしくしているだけか。&lt;/p&gt;&#10;&lt;p&gt;これはまぁ結局、何をどこまで信じるか、という話です。少し前までだとVPSやクラウド基盤そのものを疑うのはキチガイ扱いだったかもしれないのですが、最近お名前.comデスクトップクラウドが基盤ごとやられて顧客の資産がハッカーの攻撃により消失し、さらにGMOが顧客の端末を回収するため物理的に全国を駆けずり回ったという事件は、クラウドは絶対安全ではないという当たり前の技術的な真実を曝け出しました。ま…それでAWSをはじめメガクラウドが陥落するかと言えば別にそういうわけではないですけれど、でもメガクラウドだから安全だ、は技術ではなく信仰でしょう。&lt;/p&gt;&#10;&lt;p&gt;結局個人サイトって自分の城です。城をどこにたてますか、どうなったらその城はぶち壊れますか、あなたはそれに納得できますかと、そういう話なんだと思います。絶対防御は無理なので、そのうえで何を賭けるのか。それを考え始めると、やりたいことに対して、本気でぶち壊そうとする勢力、さらにその被害が大きくなりすぎて、それが多分根本的な問題なのだと思います。&lt;/p&gt;&#10;&lt;p&gt;僕の構成がややこしくなっているのは、それだけ僕が納得するのに必要になってしまったということはあります。別にもっとシンプルな構成は可能です。元々のようにCloudflareトンネルでWordPressコンテナ直通でも良いといえばそうなので。ちゃんと更新し続けて、今回のPHP事件みたいなのがあったらキャッチアップして…ってやっても、基本は大丈夫でしょう。心配なら物理的にサイト専用のマシン作って切り離すくらいで、ほぼほぼ問題ないと言って思います（まぁそれも普通からするとややこしいわけですが…）。&lt;/p&gt;&#10;&lt;p&gt;まぁ結局どうしたいかは人それぞれということになるんですが、その構成に至る道筋や、またその構成における必要な運用はなにか、普通の人がそれを理解して辿り着くのが難しくなっているのかなぁと、そんな風に思いました。&lt;/p&gt;&#10;&lt;p&gt;&amp;lt;関連記事&amp;gt;&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/ai-cyber-attack/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIによるサイバー攻撃時代の個人サイト・個人ブログのセキュリティ&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/ai-cyber-attack/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/10/eyecatch_53756_1792651216.webp" alt="AIによるサイバー攻撃時代の個人サイト・個人ブログのセキュリティ" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://hack-le.com/aisoftware/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;AIでソフトウェアの作成は楽になったが、結局最後は泥臭い&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/aisoftware/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://hack-le.com/images/uploads/2026/08/eyecatch_50962_1785770655.webp" alt="AIでソフトウェアの作成は楽になったが、結局最後は泥臭い" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item></channel></rss>