2026-03-27 の日記
25年前くらいに日記を作ったときは、
- ruby + cgi
- xml storage (日記自体が xhtml で書いてあって、それを xml storage としていた)
みたいな構成だった。あれはあれでなかなか良かったんだけど、まぁ管理はできていたかというと。
今回は、
- rails 8
- hotwire
- SQLite3
という構成だけど、結局 Claude Code に全部書いてもらったので、どれくらい他のフレームワークと同じだったかは不明。kamal で deploy を体験したけど、なるほど良くできてるねぇ。
front に apache2 を置いていて(なんと 2000 年くらいから構成が変わっていない)、なるべく static な file はそこから配信できるようにしている。キャッシュを積極的にファイルにしてもらって、cache/ に落とす。site の設定はこんな感じ。
# HTTP → HTTPS redirect
<VirtualHost *:80>
ServerName blog.atdot.net
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName blog.atdot.net
# SSL
...
# Global security headers (applies to ALL responses including static cache)
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
# -------------------------
# 1. uploads は Apache が直接配信
# -------------------------
Alias /uploads/ /srv/koblog/uploads/
<Directory /srv/koblog/uploads>
AllowOverride None
Require all granted
Options FollowSymLinks
</Directory>
RewriteEngine On
# uploads はここで止める
RewriteRule ^/uploads/ - [L]
# -------------------------
# 2. 静的キャッシュ: 内部専用 URL にマップ
# /__cache__/foo → /srv/koblog/cache/foo
# -------------------------
Alias /__cache__/ /srv/koblog/cache/
<Directory /srv/koblog/cache>
AllowOverride None
Require all granted
AddDefaultCharset UTF-8
ForceType text/html
</Directory>
# 外部からの /__cache__/ 直接アクセスをブロック
RewriteCond %{THE_REQUEST} \s/__cache__/ [NC]
RewriteRule ^ - [F]
# -------------------------
# 3. GET のみキャッシュから返す
# -------------------------
# Auth-dependent UI is handled client-side via /me endpoint.
# No cookie check needed ? all users get cached pages.
# / → /srv/koblog/cache/index.html
RewriteCond %{REQUEST_METHOD} GET
RewriteCond /srv/koblog/cache%{REQUEST_URI}/index.html -f
RewriteRule ^(.*)$ /__cache__%{REQUEST_URI}/index.html [L]
# /entries/slug → /srv/koblog/cache/entries/slug.html
# /2026/03 → /srv/koblog/cache/2026/03.html
RewriteCond %{REQUEST_METHOD} GET
RewriteCond /srv/koblog/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /__cache__%{REQUEST_URI}.html [L]
# -------------------------
# 4. キャッシュにないリクエストは kamal-proxy へ
# -------------------------
ProxyPreserveHost On
RewriteRule ^(.*)$ http://127.0.0.1:3080%{REQUEST_URI} [P,L]
ProxyPassReverse / http://127.0.0.1:3080/
# Pass SSL info to Rails
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Ssl "on"
</VirtualHost>
# Required modules:
# a2enmod rewrite proxy proxy_http headers ssl
昔は暗号だなぁ、と思って理解しようと思わなかった RewriteRule を、令和の今になって触るとは。AI は聞くと気軽に教えてくれるのがいいよね。ようやっと意味が分かった気がする。今後使う機会がありそうな気はしない。
意外と Claude Code 氏に頼んだ設定はうまくいかず、ChatGPT 氏に聞いてサンプル構成を書いてもらって、それを Claude Code 氏に清書してもらう、という感じだった。
トップページや記事などを static 配信に front で配信してもらうために、ちょっとレールから外れたことをしている感じがしている。
blog というものを書いたことがないけど、結局日記みたいな仕組みを作っているね。
いやしかし、以前の cgi の後、Rails でブログ作りたいなーと思って何度かやってみたけど、裏側はさすがにすぐできるが、見てくれを整理するところですぐに挫折していたので、本当に Claude Code 氏がありがたいね。
💬 comment