ブログサイトの技術的な話

自前でブログを作った動機については記事にした。
技術的な側面のこだわりについてもまとめておきたい。

とりあえずざっと列挙してみよう。

  • 公開ページと管理者用ページがあり、公開ページは静的ファイル配信
  • 単一のLaravelプロジェクトで構築しておりデプロイはVPS
  • 静的ページへのアクセスはLaravelが起動しないようnginxで捌く

この、静的ファイル配信かつフレームワークも起動させない、というのが最初にやりたかったこと。

あとはとにかくシンプルにしたかった。
トップページに初回アクセスすると、html, css, jsファイルが各1枚ずつとfaviconが配信される。
html以外はキャッシュが効いて、全ページ共通なのでそれ以降のページ遷移時はhtmlファイルが配信されるだけ。
jsファイルについては、テーマ切り替えしかしていないのでなくせるものならなくしたかったけど、上手いやり方がわからなかった。なんかできるのかな。
システム設定に合わせて固定するとかならできるけど、そこはユーザーが切り替えられた方がいいと判断。自分がユーザーだったらそうしたいし。

デザイン面については、あまり自信がないので、ざっくりこんな感じの見た目にしたいなというイメージをClaude Codeに投げながら調整。
アクセシビリティやWeb標準の観点でレビューをさせつつ自分なりの「こうしたい」を伝える感じ。

nginxの設定

通常、Laravelアプリをデプロイする場合は、nginx.confに次のような設定を書く。

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

このブログでは、公開ページを閲覧するときは静的ファイルを返すのみで、フレームワークの起動もさせないという方針がある。
そこで、次のような設定を書いている。

location / {
    try_files /html$uri.html /html$uri/index.html =404;
}

記事などの生成物はhtmlディレクトリ配下にあるので、対応するhtmlファイルがあればそれを返すだけ。存在しないURLなら404を返す。

ただし、管理画面は通常通り動いてほしいのでこうする。

location ~ ^/admin(/|$) {
    try_files $uri /index.php?$query_string;
}

管理画面用のプレフィックスを指定して、index.phpに内部リダイレクトさせる。

こうすることで、管理画面は通常通りLaravelが起動するが、公開ページは完全な静的配信になる。

ただし、これだけだとファビコンやrobots.txtも404に落ちてしまうので、それらに対する設定も個別に書かなければいけない。
正直、思った以上に設定ファイルの記述量が増えてしまった。

個人ブログでたいしてアクセスもこないだろうから、ここまでする必要はあったのか。
また、原理的にはアクセス負荷が下がるはずだが、どのくらい効果があるかは未検証だ。やる意味あったのかな。