みなさん、こんにちは!
トレーディング支援端末「ALPHA FORGE」を開発している八咫烏(やたがらす)です。
Windowsのログオン時に自作アプリを自動起動していたところ、タスクの結果は「成功」なのに、アプリが何も起動していない状態になっていました。
本記事では、2026年9月28日のコミットで直した「起動記録の存在だけで稼働中と判断する問題」と「内側の失敗が外側へ伝わらない問題」を整理します。
確認範囲:当時のコミット本文と起動スクリプトの差分を照合しました。旧版での再現や本番の起動・停止操作は行っていません。
起動の構成
入口は1本で、中で別の起動スクリプトを呼びます。外側が準備をし、内側がアプリを立ち上げる役割分担です。
二重起動を避けるため、起動したプロセスの番号を記録するファイルがありました。とくに決まった時刻に仕事を発火する時計役が2つ動くと、同じ処理が重なるため必要な用心です。
問題1:記録ファイルの「存在」だけを見ていた
修正記録によると、9月15日から中身が空({})の古い起動記録が残っていました。プロセスの番号は入っていません。
当時の判定はファイルが存在すれば「すでに起動中の可能性がある」として終了コード1を返し、起動を中止するものでした。
名札が置いてあるだけで、本人が出勤していると判断していた状態です。
問題2:内側の失敗が外側で途切れていた
内側は終了コード1を返していましたが、外側のスクリプトが内側の終了コードを自分の終了コードとして返していませんでした。
その結果、起動していないのにタスクは成功扱いになりました。
なお、古い記録が9月15日から残っていたことは確認できますが、その間アプリが一度も動かなかったとまでは言えません(別の入口から起動できるため)。
修正内容
- 記録されたプロセスの生存確認:生きたプロセスがあれば二重起動を避けて中止。すべて停止済みなら古い記録を片づけて起動を続ける
- 記録に載らない起動の確認:別の入口から起動した裏方のプロセスや、画面とAPIの待ち受けを調べ、すでに動いているなら止まる
- 終了コードの引き継ぎ:外側は内側を呼んだ直後に終了コードを受け取り、ログへ残し、最後にその値で終了する
「記録があれば止まる」から「実際に動いていれば止まる」へ変えることで、古い記録に邪魔されず、二重起動の用心も残しました。確認を全部外して「とにかく起動する」にはしていません。
AIへの頼み方
次は、今回の修正から組み立てた読者向けの作例です(当時の発言の引用ではありません)。
起動の入口から実際のプロセスまで追って、途中の失敗が外側へ伝わるか確認してください。
記録ファイルの存在と、現在の稼働状態は分けて報告してください。
まだ起動・停止はしないでください。
見る場所を指定し、調査と操作を分けると、AIの返す「成功」の根拠を人が読み取れます。
チェックリスト
- 起動記録があるだけで、稼働中と扱っていないか
- 記録したプロセスが、いまも生きているか
- 記録に載らない別経路の起動も見ているか
- 内側の終了コードを、外側へ返しているか
- 成功表示に加え、目的の画面や処理の応答を確かめたか
まとめ
- 記録の存在と実際の稼働を分けて判定する
- 途中の失敗はいちばん外側の終了コードまで伝える
- 成功表示の根拠(ログ・プロセス・応答)がどこまでかを確認する
本記事はnote連載『ALPHA FORGE 開発秘話 #39』の技術的再構成版です。
https://note.com/featured_stocks/n/n0d826a13714c
AIとペアプログラミングを進める中で得た運用・設計の知見を、今後も連載形式で発信していきます。
よろしければLGTMやフォローをいただけると励みになります!