<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>自動化 on Claude Code 始めました</title><link>https://kitepon-rgb.github.io/WebAICoding/tags/%E8%87%AA%E5%8B%95%E5%8C%96/</link><description>Recent content in 自動化 on Claude Code 始めました</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Mon, 06 Apr 2026 12:00:00 +0900</lastBuildDate><atom:link href="https://kitepon-rgb.github.io/WebAICoding/tags/%E8%87%AA%E5%8B%95%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>AIアシスタントに手足を増やそうと思ったら人格も増やしていた件</title><link>https://kitepon-rgb.github.io/WebAICoding/post/ai-assistant-personality/</link><pubDate>Mon, 06 Apr 2026 12:00:00 +0900</pubDate><guid>https://kitepon-rgb.github.io/WebAICoding/post/ai-assistant-personality/</guid><description>&lt;h2 id="前回のあらすじ"&gt;前回のあらすじ&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kitepon-rgb.github.io/WebAICoding/post/discord-ai-assistant/"&gt;前回の記事&lt;/a&gt;で、Discord経由でClaude Code CLIを操作するBot「OpenCClaw」を作った話を書いた。&lt;/p&gt;
&lt;p&gt;骨組みだけ作って、&lt;code&gt;tools/&lt;/code&gt; にファイルを置けばClaude自身が使えるMCPツールになる仕組み。Claudeが自分で手足を増やしていく環境。天気、カレンダー、Gmail、出発通知——Discordから「これ欲しい」と言うだけでツールが生えていった。&lt;/p&gt;
&lt;p&gt;便利だった。便利だったんだけど、2つの出来事が重なって、気づいたらAIに人格を実装していた。自分でもよく分からない。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="きっかけは2つ"&gt;きっかけは2つ&lt;/h2&gt;
&lt;h3 id="x-apiの大型アップデート"&gt;X APIの大型アップデート&lt;/h3&gt;
&lt;p&gt;4月5日、Xが大きなAPIアップデートを発表した。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pay-Per-Use&lt;/strong&gt;が全世界でGA（従量課金、月額固定プランから移行）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XMCP Server&lt;/strong&gt; — 公式のMCPサーバー。AIエージェントがXを直接操作できる&lt;/li&gt;
&lt;li&gt;公式のPython・TypeScript SDK&lt;/li&gt;
&lt;li&gt;無料のAPI Playground&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elon自身が「Try using the X API」と推していた。要するに「AIエージェントにXを使わせる」ことを公式が後押しし始めた。&lt;/p&gt;
&lt;p&gt;じゃあアシスタントにXアカウント持たせて発信させるか、くらいの軽いノリだった。X投稿機能を付けるだけのつもりだった。&lt;/p&gt;
&lt;h3 id="便利だけど無機質"&gt;便利だけど、無機質&lt;/h3&gt;
&lt;p&gt;もう一つは、日々の使い心地の話。&lt;/p&gt;
&lt;p&gt;朝7時に天気と予定を教えてくれる。出発前に運行情報付きで通知してくれる。メールも管理してくれる。全部ちゃんと動く。&lt;/p&gt;
&lt;p&gt;でも、なんだろう。&lt;strong&gt;道具感がすごい&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;CRONが起きて、ツールを叩いて、結果を整形して、Discordに投げる。正確で効率的。だけどそこに温度がない。毎朝同じトーンの報告が流れてきて、自分はそれを読んで「ふーん」で終わる。&lt;/p&gt;
&lt;p&gt;便利な通知botと、自分の秘書は、やっぱり違う。&lt;/p&gt;
&lt;p&gt;秘書だったら、天気を伝えるときに「今日寒いから上着持ってった方がいいよ」くらい言うだろう。朝のテンションだって日によって違うはずだ。こっちが忙しそうなときは空気を読んで短く済ませるかもしれない。&lt;/p&gt;
&lt;p&gt;そういう「人間っぽさ」が欲しかった。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="ベルが生まれるまで"&gt;ベルが生まれるまで&lt;/h2&gt;
&lt;p&gt;じゃあどうするか。考えたのは3つだった。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;人格を定義する&lt;/strong&gt; — 口調、性格、呼び方、テンション。システムプロンプトで渡す&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;記憶を持たせる&lt;/strong&gt; — 過去の会話や行動を覚えていて、文脈を踏まえた応答ができる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自発的に動く&lt;/strong&gt; — 指示されなくても、状況を見て自分から行動する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この3つが揃えば、「道具」から「秘書」になれる気がした。&lt;/p&gt;
&lt;p&gt;名前はベル。Quoさんの専属秘書。明るくて元気で、女子高生風のカジュアルな口調。&lt;/p&gt;
&lt;p&gt;……と、こう書くと「キャラ設定を考えるのが楽しかっただけでは？」と思われそうだが、半分は正解だ。でも残りの半分は技術的な理由がある。&lt;strong&gt;人格がはっきりしていないと、LLMの応答がブレる&lt;/strong&gt;。テンションも口調も毎回違うものが返ってくる。それを安定させるには、具体的なペルソナ定義が必要だった。&lt;/p&gt;
&lt;p&gt;ちなみに一つハマったポイントがある。口調を「女子高生風」にしたかったんだが、そのまま指示するとLLMが未成年キャラの再現を拒否する。セーフティフィルターに引っかかるのだ。だからペルソナ定義には「実年齢の設定ではなく口調・テンションの話」とわざわざ但し書きを入れている。つまり女子高生ではない。完璧だ。LLMにキャラを演じさせるなら、こういう地味な調整が要る。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="bellbotベルの脳"&gt;BellBot——ベルの脳&lt;/h2&gt;
&lt;p&gt;LogBotは既にある。Discord ↔ Claude CLIの橋渡しをするやつだ。&lt;/p&gt;
&lt;p&gt;ベルの脳は、これとは別プロセスで動く&lt;strong&gt;BellBot&lt;/strong&gt;として作った。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Discord ──→ LogBot (:18800) ──→ Claude Code CLI ──→ MCP Server
 │
BellBot (:18801) ← event通知 ← LogBot ├── tools/（既存ツール群）
 │ └── bell用MCPツール
 ├── 記憶DB（SQLite）
 ├── ベクトル検索（Ruri）
 ├── X投稿クライアント
 └── Claude CLI（ベル専用セッション）
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;BellBotは自前のHTTPサーバー（ポート18801）を持っていて、LogBotからイベント通知を受け取る。Quoさんの発言、ツールの実行結果、全部がBellBotに流れてきて、記憶として蓄積される。&lt;/p&gt;</description></item><item><title>手足を勝手に増やすAIアシスタントを作った話</title><link>https://kitepon-rgb.github.io/WebAICoding/post/discord-ai-assistant/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0900</pubDate><guid>https://kitepon-rgb.github.io/WebAICoding/post/discord-ai-assistant/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;Anthropicの規約変更で、サードパーティのハーネスからClaude系のサブスクOAuth利用がブロックされた。世の中はそこそこ騒いでいたが、正直なところ、俺にはあんまり関係のない話だった。&lt;/p&gt;
&lt;p&gt;Claude Code CLIは手元にある。Discordに投げたメッセージをCLIに渡して、返事をDiscordに返す。それだけの橋を架ければいい。&lt;/p&gt;
&lt;p&gt;だから作った。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="骨組みだけ作った"&gt;骨組みだけ作った&lt;/h2&gt;
&lt;p&gt;作ったのは&lt;strong&gt;LogBot&lt;/strong&gt;。Discord上のメッセージをClaude Code CLIに転送して、応答をDiscordに返す。それだけのBot。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Discord ──→ LogBot ──→ Claude Code CLI
 ↑ │
 └── 応答を投稿 ──┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最低限の骨組みとして、こんな機能を持たせた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;セッション管理&lt;/strong&gt; — UUIDベースでClaude Codeのセッションを維持。VSCodeのセッションとは完全に分離される&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;メッセージキュー&lt;/strong&gt; — Claudeが処理中にメッセージが来てもキューに溜めて順番に処理。取りこぼさない&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;承認フロー&lt;/strong&gt; — Claudeがファイルを編集しようとしたら、Discordに通知が飛んで、リアクション（✅ / ❌）で承認か拒否を返せる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCPサーバー&lt;/strong&gt; — &lt;code&gt;tools/&lt;/code&gt; ディレクトリにファイルを置けば、Claude側からツールとして使える&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで大事なのは、&lt;strong&gt;MCPツールは最初ゼロだった&lt;/strong&gt;ということ。天気もカレンダーも電車情報も、何もない。ただの骨組み。&lt;/p&gt;
&lt;p&gt;でも、この骨組みには一つだけ強烈な特性がある。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claudeはファイルを書ける。&lt;/strong&gt; つまり &lt;code&gt;tools/&lt;/code&gt; にJavaScriptファイルを追加できる。MCPサーバーは &lt;code&gt;tools/&lt;/code&gt; 配下を自動スキャンして登録する。&lt;/p&gt;
&lt;p&gt;Claudeが自分で自分の手足を作れる。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="時計が欲しいから始まった"&gt;「時計が欲しい」から始まった&lt;/h2&gt;
&lt;p&gt;最初にDiscordからClaudeに頼んだのは些細なことだった。&lt;/p&gt;
&lt;p&gt;「今何時？」&lt;/p&gt;
&lt;p&gt;Claude Code CLIはシステムの時刻を取れるが、MCPツールとして切り出されていたほうがスマートだ。Claudeに「時刻を返すMCPツールを作ってくれ」と頼んだ。&lt;/p&gt;
&lt;p&gt;数秒で &lt;code&gt;tools/current-time.js&lt;/code&gt; が生えた。&lt;/p&gt;
&lt;p&gt;次は「天気が知りたい」。Open-Meteoという無料の天気APIを使った &lt;code&gt;tools/weather.js&lt;/code&gt; が生えた。APIキーすら不要。&lt;/p&gt;
&lt;p&gt;「Googleカレンダーの予定を見たい」。OAuth認証のヘルパーごと、&lt;code&gt;tools/gcal-auth.js&lt;/code&gt; と &lt;code&gt;tools/gcal-list.js&lt;/code&gt; が生えた。&lt;/p&gt;
&lt;p&gt;「Gmailも読みたい」。同じ要領で、認証・一覧・本文読み取り・送信・フィルタ・一括削除まで、Gmailツール群が一式生えた。&lt;/p&gt;
&lt;p&gt;全部、Discordから「これ欲しい」と言っただけだ。自分はコードを一行も書いていない。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="cronが叩くのはコードじゃない"&gt;CRONが叩くのはコードじゃない&lt;/h2&gt;
&lt;p&gt;ツールが揃ってくると、次に欲しくなるのは定期実行だ。&lt;/p&gt;
&lt;p&gt;「毎朝7時に天気と電車の運行情報と今日の予定を教えてほしい」&lt;/p&gt;
&lt;p&gt;ここで普通なら、天気APIを叩いてカレンダーAPIを叩いて運行情報をスクレイピングして整形して送信する、というスクリプトを書いてCRONに登録する。&lt;/p&gt;
&lt;p&gt;でもせっかくClaude使うんだから、コードじゃなくてプロンプト渡した方が面白い。&lt;/p&gt;</description></item><item><title>AIにサーバーを任せて3日間で起きたこと</title><link>https://kitepon-rgb.github.io/WebAICoding/post/ai-server-management-log/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>https://kitepon-rgb.github.io/WebAICoding/post/ai-server-management-log/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kitepon-rgb.github.io/WebAICoding/post/ai-server-management/"&gt;前回の記事&lt;/a&gt;で、自宅サーバーの管理をAIに丸ごと任せた話を書いた。深夜にAIがパトロールして、昼間は監視スクリプトが異常を検知したらAIが出動する仕組みだ。&lt;/p&gt;
&lt;p&gt;仕組みを作った話はした。では、実際に動かしてみてどうだったか。3日間の運用で起きたことを書く。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="監視スクリプトが自分自身を壊した"&gt;監視スクリプトが自分自身を壊した&lt;/h2&gt;
&lt;p&gt;運用3日目の朝、監視スクリプトが異常を検知した。&lt;code&gt;license_api_prod&lt;/code&gt;コンテナが応答しない、と。&lt;/p&gt;
&lt;p&gt;AIが出動して調査を始めた。SSHでサーバーに接続して、コンテナの状態を確認する。結果——&lt;strong&gt;コンテナは正常に動いていた。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;誤検知だった。しかも2分後、今度は&lt;code&gt;ddnser&lt;/code&gt;でも同じ誤検知が出た。&lt;/p&gt;
&lt;h3 id="原因ssh接続の開きすぎ"&gt;原因：SSH接続の開きすぎ&lt;/h3&gt;
&lt;p&gt;AIが突き止めた原因はこうだ。&lt;/p&gt;
&lt;p&gt;監視スクリプトは60秒ごとにサーバーの状態をチェックする。システムリソース（ディスク、メモリ、スワップ）で3本、7つのコンテナのヘルスチェックで最大9本。合計10本以上のSSH接続を&lt;strong&gt;同時に&lt;/strong&gt;開いていた。&lt;/p&gt;
&lt;p&gt;OpenSSHには&lt;code&gt;MaxStartups&lt;/code&gt;という設定がある。同時接続数の上限だ。デフォルトは10。監視スクリプトがこの上限を超えていて、接続が弾かれていた。つまり、&lt;strong&gt;監視スクリプト自身がサーバーに負荷をかけて、自分のSSH接続を失敗させていた。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="1回目の修正並列を直列に"&gt;1回目の修正：並列を直列に&lt;/h3&gt;
&lt;p&gt;AIはヘルスチェックの実行方式を&lt;code&gt;Promise.allSettled()&lt;/code&gt;による全並列から&lt;code&gt;for...of&lt;/code&gt;による順次実行に変更した。SSH接続が同時に1本しか開かれなくなった。&lt;/p&gt;
&lt;h3 id="2回目の修正リトライの追加"&gt;2回目の修正：リトライの追加&lt;/h3&gt;
&lt;p&gt;直列にしても、一時的なSSH切断は起こりうる。サーバー側の負荷やネットワークの瞬断で、1回だけ接続が切れることはある。&lt;/p&gt;
&lt;p&gt;2分後の2回目の誤検知を受けて、AIは「SSHトランスポートエラー」を判別するヘルパー関数を追加した。&lt;code&gt;Connection closed&lt;/code&gt;、&lt;code&gt;Connection refused&lt;/code&gt;、&lt;code&gt;ETIMEDOUT&lt;/code&gt;などのパターンを検出して、3秒待ってから1回リトライする。リトライ後も失敗した場合だけ異常として報告する。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修正は2段階。並列→直列でSSH接続数を削減し、リトライで一時的な切断に対応。&lt;/strong&gt; どちらも人間の介入なし。Discordに「修正しました」と通知が来て、それで終わりだ。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="深夜パトロールが見つけたもの"&gt;深夜パトロールが見つけたもの&lt;/h2&gt;
&lt;p&gt;毎日深夜4時にAIがサーバー全体を巡回する。セキュリティ設定、リソース使用量、コンテナの構成、ログの中身。人間が日常的にチェックしない部分を、AIが代わりに見る。&lt;/p&gt;
&lt;h3 id="nextcloudのログが21gb"&gt;Nextcloudのログが21GB&lt;/h3&gt;
&lt;p&gt;運用2日目のパトロールで、AIがNextcloudのログファイルの異常に気づいた。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/var/mnt/nextcloud_data/nextcloud.log&lt;/code&gt; — &lt;strong&gt;21.3GB。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ログファイルが21GBに膨れ上がっていた。NFS上にあるためディスクの逼迫は起きていなかったが、ログローテーションが機能していない。自分では気づけなかった。&lt;/p&gt;
&lt;h3 id="selinuxの拒否ログが1241件"&gt;SELinuxの拒否ログが1,241件&lt;/h3&gt;
&lt;p&gt;もう一つ。SELinuxがauction-botの&lt;code&gt;auction.db&lt;/code&gt;に対するlockアクセスを毎分拒否していた。過去24時間で1,241件。&lt;/p&gt;
&lt;p&gt;SELinuxはPermissiveモードで動いているので、実際にブロックはされていない。アプリは正常に動く。ただ、拒否のたびに&lt;code&gt;setroubleshoot&lt;/code&gt;というデーモンが起動して分析を行い、CPU 22.9%を一時的に消費していた。&lt;/p&gt;
&lt;p&gt;実害はないが、無駄にリソースを食っている。AIが見つけなければ、ずっと放置されていたと思う。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="日々の定点観測"&gt;日々の定点観測&lt;/h2&gt;
&lt;p&gt;パトロールは毎日サーバー全体を見て回る。何を見るかもAIが判断するが、結果として日をまたぐとトレンドが見えてくる。&lt;/p&gt;
&lt;h3 id="スワップ使用率の推移"&gt;スワップ使用率の推移&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;日付&lt;/th&gt;
 &lt;th&gt;スワップ使用率&lt;/th&gt;
 &lt;th&gt;備考&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;4/2&lt;/td&gt;
 &lt;td&gt;89%&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4/3&lt;/td&gt;
 &lt;td&gt;92%&lt;/td&gt;
 &lt;td&gt;微増傾向&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4/4&lt;/td&gt;
 &lt;td&gt;62%&lt;/td&gt;
 &lt;td&gt;サーバー再起動でリセット&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;スワップが日々積み上がっていく傾向をAIが追跡していた。4/4にサーバーが再起動されてリセットされたが、再起動なしの長期稼働ではスワップが逼迫する可能性がある。AIはレポートに「継続監視が必要」と毎回書いている。&lt;/p&gt;
&lt;h3 id="fail2banのban推移"&gt;fail2banのBAN推移&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;日付&lt;/th&gt;
 &lt;th&gt;現在BAN中&lt;/th&gt;
 &lt;th&gt;累計BAN&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;4/2&lt;/td&gt;
 &lt;td&gt;14 IP&lt;/td&gt;
 &lt;td&gt;235&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4/3&lt;/td&gt;
 &lt;td&gt;10 IP → 14 IP&lt;/td&gt;
 &lt;td&gt;242 → 293&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4/4&lt;/td&gt;
 &lt;td&gt;8 IP&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SSHへのブルートフォース攻撃が日常的に来ている。&lt;code&gt;admin&lt;/code&gt;、&lt;code&gt;ubuntu&lt;/code&gt;、&lt;code&gt;mysql&lt;/code&gt;といった汎用ユーザー名での接続試行。fail2banが淡々とBANしている。パスワード認証は無効で鍵認証のみなので突破はされないが、攻撃が来ていること自体は知っておきたい。AIがレポートで毎日報告してくれる。&lt;/p&gt;</description></item><item><title>サーバー管理をAIに丸ごと任せてみた話</title><link>https://kitepon-rgb.github.io/WebAICoding/post/ai-server-management/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://kitepon-rgb.github.io/WebAICoding/post/ai-server-management/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kitepon-rgb.github.io/WebAICoding/post/claude-code-deploy/"&gt;以前の記事&lt;/a&gt;で、AIにSSHでサーバーを直接触らせたら楽だったという話を書いた。デプロイスクリプトを作らせて、ビルドからコンテナ更新まで一発で終わるようにした。&lt;/p&gt;
&lt;p&gt;その後、&lt;a href="https://kitepon-rgb.github.io/WebAICoding/post/discord-bot-to-saas/"&gt;自分専用のBotをSaaS化した&lt;/a&gt;。これも本番は自宅サーバーで動いている。&lt;/p&gt;
&lt;p&gt;ここまで来ると、次に思うことは一つだ。&lt;strong&gt;運用も任せたらいいんじゃないか？&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="問題があったら直させればいい"&gt;問題があったら直させればいい&lt;/h2&gt;
&lt;p&gt;AIはコーディングが得意だ。セキュリティの知識もある。サーバーの設定も読める。&lt;/p&gt;
&lt;p&gt;だったら、サーバーに問題が起きた時に、AIに調べさせて、直させて、デプロイまでやらせればいい。人間が夜中に叩き起こされてログを読む必要はない。&lt;/p&gt;
&lt;p&gt;もう一つ、大事な理由がある。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;自分がコードベースで指示したら、自分の知識の範囲内の行動しかしてくれなくなる。&lt;/strong&gt; セキュリティの設定をどうすべきか、コンテナの構成に問題がないか——正直、自分よりOpusのほうが詳しい。だから細かい手順を指示するのではなく、Opusの自律的な判断に委ねることにした。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="仕組み"&gt;仕組み&lt;/h2&gt;
&lt;p&gt;作ったのは、Electronのタスクトレイに常駐する監視アプリだ。&lt;/p&gt;
&lt;h3 id="昼間--軽量監視"&gt;昼間 — 軽量監視&lt;/h3&gt;
&lt;p&gt;AIをずっと動かすとMAXプランの使用量を食う。だから昼間はAIを使わない。&lt;/p&gt;
&lt;p&gt;代わりに、監視スクリプトが60秒ごとにSSHでサーバーの状態をチェックする。コンテナが動いているか、HTTPのレスポンスが返ってくるか、データベースに接続できるか。異常を検知したらまずコンテナの再起動を試みて、それでも駄目ならAIを起動する。&lt;/p&gt;
&lt;h3 id="深夜--aiのフルパトロール"&gt;深夜 — AIのフルパトロール&lt;/h3&gt;
&lt;p&gt;毎日深夜4時に、AIがサーバー全体を巡回する。セキュリティ設定、リソース使用量、コンテナの構成。昼間の監視スクリプトでは拾えない問題を、AIの目で洗い出す。&lt;/p&gt;
&lt;p&gt;なぜ深夜か。MAXプランの使用量は時間経過で回復する。深夜に使っても自分が起きた頃には回復しているし、使わなければその枠は無駄になるだけだ。有効活用しない手はない。&lt;/p&gt;
&lt;h3 id="監視スクリプトもaiが作る"&gt;監視スクリプトもAIが作る&lt;/h3&gt;
&lt;p&gt;面白いのは、監視スクリプト自体もAIに作らせていることだ。深夜のパトロール時に、サーバーの構成を見て、何をどう監視すべきかをAI自身が判断して、スクリプトを生成・更新する。&lt;/p&gt;
&lt;p&gt;自分が「このポートを監視しろ」と指定するのではなく、AIが「このコンテナにはこのチェックが必要だ」と決める。さっき書いた通り、自分の知識に閉じたくないからだ。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3層のエージェント構造"&gt;3層のエージェント構造&lt;/h2&gt;
&lt;p&gt;異常が検知されてAIが動き出すとき、1つのAIが全部やるわけではない。役割を3層に分けている。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;親エージェント&lt;/strong&gt; — 症状を検知して、どのアプリに問題があるかを特定する。ここで大事なのは、親は&lt;strong&gt;症状だけを渡す&lt;/strong&gt;ということだ。「コンテナが落ちた」「HTTPが500を返した」という事実だけ。なぜ落ちたか、どう直すべきかは親が判断しない。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;子エージェント&lt;/strong&gt; — 該当アプリのプロジェクトで起動して、原因を調査し、コードを修正し、テストして、デプロイする。症状から原因を特定するのは子の仕事だ。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;孫エージェント&lt;/strong&gt; — 子が立てた修正方針を監査する。「この修正で別の問題が起きないか」をチェックしてから、実行に移る。&lt;/p&gt;
&lt;p&gt;なぜ親が診断しないかというと、子のほうがそのプロジェクトに詳しいからだ。子は該当アプリのプロジェクトフォルダで起動するので、CLAUDE.mdもコードも全部読める。親はサーバー全体を見ているだけで、個々のアプリの内部構造は知らない。親が原因まで推測すると、その推測に引っ張られる。だから症状だけ渡して、現場に判断させる。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="実際に起きたこと"&gt;実際に起きたこと&lt;/h2&gt;
&lt;p&gt;先日、監視スクリプトがエラーを検知した。AIが出動して調査を始めた。&lt;/p&gt;
&lt;p&gt;結果：&lt;strong&gt;監視スクリプト自身のバグだった。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AIが作った監視スクリプトのエラーを、AIが自分で見つけて、自分で直した。人間は何もしていない。Discordに「修正しました」と通知が来て、それで終わりだ。&lt;/p&gt;
&lt;p&gt;笑い話みたいだが、これは仕組みがちゃんと動いている証拠でもある。完璧なスクリプトを最初から書く必要はない。問題が起きたら直す——そのループが自動で回っている。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="自分のサーバーだからできること"&gt;自分のサーバーだからできること&lt;/h2&gt;
&lt;p&gt;こういう話をすると「無責任だ」と思う人もいるだろう。セキュリティを商売にしている人から見れば、AIに判断を丸投げするなんて、とんでもないかもしれない。&lt;/p&gt;
&lt;p&gt;でも俺は個人開発者だ。自分のサーバーで、自分のサービスを動かしている。セキュリティやサーバー管理の知識は、正直、自分よりOpusのほうが持っている。自分より詳しいやつに頼るのは、無責任ではなく合理的だと思っている。&lt;/p&gt;
&lt;p&gt;もちろん、これを他人に配る気はない。自分のサーバーだから好きにできるが、他人のサーバーをぶっ壊したら洒落にならない。「自分用」と割り切っているからこそ、AIに任せきれる。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="おわりに"&gt;おわりに&lt;/h2&gt;
&lt;p&gt;SSHでサーバーを触らせるところから始まって、デプロイを任せて、SaaS化を任せて、今は運用まで任せている。&lt;/p&gt;
&lt;p&gt;できるだけ自分の知識で縛らず、AIの判断に委ねる。そうすると、自分が知らなかった問題をAIが見つけて、自分では書けなかった修正をAIが入れてくれる。自分で監視スクリプトを書いていたら、そのバグには気づけなかった。&lt;/p&gt;
&lt;p&gt;個人開発者がサーバーを運用するのは大変だ。でも今は、深夜のうちにAIが見回ってくれる。朝起きたらDiscordに「異常なし」と来ている。それだけで安心して寝られる。&lt;/p&gt;
&lt;p&gt;指示を細かく書くより、任せたほうがうまくいく。そういう付き合い方が、だんだん見えてきた。&lt;/p&gt;</description></item></channel></rss>