レート制限をうけたときにやること

ブログの更新を怠るレベルでここ最近はvibeコーディングに熱中している。
今回はここ最近の近況について書こうと思う。
10月19日
ちょうどこの頃にSwiftで古いmacOS向けにアプリケーションを作ろうとしていた。
もともと何度かデスクトップ向けのアプリケーションを作りたい気持ちが高まっていたので、普段作るRailsのアプリケーションとは別にその布石としてSwiftで作ってみた。

たまたまランダムにイラストを返すという公開APIが存在していたので作ることができた。
これはかつて昔にUdemyで購入したビデオを見返しながら作ってみたものだ。
購入時から4年以上経っていたようなので、時間の経過に驚いている。
URLSessionを呼び出して画像を更新するだけの単純な仕組みだが、これ自体はほぼ1日で作れた。
どちらかというとXCodeでmacOS向けにビルドしたアプリケーションを実行できるかの確認の意図が大きかったかもしれない。
10月24日
コミット履歴を遡ると、この日からRailsサーバーの作成に着手しはじめた。
モチベーションとしてはmacOS向けに配信するためのサーバーを作ろうと思ったのだと思う。
これ自体は従来と同じでClaude Codeを使って作ったものだ。
StimulusやImportmapを使い始めてからはほとんど趣味でReactを書かなくなった。
普段は似たようなアプリケーションを作るのだけど、今回はAPI用のエンドポイントとswagger対応がある。
良くも悪くもこれが今回のタイトルにあるレート制限の原因だったと思う。
10月27日
この日に私はReact Nativeでクライアントの製作を開始している。
ちょうど1ヶ月くらいGitHub Copilotを復活してすぐに辞めたのもあって、Copilotの代わりにgit commitをしてくれる役割としてもともとOpenAI Codexを使用しはじめていた。
もともとCodexでSwift UIやMac Catalyst向けのアプリケーションを書くつもりだったのだが、諸々のiOSの制限があるのでReact Nativeを採用した。
もともとExpo自体は使ったことがあったのだが、延々とアップグレードだけして使っていなかった。
ExpoとCodexの組み合わせはすこぶる良かった。
いざ使い始めてみると思い描いたようにアプリケーションが組み上がっていく。
ブラウザでコーディングするときとは勝手が異なるものの、vibeコーディングの強力さを強く実感しはじめていた。
そう思った矢先だったと思う。
10月29日
正確に記録しているわけではないのだが、おそらくこの日付近からClaude Codeのレート制限が発生したと思う。
ここ以前にもともとClaude Codeにコミットを任せることが多かったのだが、トークンを節約したいのでコミットを控えたり、/compactを小まめに実行したり、長くなりがちなセッションを切ったりしていた。
しかしswaggerの差分やらコントローラー側の書き方がうまくまとまらずに随分苦戦していた。
Railsのビルトインのauthenticateを使いはじめたりして、そこにトークンの実装も組み合わせてみたりしたものだから実装量もかなり肥大化しつつあった。
10月30日
この日のコミットログはサーバー側が3件、React Nativeは0件。
レート制限を食らった影響なのか、明らかにこの日だけコミット件数が少ない。
ChatGPTに相談している日付は後から確認できない仕様のようだが、推定すると30日に次のメッセージに関する質問をしている:
You've hit your usage limit.
Upgrade to Pro (https://openai.com/chatgpt/pricing) or try again later.
Claude Codeも同様にrate limitのメッセージが表示され続けている。
つまりこの日はこれまで依存しきっていたVibeコーディングを一切禁じられた日とも言える。
今は喉元を過ぎ去ったので熱さを忘れているが、本当にこの日は何もできずに辛い一日だった。
そしてCodexにも明確に週次制限が存在していることを知らされた。
これに到達してしまうと一切のやり取りが制限されるようだ。
驚いたのは5時間ごとの制限が 0% で完全に解消していても、週次制限が 100% と表示されているので文字通り何もできなかった。
特にコミットメッセージをここ最近は本当に書かなくなっていた。
今回もRailsサーバー側の実装はClaude Codeにまかせて、Codexにはrubocopの実行とコミットメッセージを書かせるという役割を並行していた。
もちろんこの問題はCopilotを利用し続ければ解決できる問題ではあるが、そのたった1,000円も節約できる範囲なら節約したいのだ。
新たにCursorの導入すら考えた。
本当ににっちもさっちもいかない時は選択肢としてはありかもしれないのだが、直前でやめた。
月に数十ドル単位のサブスクリプションをこれ以上増やしたくはなかったからだ。
そう考えると私は自分ではvibeコーディングと適切に距離をとっているつもりだったが、すっかりvibeコーディングに依存しきっていたのだと気づく。
対策できそうなこと
ここでは今回のレート制限の教訓を残していく:
コミットは自分で
Codexに関してもし制限が発生したらまる一日無駄にする。
そしてその一日という目安も絶対ではない。
なので今後コミットメッセージは自分で書くことにすることにした。
そもそも自分が作業指示を出しているので、その内容をコミットすればよいだけだ。
特にCodexは思考プロセスの概要が表示されるので、それをそのままコミットメッセージに流用してやるだけでだいぶ容易である。
そんなに難しいことでもない。
Claude Codeのアップデートを行う
そもそもclaudeの挙動が一番怪しかった。
午前12時までレート制限が発生すると表示され、使用を控えていても午後12時にレート制限が発生するという状況が続いた。
たまたま今回うまくいったきっかけはclaudeのオートアップデートに失敗したので手動で再インストールしろというメッセージが表示されたのがきっかけだった。
特に意識せずともclaudeは勝手にアップデートされるメッセージが表示されているので常に最新版を使っているだろうという認識だった。
しかしnpm経由で最新版に更新したclaudeは特にメッセージが表示されずに、更新していない方のPCではまだレート制限のメッセージが表示されている。
つまりこれは単純なバグなのかもしれないが、もしアップデートをしなかったら本当に取り返しがつかなくなる可能性もあった。
副次的なおまけとしてずっと気になっていたHaiku 4.5モデルが選択できるようになったことだろう。
ChatGPTを頼る
Vibeコーディングの対策がChatGPTというのも不思議に思えるかもしれない。
しかしCodexが使えない間もChatGPTは質問し続けることはできる。
ローカルのAIはプロセスの使用量に対するレスポンスに時間がかかりすぎるのであまり適さない。
対するChatGPTのレスポンスは一瞬なのでフローを保ちやすい。
少なくとも私はChatGPTそのものから制限を食らったことはないので、ここでも制限がこないことを祈るばかりだがCodexよりは実行コストは少ないのだろう。
ChatGPTのコーディング能力もそこまで捨てたものではない。
Railsの修正などの大雑把な方針はやはりChatGPTとディスカッションしながら進めるのがよいだろう。
いくら同じOpenAIだからといってCodexにChatGPTで聞いた出力をそのままコピペするとトークンを消費するので、自分で実装を行うほうがよい。
ただやはりコードの修正をなんどか繰り返してもうまくいかないことはあるので、最初のセットアップなどは自分で行うのがちょうどよいと思う。
なんでもコーディングエージェントに丸投げするのはよくない。
コーディングから離れる
これは哲学的な問いかけのようだが、コーディングに依存しているならコーディングを離れるようにすればよい。
しかしコーディングに依存している人間がそもそもコーディングに依存するのはコーディング以外の行動に価値を見いだせていないからである。
つまりコーディングから離れるためにはコーディング以外のことをすればよい。
ちょうどレート制限の翌日は10月31日だったので、ハロウィンという理由付けで外に出ることができた。
どうしてもコーディングが楽しいので熱中してしまいがちだが、適切に息を抜く必要もあるだろう。
サブスクリプションもそこまで安いものでもないので、コーディングのモチベーションがなくなってしまうのも問題だが、依存しすぎてもよくないのだ。
何事も重要なのはバランスである。