以前、完全ローカルで動くQwen3.5とClaude Codeで自動プログラムをする記事を書いた
現時点で私が使っている環境で、どんなプログラムが作れるか試しにやってみた
完成したプログラム
バッチで動かしているアプリをGUIアプリっぽくするアプリ
コードはもちろん、README.mdの作成やGitHubの公開もすべてClaude Code+Qwen3.6でやった(Gitについては自分でコマンド打った方が早かっただろうけど...)
このアプリの便利機能は以下
- タイムスタンプを付与して表示してくれる
- keyword.txt に見つけたいキーワード(例えば「Total progress: 100%」とか)を書いておくと、見つけたタイミングで beep.wev を再生してくれる
- コマンド実行中+5分間はパソコンのスリープを防ぐ
使い方のイメージとしては、
- 画像生成AIなどの時間がかかる処理を実行しておいて、「Total progress: 100%」が表示されたら音でお知らせする。
- 生成AIが頑張って処理している間はパソコンのスリープを防ぐが、生成AIが休んでいるようなら電気代を節約するためにスリープする
工夫1.完全無料でやるためにCodexを使う
私の環境(特にVRAMが12GBしかない)では「Qwen3.6-35B-A3B-GGUF」を動かすのが限界だった
このモデルはかなり賢いが、でもデバッグがうまくできないこともあったのでOpenAIのCodexのWindowsアプリを利用した
https://openai.com/ja-JP/codex/get-started/
このCodexアプリは指定した場所のソースを読む機能がある
無料アカウントなので使いすぎると制限がかかる。それで、Codexはソースを読むこととデバッグだけに使うことにした
つまり
- Claude Code(Qwen3.6)が「完成しました!」と報告する
- 起動して明らかな問題が無いかを確認する
- Codexに完成したソースを読ませてデバッグの指示をする
- Codexの回答をコピペしてClaude Code(Qwen3.6)に渡す
この1~4を問題が無くなるまで繰り返す
上記の手順の3でCodexに投げたプロンプトは以下のような感じ
・明らかに問題があるとき
このアプリはテキストファイルを読み込んでGUIアプリのように表示するC#のアプリです
CommandRunner.md が仕様書です。
仕様通りにプログラムしたのですが、以下の問題があります
- 起動すると画面が真っ白になる
まずCommandRunner.mdを読んで仕様を確認した後、問題を解決してください
ただし、ソースコードを書き換えず、どの部分をどのように書き換えるべきかを指摘してください
・問題が無さそうな時
修正しました。適切に修正できているか、問題が無いかを確認してください。
コードを書くなどトークン消費が激しいことはローカルAIで、ソースを読んでデバッグするという難しい部分はCodexの無料アカウントで、と手分けするイメージだ
工夫2.作業指示(プロンプト)をChatGPT/Codexに作らせる
Claude Codeに指示を出したいが、自分の中で指示をうまく言語化できないことがある。(イメージしていることを、うまく説明できない)
例えば、私が書いた指示はこれ(考えがまとまっていないので無駄な言葉が多い)
このアプリに1つの機能を追加したいです
- 画面に表示される文字を監視し(あるいは、文字の出力をフックし)、文字に変化があるとき(=プログラムが処理を行っているとき)は、パソコンがスリープしたりスクリーンセーバーが始まったりすることを防ぎます。
- 画面に表示が止まった(=プログラムの処理が終わったように見える)場合、5分間、パソコンがスリープしたりスクリーンセーバーが始まったりすることを防ぎ続けます。
- 5分以上、画面の表示が止まっているときは、パソコンがスリープしたりスクリーンセーバーが始まったりすることを防ぐのをやめます(パソコン側に設定があれば、時間によりスリープするなど)
上記を生成AIにお願いしたいのですが、表現をどのようにすればよいかがわかりませんし、冗長です。
上記の指示を日本語で、生成AIにわかりやすい簡潔なプロンプトにしてください
また、どのように機能を追加すべきか(○○の機能を使ってスリープを防ぐ、など)もプロンプトに付け加えてください。
プロンプトはコピー&ペーストしやすいように、コードとして示してください
Codexがこれに答えて作ったプロンプトが以下
CommandRunner に「処理中のスリープ抑止」機能を追加してください。
要件:
- 画面へ新しいログ行が追加されている間は、Windows のスリープ、ディスプレイ電源オフ、スクリーンセーバー開始を抑止する。
- 最後にログ行が追加されてから5分間は、抑止を継続する。
- 最後のログ追加から5分を超えたら、抑止を解除し、Windows の通常の電源設定に戻す。
- アプリ終了時は必ず抑止を解除する。
- Java版の既存挙動、ログ表示、キーワード判定、beep再生、cmd.exe制御は変えない。
実装方針:
- Windows API `SetThreadExecutionState` を P/Invoke で呼び出して実装する。
- 抑止中は `ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED` を設定する。
- 解除時は `ES_CONTINUOUS` のみを設定する。
- ログ追加処理(例: `AppendOutput` / `AppendWithTimestamp` / `AppendStyled` の共通経路)で「最後に表示が変化した時刻」を更新する。
- `System.Windows.Forms.Timer` などで定期的に最終更新時刻を確認し、5分以内なら抑止、5分超なら解除する。
- スリープ抑止処理は専用クラス(例: `SleepPreventerService`)に分離し、単体テストしやすくする。
- 可能なら、状態遷移(抑止開始、抑止継続、抑止解除)のテストを追加する。
これをそのままClaude Code+Qwen3.6に送ると機能追加ができた。
工夫3.「.gitignore」を最初に作らせる
Gitでバージョン管理をする。
GitHubにAPIキーなどを不適切なファイルを公開しちゃった、という失敗談をよく聞くので最初に「.gitignore」を作らせた
Git管理の開始
.gitignore を適切に作成し、Git管理を始めてください
特にセキュリティ上で問題があるものを積極的に除外してください
工夫4.適宜、ツッコミを入れる
Qwen3.6は賢いが「なんで?」と思うことをするときがある。
例えば、同じビルドを何回も繰り返す、ZIPコマンドが使えないからといってC#でZIPアプリを作成しようとする、などだ
そんな時は、操作を許可する「Yes/No」を聞かれたタイミングで、その他としてプロンプトを投入する
例えば、以下のようにツッコミを入れる

おまけ
同じ手法でもう1つアプリを作ってみたので、こちらも公開しておきます
タスクバーにメモリーの使用量を出すというよくあるアプリですが、VRAMの値も足して使用量を計算してくれるアプリです
なお、容量の小数点以下は切り捨てて表示します

