開発記録(第13回)。AI に日本株の売買判断をさせる投資システム investTool を個人で開発しています。全体像は目次記事にまとめています。

- 売買判定のジョブが、同じ PC の重い作業のせいで17秒から約9分に延びました
- 後に続く通知のジョブは判定の終わりを待たずに動き、「0件送信」のまま成功で終わりました。エラーはどこにも出ていません
- ほかに、Bot の再起動の確かめ方と、Discord の入力フォームの制約でもつまずきました
動作環境
| 項目 | 内容 |
|---|---|
| 実行する場所 | 自宅の Windows PC。定時の処理は Windows のタスクスケジューラで起動 |
| 言語 | Python 3.12(uv で管理) |
| 通知 | Discord(Bot とボタン) |
やりたかったこと
第8回で書いたとおり、仮想売買の稼働確認は1日目に表示の不具合が見つかり、直したので数え直しになりました。「手作業の修正なしで10営業日続けて回る」ことを確かめ直す、その初日が2026年9月24日です。
平日の夜は、次の順にジョブが動きます。
| 時刻 | ジョブ | 内容 |
|---|---|---|
| 21:00 | スクリーニング | 売買ルールに合う銘柄を選ぶ |
| 21:10 | 仮想売買の判定 | 翌営業日の注文の指示を作る。いつもは17秒ほど |
| 21:15 | 注文の通知 | まだ送っていない注文の指示を Discord に送る |
| 21:30 | 日次レポート | その日の結果を送る |
つまずいた点と解決
1. 判定が9分かかり、通知が先に動いた
- 症状
- 夜のジョブはすべて成功で終わったのに、その日の注文の指示4件が Discord に届かなかった
- 原因
- 同じ PC の重い作業で判定が約9分かかり、21:15 の通知のジョブが判定の終わりを待たずに動いた
- 対処
- その日は画面から回答した。判定の時間帯(21:00〜21:30)は、同じ PC で重い作業をしないことにした
この日は21時ごろから、同じ PC で画面のビルド(Next.js の本番ビルド)を動かしていました。使い方マニュアルに載せる画面を撮るためです。
実行記録を見ると、次の順に動いていました。

| 時刻 | 起きたこと |
|---|---|
| 21:13:56 | 判定が始まる(予定より約4分遅れ) |
| 21:19:43 | 通知のジョブが動く。送る注文の指示がないので「0件送信」で成功 |
| 21:22:58 | 判定が注文の指示を4件作る |
| 21:22:59 | 判定が終わる。所要542秒 |
通知のジョブは「まだ送っていない注文の指示」を探して送ります。探した時点ではまだ1件もなかったので、正常に0件を送って終わりました。後から作られた4件は、誰にも送られないまま残りました。
気づいたのは23時過ぎ、稼働確認の記録を付けるために実行記録を見たときです。ジョブの状態はすべて成功で、エラーの通知もありません。通知の件数が0だったことだけが手がかりでした。
原因は仕組みにあります。ジョブの二重起動を防ぐロックはジョブ名ごとにかかるので、別のジョブの終わりは待ちません。判定がいつも17秒で終わるので、5分の間隔で困ることがありませんでした。
その日は、翌朝9時の締め切りまでに Web の画面から4件に回答しました。ジョブを手で動かし直すことはしていません。稼働確認の規則では「送信に失敗したがジョブは続いた」場合は1日として数えるので、この日も数えることにしました。
前のジョブが終わっているかを確かめてから動く仕組みは、次の段階(AI の判断を加える段階)で時間割を組み直すときに入れる予定です。AI の処理は時間が読めないので、どのみち必要になります。それまでは、21時台に同じ PC で重い作業をしないことで避けています。
2. プロセスの一覧で、Bot が二重に動いているように見えた
- 症状
Get-Process pythonで見ると、前日と当日に起動した python が2組あり、古い Bot が残っているように見えた- 原因
- 前日の2つは VS Code の拡張機能(isort)だった。uv の仮想環境の python は、1つのコマンドで2つのプロセスになる
- 対処
- プロセス名ではなく、コマンドラインに
invest.exe botを含むものだけを表示するようにした
コードを直した後は、常駐している Bot も再起動しないと古いコードのまま動き続けます。再開の前に、Bot のプロセスの起動時刻を Get-Process python で確かめる手順にしていました。
表示されたのは、前日 18:50 と当日 20:51 に起動した2組でした。前日の組が古い Bot なら、同じ Bot が2つ同時に Discord に接続していることになります。
コマンドラインまで表示すると、前日の2つは VS Code の拡張機能の isort が動かしている python でした。プロジェクトの仮想環境の python を使うので、プロセス名だけでは区別が付きません。
もう1つ紛らわしかったのが、1つのコマンドが2つのプロセスに見えることです。uv の仮想環境の python.exe は、実体の python を子プロセスとして起こします。Bot 1つにつき2つ出るのが正常でした。
手順書のコマンドは、次のように直しました。
Get-CimInstance Win32_Process -Filter "Name='python.exe'" |
Where-Object CommandLine -like '*invest.exe*bot*' |
Select-Object ProcessId, CreationDate
3. Discord の入力欄が足りず、損切りと利確を1つの欄にまとめていた
- 症状
- 「発注した」のフォームで、損切りと利確が1つの欄にあり、使い方が分からなかった
- 原因
- Discord の入力フォームには、欄を5つまでしか置けない
- 対処
- その場では直さず、使い方マニュアルに書き方を載せた。画面から回答すれば欄は分かれている
注文の指示には「発注した」「見送った」のボタンがあり、押すと実際に出した注文を記録するフォームが開きます。記録したいのは、価格・数量・損切り・利確・判断理由・理由のタグと確信度の6つでした。
Discord のフォームは欄が5つまでなので、損切りと利確を1つの欄にまとめています。書き方は 損切り / 利確1, 利確2(例:2710 / 3130, 3270)です。作った側は分かっていても、使う側から「損切りと利確は1つずつ欄が要るのでは」と聞かれました。
直すとコードの修正になり、稼働確認がまた数え直しになります。そのため欄の名前は変えず、使い方マニュアルに書き方を載せました。Web の画面から回答する場合は、欄が分かれています。
実際にどう使っているか
稼働確認の初日は、この3つのほかは予定どおりに進みました。2日目(9月25日)は、判定が17秒で終わり、注文の指示3件が21:15に届いています。
1つ目の件の後は、毎朝の確認で「ジョブが成功したか」に加えて、通知の件数と注文の指示の件数が合っているかも見ています。成功の表示だけでは、この日の問題は見つかりませんでした。
前回:WordPress の表示でつまずいた5点|リンクの変換、日本語の太字、共有用の画像、テーマの部品の流用
次回:損切りを3円下に置いた取引は、買ったその日に終わった|損切りの幅と R 倍数
当サイトは情報提供を目的としており、投資助言を行うものではありません。掲載している売買記録は仮想売買(ペーパートレード)であり、実際の取引の結果ではありません。投資判断はご自身の責任で行ってください。詳しくは免責事項をご覧ください。

