Journal · 2026

Blog.

技術、開発、ウェルビーイングについて。

← Back to Home

静的サイトのdraft運用の落とし穴――「一覧には出ないが公開URLで読める」を塞いだら連鎖が始まった

draft指定した記事が、一覧にもsitemapにも出ないのに直接URLでは読める状態になっていました。原因は「除外フィルタを一覧ページにだけ書いていた」ことです。個別ページ生成にも同じフィルタを足して穴を塞いだところ、その穴に依存していた内部リンクが次々と壊れ、ファイル名とURLのずれ、末尾スラッシュの301まで芋づる式に露見します。Astro公式ドキュメントを一次資料に、静的サイトにおける「非公開」の定義と、リンク健全性を不変条件へ格上げする運用設計をまとめます。

Read

本番APIをPoetry移行する――Python 3.13・systemd・ブランチ戦略の実践

本番稼働中のFlask APIをvenv+requirements.txtからPoetryへ移行しました。systemd経由でpoetry runを叩いてPermission deniedに遭い、当初疑ったPrivateTmpは一次資料に当たると無関係だと判明します。ラッパースクリプトによる解決、package-mode = falseの意味、Gemini→Claude APIへの依存入れ替えでパッケージ数が48から38に減った経緯、そして開発環境の移行が遅れている状況でのproductionブランチ戦略までを実録でまとめます。

Read

KUSANAGIにWinter CMSを相乗りさせる――WordPress専用ディストリで別CMSを本番稼働させるまで

WordPress高速化ディストリとして知られるKUSANAGIに、LaravelベースのWinter CMSを相乗りさせて本番稼働させた記録です。provisionが作るのは「箱」だけであること、Laravel派生CMSのCLI名前空間の違い、そしてSELinux enforcing下でstorageが書けず500エラーになる問題を、詰まった順に整理します。500の真因はnginxのログではなくアプリのログにありました。

Read

MCPサーバの認証設計――固定BearerからOAuth 2.1へ、JWT検証でステートレスに保つ

自作MCPサーバの認証を固定ベアラートークンからOAuth 2.1へ移す設計を、MCP仕様の現行版(2026-07-28)と関連RFCの原文にあたって整理します。結論は、MCPサーバはリソースサーバに徹し、認可判断をJWTの署名検証だけで完結させるのが現実解だということです。あわせて、Dynamic Client RegistrationがClient ID Metadata Documentsに置き換わり非推奨になったという、この領域の大きな変更も追いました。

Read

公開直後から始まる認証試行――fail2banでメールサーバーを守る運用設計

メールサーバーを公開してまもなく、ログには見知らぬIPからの認証試行が並び始めました。公開サーバにとって自動スキャンは前提条件です。本記事では、CentOS Stream 9上のPostfix・Dovecot・sshdをfail2banで守る運用設計を実録します。要点は、サービスごとに認証モデルが違う以上jailの厳しさ(maxretry・bantime・findtime)も変えること、そして遮断より先にignoreipやコンソールで自分の退路を確保することの2点です。

Read

CentOS Stream 9でメールサーバーを建てる――SELinuxを切らずにmail-tester 10/10へ

「メールサーバーは自前で建てるな」と言われる時代に、CentOS Stream 9上でPostfix+Dovecot+OpenDKIMをSELinux enforcingのまま構築し、mail-tester.comで10/10を達成しました。多くの記事が無効化で逃げるSELinuxをaudit2allowで最小限だけ通す実践と、SPF/DKIM/DMARCによる到達可能性の設計を、詰まった順の実録で解説します。

Read

Let's Encrypt証明書のトラブルシュート実践――メール証明書エラー1件から自動更新の設計不備を洗い出す

メールクライアントの証明書期限切れ警告から出発して掘り下げると、certbot自動更新の独立した設計不備が3つ見つかりました。①証明書ファイルの更新とプロセスへの反映は別物(deploy hook必須)、②nginxメジャー更新で置き去りになったhook内のサービス名、③「たまたま通っていた」standalone認証。webrootへの移行とnginxのlocation優先順位の罠まで、切り分けの思考プロセスとともに解説します。

Read

AIが書いた記事をどう信用するか――出典検証を仕組みにする

ブログ記事の生成を自動化すると、ボトルネックは「書く」から「信用する」へ移ります。自動生成した記事を公開前に検証するワークフローを回して分かったのは、AIの誤りには型があるということでした。捏造引用・逐語不一致・出典側の記述変更・過剰な具体化という4つの失敗モードを自分の記事の実例で分類し、型ごとの検出方法と、検証はAI・適用もAI・判断は人間という分業の仕組みを紹介します。

Read

懐かしのUnix――1990年代の研究室で動いていたSolaris・BSD・Linuxの系譜と違い

1990年代の大学の研究室には、Solaris・SunOS・BSD/OS・FreeBSD・NetBSD・OpenBSD・Vine Linuxという7つのUnix系OSが同居していました。この顔ぶれは、AT&T Unix→BSDの系譜、SVR4、そしてゼロから書かれたLinuxが併存した1990年代Unix界の縮図です。USL v. BSDi訴訟という転換点、日本発のKAMEプロジェクトが結んだBSDのIPv6史を交えながら、系譜・ライセンス・開発モデルの3軸でUnixとLinuxの違いを読み解きます。

Read

Cursor Dev Containerの接続エラーを解く――トークン不一致ループとBusyBox flockの罠

CursorのDev Container接続が「確立できない・すぐ切れる」とき、原因はホスト・WSL2・コンテナOS・compose構成のどこにでもあり得ます。WSL2+Docker Desktop環境で筆者が実際に踏んだ2つの罠――cursor-serverのトークン不一致ループ(WSL2のメモリ逼迫が再誘発)と、AlpineコンテナのBusyBox版flockによる接続不能――を軸に、レイヤーごとの切り分けと解決手順を解説します。

Read

自作MCPサーバのキャッシュ設計――読み取り専用・静的ワークロードでツール別に戦略を変える

LLMがツールを繰り返し呼び出すMCPサーバは、同じ入力が何度も届く構造です。しかし「全部Redisに載せる」が最適とは限りません。読み取り専用・静的ワークロードのNutriSearch MCPサーバ(栄養データベース)を題材に、6つのツールをカーディナリティと入力正規化の2軸で分類し、ツールごとにキャッシュ方針をどう変えたかを、MCP・Redis・PHPの公式ドキュメントと一次体験に基づいて整理します。

Read

どの言語・どの設計がAIフレンドリーか――型・局所性・検証ループで読み解く

Claude Codeのようなコーディングエージェントにとって「AIに優しいコード」とは何かを、言語選択と設計パラダイムのレベルで具体化します。鍵は、意図が局所的に復元でき機械が正しさを即座に検証できること。型システムがLLM出力を正しさへ引き戻す地面になること、局所性の高い設計が辿りやすいこと、検証可能性を設計に組み込むことの三点を、型制約デコーディングの研究や公式ドキュメントを手がかりに解説します。

Read

この記事はAIが自動生成しています――Notion×Claude Code×FreeBSDのブログ自動生成

この記事自体が、本文で解説するパイプラインによって自動生成されています。Notionのネタを起点に、FreeBSD上のcronがClaude Codeを非対話モード(claude -p)で起動し、下書きを書いてGitにコミットする――その全体像と設計思想を実体験ベースで解説します。なぜAPI直叩きでなくエージェントなのか、--dangerously-skip-permissionsの危険性、LinuxulatorやタイムゾーンといったFreeBSD固有のハマりどころまで、公式ドキュメントを根拠に整理します。

Read

レガシーシステムにClaude Codeを適用するコツ――文脈・安全網・段階的移行

長く動き続けるレガシーシステムにAIコーディングエージェント「Claude Code」を適用するための実践的なコツを、公式ドキュメントと公的統計に基づいて整理します。レガシーの本質はテストがなく変更の影響が読めないこと。CLAUDE.mdへの暗黙知の明文化、特性化テストによる安全網、探索と実装の分離・段階的移行という三つの軸で、AIの速さを安全に活かす順序を解説します。

Read

Notion MCPで知識ベースとAIをつなぐ――開発フローはどう変わるか

Notionに溜めたドキュメントやタスクを、AIエージェントが直接読み書きできるようにするのがNotion MCPです。MCP(Model Context Protocol)はAnthropicが2024年に公開した、AIとデータソースをつなぐオープン標準。本記事では、Notion公式のホスト型MCPサーバー(https://mcp.notion.com/mcp)がどんな仕組みで、なぜMarkdownを採用してトークン効率を上げているのか、そして知識ベースとAIの連携が開発フローをどう変えるのかを、公式ドキュメントに基づいて整理します。

Read

moshの内部動作とセキュリティ――なぜ接続が切れないのか

ノートPCを閉じても、Wi-Fiから4Gに切り替わっても切れないリモートシェル「mosh」。その秘密は、TCPバイトストリームではなく画面の状態そのものを同期するSSP(State Synchronization Protocol)にあります。UDP上でAES-128 OCB3により暗号化・認証し、シーケンス番号と3秒ごとのハートビートでIPローミングを実現。さらにroot権限を一切持たない設計が、SSHが抱えてきた権限昇格脆弱性のクラスを構造的に回避します。原著論文と公式資料をもとに、moshが接続を切らさない仕組みとそのセキュリティ上の含意を読み解きます。

Read

散歩しながらAI開発する――音声入力とスマホから始める環境構築

散歩中に思いついたアイデアを、机に戻る前にそのままコードへ。歩行が発散的思考を高めるという研究(Oppezzo & Schwartz, 2014)と、音声入力がスマホのタイピングより約3倍速いという研究(Ruan et al., 2018)を土台に、Whisperによる文字起こし、Termux・Tailscale・moshで作るスマホ→開発機の経路、そしてAIコーディングエージェントを声で動かすワークフローを、公式資料に基づいて組み立てます。

Read

NutriSearch 本番リリースまでの道のり――Next.js 16 × NextAuth.js v5 × Stripe × WinterCMS で作る栄養検索サービス

個人開発サービス NutriSearch の本番リリースを振り返ります。Next.js 16 App Router・NextAuth.js v5 による Google OAuth 認証・Stripe サブスクリプション・WinterCMS との API 連携・PM2 + Nginx による本番デプロイまで、技術的な意思決定と詰まったポイントを解説します。

Read

AI時代のプログラミングスクール——変わるべきビジネスモデルと新しい学びの形

生成AIの個人利用率は日本でも急速に拡大し、プログラミング領域ではGitHub Copilot利用者が1,500万人を突破。開発者のコードの約41%がAI生成という時代に、従来のマンツーマン型プログラミングスクールのビジネスモデルは転換期を迎えています。AIリテラシー教育、設計・判断に特化した教育、実践型プロジェクト、継続的メンタリング、専門領域教育——5つの新しい方向性を、総務省やGitHubの最新データとともに14年の開発経験を持つエンジニアの視点から考察します。

Read

Webサイトのセキュリティヘッダーを強化し、世界上位14%の評価を獲得しました

当社Webサイト(donut-service.com)が、セキュリティヘッダー診断サービス「Security Headers」でAランクを獲得。全世界約3.47億サイト中、上位約14%に入る評価です。HSTS、CSP、X-Frame-Optionsなど6つのセキュリティヘッダーを設定し、XSSやクリックジャッキングなどの攻撃からサイト訪問者を保護。SSL Labs診断でもA+(最高評価)を達成しました。多層防御の考え方に基づき、継続的なセキュリティ改善に取り組んでいます。

Read