第35回 AI×Pythonの自動化を実務運用へ落とし込む — スケジュールと監視、障害対応の実践ガイド

はじめに — まずはその「つまずき」に寄り添います

AIプロトタイプやスクリプトは動くけれど、定期実行すると止まってしまう、ログが読めない、障害時に誰が対応するか決まっていない──そんな現場の悩みに応えます。本記事は、AIモデルの出力をPythonで定期実行するワークフローを、スケジューリングから監視、障害対応、コスト管理まで「実務で回す」ための手順とテンプレートを提供します。まずは1週間の稼働試験を目標に読み進めてください。

導入シナリオ(例)

想定例:毎朝8時に外部APIでデータを取得し、AIで解析してCSVを生成、Slackへ結果を通知する処理。要件は「確実に毎日実行」「失敗検知と自動再試行」「コストを抑える」などです。

アーキテクチャの選定基準

  • 可用性:停止の許容時間はどれくらいか
  • 運用負荷:ローカルで運用できるか、クラウドに任せるか
  • 監視のしやすさ:ログ・メトリクスをどう集めるか
  • セキュリティ:APIキーや機密情報の管理方法
  • コスト:実行頻度とAPI利用量に基づく見積もり

スケジューリング比較

方式 向き・特徴 運用負荷 推奨場面
ローカル/サーバーcron シンプル、OS依存、単純なジョブに最適 中(ホスト管理必要) 少数の低頻度ジョブ
APScheduler Python内蔵で柔軟、複雑なスケジュール向け 中(プロセス監視必要) アプリ内スケジューラや動的ジョブ
Cloud Scheduler(GCP/AWS同等) マネージド、可用性高、スケール容易 低(クラウド運用が主体) 業務での安定稼働が必要なケース

簡単な例(cron用シェルとAPSchedulerのサンプル)

cron用(crontabに追加):

0 8 * * * /usr/bin/python3 /opt/app/daily_job.py >> /var/log/daily_job.log 2>&1

APScheduler(アプリ内部):

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('cron', hour=8, minute=0)
def daily_job():
    run_main()

if __name__ == '__main__':
    sched.start()

実行時のログ/メトリクス設計

ログとメトリクスは分けて考えます。ログは詳細トラブルシュート用、メトリクスは運用判断用です。

項目 内容(例) 用途
成功率 成功数/合計実行数(1h,1d) 障害検知、SLI
処理時間 平均・p95 性能劣化検知
API呼び出し数 外部APIのコール回数と課金見込み コスト監視
エラーログ(構造化) {“job”:”daily_job”,”error”:”タイムアウト”,”trace”:”…”} 自動解析と検索

ログ出力の簡単なPython例(構造化ログ):

import json, time

def log_event(level, msg, **kwargs):
    entry = {"ts": time.time(), "level": level, "msg": msg}
    entry.update(kwargs)
    print(json.dumps(entry))

障害検知と自動再試行

再試行戦略は失敗のタイプごとに分けます。ネットワーク等の一時的失敗は指数バックオフで再試行、永続的なエラーは即通知して手動対応へ。

簡易リトライデコレータ(説明付き):

import time
from functools import wraps

def retry(max_attempts=3, base_delay=2):
    def deco(f):
        @wraps(f)
        def wrapped(*a, **kw):
            for i in range(1, max_attempts+1):
                try:
                    return f(*a, **kw)
                except Exception as e:
                    if i == max_attempts:
                        raise
                    time.sleep(base_delay * (2 ** (i-1)))
        return wrapped
    return deco

アラートとエスカレーション

  • 閾値例:成功率90%未満でSlack通知、60%未満でメール+オンコール(担当者呼び出し)
  • 通知テンプレート(Slack): {“title”:”daily_job 失敗”,”env”:”prod”,”last_error”:”タイムアウト”}
  • Runbookテンプレ(簡易): 障害発生→ログ確認→再試行→影響範囲報告→ロールバック案実行

コストとAPI利用管理

APIの呼び出し数は定期的にレポートして上限を設けます。APIキーは環境変数かシークレットマネージャーで保護してください。予算超過の自動停止やレート制限エラーを想定した設計を入れます。

デプロイとロールバック(簡易手順)

  1. ローカルで単体テスト→コンテナ化(Dockerfile)
  2. GitHub Actionsでビルド→ステージングへデプロイ→自動テスト
  3. 本番へロールアウト(段階的)→問題あればタグを戻して再デプロイ

運用チェックリストとテンプレ

段階 チェック項目
導入前 要件確認、実行頻度、API課金見積、シークレット管理方針
導入直後(1週間) ログ量確認、成功率確認(目標95%)、監視アラート動作確認
定期点検(週/月) エラートレンド確認、コスト確認、Runbookの更新

簡易Runbook雛形(抜粋):

  • 発生時:まず最新の実行ログを取得(/var/log/…)
  • 再現:ステージングで同条件を再現し原因切り分け
  • 対応:再起動→再試行→ロールバックの順で対応
  • 報告:影響範囲、暫定対応、恒久対応予定をまとめて共有

付録:すぐ使えるテンプレ(チェックリスト抜粋)

項目 完了
シークレットを環境変数へ移行 [ ]
監視:成功率アラート設定 [ ]
1週間の稼働試験を開始(ログ監視) [ ]

まずの一歩(具体アクション)

  • 今週中にcronかCloudSchedulerで1ジョブを週次→1週間稼働させる
  • 成功率・処理時間のメトリクスを収集し、初回の閾値を設定する
  • Runbookを1ページで作り、担当者へ共有する

まとめ

AI×Pythonの業務運用は「動かす」だけでなく、「監視する」「障害時に誰が何をするか」を定めることが成功の鍵です。本記事はスケジュールの選び方、ログとメトリクスの設計、再試行とアラートの具体例、デプロイ/ロールバック手順、そして運用チェックリストを提示しました。まずは1週間の稼働試験を行い、ログと成功率を見ながら閾値や再試行方針を調整してください。

次回(シリーズ): 運用改善の自動化とABテスト — 実施後のフィードバックループを作る方法を扱います。

第34回 AIに仕事を任せるときは、最初に「完成形」を決めておく

AIに仕事を任せるとき、つい「とりあえずやってみて」と頼みたくなることがあります。

もちろん、それでうまくいく場面もあります。アイデア出しや、たたき台を作る段階では、それでも十分動きます。

しかし、実務になると、それではだんだん苦しくなってきます。

なぜかというと、完成形が決まっていない仕事は、途中でいくらでも話がぶれてしまうからです。

AIに指示を出して、出てきたものを見て、「やっぱりこうして」「いや、こっちを残して」「やはり別の形式で」と何度も直していると、結局、人間が整理できていなかっただけ、ということがよくあります。

だから、AIに仕事を任せるときは、最初に「完成した状態は何か」を決めておいた方がよいのです。

これは、細かいデザインまで全部決める、という意味ではありません。

少なくとも、
・最終的に何を作るのか
・何が残っていれば完成なのか
・どの形式で出てくればよいのか
この3つくらいは、先に決めておいた方がよいのです。

たとえば、CSVの整理ならわかりやすいでしょう。

単に「このCSVを整えて」と頼むのではなく、
「空欄行を削除し、メールアドレスの重複を除き、申込日の新しい順に並べ替え、必要な4列だけを残したCSVを新しいファイルとして出力する」
と決めておく。

これなら、完成形がかなりはっきりしています。

文章でも同じです。

「この内容を記事にして」ではなく、
「WordPress用の記事として、見出しつきで、読者は非エンジニア、長さは1500字前後、最後に次回につながる一文を入れる」
と決めておくと、ずいぶん違います。

画像でも同じです。資料でも、メール文でも、要約でも同じです。

AIは、途中の作業を助けるのが得意ですが、ゴールがあいまいだと、途中でどれだけがんばっても、最後の仕上がりがずれやすいのです。

つまり、AIを使うのが上手な人は、指示が上手というより、「完成形を先に言葉にしている人」なのです。

ここを飛ばしてしまうと、作業は増えます。

最初は気軽に頼めた気がしても、あとで修正を重ねることになり、かえって時間がかかる。しかも、修正が増えると、どこが最終版なのかもわかりにくくなります。

人に仕事を頼むときも同じでしょう。

ゴールが見えていないまま「いい感じでお願いします」と言われると、受けた側は困ります。AIも実は同じです。

もちろん、最初から100点の完成形を決める必要はありません。そこまで厳密でなくてもよい。

ただ、「こうなっていれば今回は終わり」という基準は持っておいた方がよいのです。

たとえば、
・この列だけ残っていればよい
・この順番になっていればよい
・この文字数に収まっていればよい
・この形式で保存されていればよい
といった基準です。

こうした基準があると、AIの出力を見たときに、良し悪しの判断が速くなります。

逆に、基準がないと、「なんとなく違う気がする」という感想しか出てこなくなり、修正の指示もあいまいになります。

するとまたAIも迷い、やり取りが増えます。

だから、AIに仕事を任せるときのコツは、最初から全部を細かく決めることではなく、「終わりの形」を先に置くことです。

完成形が見えていれば、そこまでの道筋はAIと一緒に考えればよい。
しかし、完成形が見えていないと、道筋もぶれやすいのです。

AI時代に必要なのは、作業を全部自分でやる力ではありません。どこに向かって進めばよいかを決める力です。

そして、その方向が決まるだけで、AIはかなり働きやすくなります。

AIに仕事を任せるなら、まず完成形を決める。これは地味ですが、とても大事な基本です。

第33回 AIに仕事を任せるなら、1回で通る指示を目指した方が早い

AIを使って仕事を進めていると、最初のうちはどうしてもやり取りが増えます。

「違う、そうじゃない」
「そこは消さないでほしい」
「並べ替えは日付順です」
「その列は残してください」
と、何度も言い直すことになる。

これは誰でも通る道ですし、最初から完璧に指示できる必要はありません。しかし、実務でAIを使うなら、だんだん目指すべき方向は見えてきます。

それが、「1回で通る指示」を増やしていくことです。

もちろん、現実には毎回1回で完璧に通るわけではありません。ですが、最初の指示の精度が上がるだけで、作業時間はかなり短くなります。

なぜかというと、AIとの仕事は、1回1回の修正が小さく見えても、積み重なると意外に時間を取られるからです。

しかも、修正が増えるほど、こちらの意図もぶれやすくなります。最初は「重複を消したい」だけだったのに、途中で「並び順も変えて」「列名も直して」「保存形式も変えて」と追加していくと、AIも全体像を取り違えやすくなります。

だから、本当は最初にまとめて伝えた方がよいのです。

たとえば、悪い指示はこうです。

「このCSVを使いやすくして」

これでは、何をもって「使いやすい」とするのかがわかりません。

少し良くなると、こうなります。

「空欄を消して、見やすくしてください」

前よりはましですが、まだあいまいです。空欄というのは空欄行なのか、空欄セルなのか。見やすいとは、列を減らすことなのか、並べ替えることなのか。それがわかりません。

さらに良い指示になると、こうなります。

「このCSVについて、空欄行を削除し、メールアドレスの重複を除き、申込日の新しい順に並べ替え、氏名・メールアドレス・商品名・申込日だけを残して、新しいCSVとして保存してください。」

ここまで書けば、かなり意図が伝わります。

つまり、1回で通る指示とは、特別に上手な日本語のことではありません。必要な処理が、順番に、抜けなく書かれている指示のことです。

ここで大事なのは、次の4点です。

1.何を対象にするのか
2.何をどう変えるのか
3.何を残して何を捨てるのか
4.最後にどう出力するのか

この4つが入ると、AIはかなり動きやすくなります。

逆に、このどれかが抜けると、あとで聞き直しや修正が増えやすいのです。

たとえば、「重複を消す」と言っても、何を基準に重複とするのかが必要です。メールアドレスなのか、氏名なのか、顧客IDなのかで結果は変わります。

「並べ替える」と言っても、何の順番なのかが必要です。日付の新しい順なのか、古い順なのか、地域順なのかで意味が違います。

「保存する」と言っても、元ファイルを上書きするのか、新しいファイルにするのかで安全性が変わります。

仕事では、この細かさが大事です。

AIは賢そうに見えるので、つい「そこはわかってくれるだろう」と思ってしまいます。しかし、実際には、そこをはっきりさせるだけで精度がかなり変わります。

だから、AIに仕事を任せるときは、長い指示を書くことを恐れない方がよいのです。短い指示がよいのではなく、必要なことが抜けていない指示がよいのです。

むしろ実務では、短すぎる指示の方が危ないことが多い。最初は楽でも、あとで何回も直すことになれば、結局そちらの方が非効率です。

AIとのやり取りで時間を節約したいなら、最初に少しだけ丁寧に整理して渡す。その方が、結果として早く終わります。

そして、この整理のしかたは、実はAIのためだけのものではありません。自分の仕事を見直す訓練にもなります。

何をしたいのか。
何を残したいのか。
どこまでやれば完了なのか。

それを言葉にできるようになると、AIへの指示も通りやすくなり、仕事そのものも整理されていきます。

AIに仕事を任せるというのは、ただ命令することではありません。こちらの考えを、相手が動ける形に変えることです。

その意味では、1回で通る指示を目指すことは、AIの使い方を覚えることでもあり、自分の仕事の組み立て方を見直すことでもあります。

これができるようになると、AIはかなり頼れる相手になってきます。

第32回 AIに仕事を任せるときは、あいまいな言葉を処理に直す

AIに仕事を任せるとき、最初に大事なのは「うまく頼むこと」です。

これは、単に丁寧に頼む、という意味ではありません。AIが処理しやすい形に仕事を言い換える、ということです。

多くの人は、AIに対して人に話すように頼みます。もちろん、それである程度は動きます。しかし、実務で使える精度に近づけようとすると、それだけでは足りません。

たとえば、CSVの整理を頼む場面でも、
「これを見やすくして」
「きれいにして」
「使いやすい形にして」
という頼み方では、AIもかなり困ります。

なぜかというと、「見やすい」「きれい」「使いやすい」が何を意味するのか、人によって違うからです。

ある人は不要な列を消したいのかもしれない。ある人は並び順を変えたいのかもしれない。ある人は表記ゆれを直したいのかもしれない。AIはそのあたりを推測して動いてくれますが、仕事では推測に頼りすぎると危ないのです。

だから、AIに仕事を任せる人は、「抽象的なお願い」を「具体的な処理」に直す必要があります。

たとえば、
・空欄の行を削除する
・メールアドレスが重複している行は1件にする
・申込日の新しい順に並べる
・氏名、メールアドレス、商品名、申込日だけ残す
このように言い換えるのです。

こうすると、AIはかなり正確に動けます。

ここで必要なのは、プログラムの知識そのものではありません。必要なのは、仕事の内容を「処理の単位」に分ける力です。

人間同士でも、仕事ができる人は指示が具体的です。「適当にやっておいて」ではなく、「ここをこう直して、これを先に出して、これは削除しておいて」と言います。AIに対しても、それは同じです。

むしろAIは、あいまいな空気を読むのが得意そうに見えて、実務ではそこが一番あぶない。何となく望みに近いものを作ってきても、細かいところがずれていることがよくあります。

だからこそ、任せる側に必要なのは、「いい感じにやって」を減らすことです。

AIを使いこなすというと、すごいプロンプトを書けることだと思われがちですが、実際にはもっと地味です。自分がやりたい作業を、小さな処理に分けて順番に並べる。それだけでかなり違います。

たとえば、
1.不要な列を削除する
2.空欄行を消す
3.重複をなくす
4.日付順に並べる
5.保存する
というように分ければ、AIはかなり扱いやすくなります。

この考え方は、CSVだけに限りません。文章の整理でも、画像の分類でも、問い合わせ対応でも同じです。

要するに、AIに仕事を任せるというのは、魔法の言葉を見つけることではありません。仕事そのものを整理することです。

そして、その整理ができる人ほど、AIを実務に組み込みやすいのです。

AI時代に必要なのは、全部を自分でやる力ではありません。何を、どの順番で、どこまで任せるかを決める力です。

その第一歩は、あいまいな言葉を処理に直すことから始まります。

第31回 CSVの整理ができるようになると、AIの使い道は一気に広がる

AIに仕事を任せたい、という話をすると、つい文章作成や企画書づくりの方に目が向きがちです。

もちろん、それもAIの大事な使い方です。しかし、実際の仕事の現場で時間を奪っているのは、案外もっと地味な作業だったりします。

たとえば、表の整理です。

顧客リストをまとめる。
申込データを整える。
売上表を並べ替える。
名前の表記ゆれを直す。
不要な列を削除する。
空欄の行を取り除く。

こういう作業は、一つひとつは難しくありません。しかし、件数が増えると、すぐに面倒になります。しかも、手作業でやると、意外にミスが出ます。

ここで、AIとPythonの組み合わせが効いてきます。

特に大事なのが、CSVです。

CSVというのは、簡単に言えば「表データをテキストで保存したもの」です。Excelで見れば普通の表ですが、AIやPythonにとっては非常に扱いやすい形式です。

だから、仕事を整理していくと、かなりの部分が「このCSVをどう加工するか」という話に変わっていきます。

ここが見えてくると、AIの使い道は一気に広がります。

たとえば、顧客リストがあるとします。そこに氏名、メールアドレス、都道府県、申込日、商品名などが入っている。

このとき、やりたいことはいくらでもあります。

東京の人だけを抜き出したい。
申込日の新しい順に並べたい。
同じメールアドレスの重複を消したい。
姓と名を結合して新しい列を作りたい。
不要な列を削りたい。

これを全部Excelでやってももちろんよいのですが、毎回同じような作業が出てくるなら、AIにPythonを書かせて処理した方が早い。

しかも、一度やり方が決まれば、次からはほとんど同じ指示で済みます。

ここで大事なのは、自分でPythonを全部書けることではありません。必要なのは、「何をしたいのか」を順番に言えることです。

たとえば、
1.空欄の行を削除する
2.メールアドレスの重複を消す
3.申込日の新しい順に並べる
4.必要な列だけ残す
このように処理を分けて考えられると、AIはかなり正確にコードを書いてくれます。

逆に、ただ「この表をきれいにして」と言うだけでは、何となく動くものは出てきても、仕事で使える精度にはなりにくいのです。

つまり、AIを使うときに必要なのは、曖昧なお願いではなく、処理の分解です。

そして、この「処理の分解」を一番練習しやすいのが、CSVの整理です。

なぜなら、結果が目で見てわかりやすいからです。並び順が変わった。不要な列が消えた。重複がなくなった。新しい列が増えた。どこが変わったかがすぐに確認できます。

これは、AIに仕事を任せる練習として非常に向いています。

最初から難しいシステム開発を考える必要はありません。まずは、毎日どこかで発生している「面倒な表作業」を見つけることです。

そして、それをAIにこう頼むのです。

「このCSVから空欄行を削除して」
「この列だけ残して」
「日付順に並べ替えて」
「同じメールアドレスを1件にまとめて」

これだけでも、かなり仕事になります。

むしろ、仕事の現場では、こういう地味な作業を速く正確に処理できることの方が価値が高い場合が少なくありません。

AIというと派手なことを期待しがちですが、実際には「人がやると面倒な単純作業」を次々に渡せるようになることの方が大きいのです。

CSVの整理ができるようになると、AIは単なる会話相手ではなく、実務の補助者になってきます。

そして、ここから先に進むと、CSVを読む、並べ替える、抽出する、集計する、別の形式で保存する、といった作業が少しずつつながっていきます。

そうなると、AIに任せられる仕事の幅はさらに広がります。

Pythonの勉強というと身構えてしまう人も多いのですが、入口はもっと小さくてよいのです。まずはCSVを整理する。この一点から始めるだけでも十分です。

AIに仕事を任せる力は、難しいコードを書く力ではありません。自分の仕事を、AIが処理できる形に置き換える力です。

CSVは、その最初の練習台としてとても優れています。

第30回 AIに仕事を任せる人が、最初に覚えるべきPythonの使い方

AIに仕事を任せる時代になったとはいえ、全部を日本語だけで指示して済むかというと、実際にはそうでもありません。

たしかに、AIはかなり多くのことを自然文で理解してくれます。文章を書かせる。表をまとめさせる。企画を考えさせる。このあたりは、かなりの精度で動きます。

しかし、仕事の現場でAIを本当に使おうとすると、途中で必ず出てくるのが、
「このデータを整えたい」
「この形式でまとめたい」
「同じ処理を何回もやりたい」
という場面です。

ここで必要になるのがPythonです。

ただし、ここで誤解してほしくないのは、Pythonを全部覚える必要はない、ということです。AIに仕事を任せる人が必要なのは、プログラマーになるためのPythonではありません。

必要なのは、
「AIが書いたPythonを見て、何をしているかがだいたいわかる」
「少しだけ修正したい時に、どこを直せばいいかわかる」
「自分の仕事に合わせて、AIに具体的に指示できる」
その程度です。

これだけで、AIの使い方は一段変わります。

たとえば、CSVファイルを扱う仕事は非常に多いものです。顧客リスト、売上データ、アンケート結果、在庫一覧、社員情報。多くの仕事は、結局CSVやExcelのような表データに行き着きます。

ここで、人が手で並べ替えたり、不要な列を削除したり、表記を直したりしていると、時間はいくらあっても足りません。一方で、AIに「このCSVのA列とB列を結合して、新しい列を作って」「空欄の行を削除して」「日付表記をそろえて」と頼めば、Pythonのコードを書いてくれます。

そのコードを実行すれば、手作業で30分かかる仕事が数秒で終わることもあります。

ここで重要なのは、自分でゼロからコードを書くことではありません。重要なのは、「何をさせたいか」を分解できることです。

たとえば、
・不要な行を消す
・必要な列だけ残す
・表記を統一する
・新しい列を作る
・並び順を変える
こういう処理に分けて考えられると、AIにかなり正確に指示できます。

逆に言うと、Pythonがわからないことそのものが問題なのではなく、処理を言葉で切り分けられないことの方が問題なのです。

だから、この塾では、文法を順番に全部やるという進め方はしません。for文を覚えて、if文を覚えて、関数を覚えて……と学校の授業のように進めても、実務ではなかなか使えるようにならないからです。

むしろ、
「こういう仕事を自動化したい」
↓
「そのために必要なPythonは何か」
↓
「AIにどう指示すればいいか」
という順番で考えます。

この順番にすると、必要な知識だけが頭に入ってきます。しかも、覚えたことがすぐ仕事に結びつきます。

たとえば、昔は print("hello") を見て「プログラミングの第一歩です」と言っていました。もちろんそれも間違いではありません。

でも、AI時代に本当に最初に必要なのは、helloを表示することではなく、「AIが出してきたコードを怖がらないこと」です。

画面に英語が並んでいる。カッコがついている。見慣れない記号がある。それだけで距離を置いてしまう人が多いのですが、実際にはAIがかなり補助してくれるので、昔ほど高い壁ではありません。

大事なのは、全部理解しようとしないことです。

最初は、
「これは画面に出している」
「これはファイルを読んでいる」
「これは表を並べ替えている」
このくらいの理解で十分です。

AIに仕事を任せる人は、細かい文法の暗記よりも、コードを目的ごとに読むことを先に覚えた方がよい。そして、そのための道具としてPythonを使う。これが一番現実的です。

これから先、この連載でも少しずつPythonの話を入れていきます。ただし、それは「言語の勉強」ではなく、「AIに仕事をさせるための共通言語」として扱います。

人が全部書く時代ではなくなりました。しかし、人が何もわからなくていい時代にもなっていません。

AIに任せる。でも、任せるために最低限のPythonは知っておく。その感覚を持てるようになると、仕事の進め方はかなり変わってきます。