NHK の三か月シリーズが UNext に来ていたので一番興味がある西洋美術から全12話をザーッと見た。
https://www.web.nhk/tv/an/3months-seibi/pl/series-tep-PW26759L5K
芸大に行っているというナイツの司会や取り上げている題材はよかったけど、講師役の女性の話し方が病院などにある「相手を子ども扱いして話す話し方」で最初から最後まで受け付けないまま終わってしまった。
放送大学とまでいかなくても NHK の教育系の番組なのでもう少し講義って感じにふってほしかったなあ。
空前の IaC ブームが来ているので、なんでも claude にやらせられるようにしようと思い rubyci.org を IaC にするのに適したものはないか検討して claude が提案してきた dnscontrol というソフトで管理することにした。
terraform でもよかったけど、DNS は別に記載されている通りにてきようしてくれればそれでいいというのと、Cloudflare を扱えるやつ、ということで dnscontrol にした。credential を通してから一度単純な js に export して、apply して差分なし、というのを確認して取り込みは完了。
で、Ruby CI のログはこれまでは S3 の public acccess で配信していたけど、貧乏な話で転送量もなあというのがあるので fastly をかぶせて配信するようにした。
そのために fastly も IaC で扱えるにする必要があったので、これは素直に terraform を採用して、claude に言われるがまま credential を用意し、terraform の初期化をし、apply で差分なしというところまで終わらせた。
で、ここからが本当に便利なところで DNS と CDN が IaC で扱えて、安全に credential を渡せるようになってるので、「rubyci.org の CI 結果のログを S3 配信から logs.rubyci.org というドメインで fastly から配信するようにして」と claude に投げるだけで 10分くらいで dnscontrol と terraform を使ってさらに証明書も発行して設定してしまった。本当にすごい。
こういうのを見ると、AI にやらせると壊される心配が、というのはわかるがこれを使っている側と使ってない側とでスピードに圧倒的な差が出るのは明白なので、積極的に活用して、AI が動きやすくなるという方に賭けていこうと思う。
最近は無限にインフラ整備をしているんだけど、これは自分が AI Agent、ような Claude をフル活用して Ruby と RubyGems の開発をできるようにするという作業をしていて、その一環ではある。
この日は https://rubyci.org/ に検索機能をつけていた。Ruby CI はデータはあるけど、探すのが人間の直感と記憶という状態だったのでまずは claude に db のダンプのありかと Rails のコードを渡してから現状を把握させてから、このテーブルは不要、とかこういう情報が欲しい、というようなのを渡していた。
最終的には https://rubyci.org/search という形でビルドの失敗ログを PostgreSQL の trigram 検索できるようにして、これを使ってみようと思う。あまりに一般的すぎる名称だと使い物にならないのだけど、テスト名などで検索するとよく落ちるやつだな、とかマシンを指定して SEGV とかやれば特定のマシンでだけ abort する奴、などが見つかると思う。
で、検索ができるようになったので、それはそれとして MCP サーバーを Ruby CI につけた。
Redmine に MCP をつけた時はもともとある REST にたいする写像っぽく Tool を作ればよかったけど、Ruby CI の場合は API があるわけではないので、Model やController、それらを組み合わせた用途を自分なりに組み立てて、こんなんで、という Tools を用意してみた。
まだ使いこなせているか、というと怪しいけど、bugs, rubyci, github が MCP でつながるので、テストがなんか失敗したのはこの変更が原因、とかこのテストに関連する修正は過去にあったか、というようなのを claude にぶん投げて調べられるようになったと思う。
自分で作って効果的になってるか、というのは少しずつ調整って感じで。
Matz もいたのでいつも通りのお喋り。相変わらず AI どう使ってるか、という話から 笹田さんが AI 相手には細かいレビューもできると人間相手だとね...というので「人間にもちゃんとレビューしてくださいよ」とか突っ込んでた。
後半は issue を引っ張ってきてそれの話をしたり色々。
guides に入れた pagefind が良すぎて、www にもあるといいな、と思い色々設計して入れてみた。
www は i18n があるのと、それなりの量なので事前にインデックスを作るのは必要ではあったけど、i18n に応じた検索ができるようになって大変良かった。これで CVE-XXXX-YYYY のエントリは...といつもリンクをポチポチしていたのが短縮されて大変にお得。
rubyci で動かすインスタンスは AWS console でぽちぽちして ec2 を立ち上げてからログインして mitamae を実行するための準備、その後は mitamae で自動セットアップ、最後に crontab 登録、という流れで見れば半自動、くらいの手続きだったのだけど最近はインフラも claude にぶん投げ、という方針でやってるので、手順を渡して自動化できないの、と聞いたら「できます」と言ってきたのでやらせていた。
とりあえず AWS console からの立ち上げは後回しにして、立ち上げた後に cloudflare に DNS 登録、その後にキーペアでログインして初期セットアップ、mitamae 実行と crontab 登録までを全自動でいけるようになった。ここからさらに AWS console での立ち上げと、Ruby CI に登録、まで自動化できる目処が立ったので順番にやっていこうと思う。
あと、Intel C Compiler や Cross ビルド用の CI インスタンスは mitamae のレシピにすらなってなくて、どうしたもんかな、となっていたけど claude に ssh によるログインと調査を許可して渡したら、「mitamae のレシピ化が完了しました」とサーバー内を調べて全部マニフェストにしてくれたので大変に便利。まさかクロスビルドの環境まで作ってくるとは思わなかったなあ。
デプロイ後に、やや考慮漏れだったというのが見つかったので、調べて直せ、と言ったら「syslog に消去された crontab の設定が残っていたので復元しレシピに反映させました」とかやって「お前やるな」と感心していた。
もう少しやると自分一人で面倒見れる範囲が今以上にもっと広がるので頑張ろう。