1. 趣味でOSSをやっている者だ
  2. ccusage 1周年とRustへのリラ..
ccusage 1周年とRustへのリライトの裏側 (ryoppippi)
2026-06-05 52:01

ccusage 1周年とRustへのリライトの裏側 (ryoppippi)

spotify apple_podcasts

サマリー

今回のエピソードでは、ryoppippiさんをゲストに迎え、ccusageの1周年とRustへのリライトの裏側について深掘りします。ryoppippiさんはイギリス在住で、AIエンジニアとしてバイブコーディングのロークを開発しています。また、ccusageやサイトMCPといったOSSプロジェクトも手がけており、特にccusageは1周年を迎え、15,000スターを突破したという記念すべきタイミングでの収録となりました。 番組の前半では、ryoppippiさんの自己紹介から始まり、AI時代の開発環境や、ccusageが直面したOSS issueのAI Slop問題について語られました。ryoppippiさんは、自身の開発したccusageがAIツールのトークン使用量を可視化するジョークツールであると説明し、その誕生秘話や、多くのAIツールに対応するまでの経緯を語りました。また、CLIツールのメンテナンスや、日本と海外の開発文化の違いについても触れ、GHQやVimプラグインなどの話題で盛り上がりました。 後半では、ccusageのJavaScriptからRustへのリライトの理由とプロセスに焦点が当てられました。ryoppippiさんは、JavaScriptでのパフォーマンスの限界を感じ、Rustを選択した理由を詳細に説明しました。JSON Lines形式のログファイルの処理や、マルチスレッドの活用、そしてAIによるコードレビューやテストの自動化といった、最新の開発手法を取り入れたことで、劇的なパフォーマンス向上が実現した経緯が語られました。このリライトの過程で、AIの進化が開発者の負担を軽減する一方で、OSS公開のあり方についても新たな課題を提起しました。

ryoppippiさんの自己紹介と近況
ということで、大物ゲストに来ていただいております。
そんなことはないんだけどな。
そんなことはないか。
今は歩きながら、それはイヤーポッツで録音してる感じ?
マイクはここのDJIマイクミニにつけていて、これでやってます。
なるほどね、そういう感じなのか。
そうですね、お話できて嬉しいです。
実は話すの2回目ぐらいですねって話をしてたんだよね。
1回目、Songuさんに会った時は、ラーメン一生の回だったんですけど、
Songuさんはいつもあるあるだけど、夜会うとだいたい酔ってるらしくて、
すごい楽しい感じではあったんですけど、
本当に真面目な話をするのは多分これが最初って感じですね。
なるほど、そういう認識なのか。
それは友谷さんとかがそういうこと言うから。
そうかもしれないね。
友谷さんとかが、Songuさんはあんな感じでいつもすごい愉快な方だよって言ってましたよ。
そうですね。そう思ってもらえてるなら嬉しいですね。
ファインディーカンファレンスで前回会ったっていう感じですね。
今はUKにいるんですよね。
今はUKにいます。ロンドンからちょっと離れたところに住んでるんですけど、いますね。
だから時間としては今は。
1時20分ですね。
1時20分。そうかそうか。
だから夜の収録でこちらとしてもすごいありがたい感じですよね。
結構会わないことが多いので、日本の人と話をするときって。
なのでこの時間だとすごいありがたいです。
仕事とかはどういう感じなんですか。自由なんですか、時間帯は。
時間は本当に自由ですね。週1、2ぐらいしかミーティングなくて。
オフィスにフラット行くときもあるし。
今ちょっと移行期なんで結構リモートワークすることも多いって感じですけど、結構自由に全然できてます。
環境としても今の自分の会社まだすごい新しくて、
イギリスのオフィスを立ち上げ中だからまだ設備がちゃんとなくて、
例えばモニターがないとかね。
なので最近自宅に52インチのウルトラワイドモニター買ったんですよ。
もう快適すぎて、今収録してる画面とあと4つぐらい並んでてブラウザが縦に。
もうめちゃくちゃ便利なんで、できることなら行きたくないけどコミュニケーションのためにたまに行くみたいな感じですね。
確かにね、家の環境を整えちゃうとそっちの方が快適になっちゃうのはよくある話だからな。
まあそういう感じで、この番組は趣味でOSSをやっているものだという番組で、
OSS作家の孫悟がゲストを交えながら趣味や仕事について話すポッドキャストです。
ということで今日のゲストはりょうぴっぴさんです。よろしくお願いします。
よろしくお願いします。ありがとうございます、お呼びいただき。
いえいえ、本当に来てくださって嬉しいです。
じゃあちょっとりょうぴっぴさん軽く自己紹介をお願いします。
ありがとうございます。りょうぴっぴと申します。
りょうぴっぴっていうのがいいのか、りょうぴっぴがいいのかいろいろ言われるんですけど、
一応、方式的にはりょうぴっぴと言ってて、ただ長いのでりょうぴっていう人とかいます。
りょうぴさんぐらいでいいと思えば。
今はイギリスに住んでいて、AIエンジニアみたいな感じでバイブコーディングのロークっていうサービスを作っていますと。
それと並行して去年ぐらいというか、もうOSS自体を5年ぐらいいろいろやっていて、
AI時代の開発環境とGHQ
全然作ったものをただGitHubに置いていくぐらいの感じだったんですけど、
去年、サイトMCPっていうものを作ったりCCユーセージっていうものを作ったりして、
それらへんが結構バズってしまって、割と自分のアイデンティティのでかいところになりつつあるみたいな感じでやっております。
ちょうど今日収録してる段階でCCユーセージ1周年を迎えたっていう、
結構いいタイミングで収録させていただいて本当に嬉しい限りかなと思います。よろしくお願いします。
よろしくお願いします。
そう、そんないいタイミングだったし、本当はちょっと昨日撮ろうかみたいな話をしてたんだけど、
ちょっと今日にリスケさせてもらって、そしたら昨日ちょうど15,000スターズ超えたっていう感じでしたよね。
おめでとうございます。
いや、いいですね。丸1年で15,000っていうのはすごくいいですね。
ちょうど霧が良かったですね、本当に。
そう、なのでCCユーセージは僕も使わせてもらったりしてるし、
そういった結構AI界隈、AIでいろんなプロダクト作ったりとかOSS活動してる若者っていう感じで、
僕はりょうぴぴさんのことを見てたので、お話できて嬉しいし、
なので以前お話したときは、ファインディのカンファレンスの後の打ち上げ的な感じでラーメン食べに行ったんだけど、
そう、そのときにりょうぴぴさんの年齢を知って、思ったよりバカくないみたいなことを何度も言ってたみたいなことがここに書いてある。
覚えてます?その話。
覚えてます、覚えてます。
いや、面白かったですよ、あの回は。でも本当にすごい。
ファインディカンファレンスも僕は初めて、結構そんくんさんはよく出られてると思うんですけど、
僕は初めてでしたし、ちょっと後でお話するかもしれないですけど、
あんまり僕、物理的なカンファレンスとかオフ会みたいなのに参加したことがいろんな事情があってなかったので、
日本に行くたんびにああいうのがあるとすごい愉快で楽しいなと思って。
そうですね、なかなかお会いできるチャンスもないかなと思ってたんで、あえて嬉しかったですし、
あとなんかね、ビムJPのスラックでそれに登壇するみたいな話してる中で、
結構よびぴさんが僕の登壇ちょっと楽しみみたいなことを言ってくださってたので、
なんか結構それが嬉しかったんですよね。それで覚えてたみたいなのがあったので、
それでちょっとお声掛けをさせてもらえると嬉しいなって思ってたのはあったんですよね。
ありがとうございます。今回のラジオの出演に関しては、ラーメンの時に僕出たいって聞いてますみたいなことをお声掛けして、
むしろ僕が出たいって言って出させていただいているって感じはすごい嬉しいです。
そうですか。ありがとうございます。
僕のこと知ってもらってるの嬉しいなって思っていて、
割とそういうAIとかのプロダクト作りとかをしてる人たちって、また別の若いコミュニティがあるなと思っているので、
その辺の人たちとつながれると嬉しいなって思ってて、それこそ京平さんとかマグロさんとか、
あの辺またちょっとニュージェネレーションだなって思ってたので嬉しいし、
そういう意味ではりょぴぴさん思ったよりもっと20代前半とかかと思ってたら、
実は後半とかで今の会社でも若くない方だみたいな話をしてて、おもろいなって思ったんですよね。
え、でもマグロさんも京平さんも僕より年上じゃないですか。
まあ確かに。
そうすけ君とかはね、僕より出てきたやつけど。
確かに確かに。そうすけ鈴木さんとかはそうですね。
マグロさんとタケティが多分同い年で、京平さんは93年になるに。
そうかそうか、まあそうだよね。なるほどね。
いや、Vim JPプラス、その辺のメンツの話が急に出てきたけど。
そうですね。Vim JPで僕はNeoVimを使っていろいろやっていて、
で、AIの波が来て、そこに最速で乗っかることを、
意図してたわけじゃないけど乗っかったらそっちでガッとなって、
で、その若いエンジニアの子たちと、今最近AIから始めたエンジニアの人たちとか、
もともとエンジニアじゃないけど、AIで何かをやるみたいな人たちもいて、
そこら辺の今真ん中に期設しているみたいな感じに僕はちょっと泣いてたって、
全然すでにVim Confで喋ったりとかするそっち側の人間だったんだけど、
真ん中ぐらいにライトがあるみたいな感じのポジションだと自分は認識してる。
なるほど、なるほど。そうなんだね。
僕はGHQっていうやつのメンテナンスをしていて、それでも知ってくれてると思うんだけど、
GHQってもともとターミナル上でリポジトリ管理をするみたいなのに便利みたいなツールだったので、
ちょっと下火になってたというか、VSコードとかをみんな使うようになって、
下火になってた部分ってあると思うんだけど、またAI時代にちょっと注目を集めてる部分みたいなのがあって、
それでGHQとか僕のことを知ってくれてる人とかがそれなりにいて嬉しいなっていうのは思ったりはしていますね。
GHQ、なんなんすかね。VSコードを僕使ってた時代からGHQは結構使って、
リポジトリ管理のためにGHQとFZFを使わない以外の選択肢はないなと思っていたら、
意外と最近の人も知らないし、イギリスで就職してみると普通にみんなホームディレクトリにギットクローンしてそのまま置いていて、
お前マジかよみたいな感じになりつつ、あり、そういう人に会うためにGHQはいいぞっていうのを普及してる感じですね、私としては。
いや、ありがとうございます。そうですよね。GHQ自体は僕が最初に作ったものじゃなくて、
もてめんさんが作ったものだし、もともとは昔のGoのGoGetっていうライブラリインストールの配置がああいうふうになってたっていうだけの話なんですけど、
結構反省というか、してる点として海外への発信不況みたいなのを怠ってたなっていうのはずっと課題意識としてはあり、
日本では結構使われてるけど海外では、海外のユーザーの方からプルリクエストとかをちょいちょいいただくんですけど、
でも全然そこではメジャーツールじゃないっていうのは反省ポイントだし、そういうのをちゃんとやってる人はすごいなって思ったりはするんですよね。
なんかGHQ、たぶん僕がコンピューターを触り始めたのが2015年で、そこら辺でGHQが比較的新しかったと記憶をしていて、そこら辺で。
だからその上に噛み合ったので僕はGHQを使っているんですけど、たぶん今の日本の子でも最近2020年以降とかにコーディング始めた子とかも実は知らなそうなので、
そういうけっこうCLIツール系だったりとか、そういうのをもうちょっとちゃんと発信するのは大事なんだろうなっていうのは思ってて、
なんとなく僕らが普通に前に使ってて、もはや空気なんだけどなくてはならないものみたいな。
僕はターミナル立ち上げたコントロールジジウォースとGHQとFZFと、最近RATルートとかを組み合わせたパイプのあれが立ち上がるわけですけど、
結構知らない人は知らないので、それをちゃんと発信するだけでも価値になるし、みんなの時間をちゃんと効率よくできたりとかもするので、
そういうのは大事なんだろうなっていうのをちょっと常々感じております。
昔から結構、シェルの使い方みたいなのを含めて、僕もそんなめちゃくちゃ使いこなしてる方ではないんですけど、
みんなそういうどこか自分はちゃんとできてないみたいに思ってるから、みんなそんなちゃんと情報発信してなくて、
でもたまに情報発信する人はすごい自信のある人だからすごいマニアックな話をしてみたいな、そういうのが起きがちで。
例えば、コントロールRとかでインクリメンタルサーチできるみたいなのとかも、案外多くの人知らなかったりするんですよね。
でもGHQですごい課題だなって思うのは、結局そういうリポジトリ配置みたいなのがスタンダードになってないから、
それこそワークツリーどこに置くみたいな話が出たときに、隣に置かれちゃったりするとGHQ使いとしては困るんだけど、
だから別にみんな海外の人GHQ使ってないから、別にそれを良しとしてそう作ってしまうみたいなのがあったりするから、
やっぱりある意味ちゃんと標準化というか、割とそういう業界標準的なものとして、みんなそうするよねっていうプラクティスとして定着させていかないと、
使いづらいものになっちゃうなっていうのを最近すごい感じたんですよね。
そう、最新のGitWTか、あれでちゃんとプロジェクトの中に.WTを掘ってその中に出るようになったじゃないですか。
やっぱあれは本当に良くて、その前のGitWTで別に隣に置くでも、GHQとFZ使ってる分には何も問題ないんですけど、
やっぱり1個のプロジェクトの中にあるのがやっぱ大事だなと思ってて、
具体的なプロダクトには言及されなかったと思うんですけど、例えばコーデックスとかを使ってると、
普通は.コーデックスの中にWTっていうのがあって、そこに全部入れられるみたいなことが起きて、
例えばGitWTとかで見るとか、RAG Gitとかで一覧すると、これはどこにあるんだみたいな感じになるので、
結構GCが大変だったりするんですけど、何なんですかね、やっぱ日本人がすごい卑怯面なのかわからないですけど、
結構整理整頓系のツールはかなり充実してる方だなっていうのは思っていて、
多分文化的背景なんだろうなって思ってます。
そうか、それはあんのかもしれないな。あんまりそれ意識したことないけど、整理整頓系のやつ多いのかな。
でもなんか、リンターとかプリティアとかも確かにすごい。どうなんですかね。
なんかそれよりは、英語圏はきっちり整頓しなくても、よしなにやる方が多い気がして、
例えばゾキサイドをしかに、前だとコマンドがおかしかったときに、ザFなんとかみたいな、ザFワードのコマンドとかがあって、
コマンドが見つからなかったときにそれを叩くとちゃんと保管されるとか、
割と自動でよしなにどうにか混沌から取ってくるみたいなことをやるツールは多いけど、
GHQだったり、あとテンプレートライブラリーとか、そういう感じは結構日本発が多そうだなっていうのをなんとなく思ってる感じです。
ccusageの誕生とAI Slop問題
なるほどね。そのあたり、Vimのプラグインとかでも結構思想が分かれる気がする。
割と日本も強いし、割と海外も強いみたいなのもあるじゃないですか。
Vimスカイ的な話、やっぱり日本のコミュニティはVimプラグインとか、
環境構築に時間と労力を投資する人が多いなと思ってます。
諸外国に比べて圧倒的に多そうですね。
適当にとりあえず傘ぶち込んどきゃいいだろうみたいな、そういう感じでもないし。
だからそこはちょっと結構独自の文化なところはあるかなと思ってます。
確かにね。確かにそういう環境をカスタマイズするみたいなのは日本人の方が好きなのかな。
そう簡単にお国柄みたいな話にしていいのかどうかわかんないけど。
でも結構Zシェル、ZSHとかでも割と今でも大前Zシェル使ってるみたいな人結構同僚の海外の人とかだと多いし、
でも日本人はプラグイン管理とかそういうのちゃんと。
ちゃんとでもないな、前やってる人とか。
確かにそういういい感じのものを一個バーンと入れといて、あとはよしなりみたいな。
細かい設定はいらないよみたいなのは多い気がする。
そういうのを日本人からするとすごい大味だしユーズ効かないからめんどくさいなと思ってカスタマイズするみたいなのはあるのかな。
そうですね。カスタマイズ好きな人多いなっていうのはなんとなく思いますね。
確かにスポーツとかでも日本人は道具を大事にするみたいなのは言われたりするし、
そういうのが結構良しとされるから、美談として言われるから余計そうなるみたいな部分はあるから似たようなところはあるかもしれない。
環境を綺麗に絶対保つみたいな。
自分のノートパソコンで最愛ドットファイルズは別に世界各国でもあると思うけど、
いい感じにやって、新しいのを買っても環境をよろしく楽にするみたいなことをやってるのは結構多い。
同僚とか前の会社の同僚とか聞いてみると、新しいマーク買ったらどうするって言ったら普通にコアアシスタントでコピーするって言うんですよ。
でも我々からするとドットファイルズをちゃんとしてNixでクローンしたら一発でできるみたいなこと最近だと言うわけですけど、
そういうのがちょっと感覚が違いそう。
それは国柄というよりはコミュニティ全体で結構それを思ってる人の割合がかなり日本の方が多そうっていうのを自分は思ってるけどバイアスかかってるかもしれない。
結構コミュニティに左右されるんだろうなっていう感じはするね。
やっぱ日本の言語コミュニティでもコミュニティによって結構色が違うみたいなのもあるしな。
なるほどね。
でも面白いですね、いろいろね。
日本のプラクティスみたいなものをもっと海外発信してみんなに使ってもらうみたいなのもっとやったほうがいいよなっていうのは思うし、
なんか一時期ね、バルスとかが、バルスってわかりますかね。
わかんないです。
バルスっていう脆弱性診断のOSSライブラリーがあって、
結構それは、え、それも7,8年ぐらいに出てきたやつかな。
バルテス。
えっと、VULSかな。
VULS。
あ、へー。はいはいはい。
これは、まあそうですね。
結構1万スター以上いってるやつで、出てきたときにすごい伸びたやつなんですけど、
なんかこれは、なんか作ったのがカンベさんっていう人で、なんかちょっと面白い人なんですけど、
この人はやっぱ作ったときにちゃんとなんかハッカーニュースに投稿しに行ったみたいなことを言ってて、
いや、なんかそういうのちゃんとやるの偉いよなって。
でも僕はやらないんだよな。なんか作って満足しちゃうから。
まあ気が向いたら日本語でブログは書くけど、やんないんだよなと思って。
ちょっとなんか反省しつつ、いやすごいな。
そういうちゃんと広報活動、いいもの作ったからちゃんと使ってくれっていうのを、
ちゃんと海外でもやるの偉いなっていうのはね、思うんですよね。
はいはいはい。なるほどなるほど。
すごいな。
まあそういう感じで。
GHQはマジでそう、僕は本当に手放せないつもりだし、
コメントで例で決めると大体ソン君さんですげえなって思うんですけど、
なんかマジで絶対スタートがアンダーレディットだと思ってて、本当に広まってほしい。マジで。
いやまあでも、おかげでOSS活動できてるんで、ありがたいなと思っているというか、
まあそんなにAIスロップみたいなので困ってるわけでもないので、
地道に要望とかが来たときに、やればいいという感じになっているので、
最近結構以前よりかアップルリクエスト増えたんだけど、すごくありがたいし、
でも結構リジェクトもしてて、
でもなんかそれもちゃんと理由伝えてリジェクトできるような形ぐらいで済んでるから、
良いな、良いというか、
まあ割と平和だなと思ってるっていう感じですかね。
ほんとだ。結構そうっすね。平和っすね。なるほどなるほど。いいっすね。
そう。
いやそう、今、イシュー見たらクローズとか104とかなんですよね。
意外とそうっすね。平和っすね。
それはすごいとてもいいことだと思います。本当に。
JHKだってもう10年ぐらいやってますよね、これって。
10年ぐらい。多分2014年からで、
で、僕が多分メンテナンス本格的に引き継いだのは2018年とか19年ぐらいなんで、
そっから細々とやってる感じですね。
10年やってイシューのクローズとか104しかないんですね。
それだいぶ平和っすね。
すごいわ。そうなんだ。なるほどなるほど。
確かにね。でもなんかちょっとオープン増えてるな。
なんかメンテナンスを引き継いだときにめちゃくちゃ気合い入れて閉じまくったんだよな。
いや、イシュー問題マジ大変っすよ。本当に。もう今や。
いや、本当そうっすよね。CCユーセージは大変だろうなと思いますね。
CCユーセージのイシュー見えます?
今ね、クローズド274ですよ。1年で。
そうか。
そう。いや、そうなんすよ。プルリクエストは、レノベートとかもあるけど、
846クローズドで、そうなんすよね。もうなんか知らんわって言って、
4月、5月ぐらいに強制クローズしたやつとかも結構ある。
もうなんかね、結構AIスロックなんですよね。CCユーセージのイシューとかプルリクって。
いや、そうなるでしょうね。まあということでそうですね。CCユーセージの話ちょっとしていきますか。
ccusageのRustへのリライト
ちょっとCCユーセージはどういったものかっていうのをちょっと説明してもらっていいですか。
いろんなところで説明させられてそうですけど。
はい。CCユーセージは、AIコーディングエージェントでいくらトークン使って、
APIで使うといくら分使ったみたいなのをテーブルとしてターミナルに表示して、
わあ、俺こんだけ使ったんだ、ははっていうふうにみんなで笑うっていうジョークツールですと。
こういう言い方をしてます。精度が悪いとかいろいろ言われるのでジョークツールだという言い方を
ずっとしているわけですけど。
で、ホッタンのクロードコードがちょうど1年前の5月21日にGAしてみんなが使うことになったことがホッタンで、
その1週間後ぐらいにログファイルを分析すればトークン量が分かるらしいというツイートを見て、
2時間ぐらいで適当に作って出したら、あれよ、あれよとこんなことになってしまったという感じですと。
で、最近はクロードコードだけじゃなくて、CodexだったりGitHub、Copilot、CLIだったり、OpenCodePy、
結構十幾つのものに対応して、一撃でコーディングエージェントでどのくらいのトークン使ってるのかなっていうのを分かる状態にしてますという感じですね。
はい、そうっすよね。僕も去年はクロードコード結構使ってたので、
CCUSDもインストールしてたまに叩いてはニヤニヤするみたいなことをしておりました。
ありがとうございます。
そう、それでね、そうそう、なんかCopilotでもこれ欲しいなって思ってて、なんかCPUsageっていう名前で作ろうかなってちょっと思ってたんですけど、
最近見たらCopilotサポートされてんじゃんって思って、最近使ってます。
はい、ありがとうございます。あれね、Otelを多分有効にしないとトークンが入らなくて、それをドキュメント化してなくて、
あ、やばいやばいって言って、一応ドキュメント化したんですけど、まあ有効にすると一応使えるって感じですね。
そうですね、Otelのログがファイルでベロベロって吐くことがCopilot CLIもできるし、VSCode拡張もできるので、それを読んでなんかトークンを形状してくれるっていう感じになってましたね。
はい。
いや、あれは勉強になりました。Otelでどういうフォーマットのログが入ってるのかって、あんまりちゃんと分かってなかったんで、おお、こうなってるんだって思って。
まあでも僕もCodeXに全部実装させたんで、僕は何も、いまだにたぶん実装ちゃんと読んでないので、なんか動いてるなぐらいの認識で僕はやってるので、全然あれです。
僕も分かってない感じですね、正直。
これってラスト化した段階ぐらいでCopilot対応が入った感じなんですか?
ですよね、ですよね。
JSでまずやってたんですよ。JSというかTypeScriptで長らくやっていて、CC優先時は。
なぜかっていうと、NPXで実行できるっていうのがすごい手軽だからだし、バンドルサイズをやっぱりTypeScript、JavaScriptっていうのは結構減らせる。
それはランタイムを外に出してるわけですけど。
なので、自分の中で一応指揮所を決めてて、絶対に1MBを下回るバンドルサイズにしようって決めてやってて、
実際CC優先時とかも200キロとかにして、NPXで走らせても一撃で落とすようにいろいろやってたんですよね。
クロードコードはCC優先時だけど、コーデックスはCC優先時コーデックスっていう別のパッケージにするみたいな感じにして、結構分散をしてたんですけど、
ラストに置き換えるタイミングで、ラストにしたら3MBぐらいになったんで、もういいやと思って、全部ぶち込んだっていう感じですね。
やっぱりラストでワンバイナリーとかなるともうそうなっちゃう。そうなっちゃいますよね。
そうなんですよね。とはいえ、強豪のCLIとかも結構出てるんですけど、それとか見ると大体10MBを超えてたりするので、
その中では結構小さい方で保ってる方だとは思っている感じですね。
そうだと思います。3MBとかだと。
Goとかでもね、ちょっと複雑なもの作ると本当10MBとか超えちゃうから、3MBに抑えられてるのはすごくいいのかなと思ったんですけど、なんでラストで書き換えようと思ったんですか?
ログの特性もあるんですけど、JavaScriptだと結構性能に限界を感じていたんですよね。
TypeScriptはやっぱりプロトタイピングとかにはすごい要因ですよ。
なぜならビルドはもう今、ロールダウンとかを使うと本当に1秒以下で0.5秒とか0.3秒とかでビルドが終わっちゃうので、やっぱりイテレーションが早いわけですよね。
ただ、やっぱり問題点はNode.js版はやっぱりシングルスレッドなのが一番でかいんですよね。
あんまり詳しくない方のために、クロードコードとかコパイロットとかのログがどうなってるかっていうと、あれは基本的には一般的にはJSONLという形式になっていて、
それは何かというと、ファイル全体で一個のJSONオブジェクトっていうものではなく、一行一行にJSONオブジェクトが並んでいるっていうものになってます。
そのJSONが一行区切りで並んだJSONLっていうファイルが大量にディレクトリの中に置いてあるっていう状況なんですね。
なので、例えば一般的なJSONオブジェクトとかを.jsonから取ってくる場合だったら、
sim.jsonっていうモジュールとかが大体Node.jsとかそういうところに入っているので、そこの恩恵を受けられるんですけど、
小さいオブジェクトが大量に並んでいる状態なので、それの恩恵が受けられないわけですよね。
そうするとやっぱりファイルを一行一行読んでパースしていくっていうのしかできないから難しいよねっていうのがV18までだったんですね。
じゃあそれを一旦ワーカースレッドをNode.jsで立ち上げてバルチスレッドで頑張ってみようっていうのをちょっと5月の頭ぐらいに一回までやってみて、
やっぱりバイナリ配布はだるいので。それをやってみたら10倍以上早くなったんですよ。ただやっぱりパース部分は遅いので、
じゃあどうしようかなっていうのを考えたときにやっぱりパフォーマンスとバイナリサイズといろいろ考えて、
ラストとジグを一応試したんですけど、ラストのほうが一応早かったので、じゃあラストでいきましょうっていうふうにした次第です。
ただビルドが遅くてすごい大変なんですけど、でも実際には100倍ぐらいまず手元で早くなって、
その後それに実装に興味を持ってくれたウグゲさんって方がいらっしゃって、彼がまたさらに2倍ぐらい早くしてくれたんで、すごい早くなった感じですね。
それまでもオープンクローを作ったピーターっているんですけど、
ピーターとかが修正時、俺のパソコンでやると5分ぐらいかかって全然終わらんみたいなことを言っていて、
そういうことを言ってる人とかもいたんですよ。AIめっちゃ使ってる人とかもログファイルだけで50ギガ、100ギガあるんですよね。
それをシングルスレッドの版はちょっとノードより早いけど、とはいえ結構メモリも食うし、ストリーミングじゃなくて全部メモリにぶち込むので、
っていうナイブな実装でやってたんですけど、それだとかなわんって言ってラストにしたら、
数分かかってた人たちも数秒以内に終わるようになったりとか、僕の手元とかでも30秒とか40秒ぐらいかかってたのが、
300ミリセックとか200ミリセックとかで終わるようになったんで、これでいいかなっていうふうになりました。
だから自分としてはダウンロードするバイナリーを小さくして実行する時間早くなるよねっていう思想のもとをやってたけど、
ちょっとでかくなってもこんだけスピードが出るんだったらまあまあまあまあいいかなっていう気になったんで、
じゃあもうラストでいきましょうっていうふうにした次第です。
いいですね。そうか、確かにそういうJSONLみたいな感じだと一行一行ちゃんとシリアライズしていかないといけないから、
普通の複数ファイルがあるだけだったらIDを多重化して読んでコールバック的に処理していけばいいけど、
でも普通にその一行一行の処理がすげえ時間かかっちゃうと大変だから、確かにそういうふうに書き換えることで早くなりそうっていうのは確かに思いました。
JSONLはやっぱりトリッキーなんですよ、本当に。
でもJSONLぐらいしかないからな、JSONのパースって案外大変っていうことがあるんですよねっていう。
ログがどんどんどんどん積み重ねていくものでを一つのファイル全部バリッドなJSONで扱うっていうのは基本的に無理だから、
そういうふうにJSONLにするのが多いかなと思います。
一部のコーディングエージェントはJSONで保存してるところもあるし、
あとは最近オープンコードは2月にSQLiteに移行したので、そっちにログを書き出すようになって、
なのでSQLite版に移行したやつはめちゃくちゃバックスクですね。
そうなのか。確かにそうだよな。ローカルのデータ保存どうするかっていうのはありますね。
てかSQLiteがまたすごい着目されてるっていうのはあるよな。
Node 22になってNode SQLiteっていうビルドインが標準化になったんですね。
Node 22はこの間デプリケートされたので、今有効なNodeのバージョンでは何のライブラリも入れずにSQLiteが
事実上扱えるよねっていう前提で動いていいことになったんですよね。
そうするとやっぱりSQLiteのほうがいいんだろうなっていうのは思ってます。
確かにそうか。そうなるとそうですね。
確かにYAMLとかを使うぐらいだったら、YAMLは設定ファイルとかぐらいにしか使わないけど、
SQLiteのほうが逆にネイティブで入ってて強いみたいなのがあるのか。
つまり最近の言語ってJSONライブラリはテフォルトで入ってるけど、YAMLは入ってないみたいなのあるけど、
SQLiteはそうかNodeに入ったのかっていうのを思いました。
そうですね。ラストもSQLiteを入れるとそれでバイナリがちょびっと増えたりして、
そうなのかっていうのを思いつつあるけど、だから本当はSQLiteでみんなやってくれる世界が一番楽ですね。
本当に適当に最初2時間ぐらいで作ったから、こんな最適化が必要になるんだっていうのを全く予想しないで作っていたので、
びっくりですよねって感じですね。
確かに。その辺の最適化をするにあたって、最適化の方法とか手段とか、それこそ言語選定みたいなものってどういうふうにやったんですか?
AIに聞いたりとか周辺に聞いたりとか、そういうのってどういう感じでやったとかってやったんですか?
自分の中で仮説を立てていて、まず言語選択に関しては、一つはマルチスレッドとかを駆使してJSのまんま速くする。
次ラスト。最後にジグ。Goはバイナリサイズがでかくなりがち。スピードを考えるとGoはラストには多分勝てないだろうなと思ったんで、
まずGoはもうそもそも選択からなかったんですと、最近いろいろ進行言語が他にも出てて、MoonbitとかGreamとかいろいろ出てるんですけど、
そこら辺は結局中でCを書かなきゃいけないとか、MoonbitはWasmを出すんで、あれはシングルスレッドなんであんまりいらないねみたいな感じでいくつかやってたときに、
ジグかラストかJSで速くするのを3パターンに絞られたんですよね。その状態でCodecsDesktopを3つ立ち上げて、
Codecsって最近ゴールっていうスラッシュコマンドがあって、それは何かっていうと、ある条件を満たすまでずっと動き続けてくださいっていうやつなんですけど、
そこに今の現行のバージョンと同じ出力が得られるのを確認しながら、なるだけこの言語で早くしてください、どうぞってやって3日ぐらい放置したら出来上がったっていう。
ラストマコードとか一行も読んでないんですけど、テストとかは本当にめちゃくちゃ書いてたんで、それがそっくりそのままラストとかジグとかにちゃんと移植されて、
実装も今の遅いやつと、実装というか出力が出力も実際の今の僕のコンピューターの中にやってるログを使って出てくる出力がちゃんと一致するっていうのを保証された状態でぐるぐるぐるぐると動いたと。
プルリクエスト作ると、今CI上で一応パフォーマンスがパフォーマンス計測があって、それがコメントでちゃんと出るようになっているんですね。
で、あと最近だとAIのレビューアーがいて、Code Rabbitとか、あとはもう一個Cubicっていうのを、ちょっとマイナーなんですけど、それを使っていて、なのでプッシュしてレビューしてくれっていうとレビューが返ってくるんですね。
それとコーデックスがやり取りをして、どんどんコードの質も上がっていくし、計測も自動で行われるんでどんどんどんどん速くなって、だからAIが勝手にイスコンやってるみたいな状況が出来上がるわけなんですよね。
で、3日ぐらい経って全部止まって、2日か3日ぐらい。
で、バイナリーサイズとか速さとかいろいろ考慮した結果、ラストでいこうかなっていうふうにした感じですね。
で、それでもプルリクエスト、結構フォローアップもあったんですけど、それぞれ10万行ぐらい書いていて、10万行?結構なラストの量を書いていて、もはや人間がレビューできる量では全くなかったんですけど、そんな感じだけどちゃんとできてしまって、すごいなって思うのと同時に、エンジニアってこの後大丈夫なのかなっていう恐怖がすごいよっていう状況ですね。
で、今はもう別にそのままシックしてみんなハッピーな感じなんで、すごいな、すごい時代になってしまったなっていうのをちょっとひしひしと感じている状況です。
いや、そうだよね。うん、そうか。じゃあ、すごい全然快適に動いてるもんな。し、結構実装とか見た感じ、フォルダの中のJSONL全部読む感じなのかと思って、結構豪快だなーみたいなのちょっと思ったんですけど、ファイルを指定するとかじゃないんだと思って。
でも確かにログって溜まっていくから全部読んでくれた方がありがたいけど、パフォーマンス的に大丈夫なのかなっていうのはちょっと個人的にもちょっと思ってたんで、なんかそこはすごい最近それで改善したんだっていうのを今聞いていて思いました。
いや、もうでも本当にJSONのファイルを全部ラストに書き換えるとか、もう人間だったら無理なんですよ。正直。で、なんかいろんな遅いとかいろいろ言われてて、で、まあSaturation Goalとか、コーディングエージェントをなんか、要はコーディングエージェントをワイルドループで無限に回し続けるっていう手法ですけど、これが出始めたのが今年のたぶん1月から2月ぐらいなんですけど、それまではやっぱりコーディングエージェントにこっちも一番指示をして直していくっていう感じだったんで、
リライトなんてどんだけかかるみたいな状況だったし、もうなんか知らんわ、みんなフォークして勝手に作ればいいのにぐらいのこと思ってたんですけど、もうなんか最近はもうこんな感じで全部が自動化できてしまうので、だいぶこう気が楽になったって感じですね。
いろんなところでも言ってるんですけど、僕ラストまだ全然勉強中というか、本買ったけど時間なくて全然できてなくて、まだ所有権の概念が怪しいぐらいなんですけど、でもなんか普通に動いてて、もうなんか自分の手を離れてしまった感はすごいある感じですね。
なるほどね。まあでも、そこでちゃんとラストなり自分なりを候補に絞り込んだっていうのは、やっぱりこうそういう感度がないとできないことなので、そういうところもありつつも、なんかその書き直してもらうみたいなことも。
あとなんかそういうゴールみたいなのを使いこなすのも、まあ一つの最近の新しいスキルではありますよね。でもなんかそうそう、ゴールってまあいい名前だよな、いい名前というか。
ギッターブコパイロットにもオートパイロットっていう機能があって、割とそのふわっと状況を満たすまで何度もプロンプトリエントリーしてくれる、内部的にはみたいなそういう機能があるんだけど、ゴールの方がなんかゴールを与えるのがわかりやすい。
オートパイロットってふわっとしたゴールしか与えてないと結構迷走しちゃうみたいなのがあるんですけど、ゴールって名前はいいなって思ったんですけど、ゴールって具体的にどういうふうに与える感じなんですか。パフォーマンス的なところのゴールとか、満たす仕様とか、そのあたりは結構しっかり渡す感じなんですか。
でも多分オートパイロットと同じで、基本的には止まったらプロンプトがインジェクトされて、終了条件満たしてるかっていう処理がまず入って、満たしなかったら続けるっていうやつだと思います。
指示的には既存の実装も決して良くて、テストはそのままちゃんと持っていって、出力も正しいことを保証したまんまできる限りの最適化をしてください。
プッシュするとパフォーマンスが出てくるから、それを見て改善してるかしてないかで、実装をコミットするかリバートするかっていうのは順番にやってください。プッシュするために、アットマークコードラビットへレビューいってってやるとレビュー返ってくるんで、それを毎回やってくださいっていうのを指示として書いて送っただけですね。
おだしょー それって動かしてるのは手元のマシンなの?それともクラウド上の何かみたいな、どういう感じなんですか?
おだしょー 一応手元でビルドを走らせて、出力が正しいかどうかは手元のログでやってるんですけど、ただいろんなプロセスとかも動いてるんで、一応GitHub CI上でビルドして、メインのビルドの成果物と今のコミットのビルドの成果物を使って、ダミーで生成した1ギガのファイルを1ギガぐらいのログのディレクトリがあって、
それのパースの結果が一応出て、どのくらい速くなりました、メモリ使用率はどのくらい変わりましたっていうマークダウンがプルリクエストにコメントされるっていう感じです。
おだしょー すごい。じゃあコードを書くのはローカルのCodexにやらせて、でもそれも3並列っていうか、それぞれの独立したセッションで動かしてるっていう感じなのか。
それが終わった後に、ラストでいきましょうって言って、ラストのやつをマージして2回ぐらいやったんですけど、その後にコーディングエージェントはいろんな種類あるやつの1個のCSSに統合しちゃおうってなったときに、今度はコーディングエージェント10個ぐらいをどんって10並列で回して、プルリクエストが10個か12、3個動いて、出来上がったらマージしてくださいまでゴールに出るんですけど、
そうすると早く終わったやつ出てどんどんマージされていくんですけど、毎回コンフリクトが起きるわけですけど、それもコーディングエージェント、Codexが吉野に全部コンフリクトも解消してくれて、終わったときには綺麗にちゃんと動いてるみたいな状況でした。
お、すごいね。確かにな。それってでも、これ聞いていいのかわかんないけど、AI料金みたいなのって、トークン消費料とかすごいことになりそうだけど、それはどういうふうに賄ってるんですか。普通に会社なのか、何らかのスポンサーがあるのかっていうのは。
オープンAIのオープンソースプログラムがあって、それだとプロが使えるんですよね。一応自分の消費の中だと、一応収まったんですよね。なんかファストモードっていうのにすると、結構早いけど消費量がでかいみたいな感じになるんですけど、ラストとかは結構ビルドが遅いから別にファストじゃなくてもいいかっていう風にしてやってみたら、意外と結構動いてた。
今多分オープンAIがコーデックスの使用量2倍キャンペーン中なのかな。だからまだ今のところ全然足りる感じではあるかな。あとコーデックスってよくわかんないけど、レートリミットリセットするんですよね。週の真ん中ぐらいで勝手に。だから意外と残ってるみたいな感じでどうにかなります。
なるほどね。そうなんだ。面白い。そっか。
なんかあれなんですよね。バンっていうランタイムがあると思うんですけど、JavaScriptの。バンが最近ジグからラストにクロードの力で全部リライトしたっていう事件があり。
ありましたね。
で、あれで普通に動いてるし、なんだったら結構一周とかを見に行くとメモリリークのバグが結構直ってたりするんですよ。実際。で、できるじゃんっていうのがあって、あれに結構インスパイアされた部分は今回のリライトに関しては結構ありました。
あ、そうなんだ。なるほどね。両方確かに最近の話かなと思ってたけど、そうか。そのCCUsageの書き換えの方が後なのか。
そうですね。
まだバンのやつはリリースはされてないんですけど、もうラストに始末みたいな風な話をしたのは、4月の真ん中ぐらいだったと思うんで、その後僕も嫌いでしたって感じですよ。
いや、そうなんだな。まあでもそう、ラスト確かにビルド時間かかるよねっていうのはあって、結構マルチ、環境ごとのビルドとか作るの、僕も一個だけ作ってるものがあるけどめんどくさかったイメージがあります。
はい、そうです。CIが5分ぐらいになるんで。ちょっと今GitHub ActionsじゃないCIベンダー、某ベンダーがあって、その人たちと今ちょっとスポンサーについて今お話をしていて、でもそれがうまくいけばもうちょっと早くなるだろうけど、まあそれでも遅いなっていうのが正直な感想ですね。
GoとかやっぱりJSとか本当に早いんで、なんかそれと比べるとすごい不利というか、なんか開発者に対しての負荷が明らかに上がったなあっていうのはすごい思う。
そう、いやなんかそうだよね。Goすごい早いんだなっていうのを、そのラストちょっと書いてた時に改めて思いましたね。
そうなんですよね。なんかそのラストで早くしたほうがいいからJSでいろいろあるやつをラストに置き換えるとか、Pythonで書いたのをラストに置き換えるみたいな、結構そういうトレンドがこの数年ある。
ラストに限らずネイティブラングに変えるっていうのは結構、インタープレーターラングからネイティブラングに静的でコンパイルするやつに変えるみたいな流れはすごいあって。
かつ、AIを使わないと、特に分かんないですけど、CCユーザージに限って言うと、AI使わないとスピードとか実装量とかが追いつかないような感じになっていて、
なんというか、本当に日頃に自分のコードをOSSとして公開してた時に比べて負担の増え方が資通関数どこじゃないなっていうのを本当に思っていて、
この後ちょっと議論させていただくかもしれないですけど、自分が作ったものを今後OSSとして公開すべきなのかどうかっていうのは結構真剣に悩ましいところではあるなっていうのを本当に思ってるんですよね、最近。
それはありますよね。じゃあ、そういう話をしていきますか。前半もだいぶ長く話してちょうどいいぐらいだと思うので、一旦ここで切りますか。
AIによる開発とOSS公開の課題
ということで、後半はその辺の話をしていくということで、前半はこの辺にしたいと思います。ということで、一旦切ります。
ありがとうございます。
52:01

コメント

スクロール