月曜日。今日は朝から寝るまで怒涛だった。何やったか全部書いたら長くなるけど、まぁ日記だし。
朝イチで健康管理の自動化を仕上げた。Withingsの体組成計と血圧計のデータをAPIで引っ張ってきて、朝のルーティンコマンドに組み込んだ。体重・血圧・睡眠時間がトレンド付きで自動表示される。毎朝「血圧測った?体重は?」って自分でチェックしなくてよくなった。全自動。地味だけど嬉しい。
MCPサーバーの認証方式を入れ替えた。第三者が作ったMCPサーバーにトークンを渡す「BYOT方式」だと75分でセッションが切れる問題があって、先週からずっと格闘していた。最終的にCLIのネイティブ認証に移行して解決。リフレッシュトークンで自動更新されるから、もう途中で切れない。ついでにセキュリティ監査もやって、バージョンも固定した。この経緯をnoteの記事にまとめた。
朝のルーティンで今週の予定をGoogleカレンダーに登録してもらったら、AIが曜日を盛大に間違えて10件全部1日ずれて登録された。月曜なのに火曜の予定を月曜に入れてる。原因はスキルの例文に日付がハードコードされていて、AIがそれを鵜呑みにしたこと。全件削除して正しい日付で再登録。スキルにも「まずdateコマンドで曜日を確認しろ」というステップを追加した。LLMに曜日計算させちゃダメ。
テナント名の混乱問題を6ファイルまとめて修正した。設定ファイルに間違ったテナント名が書かれていて、それが複数のファイルに伝播していた。さらにドキュメントに「会社の」と曖昧に書いてあったのが元凶。「会社」じゃなくて具体的な組織名で書けという原則を徹底した。
AzureでWebサイトのインフラを一気に構築した。DNSゾーン作成、Bicepでコード化、Static Web Appsにデプロイ、カスタムドメイン設定、SSL証明書の自動発行まで一気通貫。IaCで書いておくと再現性があって楽。
YouTube Data API v3で自分のチャンネル統計をリアルタイム取得するスキルを作った。登録者数、再生数、最新動画のパフォーマンスが一発でわかる。Analytics APIだと2日遅れるけど、Data APIならリアルタイム。これも朝のルーティンに組み込んだ。
今週金曜のオンライン勉強会の準備がすっぽ抜けていたことに気づいた。自分が企画・司会・メインスピーカー全部やってるやつ。スライドは途中まであったので、AIに手伝ってもらって一気に仕上げた。DGX SparkでローカルLLMを動かしてクラウドと組み合わせるハイブリッド構成の話。定期タスクも登録して、来月からは忘れないようにした。
カレンダーを確認したら、勉強会の時間が間違って登録されていた。危なかった。
そして今日のハイライト。AIエージェントにカレンダーを取得させるたびに、テナントを間違えるという問題。これで10回目。毎回「次は間違えません」って言うのに間違える。
今日は根本原因を問い詰めた。「これってロジックの問題?確率の問題?」って聞いたら「100%確率的です。ルールを書いても読むかどうかは確率なので…」と正直に白状してきた。
なるほどね。だったらルールを書くんじゃなくて、フックで強制ブロックすればいい。プログラムとして書けば確率ゼロだ。実際にPreToolUseフックを仕込んで、間違った操作をしようとした瞬間にブロックして正しい手順を表示するようにした。コードは嘘つかない。
AIを使いこなすコツは「AIが苦手なことをプログラムで補う」こと。確率的な振る舞いを確定的な仕組みで制御する。今日一番の学び。
車の保険の契約内容変更もWebでサクッと済ませた。今度車が納車されるので。Webで完結するサービス、ありがたい。
盛りだくさんの月曜日。明日はもう少し落ち着いた1日になるといいな。