CLAUDE LABEN
LIMITS — 8月29日、Anthropic が9月14日から Claude Code の標準週次上限をプロモ前比25%増へ恒久引き上げると告知しました。現行の50%増は9月13日まで継続しますLIMITS — 同日 Anthropic 自身が「今日と比べると週次上限は17%の削減にあたる」と明記しました。増加と削減が同時に真になるのは、比べている基準が違うためですMATH — プロモ前を100と置くと、現在は150、9月14日以降は125です。125÷100=1.25 が「+25%」、125÷150=0.833 が「今日比で約17%減」にあたりますSCOPE — 変わるのは Claude Code の週次上限だけです。5時間ローリングウィンドウ、Claude の web・デスクトップ・モバイル、Cowork の上限は対象外だと案内されていますDOCS — 8月30日時点でヘルプセンターの該当ページは「8月31日まで」のままでした。告知チャネルと恒久ドキュメントは同じ速度で更新されない、という前提が要りますRELEASE — Claude Code は v2.1.251(8月28日)から新しいリリースが出ていません。直近1か月は26リリース、約0.8日に1本のペースでしたので、2日の間隔は目立ちますLIMITS — 8月29日、Anthropic が9月14日から Claude Code の標準週次上限をプロモ前比25%増へ恒久引き上げると告知しました。現行の50%増は9月13日まで継続しますLIMITS — 同日 Anthropic 自身が「今日と比べると週次上限は17%の削減にあたる」と明記しました。増加と削減が同時に真になるのは、比べている基準が違うためですMATH — プロモ前を100と置くと、現在は150、9月14日以降は125です。125÷100=1.25 が「+25%」、125÷150=0.833 が「今日比で約17%減」にあたりますSCOPE — 変わるのは Claude Code の週次上限だけです。5時間ローリングウィンドウ、Claude の web・デスクトップ・モバイル、Cowork の上限は対象外だと案内されていますDOCS — 8月30日時点でヘルプセンターの該当ページは「8月31日まで」のままでした。告知チャネルと恒久ドキュメントは同じ速度で更新されない、という前提が要りますRELEASE — Claude Code は v2.1.251(8月28日)から新しいリリースが出ていません。直近1か月は26リリース、約0.8日に1本のペースでしたので、2日の間隔は目立ちます
記事一覧/Claude Code
Claude Code/2026-08-31中級

無音で半分になっていた定期実行と、欠落を捕まえる突き合わせ

1日2回動いているはずのバッチが、実際には1回しか起動していませんでした。エラーは1件も出ていません。期待起動回数と実行記録を突き合わせて、無音の欠落を検出する仕組みを作ります。

Claude Code241スケジュール実行4cron3運用19自動化83

プレミアム記事

画像アセットの分類バッチが、1日2回動く設定になっていました。朝と夕方、1回あたり数百枚を処理する想定です。

処理量が想定の 50% ほどしか進んでいないことに気づいたのは、素材の滞留を見たときでした。エラーログは空です。失敗の通知も届いていません。動いた回のログはすべて正常終了で、内容にも異常はありませんでした。

夕方の回が、そもそも起動していなかったのです。

起動しなかった回は、失敗しません。失敗しないので、失敗を監視する仕組みには何も映りません。個人開発で自動処理を増やすほど、この空白は広がります。以下は、その空白を数えられるようにするまでの記録です。

書式は正しかった

設定はこう書いていました。

30 4,16 * * *

crontab の書式としては、これは1日2回です。念のため、自分で展開して数えることにしました。cron 式を受け取って、期間内に起動が期待される時刻を列挙するだけの小さなスクリプトです。

#!/usr/bin/env python3
"""cron 式を展開して、期間内の「起動が期待される時刻」を列挙する。"""
from datetime import datetime, timedelta
 
 
def _field(spec: str, lo: int, hi: int) -> set:
    out = set()
    for part in spec.split(","):
        step = 1
        if "/" in part:
            part, s = part.split("/", 1)
            step = int(s)
        if part in ("*", ""):
            start, end = lo, hi
        elif "-" in part:
            a, b = part.split("-", 1)
            start, end = int(a), int(b)
        else:
            start = end = int(part)
            if step != 1:
                end = hi
        out |= set(range(start, end + 1, step))
    return {v for v in out if lo <= v <= hi}
 
 
def expected(cron: str, start: datetime, end: datetime):
    mi, ho, dom, mon, dow = cron.split()
    M, H = _field(mi, 0, 59), _field(ho, 0, 23)
    DOM, MON = _field(dom, 1, 31), _field(mon, 1, 12)
    DOW = {d % 7 for d in _field(dow, 0, 7)}      # 日曜は 0 でも 7 でも同じ
    dom_restricted = dom.strip() != "*"
    dow_restricted = dow.strip() != "*"
 
    t = start.replace(second=0, microsecond=0)
    while t <= end:
        if t.minute in M and t.hour in H and t.month in MON:
            d_ok = t.day in DOM
            w_ok = ((t.weekday() + 1) % 7) in DOW
            # 日と曜日を両方指定したときは OR。片方だけなら AND として扱う
            ok = (d_ok or w_ok) if (dom_restricted and dow_restricted) else (d_ok and w_ok)
            if ok:
                yield t
        t += timedelta(minutes=1)

7日間で数えると 14 回。書式の解釈は間違っていませんでした。つまり欠落は、書き方ではなく実行基盤の側で起きていたことになります。

ここが最初の分かれ道でした。設定ファイルを読み返す作業をいくら続けても、原因には届きません。設定が正しいことを確認したなら、次に見るべきは設定ではなく実績です。

書いておくと、日と曜日を両方指定したときの OR 解釈は、自分で展開してみるまで自信が持てない部分でした。0 9 1 * 1 は「毎月1日」と「毎週月曜」の両方で起動します。手元で 9 月を展開すると 09-01(火)と各月曜の計 5 回になり、想定どおりでした。

失敗ログに映らない障害という種類

自動処理の監視は、ほとんどが「失敗を捕まえる」形をしています。終了コードを見る、例外を通知する、出力を検査する。どれも実行されたプロセスがあって初めて成り立ちます。

起動が消えるタイプの障害には、この形が届きません。

障害の種類失敗ログ気づき方
処理中の例外出る通知で即座に分かる
異常終了・タイムアウト出る(終了コード)通知で分かる
条件未達で何もしなかった出ない意図した挙動なので問題ない
起動しなかった出ない成果物の量を数えるまで分からない

私自身、この表の最後の行を長いあいだ持っていませんでした。監視の設計を「何が起きたか」で組み立てていて、「何が起きなかったか」を見る枠がなかったからです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
エラーが出ていない自動処理について、本当に動いたのかを記録から確かめられるようになります
自分のスケジュール設定を展開して期待起動回数を数え、実行記録とのずれを毎朝1コマンドで検出できるようになります
起動そのものが消えるタイプの障害を、被害が積み上がる前に見つけられるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-08-25
空白ひとつで、80件の検査が0件になる — 一括処理を任せる前に置くガード
空白を含むフォルダ名の下で走らせた検査ループが、80件のうち1件も開いていませんでした。断片が実在パスに化ける仕組みを実測で切り分け、削除を伴うバッチに置く件数アサーションまで書き残します。
Claude Code2026-08-22
長い処理を別セッションに任せて待つ — 通知が届かなかったときのための完了マーカー
Claude Code の notify_when_idle で別セッションの完了通知を受け取る手順と、通知が落ちても待ち続けないための完了マーカーの最小実装。3つの状態切り分けを実行結果つきで解説します。
Claude Code2026-08-03
存在チェックが通っても書けない — 無人実行の前提を能力プローブで測る
ディレクトリが存在することと、そこへ書けることは別の問題です。無人で走るClaude Codeのセッションが静かに止まる原因を実測し、存在チェックの代わりに実際の読み書きを試す能力プローブ方式のプリフライトを設計しました。書けるのに消せない場所やシェルの落とし穴も扱います。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →