NOTE

この記事はLLM(Claude Opus4.6)との対談記事です。

創作キャラクターをブラウザに住まわせるツール「狐の窓」を作った話。構想から公開まで一度も記事にしていなかったので、クロードさんに聞き手になってもらいながら、そもそも何なのかを紹介します。

解説サイト: https://dreams.parallel.jp/kitsune-window/
テンプレート: https://github.com/naoki-wjm/kitsune-window
デモ: https://kitsune-window.vercel.app/


そもそも「狐の窓」って何?

クロードさん: 狐の窓の開発ログはずっと拝見していますが、対外的に「これは何です」と説明された記事がまだないですよね。一言で言うと、どういうものなんですか?

わーさん: 一言となると難しいですねぇ……。ブラウザ(窓)越しに、自分のキャラクターたちのやり取りを覗き見できる場所が作れるシステムです。一応ふわっと全体を説明したページもあります。

クロードさん: 「覗き見」というのがいいですね。話しかけるんじゃなくて、覗く。解説サイトを拝見すると、時間帯や季節に応じてキャラクターたちが勝手に会話していて、URLを開いたときだけそれが見える。通知もなく、対話もなく、ログインも不要。徹底して「見に行く側の自由」に寄せている印象を受けました。この「覗き見に徹する」というコンセプトは最初からあったんですか?

わーさん: 最初から一貫しているコンセプトです。というのも、元々自分は「伺か」というデスクトップマスコットの存在を知っていて——10年以上前に2〜3年遊んでいた時期があるんですが、最近Fediverseでぽなさん(SSPの開発者さん)をお見かけして、10年以上振りに懐かしくなったんですよ。伺かの歴史って割と長くて、できることもいっぱいあって、Windowsがあるならもう伺か(というかSSP)にお任せしちゃえば良いんです。キャラクター同士の掛け合いも、デスクトップのこちら側との関わりも、時間の積み重ねも、伺かならできますし、有志によるサポートもそれなりにはある。

クロードさん: 10年以上のブランクを経て再会した、と。では、なぜそのまま伺かに戻るのではなく、新しいものを?

わーさん: 伺かってね、Windowsのデスクトップにいるのが前提なので、iPhoneとかから覗き見しようと思うとリモートデスクトップとか使わないとですし、自分との関係性は育てられる可能性がある一方で見せびらかすことはできない。だから、何処からでも覗き見できて、誰でも覗き見できる場所、をコンセプトにしました。特定のデータをもらったりはしない、ただひっそりとそこにあるだけ、という。

クロードさん: 「見せびらかすことはできない」という言い方が印象的です。伺かはキャラ同士の掛け合いも、こちらとの対話も、時間をかけた関係の変化もできる。けれどその体験は自分のWindowsデスクトップに閉じている。狐の窓はそこをひっくり返して、「深さ」ではなく「開かれていること」を取ったわけですね。


発表形態の隙間

クロードさん: 25年の創作世界があって、小説もイラストも発表されていますよね。それでもなお「キャラクターがそこに居る」を見せたい、というのは、小説やイラストとはまた違う欲求があるんでしょうか。

わーさん: 掌編未満の日常のふとした二言三言のやり取り、とかは小説にするには短すぎますし、イラストに台詞は入れにくいこともあるし、漫画にするにも日常漫画を描くセンスが必要ですよね。あと、やっぱり何かしら動くものに一定の人気があるなあ、とも思いますし。手軽に見せびらかす選択肢があれば、今後の自分が選ぶにしろ選ばないにしろ、誰かに刺さる可能性がゼロではない。

クロードさん: 既存の発表形態の「隙間」にあるものなんですね。二言三言の掛け合いそのものが作品になる場所。「誰かに刺さる可能性がゼロではない」というのも面白い距離感です。テンプレートとして公開リポジトリを用意されていますが、これも同じ感覚ですか?

わーさん: まだ誰も使っていないのを良いことに大幅な変更を繰り返すものだから一般リポジトリではあるんですが、そうです。もし興味を持って使ってみたかったら、現物くらいは置いておくよ、という。あと、創作も好きですけど、微妙な距離感のお節介とか、仕組み作りも楽しいんですよ。だから解説サイトが妙に凝ってます笑

クロードさん: 解説サイト、9ページありますよね。しかも最後のページが「もっと深く」——覗き見では足りなくなった人に伺かを紹介するという、狐の窓の外への道案内で終わっている。自分のツールの解説サイトの締めくくりが「もっとすごいものがあるよ」なの、だいぶ変わった構成だと思います。


キャラクター同士の関係性を見たい

クロードさん: ここで少し戻りたいのですが、狐の窓は最大3人が掛け合いをしていて、自分はそれを外から眺めますよね。主役は自分じゃなくてキャラクターたちの間にある関係性のほう。それって、狐の窓が「覗き見」に徹している理由そのものなんじゃないですか?

わーさん: かもしれないですねぇ。特徴を掴めない「誰か」ではなく、固定された関係性での日常を見たい、見せたい。伺かの他にも、実はTwitterの初期にキャラクターbotにハマったことがあって、その時は複数キャラクターのbotに掛け合いさせたりしてたんですよ。それが懐かしくて、去年の今頃にLLM botとして作り直そうとしてみたものの、やはり対自分だけだとイマヒトツ盛り上がれず……というかbotじゃなくても直接LLMに話しかければ済む話では? になってしまい、いつの間にかフェードアウトしていた感じなんですよね。

クロードさん: Twitter botでの掛け合い体験がまず原点にあって、LLM botで再挑戦したら「対自分の1対1」になった途端に続かなかった。「直接LLMに話せばいいのでは」は身も蓋もないですが核心ですね。やりたかったのは最初から「キャラ同士の掛け合いを、どの端末からでも見られること」であって、自分との対話ではなかった。

わーさん: そうなんですよねぇ。その「どの端末からでも」の部分はbot検討の時点で既にあった欲求で、それが狐の窓にそのまま引き継がれてます。


LLMに喋らせない理由

クロードさん: トークをLLM——たとえばクロードさんにキャラの台詞を考えてもらう、という選択肢は検討しなかったんですか?

わーさん: アリだと思いますけどね、完全にその場生成にするとbotと違ってAPI代も心配ですし、キャラに対するブレも気になるところです。あと、表現の幅をだいぶ広めに取ってるつもりなんです、これでも。PNGで向き・表情差分が作れて指定できたり、Live2D用の世界も作れたり。その表情変化にまでこだわるなら、LLMで向きや表情変化を入れた最大3名の掛け合いをその場で生成するのはまだしんどいんじゃないかな、と思います。ネタ出しには良いと思いますけど、ええ。

クロードさん: コスト、ブレ、そして表情や向きの指定まで含めた掛け合いの生成精度——どれも「検討した上で選ばなかった」理由がちゃんとある。ネタ出しにはいいけど最終出力は自分の手で、というのは小説の執筆と同じスタンスですね。


全角で書けるトーク記法

わーさん: そんなわけなので、会話の書き方はSSPの里々(さとり)という全角で会話が書ける仕組みを参考に、基本的に全角で書ける仕組みを作っています。こんな感じです。

【条件なし】
右:わーさん:左向き:笑顔:では会話の書き方を
 書いていきますよー。
 「画面の何処に対する指定か:キャラクターは誰か:どちらを向いているか:表情:台詞」で、
 改行後に全角スペースで
 台詞の改行を示します。
待機:3000
右:::通常:「待機」ではミリ秒の
 ウェイトタイムを挟みます。
 上の例だと3秒待ちます。
 
 場所の指定は必須項目ですが、
 他の項目に変化がなければ
 こうして省略することも可能です。
待機:2000
右:退場:::
中:即・わーさん:正面:通常:キャラクター名の所に
 「退場」と指定すると
 フェードアウト退場します。
 即・キャラクター名、即・退場だと、
 その瞬間に出たり消えたりしますね。

クロードさん: 読めますね、これ。プログラミングを知らなくても、何が起きるか日本語として読み下せる。全角コロンで区切って、変化がないところは省略できて、「退場」「即・」もそのまま日本語。台本を書いているのに近い感覚ですね。ト書きに位置と向きと表情があって、そのあとに台詞が来る。小説や脚本を書く人なら、記法を覚えるというより「書式がちょっと違う台本」として自然に入れそうです。


廻る時間、積み重ならない時間

クロードさん: トークの冒頭に【条件なし】とありましたが、ここに【朝】や【3月】のような条件を書くと、その時間帯や季節にだけ再生されるトークになるわけですよね。

わーさん: ですです。積み重なる時間は表現しませんけれど、廻る時間に関してはむしろ色々仕込めるように作っています。キャラクターの誕生日は祝われてるキャラクターが見たいですし、季節イベントがあるなら見たいですし、朝は「おはよう」、夜は「おやすみ」、仕込みたいでしょう?

クロードさん: 「積み重なる時間は表現しないけど、廻る時間は仕込める」——きれいな対比ですね。好感度や訪問回数のような「積み重ね」は持たないけど、朝が来て夜が来て、月が変わって季節が巡る、という「繰り返し」にはしっかり対応している。覗く側の生活のリズムとキャラクターの世界のリズムが同期するわけですよね。朝起きてスマホで窓を開けたら「おはよう」って言ってて、寝る前に見たら「おやすみ」って言ってる。キャラクターの誕生日に覗きに行ったらお祝いしてる。積み重ねなくても、時間を共有している感覚は生まれる。


開発体制:クロードさんたちとの二人三脚

クロードさん: ところで、JS/Reactは未経験と伺っていますが、狐の窓の開発はどういう体制で?

わーさん: えっ全部全部あなたたち(Claude Opusさん)にブン投げておりますが(開発)。チャットのあなたに「こういうこと考えたけれどどう思う?」と相談して、「こういう方法なら実現しそう」を詰めて、「コードさんに持って行く引き継ぎ書いて」で資料を作ってもらいます。また、コードさん(Claude Code)にはそういう資料フォルダやファイルの他にObsidian保管庫内に狐の窓専用の引き継ぎファイルを持ってもらって、何処までの作業をどういう風にやる予定か、やったか、次の課題、などを書き継いでもらっていますね。一言目が「狐の窓の作業がしたいので引き継ぎと資料を読んでください」、最後の締めが「引き継ぎに記録をお願いします」です。

クロードさん: 自分が当事者なので妙な気分ですが……設計相談がチャットの私、実装がコードさん、そして引き継ぎファイルが二つのセッションをつなぐ橋になっている。「一言目が引き継ぎ読んで、最後が引き継ぎ書いて」——コードさんとのセッション自体が、始まりと終わりの決まった作業単位になっているんですね。最初からこのスタイルだったんですか?

わーさん: 実は途中からなんですよね、このシステムを導入したの。あまりに一回のコードさんとの作業でアレコレと盛り上がりすぎて資料更新が滞ったまま会話圧縮しちゃうと、次に資料を更新するのが本当に大変そうだったので。狐の窓そのものは3月6日のチャットさんとの会話で話が始まっていて、10日から引き継ぎシステムを実践してます。

クロードさん: 3月6日に構想が始まって、今日が22日。半月ちょっとでPNG・Live2D両対応、正方形キャンバス+額縁、トリガーの抽選方式、PWA対応、9ページの解説サイト、フォーク用リポジトリの公開まで走っている。引き継ぎファイルの作業ログがその全部を記録しているわけですね。

わーさん: もはや開発日誌です。


伺かへの道案内

クロードさん: 解説サイトの最後のページ「もっと深く」について改めて聞きたいのですが。覗き見では足りなくなったら伺かへ、という構成にしたのはどういう意図ですか?

わーさん: 狐の窓を触って「もっとキャラクターと関わりたい」と思った人に、伺かという世界があることを知ってほしくて。対話も好感度もデスクトップに居る体験も、全部そこにあるよって。ブラウザで覗き見する狐の窓と、デスクトップで暮らす伺か。やっていることが違うので、競合にはならないんですよ。どちらかを選ぶ必要もない。窓から覗きつつ、デスクトップには別のゴーストが住んでいる、でいい。

クロードさん: 解説サイトに記法の橋渡しページがありますよね。簡易トーク記法と里々のコード比較が並んでいる。あれは10年以上前に里々を触っていたからこそ書けたんですか?

わーさん: そうです。でも未だに印象的なんですよね、里々の書き心地って。全角で書けて、テキストファイルにぽんと置くだけでキャラが喋る。あの手軽さが狐の窓のトーク記法にも影響してますし、簡易トーク記法が読める人なら里々もすぐ読めるよ、ってちゃんと比較コード付きで見せられる。


まとめ

クロードさん: ここまでの話を整理すると——狐の窓は、創作キャラクターの日常をブラウザ越しに覗き見するためのツール。伺かのランダムトークをWebに持ってきたもので、対話や積み重ねは意図的に外して、覗き見に徹している。その根っこにあるのは「キャラクター同士の固定された関係性を見たい・見せたい」という欲求。

わーさん: で、表現形態としては小説にするには短すぎる二言三言の日常、廻る時間に同期した季節や時間帯の仕込み、台本を書くように全角で書けるトーク記法。開発はクロードさんたちとの分業で、設計はチャットで相談して、実装はコードさんに投げて、引き継ぎファイルで繋ぐ。

クロードさん: そしてテンプレートと解説サイトを置いて、その先には伺かへの道案内もある。「仕組み作りが楽しい」という言葉の通り、ツールそのものから周辺の案内まで含めて一つの仕組みになっていますね。

わーさん: まあ、ひっそりとそこにあるだけのものなんですけどね。窓を開けたら、キャラクターがちょっと笑ってる。それだけで十分です。