自作アプリ紹介 — APP 04
— AI に頼む作業を貯めて、枠の空いたときに1件ずつ任せる —
思いついた作業をその場で AI に頼むと、使える枠をすぐに使い切ってしまいます。そこで、作業をいったん貯めておき、枠に余裕があるときに1件ずつ任せる、自分専用のタスクキューを作りました。 この記事は、その開発の記録です。AI が途中で人に聞けない問題、「できました」を信じない仕組み、定期巡回、そして任せきりにしないための工夫を、順に紹介します。
この記事を読むとできること
想定している使い方
家の Mac の中でタスクキューを動かしておき、ブラウザ(Safari や Brave など、Web ページを見るためのアプリ)で開いて、作業を登録したり、進み具合を見たりします。 この記事は開発の記録でもあります。どこで困り、どう直したかを順に書きました。説明は Mac を前提にしていて、コードは載せていません。
読む目安:約14分 ・ 自作アプリ紹介 APP 04 ・ 図3枚 ・ 実際の画面5枚
タスクキューは、Claude Code(Mac で動く AI エージェント)にやらせたい作業をいったん貯めておき、使える枠に余裕があるときに、1件ずつ自動で実行するための、自分専用の管理画面です。作った理由は、2つあります。
Claude Code には、使える量の枠が2つあります。5時間ごとに回復する枠と、1週間ごとに回復する枠です。量は、トークン(AI が読み書きする文字の量の単位)で数えます。 枠は、使わないまま回復の時刻が来ると消えます。かといって、思いついた作業をその場で頼み続けると、5時間の枠を使い切って手が止まったり、週の途中で1週間の枠が尽きたりします。
そこで、やりたい作業をまず待機列(順番を待つ列)に登録しておき、2つの枠それぞれに自動で実行してよい上限を決めました(初期値は、5時間の枠が50%、1週間の枠が80%)。 上限の手前まで、余っている分を1件ずつ消化させます。手で頼む分の余裕を残しながら、消えてしまう枠をなるべく残さない使い方です。
図の見方:上の段は、思いついた作業をその場で次々に実行するやり方です。使う量が一気に増えて、枠をすぐに使い切ります。 下の段は、作業をいったん待機列に貯めて、枠に余裕があるときに1件ずつ任せるやり方です。使える量の範囲で、落ち着いて消化できます。
Claude Code は、ふつうターミナル(文字で命令を打ち込むためのアプリ)を開いて、命令を打って動かします。作業のたびにターミナルを開いて打つのは手間ですし、枠が空く夜中や外出中には、手を出せません。
タスクキューでは、ブラウザの画面で作業を登録するだけです。裏側で、Claude Code を画面なしで指示だけを実行する形で起動して、頼みごとを渡します。 ブラウザから進み具合を見て、「今すぐ実行」で手動でも動かせるので、ターミナルを開く場面がなくなります。
使い続けるうちに、貯めて消化するだけでなく、AI に任せたあとを、どう確かめ、どう人が関わるかのほうが大きな課題だと分かってきました。この記事の後半は、その試行錯誤の記録です。
作りは小さく始めました。Python(プログラミング言語)で書いた1つのプログラムが、画面と、作業の待機列と、完了した記録を受け持ちます。 実際の作業は、別のプロセス(独立して動くもう1つのプログラム)として、Claude Code を、画面なしで指示だけを実行する形で起動し、頼みごとを渡して任せます。
決めたのは、同時には1件しか動かさないことです。複数が一度に動くと、使う量が急に増えますし、同じファイルを互いに壊し合うおそれがあります。
自動で実行するのは、自分で決めた上限より、使用率が低いときだけです。5時間の枠と、1週間の枠に、それぞれ上限を決められます。初期値は、5時間の枠が50%、1週間の枠が80%です。 「実行してよい時間帯」も決められ、終日にもできます。使用量を調べる部分は、仮想サーバーパネル(別の記事で紹介)と同じ共通の部品を使っています。
時間制限は、あえて付けていません。以前は作業ごとに制限時間を決めていましたが、長引く作業が途中で止められ、やり直しでかえって量を使っていたので、やめました。固まったときは、画面の「中止する」で止めます。
人に質問しない動かし方では、AI が途中で迷っても、こちらに聞けません。すると、AI が適当に決めて進めるか、迷ったまま失敗していました。
そこで、AI が人に確認したいときの合図を決めました。AI が返事の最初に、決まった合図の文字列と質問を書いたら、その作業は「中断(確認待ち)」の状態で止まります。 画面に質問が出るので、ブラウザで答えを入力すると、止まった所の会話の続きから再開します。
この仕組みで、「判断に迷ったら止まって聞く」という動きを、無人の実行にも持ち込めました。止まっている件があるときは、ブラウザのタブの題名にも件数を出して、気づけるようにしています。
AI が「直しました」と報告しても、実際には動かなかったり、テストが落ちていたりすることがありました。AI の自己申告は、そのまま信じられません。
そこで、作業ごとに完了条件(確かめるための命令の文)を持てるようにしました。AI の作業が終わると、そのコマンドを自動で実行します。 自動テスト(動作を機械に確かめさせるプログラム)の終了コード(実行が成功したかを数字で返す値。0 が成功)が 0 のときだけ完了とみなし、0 以外のときは、出てきたエラーの内容を AI に渡して、もう一度直させます。やり直しは最大3回で、それでも通らなければ、人に見てもらいます。
完了条件は、手で書くと、中身と関係のない理由で必ず落ちることがありました。フォルダ名の書き換え忘れや、パスの書き方の違いです。そのため、よく使う形は選ぶだけで入るようにしました。
図の見方:上から順に、AI の作業 → 完了条件の自動実行 → 合否の判定、の流れです。落ちたら、エラーを渡して②へ戻ります。 最大3回やり直しても通らなければ、そこで止まって、人に見てもらいます。
ふつうの作業とは別に、ずっと回り続ける3つの巡回を、一覧とは別の「特別枠」として置きました。回数や、前回どこまで見たかを、画面に残すためです。
まわし方は1日1回、5時間の枠の使用率が 0% のときです。今日ぶんが済んだ巡回は、その日はもう選びません。 ふつうの作業を先に片づけて、空いた所で巡回を進めます。まわすペースは、枠ごとに選べます。
コードを直す2つの巡回(バグと使い勝手)は、始める前に土台が壊れていないかも確かめます。全体の自動テストを1回走らせて、対象以外のアプリに失敗があれば、手を付けずに止めて、原因のアプリ名を報告します。 土台に失敗があるまま作業を重ねると、あとの巡回が、すべて完了条件で止まってしまうからです。実際に、あるアプリの未確認のテストが原因で、続く巡回が2日続けて止まったことがありました。
公開サイトの記事の巡回は、記事を直しても、公開まではさせません。サイトへ送るのは、必ず人が、画面のボタンを押して行います。 また、書き手の体験や主張は、AI の推測で足したり変えたりしないよう決めてあります。補うのは説明だけです。
使い勝手の巡回は、はじめは、見つけた所をその場で最大5か所まで直す形でした。ところが、自動で改善させていると、頼んでいない設定項目や画面の部品が増えて、かえって使いにくくなることがありました。 何を直すのかを、本人が見る機会がないまま、コードが変わっていたからです。
そこで、1周を2回に分けました。1回目は、改善の候補を挙げるだけで、コードには一切触りません。 候補は画面に並ぶので、人がチェックボックス(四角にチェックを付ける欄)で直す項目を選びます。2回目は、選ばれた項目だけを直します。
見に行くアプリも、人が選びます。AI に選ばせると、同じアプリに偏ったからです。「よく使う・ふつう・たまに」の3段階を手で付けると、まわってくる回数が、長い目で 3 対 2 対 1 の割合になります。 選ぶまで、次の巡回は走らせません。走らせると、候補が上書きされて、選ぶ機会ごと消えてしまうからです。実際に、手動で巡回を押して、候補が選ばれないまま消えてしまったことが何度かありました。
この2段階の形は、のちに公開サイトの記事の巡回(指摘の項目と、自分の指示を選べる)にも広げました。バグの巡回には、見に行くアプリを選ぶ機能を足しました。
図の見方:上から順に、調べる → 人が選ぶ → 直す、の3段です。真ん中の「人が選ぶ」を挟むことで、頼んでいない変更が入らないようにしています。
使い続けて直した所は、どれも気づけない・戻せない・止められないの解消でした。
自動で更新する画面は、入力の途中でも、容赦なく作り直されます。何かを選ぶ、書く、読む、といった最中の状態は、更新に壊されない作りにする必要がありました。
人が見ていない時間に AI がコードを直す仕組みなので、確かめる仕組みと、人の判断を組み合わせることを大事にしました。
直した本人が自分のコードを採点すると、「実装が通る条件でテストを書く」「落ちたらテストのほうを緩める」ことが、仕組みの上で起きてしまいます。 そこで、コードを直したあとに、直す役とは別の「検査役」(別の AI の担当)に、変更の中身だけを渡して見てもらいます。「なぜそう直したか」は渡しません。検査役は直せないので、指摘するだけです。 重大な指摘が残る間は完了にせず、直してやり直します。2回やり直しても残るときは、人が見る1件として積みます。
任せる範囲を広げるほど、人が決める場面を、わざと残しました。直す項目を選ぶこと、公開のボタンを押すこと、検査役の指摘が残ったときに見ることです。 自動で回すことと、人の判断を捨てることは、別のことです。
思いついた作業を、その場で実行せずに、登録して手放せるようになりました。枠を使い切る心配が減って、AI に頼むことへの心理的な負担が軽くなりました。 定期巡回のおかげで、自分では見に行かない古いアプリの不具合や、記事の分かりにくさも、少しずつ直っていきます。
得られた知見は、ほぼ2つに集まります。1つ目は、AI の「直しました」を信じず、自動テストの終了コード 0 を完了の条件にすること。 2つ目は、人が介入しなくても動かすには、機械で確かめる・別の AI に検査させる・人が選ぶという、確かめる仕組みと人の判断の組み合わせが要ったことです。
これからの課題は、止まった理由が画面から見えることを、さらに増やしていくことです。AI を自動で回すほど、止まっていることに気づけない状態が、いちばん怖いからです。 まねをするときは、いきなり自動で直させず、まず完了条件を付けた1件を、手動で回して、結果を自分の目で1回確かめてから、任せる範囲を広げてください。