<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>bl</title>
    <link>https://blog.atdot.net</link>
    <description>bl - Recent entries</description>
    <language>ja</language>
    <atom:link href="https://blog.atdot.net/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 18 Apr 2026 06:20:58 +0900</lastBuildDate>
    <item>
      <title>2026-04-18 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-18</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-18</guid>
      <pubDate>Sat, 18 Apr 2026 06:20:58 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;このブログアプリはだいたい Claude code に作ってもらったんだけど、保存がエラーになる、ってエラーで書き込めない。
私がエラーを見てもよくわからない。ローカル環境みるだけだと Claude code もよくわからないという。&lt;/p&gt;

&lt;p&gt;本番環境に手を出していいよっていって解決できたので良かったんだけど、いやはや凄い時代だなぁ。
仕事アプリでこれは許されない気がするな。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;a href="/uploads/2026/04/60d354eb5c08081a.png" class="image-link"&gt;&lt;img src="/uploads/2026/04/60d354eb5c08081a_thumb.png" alt="60d354eb5c08081a.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RubyKaigi に向けてベンチマークとってるんだけど、やっぱり JIT 凄いなぁ。なかなか勝てない。&lt;/p&gt;

&lt;p&gt;コンパイル時間もねぇ…。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-04-15 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-15</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-15</guid>
      <pubDate>Wed, 15 Apr 2026 14:35:35 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;日記を書くという行為をすぐに忘れる。
別に日記でもないのだが。&lt;/p&gt;

&lt;p&gt;RubyKaigi に向けて、ASTro を用いた Ruby 実装というのをやっているが、Claude Code 氏に任せていたら、Fiber までできていてスゴイ。もちろん、Ruby の spec を充実させていくにしたがってむっちゃ遅くなるので、今刈り込んでいるところだけど、さすがにその辺は Claude Code 氏に任せてもうまくいかない。&lt;/p&gt;

&lt;p&gt;まだ仕事はある。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-04-07 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-07</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-07</guid>
      <pubDate>Tue, 07 Apr 2026 08:59:24 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;Claude Code 氏に任せてると進捗が本当にヤバイね。意図通りだけど。&lt;/p&gt;

&lt;p&gt;ASTro を利用した Ruby を作ってもらってるんだけど、いやー、すごい。&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-C"&gt;struct abruby_object {
    struct abruby_class *klass;  // offset 0
    unsigned int ivar_cnt;
    struct {
        const char *name;
        VALUE value;
    } ivars[ABRUBY_IVAR_MAX];
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これは Object の定義なんだけど、「インスタンス変数領域は 32 個あるんじゃー、多くても少なくても知らん！」というストロングスタイル。いやぁ、これでいいんだよ。まずは。&lt;/p&gt;

&lt;p&gt;自分がやると、やれ性能が、メモリ効率が、超えても動かいと、とか考えちゃうんだけど、違うんだよなぁ。まずは進めるところから、というのは、本当に正しい。理性ではわかってるけど気分がねぇ、というところを空気読まずに進めてくれるのは大変に良い。&lt;/p&gt;

&lt;p&gt;人間は「やれやれ、AI は非効率なコードを書くな」などと偉そうに「効率なんとかして」って後から言えばいいわけだよ。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-04-05 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-05</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-05</guid>
      <pubDate>Sun, 05 Apr 2026 03:12:30 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;下の子が自転車乗り回していてスゴイ。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-04-03 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-03</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-03</guid>
      <pubDate>Fri, 03 Apr 2026 16:17:06 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;桜はだいぶ満開。きれい。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;世の中 AI 活用がすごいなぁ。これ、本当に値上がりしたらどうなるんだろ。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-04-01 の日記</title>
      <link>https://blog.atdot.net/entries/2026-04-01</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-04-01</guid>
      <pubDate>Wed, 01 Apr 2026 19:43:16 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;久々のネタでした: &lt;a href="https://bugs.ruby-lang.org/issues/21975"&gt;Feature #21975: Add “UTF-八” as an alias for UTF-8 encoding - Ruby - Ruby Issue Tracking System&lt;/a&gt;。特筆すべきは、実装はぜんぶ Claude Code 氏。&lt;/p&gt;

&lt;p&gt;ちなみに、&lt;a href="https://bugs.ruby-lang.org/issues/21973"&gt;Feature #21973: Smile argument - Ruby - Ruby Issue Tracking System&lt;/a&gt; は STORES techconf (2025) で kinoppyd さんにこういう機能が欲しい、って相談されて、april fool にどうか、とご提案したのだった。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;adlog に概要をつける機能をつけた。なかなか見やすいね。まだ CLI リリースしてないので、私だけの実験機能。&lt;/p&gt;

&lt;p&gt;&lt;a href="/uploads/2026/04/87ec20ce37f416ea.png" class="image-link"&gt;&lt;img src="/uploads/2026/04/87ec20ce37f416ea_thumb.png" alt="87ec20ce37f416ea.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>2026-03-31 の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-31</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-31</guid>
      <pubDate>Tue, 31 Mar 2026 03:32:45 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;RSS つけた。ひょいとお願いするだけなんだから、楽なもんだなぁ…。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;セキュリティ監査して、ってお願いして出てくるリスト、本当にわけがわからん。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-03-30 の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-30</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-30</guid>
      <pubDate>Mon, 30 Mar 2026 11:39:42 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <category>adlog</category>
      <description>&lt;p&gt;&lt;a href="https://log.atdot.net/about"&gt;adlog&lt;/a&gt; というサービスを作った。
というか、作ってもらった。コンセプトだけ一生懸命教えて、あとはお任せ。&lt;/p&gt;

&lt;p&gt;もともと pastebin 的なサービスを何度か作っていて（cgiで）、それの現代版。とにかくログの検索がやりたかった。大手のやつはちょっと高すぎて無理。&lt;/p&gt;

&lt;p&gt;手元で claude code のログがたくさんたまってるけど、なかなか便利。「消えちゃうかも」という不安がないのが良い。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;今日が3月末と勘違いして、保育園にご迷惑をかけてしまった。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-03-29 の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-29</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-29</guid>
      <pubDate>Sun, 29 Mar 2026 01:24:24 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;claude code のログとかを雑多に集めるサービスを作った。検索がしたくて。しかし、偉い時間かかっちゃったな。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-03-28 の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-28</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-28</guid>
      <pubDate>Sat, 28 Mar 2026 10:06:16 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <category>ligarb</category>
      <description>&lt;p&gt;ligarb で翻訳文書をまとめられるようになった。
ソフトウェアの解説は、もうだいたいうまくいくようになったので凄いもんだなぁ。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;koblog、うっかり cache じゃなくてそのまま返していたので（レンダリング結果をメモリに載せて返していた、まぁそれでいいといえばいいんだけど）、apache の rule を修正してもらった。というか、普通に間違えるのな。[L] -&amp;gt; [PT] の変更。だけど、聞いてもよくわからなかった。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-03-27 の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-27</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-27</guid>
      <pubDate>Fri, 27 Mar 2026 18:45:41 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <category>koblog</category>
      <description>&lt;p&gt;25年前くらいに日記を作ったときは、&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ruby + cgi&lt;/li&gt;
  &lt;li&gt;xml storage (日記自体が xhtml で書いてあって、それを xml storage としていた)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;みたいな構成だった。あれはあれでなかなか良かったんだけど、まぁ管理はできていたかというと。&lt;/p&gt;

&lt;p&gt;今回は、&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;rails 8&lt;/li&gt;
  &lt;li&gt;hotwire&lt;/li&gt;
  &lt;li&gt;SQLite3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という構成だけど、結局 Claude Code に全部書いてもらったので、どれくらい他のフレームワークと同じだったかは不明。kamal で deploy を体験したけど、なるほど良くできてるねぇ。&lt;/p&gt;

&lt;p&gt;front に apache2 を置いていて（なんと 2000 年くらいから構成が変わっていない）、なるべく static な file はそこから配信できるようにしている。キャッシュを積極的にファイルにしてもらって、cache/ に落とす。site の設定はこんな感じ。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# HTTP → HTTPS redirect
&amp;lt;VirtualHost *:80&amp;gt;
  ServerName blog.atdot.net
  RewriteEngine On
  RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
&amp;lt;/VirtualHost&amp;gt;

&amp;lt;VirtualHost *:443&amp;gt;
  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/
  &amp;lt;Directory /srv/koblog/uploads&amp;gt;
    AllowOverride None
    Require all granted
    Options FollowSymLinks
  &amp;lt;/Directory&amp;gt;

  RewriteEngine On

  # uploads はここで止める
  RewriteRule ^/uploads/ - [L]

  # -------------------------
  # 2. 静的キャッシュ: 内部専用 URL にマップ
  #    /__cache__/foo → /srv/koblog/cache/foo
  # -------------------------
  Alias /__cache__/ /srv/koblog/cache/
  &amp;lt;Directory /srv/koblog/cache&amp;gt;
    AllowOverride None
    Require all granted
    AddDefaultCharset UTF-8
    ForceType text/html
  &amp;lt;/Directory&amp;gt;

  # 外部からの /__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"
&amp;lt;/VirtualHost&amp;gt;

# Required modules:
#   a2enmod rewrite proxy proxy_http headers ssl
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;昔は暗号だなぁ、と思って理解しようと思わなかった RewriteRule を、令和の今になって触るとは。AI は聞くと気軽に教えてくれるのがいいよね。ようやっと意味が分かった気がする。今後使う機会がありそうな気はしない。&lt;/p&gt;

&lt;p&gt;意外と Claude Code 氏に頼んだ設定はうまくいかず、ChatGPT 氏に聞いてサンプル構成を書いてもらって、それを Claude Code 氏に清書してもらう、という感じだった。&lt;/p&gt;

&lt;p&gt;トップページや記事などを static 配信に front で配信してもらうために、ちょっとレールから外れたことをしている感じがしている。&lt;/p&gt;

&lt;p&gt;blog というものを書いたことがないけど、結局日記みたいな仕組みを作っているね。&lt;/p&gt;

&lt;p&gt;いやしかし、以前の cgi の後、Rails でブログ作りたいなーと思って何度かやってみたけど、裏側はさすがにすぐできるが、見てくれを整理するところですぐに挫折していたので、本当に Claude Code 氏がありがたいね。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>2026-03-26の日記</title>
      <link>https://blog.atdot.net/entries/2026-03-26</link>
      <guid isPermaLink="true">https://blog.atdot.net/entries/2026-03-26</guid>
      <pubDate>Fri, 27 Mar 2026 02:48:42 +0900</pubDate>
      <author>Koichi Sasada</author>
      <category>diary</category>
      <description>&lt;p&gt;久々に日記を作った。
いや、作ってもらった。&lt;/p&gt;

&lt;p&gt;どこにも公開していないのに、GPTBot がクローリングしていて怖い。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;久しぶりだなぁ、この感じ。&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
