最初に作った時になぜ作ったのかとか、なぜこれが必要だったのかみたいなところをお聞きしたいなと。
そうですね。ちょっと私の方で言うと本当に自分が成果を出すことに焦っていた時期だったんですね。
成果を出すためにはどうするかっていうとやっぱりAIをふんだんに使ってどんどんどんどんプロジェクト前に進めていくっていうところをやってたんですけど、
プロジェクト複数抱えてどんどんやっていくと、コンテキサスイッチで頭のネジが、頭のネジじゃない、
とにかく勝ち切れそうなくらいにいろんなことを考えながらずっと仕事をしていて、これは自分が壊れていくなっていう感覚があって、
なんとかしなきゃいけないなっていうところを探っていた時に思いついたから作ったっていうところですかね。
3つぐらいプロジェクトを抱えてて、あとさらにもう一個AI開発で、
個人に稼ぎしたいなっていうのがあって増やそうとしていて、でもパンクするからどうしようかなっていうところで解決方法が欲しかったっていうところでこれを作ってみたって感じでしたね。
お話できないこともあるかもしれないですけど、なぜ焦っていたというか、そういうことになってたんですか。
なんだろうな、Twitter、Xが良くないですね、みんななんかセンセーショナルなのが流れてきてすごくみんな頑張って成果を出しているように見えるじゃないですか。
そういうのを見ていると自分も焦ってくるなっていうところもあって、
なんか世の中についていけてないんじゃないか自分みたいな、ただクロードコードを使ってコードを書いているだけではこのままだと自分が置いていかれるぞっていう感覚でしたかね。
そういう追われる感もある。
労働負荷が高まってしまうみたいな。
そうですね。
そういう側もある。
Twitterでそういうのを見るとまたそれもいっぱい出てくるじゃないですか、同じの。
似たようなのが。
本当に良くないなと思いました。
めちゃくちゃ分かります。
今も毎日のように新しい情報がバンバン流れてきて、自分はついていけているのかなっていうのは非常に感じますね。
そうですね。それでいうとタクトを作っても別に今も焦っている自分はいるという。
世の中についていくために。
そうですね。
コンテキストスイッチみたいな話されましたけど、タクトを使うことによってどう解決するというかできるんですか。
一番タクトでいらなくなったコンテキストスイッチっていうのが結構短いスパンでのプロジェクトを3つぐらい書いてやっていると、
短いスパンでAIがこれどうしたらいいですかとか、あと結果が結構早めに来るんですけどその結果がしょうもない結果になっていて、
ここ直さなきゃダメだよっていうのをもう一回指示したりっていうのは結構短いスパンで続くんですよね。
タクトだとそこら辺の細かい指摘とかをもうすでに自分の知識をプロンプトとかうまくワークフローに落とし込んでいるので、
結構ロングスパンで1時間後に見るっていう感覚になるんですね。
だから5分10分以内に切り替えているっていうのが1時間に1回になるんで、
最初はツールを何だっけ、ちょっと待って、タクトの最初ね、リードミーのディフを見てほしいんですよみんな。
タクト、エージェントコーディネーショントープロジーじゃないんですよ。
大平 ああ違うんだ。
しばやん 違ったんですよ。途中で変えた。
PHPみたいに、PHPハイパーテキストプロセッサー、プリプロセッサーじゃないですか。
しばやん 同じように、あの、再起的頭文字ですかね。にしようと思って、
なんとかしてタクトを結び付けたっていうのが今の名前です。
大平 ああなるほど。
しばやん タクト、エージェント、コーディネーショントープロジー。
大平 最初違ったんだ。
しばやん あの、一番最初のリードミー見ていただければ、名前違います。
しばやん まあ、結構名前こだわりというか、打ちやすくて被らないものっていうところは結構こだわっておりましたけど。
大平 いや、いい名前ですよね。
しばやん 今なりにちょっと言うの恥ずかしかったりします。僕は。
ちょっと照れながら言ってます。僕自身も。
大平 そうなんですか。
しばやん なんかちょっとおもはゆいんですよね。
大平 まあでも、色棒みたいなイメージですよね。
しばやん そうですね。タクト自体はタクトスティックのタクトなんで。
大平 ですよね。
しばやん 色棒の、えーとなんだっけ、テンポとかそういう意味なのかなタクト。
一拍二拍の拍だった気がしますね。
大平 はいはいはい。
大平 最期的同時語になっていて。
しばやん そうですね。名前で言うとタクトって名前だったから、
ちょっとじゃあ音楽メタファーにするかって音楽メタファーにしてた時期が結構長かったんですよ。
大平 ああ、そうなんですか。
しばやん 片島さん分かりますよね。何度も僕が破壊的変更して片島さんがそれに振り回されてるんで。
大平 あはははは。そうそうそう、あったね。
しばやん 今はワークフローとか言ってますけど、ワークフローじゃなくてピースって言ってましたから。
大平 うん、ピースって言ってんのね。
しばやん そう、楽譜って意味なんですね。
大平 そうね、なんかムーブメントもステップに変わったり。
しばやん そう、ステップに変えましたね。
大平 はいはい。
しばやん 色んな中だから、半々ぐらいの賛否両論ぐらいだったんで、やっぱり一般的な名前にするかって流れましたね。
大平 AI周りのツールって色々あるじゃないですか、
例えばスペックキットとかキロとかCCSDDみたいなのがあると思うんですけど、
そういったものとは何が違うのかっていうところを教えて欲しくてですね。
しばやん なるほど、それは僕が話しましょう。
大平 多分片島さんの方がどっちの方が詳しいと思います。
スペックキットとかそういうCCSDDって、要するにバイブコーディングでGメール作ってみたいなことを言うと、文章としては成り立っているんだけど、文字間、行間ってすごい要件の空間がでかいんですよ。
なのでそういうのを振ったらエージェントは高性能なんでやってくれるんですけど、文字間とか行間に何も指示がされてないんで、いい感じにやっときましたってやっちゃうんですね。
出来上がってきたものがちょっと違うみたいな、そりゃ違うでしょ。
あなたそれ言語化してないし、一行でGメール作るっていったら色んなバリエーションがそこに存在するんで、
その問題空間の中から切り取った一面のものしか出てこなくなっちゃうので、
もうちょっと情報を与えないといけないよねってなってくるんで、
ちゃんと仕様とか要件とか設計みたいな情報を与えないとブレが出てきちゃうよねってなってくるので、
そのための仕組みとして四億度開発。四億度開発もAIが台頭してからすごい仕組みなんですって言ってるんですけど、
もともとやってなきゃいけなかったもんでしょっていうのをすごく新しいもののように聞こえるんですけど、
割と順当に古典的な考え方かなと思うんですよ。
なので、そういうプロンプトの漏れとかダブリとかブレみたいなのを四億度開発で防いでいこうみたいな考え方。
なので、エージェントの枠組みの中でプロンプトの指示とかプロセスみたいなのをあくまでもエージェントのCLIの中でやるっていう考え方ですね。
それはそれでプロンプト改善とか、CLIのエージェントの使い方みたいな改善とかやり方みたいな話なんですけど、
TACTの場合は根本的にここは違うと僕は思っていて。
なので、このエージェントの出力って確率的なんですね。後で話が出るかもしれないけど。
同じプロンプトを入力して指示してやらせたとしても、確率論的な動作で、
同じ結果になる場合もあるし、ならない場合も。
大事件として結構あると思うんです。指示したのにちゃんとやってない。
だからそういう特性なので、仕方ないんですけど、我々開発者にとってみれば結構たまったもんじゃないみたいな話になっちゃうんで、
ちゃんと制御していきたいよねと。制御できないところもあるんですけど、
要するに確率論的っていうのは時間とお金を無限にかければ確率論になるんですけど、
それはできないんである一定の範囲内で収束させようみたいな考え方ですね。
TACTはそういう考え方なんで、エージェントの外側から指示して結果を同じエージェントで評価するんじゃなくて、
別のエージェントで評価したりとかして、その受け入れ条件みたいなのがあるわけですね。
次のステップに行くための条件みたいな。それを満たしてるかチェックして、
ダメだったらちゃんとプロセスをループさせる、閉じたループにさせていって、
ちゃんとゴールに到達できるように達成条件達成できるように制御をかけていくと。
そういう考え方ですよね。
なので、あくまで主翼の開発ってエージェントの中側でやることで、TACTは外側でやること。
これ聞いてわかると思うんですけど、対立する概念じゃないんで組み合わせができるんですよ。
っていうので、僕はそういうとこ結構やってるので、この後また話が出るかもしれませんけど。
そういう感じです。
今、加藤さんが話してもらったところを完結するともちろん思うんですけど、
最初にTACTを使おうと思ったきっかけみたいなところって教えてもらっていいですか。
きっかけですね。
僕はほぼ趣味というかライフワークで、アクタープログラミングっていうのをずっとやってるんですね。
前職の時代からDDDを極めていくと、アクタープログラミングに極まるとアクタープログラミングが必要になってくるんですよ。
僕の理論的には。みんなそうじゃないと思うんですけど。
そのアクタープログラミング何かというと、オブジェクト思考の中ではナンパがあると思うんですよ。
その話は今日やると長くなって終わらなくなるので。
アクタープログラミングっていうのはオブジェクト同士がメッセージでやり取りするというようなオブジェクト思考。
すごく雑な説明をするとそうなんですけど。
そのアクタープログラミングっていうものを僕はラストでちゃんとやりたいと。
今まではScalaでAccaとかPEG-Oっていうライブラリーが、PEG-OはAccaからフォークしたものなんですけど。
Scalaでアクタープログラミングを長くやっていたので。
そのプロダクトと同じぐらいのスペックを持ったアクターのライブラリーっていうのをラストで作ってまして。
ラストでそういった本格的なアクターシステムが使えるライブラリーが存在しないというので、
ずっとここ1,2年開発していて、まだちょっとリリースできるという段階ではないんですけど、結構規模が大きいので。
自分の開発しているアクターシステムのライブラリーをラストで書いてるんですけど、
それを自分で最初は書いてたんですけど、エージェントに任せていきたいっていうところで先ほど話あったように、
やっぱりイエスイエスとか、指示したのにちゃんとできてないとか、AIの面倒を見ていかないといけないんですけど、
そうやっていくと寝る時間もないし、家族との時間も作れないみたいな話になってくるんで、それは良くないよねっていうので。
いろいろ考えてパッと見たらちょうどSNSのタイムライン上にNARSさんが頑張ってるみたいなのが出てきて、
タクトいいなと思って使ってみようと。ちょっと最初はどうなのかなみたいな、いろいろツールある中でタクト本当に使えるのかなって。
時間が取れなかったのもあったんですけど、最初はあんまりそんなに使ってなくて、距離感を置いてたんですけど。
ある日ちょっと時間が取れたんで、しっかり使ってみてコードも読んでみようと思って。
やったら結構これ使えるなって思って、そこから使い始めて、自分のプロダクト開発のために使い始めたっていう感じですかね。
はい、そんなイメージ。
どういったところを見てこれは使えると思われたんですか。
これはですね、僕がやりたいことはワークフローだったんですね。
既存のOSSの実装をそのままコードをコピーするような開発してはいろいろ批判が来ると思うんですけど、昨今。
僕がやりたかったのは参照実装ですね。OSSの参照実装を読んで、まず実装をコピーしない。
仕様を理解する。仕様を抽出する。その仕様からテストを作る。テストを作って実装コードを起こす。
実装ができたらレビューする。このステップを一人でやってたんですけど、めちゃくちゃ時間かかるし、一人力なんでスケールもしないんで。
これをタクトに任せてみたらできるのかと。標準のワークフローもあったんですけど、僕は最初から標準のワークフローを使ってなくて。
自分で移植用のコーティング用の今言ったようなコードコピーしないプロセスを自分で定義して、受入れテストを作って実装するみたいなことをやってたんですね。
それがうまくいったんです。うまくいって圧倒的な速度で開発できるようになってしまって。
それの成功体験ですね。普通のやり方だと巨大なプロンプト一発でやろうとすると絶対にうまくいかないんで。
これを役割をあけてコード読む役、使用抽出役、テスト役、実装役、レビュー役。
最後、ちゃんとスーパーバイザー、スーパーバイザーする人がいるので、ちゃんと指示した通りにできたという最終確認が入るんですよ、タクトの場合。
それが良くて、でも圧倒的に時間が空きました。そういう感じでしたね。
なるほど、分かりました。ありがとうございます。
懐かしいですね。どっかの飲み会で加藤純さんとタクトを僕がめちゃめちゃ作っている時に飲み会に一緒に行ったんですよ。
僕飲み会の時はタクトを作っていましたからね、ずっと。
タクトを開発しながら飲み会に参加するみたいな。
そんなことやってたんですか。
そうなんですよ。しばらく電車に乗っている時も背中でパソコンでタクトかタクトを開発しながら。
アンペタミンっていうツールを入れてました。
マックのスリップしないやつを入れて、テザリングで僕の個人PCをぶん回しながら歩いていました。
今ポロッと聞こえましたけど、タクトはタクトで開発されてるんですか。
それはもちろんですよ、初期からですよ。ドッグフーディングしかしてないですよ。
そうですね。だいぶ初期のリードミーにタクトはタクトで開発してますみたいなの書いてましたよね。
なるほど、そうなんですね。
元々僕は仕事で使うために作ったんで、速攻で仕事で使ってましたからね、出来上がってから。
人間が毎回全部あれこれ回収する。要は一個一個ステップ踏むにしても、
これ終わったからこれチェックするみたいな間に入っていくのってやっぱり生産的じゃないですよね。
タクトがうまくはまりましたね。
いろいろ調べたんですけど、競合っぽいツールがあんまない気がする。
まだないですね、調べてる感じでも。
ないんですか。似たようなというか、並列でコード開発するのはいくつかあるんですけど、
ナルセさんが作ってるような仕組みみたいのはないってことですかね。
そうですね、決定論的なアプローチっていうところがあんまり気づいてないのか、
気づかれてないのかわかんないですけど、性質がちょっと違うな気がします。
逆にアンソロピックとかオープンAIはむしろ決定論というよりもAIの自立性に可能性を見出している会社なので、
あんまり決定論的なところってやらなそうな感じありますよね。
決定論っていうのがなんで重要かというと、そこに人間の意思をワークフローとかに入れて、
こういうフローでこういう条件になったらこういう制御を入れるっていうのが、
人間の意思がそこに入るじゃないですか、決定論的なタクトのワークフローって。
そこの含めて全部自動でやるっていう、動的にやるみたいなアプローチもあるんだけど、
タクトの場合はそこは全然違っていて、人間の意図とか意思みたいな。
どう入れるかみたいな特徴的なのかなっていうのは勝手に思います。
そうですね。いろんな人に言われますもん。これ、ナルスさんの思想がよく出てる。
俺がAIと話したくないっていう気持ちの現れなんで。
あ、そうそうそうそう。
わかるわかる。
なんかAIから離れて食器洗ってますみたいなこと言ってましたもんね。
洗い物が溜まってるんですよ。
洗い物はちょっと笑い話ですけど、
でも家族の時間とか人間が人間らしく生活するために必要な時間が奪われていくイメージがあるんで、
ちょっと土原化せんといかんなーって感覚もあって、これは公開しましたね。
割と部分最適に落ち入りがちなんでね、やっぱ禁止ガン的になっちゃうっていう。
それで消耗するっていうのがある。
先ほど類似ツールがあんまりないみたいなことを話されてましたけど、
クロードコードの本体はですね、エージェントチームっていうのが出てるじゃないですか。
これとどういったところが違うのかっていうところを、
ナルスさんお話いただけます?
まず使ってみるとわかるんですけど、やっぱりコンテキストが長くなっていくと、
いつの間にかリーダーがリーダーであることを忘れてチームを捨てて、
自分が実装を始めるんですよ、これ。
コンテキスト汚染ね、あるよね。
やっぱ決定論的にならんなーっていうところですかね。
むしろクロードコードエージェントチームが起動したらタクトの下でチームが動かしていただけるんで、
結局タクトが強くなるなって感覚ですかね。
そうなんですよね。要はエージェントチームの上のレイヤーにタクトがいるって形ですよね。
そうなんです。
ちなみに面白いんですけど、エージェントチームを使って、タクトってExportCCっていう
ウェルコマンドがあってあんまみんな使ってない、片地さん使ってくれてましたよね。
使ってる。
クロードコードのスキルにタクトを変換できるんですよ。
何を言ってるかわからない。
既存のワークフローをクロードコードがYAMLを読んで、タクトの仕組みを知って、
理解してタクトのように動くっていう振る舞いを見せます。
だからタクトでやるワークフロー制御みたいなものを、
クロードコードの中でエミュレーションするというか、そういったことができるってことですね。
なんか思想的には、機能的には似てるけど、やっぱりタクトの方が強力かなっていう感覚ではいますかね。
似たようなことはできるけど、さっき言ったような決定論的な動作に短期的にはなってるんですけど、
ちょっと外れていったりとか、指示したことと違うことを勝手にやってたりとかするので、
そういうのはタクトが強いですよね。タクトのログ見ると笑っちゃうときがあって。
どんなことなんですか。
余計なことやったよね、修正しますみたいなのを2回ぐらい続けて、
進展があったらいいんだけど、進展がなくて千日手みたいになってたら落とされるんですよ。
そうですね、ループモニターがありますね。
そこが全然仕組み的にはかなり強いかなっていう気がしますよね。
その辺りについてはNARUSEさんがSNSでエージェントチーム出た頃にどうかなって言ってたけど、
やっぱりタクトの方がいいなみたいなことを言及されてた気がしますね。
そうですね、前回なんかで記事書いた記憶があるんですけど、
ぶっちゃけ僕の悩みが解消されるなら何でもいいと思ってるんですけど、
今のところタクトを手放す気になれないなって感じですかね。
タクトで対応しているエアーエージェントっていうのはどういうものがあるのかっていうのを聞いておきたいんですけど、
基本みんなが知っているようなやつは大体全部オーラしているのかな。
そうですね、クロードコードなんかC4兄弟みたいな、クロードコードコーデックスカーソルコパイロットですかね、
あとオープンコードがあるんで様々いろんなやつが対応できますし、
今一応プルリクニアもう出来上がってるんですけど、キロにも対応しようとしています。
あ、そうですかね。
もうマージできそうなんで、あとは僕がキロを契約して試してみるっていう最後のフェーズが残ってます。
それはやらないとダメなんだな。
そうなんですよ。僕がどんだけAIを契約しているかって話なんですよ。
確かに、動作確認のために契約しないとダメじゃないですか。
そうなんですよ。
つらいですね。
一番面白かったのは、ミニマックスっていう中華系のMLが入れるのがめちゃめちゃ面白くて、
コメントを見ると中国語から始まって韓国語になりながらロシア語でつつ日本語に繋がっていくんですよ。
面白い。
面白い、ミニマックス。
なるほどね。
カーソル対応は実は僕がやったんです。
そうですね、やってくれましたね。ありがとうございます。
初期の頃に。
割と自分で使ってて、これできるといいなとかっていうのあってパッと対応していったらやってましたね。
そうですね、加藤純さんがカーソル対応する頃には僕プロバイダー分離してた、いい感じにインターフェースを作った記憶があったんで。
そうそう、割と簡単でしたね。
最初クロードコードしか作ってなかったから結構AIもあんまり設計しなくてね。
結構ロックインしてコード書いてたんですけど、ちょっと途中でコーデックス対応してなって。
対応してましたね。
超苦労した。もうAIが書いたコード苦労したな。
はいはいはい。
インターフェース切って各プロバイダーが実装できるようにしたっていうあたりからオープンコードとか対応できた感じですかね。
そうですね。
コントリビューターって何名かいらっしゃるみたいなんですけど、基本ってNARSEさん一人?
基本そうですね、僕一人ですけど、コントリビューターは何名かスポットで入れてくれたりして、加藤純さんにはメンテナーになっていただいてメンテナー権限費用してます。
なるほど。
心よく引き受けてくれたんで。
今やってるのが、細かいのちょこちょこって感じですけど、オブザーバビリティの対応を入れてます。
キロ互換じゃないんだけど、別のGitHub、先ほどの話があったスペックキットであったりとか、
オープンスペックとか、オープンスペックも最近かなり人気ですけども。
先ほど言ったように決定論的動作になるので、
使用を欠かせても、実はワンショットでポンって使用を欠かせると、
要するに100回ぐらい使用を出力させて、その平均を取ったほうがめちゃくちゃ安定する結果になるんだけど、
大体は僕だってめんどくさいんで、1回取って、なんかいい感じに出たよねってなるんですけど、
よくよくその使用をレビューしてみたら穴だらけだったりするんです。
っていうことは何回もループの閉じたループの中で何回もレビューして、
指摘でボコボコにして、品質を上げていかないといけないですね。
閉じたループを何回も回せってことなんですね。
で、それをやるには結構お尻叩きしなきゃいけないと、AIに。
ってなるんでめんどくさいよねってなると、
使用駆動開発ですら使用のレビューであったり、
それに基づいて出てきたコードのレビューって人間がそこに介在していると、
めちゃくちゃ大変になるので、
じゃあそこって何か使えるツールないのって言ったら、
もうタクトじゃんみたいな話になるわけですよ。
使用生成して実装させて実装の検証って、
人間がそれコマンド叩いてやってたのが今までの
使用駆動開発の考え方なんですけど、
そこをワンストップのフロー、タクトのフローにして、
内部で実行されるのは使用駆動の考え方です。
っていうのを動かせば使用駆動の品質も上がっていくんですよね。
なのでそのためのツールをタクトSDDっていう形で開発して、
提供してるんですけども、
割と使ってくれる人ちらほら日地のツールなんですけど、
たまにいらっしゃるって感じですね、今の状況は。
なるほど、僕はCCSDTをちょこっと使ってるので、
今話されてたことは何となく分かって、
確かに動かしているとちょっと漏れがあって、
何回か指示を出してやり直してみたいなことをやってるので、
そうですね、割とそこは何回かループさせるっていう、
なんか自分でダメ出ししてプロンプト書き直して指示しての時間を
合計計算すると結構な時間かかってるんだけど、
皆さんプロンプトでいちいち指示した方が早いって思ってる部分はあるんですけど、
タクトを動かすと時間かかるじゃんってなる、
なんかそういう意見もたまに聞くんですけど、
合計時間計算してみたら圧倒的にタクトの方が短いんですよ。
ログとか見たりとかしてですね。
こんだけのダメ出し何回もしなきゃいけないのを
人間がやってると本当に終わんねえなっていう感覚だったので、