Tag: koblog

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 氏がありがたいね。

All tags