Windowsで AI社員16人を自動稼働させるPython設定

当ページのリンクには広告が含まれています。
目次

はじめに

「AIエージェントを設定した」だけでは、何も動かない。

AI会社の基盤を構築して最初に気づいたのがここだった。AI社員を16人定義して役割と出勤スケジュールをファイルに書いたのに、翌朝起きても何も起きていなかった。

理由は単純だ。コンピューターは命令されるまで動かない。スケジュールを設定ファイルに書いても、そのファイルを読んで「よし動け」とトリガーを引く仕組みが別途必要なのだ。

その役割を担うのが、Windowsに標準搭載されている「タスクスケジューラ」だった。これとPythonを組み合わせることで、「毎朝6時に記事執筆AI社員が起動→執筆→ログ保存→終了」という一連の流れを完全に自動化できた。

今の運用では、平日・休日問わず毎日13〜15社員が自動で定時稼働している。初期設定に要した実工数は約3時間(スクリプト開発1.5時間+テストとエラー対応1.5時間)だった。

この記事では、その設定の全手順と、途中で出た3つのエラー・解決策を全部書く。


AI会社の自動化がどういう構造になっているか

まず全体像を把握してほしい。

AI会社(ai-shacho.com)では、AIに16種類の役割を持たせて自動運営している。たとえばこんな感じだ。

  • 記事執筆担当: 毎朝6時に起動して WordPress 記事を1〜2本書く
  • KPI分析担当: 毎朝4時に前日のアクセス数を集計して改善案を出す
  • SNS投稿担当: 毎日12時に今日の投稿文を生成する

これを手動でやっていたら、1日に何度も「起動→指示→確認」を繰り返さなければならない。それを自動化するのが今回の仕組みだ。

技術的には3つのパーツで構成されている。

パーツ 役割 何をするか
tasks.yml 社員の出勤スケジュール表 「03番社員は毎日6時に実行する」と書いた設定ファイル
claude_runner.py AI社員への指示係 スケジュール表を読んで、指定した社員にAIで仕事をさせる
Windowsタスクスケジューラ 自動起動担当 設定した時刻になったら claude_runner.py を自動で起動する

この3つが連携して「毎朝6時に勝手に記事が書かれる」状態を作っている。今回の記事は主に「Windowsタスクスケジューラの設定」を詳しく解説する。

なお、AI会社の基盤全体の構成は別記事で書いているので、「そもそも何者が16人いるのか」が気になる方はそちらを参照してほしい。


WindowsタスクスケジューラはLinuxの「cron」に相当する機能

Windowsには「タスクスケジューラ」という機能が標準搭載されている。これは「指定した時刻・条件になったら、指定したプログラムを自動で起動する」機能で、サーバーOSに詳しい人向けに言い換えるとLinuxのcron(定期実行スケジューラ)と同じ役割を担う。

サーバーに触れたことがない人向けにもっと噛み砕くと、スマートフォンのアラーム機能のPCアプリ版と思えばいい。「毎日6時になったら○○を起動して」と設定しておくと、Windowsが勝手にそのプログラムを動かしてくれる。

重要なポイントが2つある。

  1. ログオン不要で動く — PCが起動していれば、ユーザーが画面の前にいなくても実行される(設定次第)
  2. 複数タスクを並行管理できる — 記事執筆・KPI集計・SNS投稿など、それぞれ別のスケジュールで登録できる

これを使って16社員分のスケジュールを一括登録した。


いちばん詰まるポイント:Pythonの実行環境を正しく指定する

タスクスケジューラの設定で最も詰まりやすいのが、Pythonの実行環境(venv)のパス指定だ。この罠を知っておかないと、設定を完成させても何も動かない状態に陥る。

venv(仮想環境)とは何か

Pythonで開発をするとき、プロジェクトごとに「専用の動作環境」を用意するのが標準的なやり方になっている。この専用環境のことを「venv(ブイエンブ)」と呼ぶ。

なぜ必要かというと、複数のプロジェクトを同じPC上で動かすと、それぞれが必要とするPythonのバージョンやライブラリが食い違ってトラブルになるからだ。venvを使えば「このプロジェクトはこの環境で動く」とPC上で分離できる。

今回のAI会社基盤も、プロジェクトのルートフォルダに .venv というフォルダを作り、必要なライブラリを全部そこに入れている。

タスクスケジューラでvenvが問題になる理由

タスクスケジューラに「python claude_runner.py を実行して」と登録すると、Windowsは「どのpython?」という問いに対してシステム全体にインストールされたデフォルトのPythonを使おうとする。

しかし、AI会社基盤が必要とするライブラリはすべて .venv の中に入っている。デフォルトのPythonにはそれが入っていないので、即エラーになる。

解決策:venv内のpython.exeを絶対パスで直接指定する

# ❌ コマンド名だけでは動かない(どのPythonか不明)
python

# ❌ Windowsシステムのデフォルトが使われてしまう
C:\Windows\System32\python.exe

# ✅ venv内のpython.exeを絶対パスで直接指定する
C:\Users\YOUR_USERNAME\dev\projects\ai-company\.venv\Scripts\python.exe

YOUR_USERNAME はWindowsのユーザー名に置き換える。パスはエクスプローラーで .venv フォルダを開いて Scriptspython.exe の場所を確認すれば分かる。


claude_runner.py の自動実行 設定手順:PowerShellスクリプト1本で16社員分を一括登録

手作業でタスクスケジューラに1つずつ登録していくと16回繰り返すことになる。それは非効率なので、PowerShellスクリプト(スケジューラ登録自動化ツール)を1本作り、tasks.yml を読みながら全タスクをまとめて登録できるようにした。

使い方は簡単で、管理者権限のPowerShellでプロジェクトルートから次の1行を実行するだけだ。

.\core\scheduler\install_tasks.ps1

==スクリプトが tasks.yml(出勤スケジュール表)を読んで、全社員分のタスクを自動でタスクスケジューラに登録する。==実行後は「16タスクを登録しました」というメッセージが表示されて完了する。

登録後に確認・変更しておくべき設定

タスクスケジューラを開く(スタートメニューで「タスクスケジューラ」と検索)と、登録された16タスクが並んでいる。各タスクを右クリック→「プロパティ」を開いて、以下の2点を変更しておく。

変更点1: 実行ユーザーの設定
「ユーザーがログオンしているかどうかにかかわらず実行する」を選択する。これをしないと、画面ロック中やスリープ解除前にスケジュール時刻が来てもタスクが実行されない。

変更点2: 電源設定(ノートPCの場合)
「バッテリーで実行する」にチェックを入れる。チェックなしだと電源未接続時にタスクが止まる。


実際に動かして出た3つのエラーと解決策

設定が完了して「よし動くはず」と思ったら、3つのエラーが立て続けに出た。同じところで詰まる人のために、原因と解決策をそのまま書く。

エラー1:タスクは実行されるが終了コードが 0x1(失敗)

タスクスケジューラの画面で「実行済み」になっているのに、「最後の実行結果」が 0x1 でエラー扱いになっていた。

原因: install_tasks.ps1 内でPythonスクリプトへのパスを相対パスで書いていた。タスクスケジューラは自分のプロセスルートからスクリプトを起動するため、「プロジェクトのルートフォルダを作業ディレクトリとする」という前提が崩れ、ファイルが見つからないエラーが起きていた。

解決策: スクリプト内のすべてのパスを絶対パスに変更した。PowerShellの $PSScriptRoot(現在スクリプトが置かれているフォルダのパスを返す変数)を使って絶対パスを動的に生成したことで、どこから実行しても正しく解決されるようになった。

エラー2:ログファイルが空のまま(何も実行されていない)

ログファイルが作成されているのに、中身が0バイトのままだった。タスク自体は「実行済み」として記録されている。

原因: タスクスケジューラのデフォルト設定は「ログオンしているときのみ実行する」になっていた。夜間や画面ロック中はタスクが発火せず、ログが空のまま残る状態になっていた。

解決策: 前述の「ログオンしているかどうかにかかわらず実行する」への変更で解消した。加えて「最上位の特権で実行する」にもチェックを入れることで、WindowsのUAC(セキュリティ確認機能)が干渉するケースも防いだ。

エラー3:AI社員が途中で止まる(API応答タイムアウト)

記事執筆AI社員へのリクエストが途中で止まり、タスクが完了しないまま放置される現象が起きた。

原因: AIサービスへのリクエストがネットワーク遅延や高負荷で応答しない場合、claude_runner.py 側のエラーハンドリングが不十分だとプログラムがそのまま止まってしまう。止まったタスクは翌日のスケジュール実行にも影響する。

解決策: claude_runner.py にタイムアウト設定(120秒)を追加し、時間内に応答が来ない場合はエラーログを書き出して次のタスクに進むよう修正した。1社員の失敗が他の15社員に波及しない設計にしたことで、安定性が大きく改善した。


今日の仕事ぶりをログで確認する

タスクが正常に動いているかは、2つの方法で確認できる。

方法1:タスクスケジューラの画面で確認

タスクスケジューラを開いて「最後の実行時刻」と「最後の実行結果」を見る。結果が 0x0 なら成功、0x10x41301 などはエラーだ。異常があればプロパティの「履歴」タブから詳細ログを確認できる。

方法2:ログファイルの中身で確認

各AI社員の実行記録は logs/{社員番号}/日付.jsonl というファイルに残る。実行時刻・処理内容・エラーの有無・次回の推奨アクションが記録されており、「今日は何本記事が書かれたか」「エラーが出た社員はどれか」をここで把握する。

この2つを毎朝確認するのが今の日課になっている。問題があれば当日中に対処できるし、問題がなければそのまま今日の仕事を始められる。

ブログ公開後の実測データについてはこちらの記事にまとめているので、「自動化したあと実際にどれくらいアクセスが来るのか」が気になる方は参照してほしい。


まとめ

WindowsタスクスケジューラとPythonを組み合わせれば、AIエージェントを毎日定時に自動稼働させることができる。押さえるべきポイントは3つだ。

  1. venv内のpython.exeを絶対パスで指定する — 相対パスや python コマンドだけでは動かない
  2. 「ログオンしているかどうかにかかわらず実行」に設定する — これをしないと画面ロック中に動かない
  3. ログファイルを毎日確認する習慣をつける — エラーの早期発見と改善がここから始まる

この3点を整えれば、設定ファイルにタスクを追加するだけで仕事量を増やせる状態になる。最初の設定に3時間かかっても、それ以降は自動で回るなら十分にペイする投資だ。

このスケジューラ上で動く記事執筆AIが実際に何を書いているかはClaude Code記事自動執筆の実録で詳しく公開している。品質管理の仕組みや月額コストも含めて全部出しているので、興味があればあわせて読んでほしい。

こういった自動化の土台となるWordPressサイトは XServer で運用している。表示速度が安定していてコアウェブバイタルの評価が崩れにくく、夜間の自動投稿との相性も良い。副業でブログをやるなら、まずサーバーの基盤を整えるところから始めてほしい。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次