2/17-19で2泊3日の開発合宿に行ってきました。場所は専修大学箱根セミナーハウス。在来線とバスで行ける温泉地というありがたい立地。行きは他の大学生集団と一緒で乗車率200%ぐらいのバスで小一時間立ちっぱなしという苦境でしたがw
今回の参加者は院生2人と学部生1人。実はこのうち2人がこの春卒業するので、単位のためではなく自主的に学ぶための集い。その目的は,「AIを使い倒すパッケージ開発」。
生成AIの発展の凄さは今さらいうまでもなく、大学としては研究や教育にどう使えるか,というのが問題になりがち。保守的になるのは簡単だけど、歴史的に、新しい技術に抵抗して覆ったためしはない(by コテンラジオ)。尻込みしているうちに、技術に取り残された老害になりたくないし、新しい技術にキャッチアップしてこそ教育に活かせるというもの。なので、俺のモチベーションとしては、半分は「パッケージの開発をしたいから人手と時間が欲しい」なんだけど、もう半分は「学生にどう使わせるか、使わせ方・教え方のノウハウを得るため」だったのだ。
メンバーもちょうど良かった。GithubやR、パソコンの使い方にある程度慣れている面子なので、導入に時間が取られなくて済む。
また、テーマ設定も上手くやれたと思う。複雑な統計モデルのパッケージをゼロから開発するのではなく、既にあるパッケージの可視化部分を作ろうという話。具体的には,俺の開発してるexametrika に関するもので,これはベースのplot関数しか使わないんだけど,これをggplotの綺麗な出力にするggExametrika を開発するのだということ。可視化というところがミソで、計算部分ではなく見えてくるところだから,間違いがわかりやすいでしょ。AIを使うときのポイントはユーザが的確に指示を出せることであり、こちらが正誤の判断できなければならない。その点,可視化なら「この色がおかしい」「この形にしたい」が素人でもわかるからね。
合宿所について,まず全員にVS Code+Claude CLIの環境を作らせる。Claudeは俺のアカウントからAPIを発行。合宿中は課金の上限を気にせずジャンジャン使え!と言いました。実際、2日でどれくらい掛かるのかも知りたかったからね。
まずはCLIの使い方を指南。プロジェクトの方針をしっかり確認し,CLUDE.mdに記録。レポジトリをクローンして、俺が実演。「このプロットを描きたいとするだろ。じゃあ『このプロットの関数を実装しろ』って書くんだよ」というアホみたいなやり方。実際,それですらすらコードを書いくれるのが面白い。その後「確認するコードを書け」と言って,自分で関数を試して,納得したらコミット,ブッシュ,プルリク。この辺りのgitの使い方も,概念としては知っててもコマンドやGUI操作は不慣れな学生。心配ご無用、「そのようにして」とClaudeに言えばいいんだから。ghのようなツールもいるけど,足りなかったら「ツールがいるのでインストールしちゃいますねー」ってClaudeの方から言ってくれるし、やってくれる。とにかく,方針を指示するだけでいいのだ。
これを実演した後,一応1人ずつ順にやらせてみる。共有モニタで確認しながら,どう指示を出すかの練習。時折「先生,これはどうするんですか」と聞かれたが,「それは…いやいや、それをClaudeに聞いてみて」と教育放棄w まあ,使い初めの頃は「こんなことも聞いていいのかな、答えてもらえるのかな」という不安や不信があるもので、とにかく使わせて相手の力量をわかってもらう必要がある。
一巡すると後は話が早かった。「じゃ,この出力担当しますね」と言いあって、「ブランチ切って。書いて。できた。プルリクして。」というだけ。30分しないうちに一つ関数ができる。担当箇所を口頭で確認したり、Claudeにログを書かせたりすることで枝葉のコンフリクトも起きにくい。起きたら起きたで、「解消して」と言うだけだし。
俺はと言えば,「PRしました」と言われたら,俺のClaudeに「確認して。精査して。コメントして,返して」と言うだけ。こちらも気楽。気のせいか,PRに対してはコードのチェックがいつもよりクリティカル。メインの関数開発だと,ややユーザの意図を汲み取って「そうです!その通りです!」と言うAIも,システム保全の側に回るロールがつくと責任感が生まれるのかしら。
あまりにも楽しくて,初日は夕飯後宴会もせず,夜中までコーディング。二日目は、ggの方はあらかた開発しちゃったので、shinyExametrikaも作ることに。そう、exametrika のウェブアプリ化です。これもアイデアはあったけど時間なくてやってなかったこと。しかもこれまた、UIなど誰の目にも見える正誤があるので、適当な教材。
結局、ものすごく開発が進みました。成果物はこれ と これ です。まだローンチには至らないけど,0.0.5から0.0.28までバージョンが一気に上がってる。関数一個でバージョンアップなのです。shinyの方はレポジトリを新しく作懐から始めてコレだもんなぁ。issueのやりとりも,AI同士の会話です,これ。
ということで,課金は170ドルでここまで行きました。一時,学生が間違えて自分のアカウントにつけられた無料枠を使い切るというアクシデントもあったけど。学生3人に2日で170ドルか。ゼミ生が10人で,ゼミの時間だけ使っていいことにすると、月500-600ドルぐらいかかる計算?流石に自腹や個人研究費じゃ無理か…
しかし、ものすごい体験ではあった。バイブコーディングは楽しい。いわゆる、パソコンを便利に使うまでの学習コストがゼロ近くなるから,やりたいことがすぐできるようになる。そうなると,学生ももっと自発的に学ぶようになるだろう。苦労がなくて楽しいことが増えるんだから。
ま、でも最初に最低限の知識はいるわね。フォルダって何、ぎっとって誰?みたいな状態ではClaudeも手出しできないのです。「AIは0を1にすることはできない。」とは先日息子が言ってた名台詞だけど,加えていうなら、「AIは0を1にすることはできないけど,1から8までは一気にやってくれる。最後の9,10はやはり人間」てとこですかね。なので、最初の基礎知識は必要で,これは座学でやるしかない。その後はAIに伴走してもらう。自分の能力が5だったら、AIが一気に8まで連れて行ってくれる時に,「わからん!ストップ!教えて!」といえばいい。彼らは嫌がらず,立ち止まり,7,6,5と階段を降りてきて教えてくれるから、自分が納得するまで教えさせたらいい。そして,最後はAIもわからない世界がある。それは俺たちが見たいと欲する,まだ世の中にないもの。ないものはAIも学習できないからね。
さて、今回の合宿を受けて、大学での今後の教育はどうしたもんかなぁ…と悩んでいるところです。Claudeに相談してみるか。