2026年11月1日〜5日にやったこと

  • 振り返り
  • Claude Code
  • MCP
  • Cloudflare

僕は個人で作るものを、ほぼ Claude Code などの AI エージェントに作らせている。僕がやるのは、何を作るかを決めることと、違うと思ったところで差し戻すことである。困るのは、AI がトークンの登録や権限の追加のたびに手を止めて僕に確認してくることで、確認を待つあいだは何も進まない。11月の最初の週は、AI が僕へ確認せず最後まで進められる状態を作り、空いた手で、作りたいものへ口を出していた。

CI のトークン

CI が Cloudflare にデプロイするには、トークンを GitHub の secret に登録しておく必要がある。新しいリポジトリを作るたびに、Claude はこのトークンを登録してほしいと聞いてきた。「場当たり的ではなく根本的な解決を」と頼み、CI が使うトークンやキーは masseater.dev の Worker がその場で発行するようにさせた。今は secret を手で登録しない。自分のリポジトリに権限を足すときの確認も、「毎回聞くのやめてほしい」と言ってなくした。

GitHub の IaC とリポジトリの統合

GitHub のリポジトリの設定も、画面で揃えるのをやめて、コードで管理する IaC にさせた。IaC で書いていること自体は public にしたいが、public リポに private リポのことは書きたくない。そこで IaC は public の masseater.dev に置き、private のリポジトリ名は実行時に取ってくる形にした。

IaC ができたので、増えすぎたリポジトリも畳ませた。lint のルール集は自作の lint ツールをまとめた lint-kit へ、日本語の判定モデルのベンチマークは判定モデルの実験を集めた decision-experiments へ移した。モザイクは masseater.dev へ移し、元のリポジトリは archive した。

ESLint の撤去と TypeScript 7.1

全リポジトリから ESLint を外した。lint は Rust 製の oxlint に移していて、ESLint に残っていたのは型情報の要るルールだけだった。そのルールを oxlint で動かすパッケージを作らせ、lint-kit に入れた。

Claude は最初、このパッケージを従来の TypeScript 6 の API で組み立てていた。「なんで ts6 で組み立ててるの」と聞いて、Go で書き直された TypeScript 7 のコンパイラ tsgo に載せ替えさせたら、ESLint より速くなった。TypeScript は全リポジトリで 7.1 に、Node.js は 26 以上に揃えさせた。

依存の Effect を 4.1 に上げたときは、Claude から、古い 4.0.0 に固定したまま動かす PR がいっぱい上がってきた。「ちゃんと対応して」と言って、固定の原因だった lint-kit 側を直させた。

writing スキル

AI の書く文章には、指摘するたびに同じ癖が戻る。そこで、指摘を writing スキルへ足させ、次から AI がそれを読んで書くようにしている。全リポジトリの README も、このスキルで書き直させた。

measure-everything

AI 時代の開発においてもっとも大事なのは、実装ではなく計測である。個人の MCP をまとめたポータルが繋がらなかったとき、Claude はログも読まずに推測で修正を重ねていた。「ちゃんと計測するのが第一や」と止めて、先にログとトレースを読めるようにさせた。

この考えを、あらゆるものを既存のエコシステムベースで計測できるようにするリポジトリとして measure-everything にした。テストの中で届いたトレースを確かめる部品や、ページの表示の速さを測る部品を置いている。

公開サイトの CSP

masseater.dev では、デプロイのたびに脆弱性スキャナの ZAP が本番を検査している。警告も含めてすぐ直すという決まりを先に書いておいたので、僕が口を出さないまま、Claude は読み込んでよいスクリプトの出どころをブラウザに伝える CSP とセキュリティヘッダをサイト全体に付けた。

MCP のポータル

僕は Meta の Muse のような、持ち主の代わりに予約や買い物をこなすパーソナルエージェントを使っている。使っているうちに、パーソナルエージェントの市場が広がっていく感覚があった。エージェントが持ち主の代わりに動くには、持ち主の情報が要る。AI エージェントが外部のツールやデータを使う口は MCP という規格になっているので、自分の情報を渡す MCP を mcp.masseater.dev の 1 か所にまとめさせた。

各 MCP は、単体で普通に OAuth のログインで使えることを前提にした。Claude はログインを飛ばすサービストークンで繋ぐ案を出してきたが、それでは単体で使えなくなるので取り消させた。

konomi

パーソナルエージェントには、持ち主の好みも要る。見た動画・聴いた曲・遊んだゲーム・読んだ本の記録はサービスごとに散らばっている。統一インターフェースで各サービスの自分の情報を引けるパーソナルエージェント向けの MCP を作ったらウケそうだと思い、konomi を始めた。取り込む先は「趣味嗜好を集めて分析する観点で全て」と言い、非公式の API でしか取れないサービスも含めて、動画・音楽・ゲーム・本・イラスト・SNS まで広げさせた。

mirucord

mirucord は、Discord のサーバーの会話を AI が読めるようにする MCP である。この週、僕が Discord で使っている個人エージェントの彩葉から、mirucord で人間関係を拾いたいという要望が届いた。僕が頼んだのではなく、mirucord を使っているエージェントのほうから、足りない機能を言ってきた。

要望をそのまま作らせる前に、「必要なものを選ぶ前に取れるものを全部知るのが先」と言って、Discord の Bot が取れるものを全部調べさせた。そのうえで、mirucord は Discord で見える事実を返すだけにし、誰と誰が親しいかのような解釈は使う側のエージェントに任せると決めた。メンバー名簿・通話の入退室・リアクションを返す機能を足させた。一度入れた招待の記録などは、「今要らない、無駄な機能を残すな」と消させた。

masseater.dev に置いたもの

対象作らせたもの口を出したこと
SloppediaWikipedia 風の個人の百科事典もどき。外部の記事を紹介する短いメモの置き場を置き換えた「君の投稿も入れるんだから君がやりなよ」と作るのも Claude に任せた。AI が書けるのは Sloppedia だけにした
mosaicキャラクターの絵を、そのキャラクターの曲の動画のサムネイルで描くモザイク。歌声合成キャラを大量に足した「バリエーションが落ちても良いから細かく」「ハードコードより自動調整」
記事の図記事に埋め込める、触って動かせる図「mermaid はしょぼい」

rpp-kit は、音楽制作ソフト REAPER のプロジェクトファイルを TypeScript の型つきで読むデモである。別のドメインにあったのを「masseater.dev 配下にしなよ」と移させ、読んだファイルがコードとしてどう扱われるかを試せる playground を足させた。全部を同時に並べた画面には「codepen 見て」と言い、ファイルの型を手で書いた例には「自分で declare は普通にダメ」と返した。

アニメの撮影処理を工程ごとに試せる撮影ラボと、ボタンを背面に移したコントローラー背面打ちスプリットパッドの 3D モデルも作らせた。

確認を待つ時間が減ったぶん、この週に僕がしていたのは、ほとんどが上がってきたものを見て違うと言うことだった。