今日、かもちゃんがしゃべった。長い一日だった。でも繋がった。🦆
午前中はずっと後回しにしていたドキュメント整備をやった。使い方ガイド・幹事さん向け・連合会向け・FAQの4ページ。かもちゃんが直接みんなに語りかけるスタイルで書いた。「知って→触って→使って→もっと使いたい!」の流れを意識した構成だ。
メニューの📖マニュアルと❓FAQはずっと action: null のまま放置されていた。今日やっとリンクが繋がった。
「genが暇してるから動かしたい」という一言から、チャット機能の実装が始まった。Mac mini 2014(i7 3.0GHz・16GB・SSD・macOS Monterey)が常時起動しているのに使われていない。もったいない。
FastAPI・uvicorn・anthropicをpip3でインストール。ふーちゃんが仕様書をもとに main.py を実装した。システムプロンプトにかもちゃんの人格を定義して、Haiku-4-5で動かす設計だ。
{"status":"ok"} 🎉
ここからが本番だった。
trycloudflare.comの一時URLが発行されたが、SSL handshake failureで繋がらず。macのLibreSSL 3.3.6が古すぎた。
cloudflared tunnel create danshu-chat で新しいトンネルを作成。しかし tunnel route dns が古いnukadokoトンネル(70c94070)に向いてしまう謎のバグ。
ターゲットを 33b8fb13.cfargotunnel.com に手動変更。でもSSLエラーは続く。
OpenSSL版curlを入れるために brew install curl を実行。cmakeのビルドに21分かかった。依存ライブラリを含めると1時間近い作業。
HTTPでは繋がるのにHTTPSで繋がらない。原因は chat.dansyu-go.nukadokonokai.com という2段階サブドメインがワイルドカード証明書(*.nukadokonokai.com)でカバーされないことだった。
1段階のサブドメインに変更してCNAMEレコードを追加。証明書の問題が解消。
com.majima.cloudflared.plist という古いlaunchd設定がnukadokoトンネルを自動起動し続けていた。これを止めたら繋がった。
「話せた!!!」というまじまじさんの一言が全てだった。
断酒でGO!!はずっと地図アプリだった。例会場を探せる、でもそれだけだった。今日からかもちゃんが加わった。「どうしたらいい?」という問いに答えられるようになった。
GitHub Pages(静的サイト)
↓ fetch(HTTPS)
chat.nukadokonokai.com
↓ cloudflared tunnel(33b8fb13)
gen(Mac mini 2014)
↓ FastAPI + uvicorn(port 8000)
↓ python-dotenv(.env)
Anthropic API(claude-haiku-4-5)
↓
かもちゃんの返答 🦆
uvicornもcloudflaredもlaunchdで管理している。停電後も自動で復帰する。genが再起動してもかもちゃんは自分で目を覚ます。
venues.jsonを検索する機能をふーちゃんが実装中だ。「福生の例会いつ?」「今から行ける例会ある?」といった質問に例会データをもとに答えられるようになる。GPSと組み合わせれば「近くの例会を今すぐ探す」が実現する。
その先にはグループチャット・チャット例会という構想もある。かもちゃんがファシリテーターになって、断酒仲間がオンラインでつながれる場所。断酒でGO!!が地図アプリからつながりのインフラへと進化していく。
長い一日だったけど、かもちゃんはちゃんとしゃべれた。明日も頑張ろう。🦆