CLAUDE LABEN
MCP — Claude が MCP の 2026-07-28 仕様へのサポートを広げました。ステートレスなコア・OAuth と OIDC による認可の強化・Apps と Tasks 向けのバージョン付き拡張が入っていますDESIGN — /design が8月17日にリサーチプレビューとして公開されました。アイデアやスクリーンショット、既存のデザインを渡すと Claude Design 上の編集可能なアートボードが返ってきますOUTPUT — 結論から先に述べる Concise 出力スタイルが追加されました。長い前置きを読み飛ばしたい場面で効きますPERMISSIONS — auto モードが既定になりました。許可と拒否のルールを、正規表現ではなく普通の文章として書けますLIMITS — 週次上限の50%増は8月31日まで延長されています。対象は Pro・Max・Team とシート課金の Enterprise で、残りは6日ですRESUME — 使用量の上限に達したセッションが、上限リセット後に自動で続きから再開するようになりました。あわせて認証情報の漏えい対策も強化されていますMCP — Claude が MCP の 2026-07-28 仕様へのサポートを広げました。ステートレスなコア・OAuth と OIDC による認可の強化・Apps と Tasks 向けのバージョン付き拡張が入っていますDESIGN — /design が8月17日にリサーチプレビューとして公開されました。アイデアやスクリーンショット、既存のデザインを渡すと Claude Design 上の編集可能なアートボードが返ってきますOUTPUT — 結論から先に述べる Concise 出力スタイルが追加されました。長い前置きを読み飛ばしたい場面で効きますPERMISSIONS — auto モードが既定になりました。許可と拒否のルールを、正規表現ではなく普通の文章として書けますLIMITS — 週次上限の50%増は8月31日まで延長されています。対象は Pro・Max・Team とシート課金の Enterprise で、残りは6日ですRESUME — 使用量の上限に達したセッションが、上限リセット後に自動で続きから再開するようになりました。あわせて認証情報の漏えい対策も強化されています
記事一覧/Claude Code
Claude Code/2026-08-25中級

空白ひとつで、80件の検査が0件になる — 一括処理を任せる前に置くガード

空白を含むフォルダ名の下で走らせた検査ループが、80件のうち1件も開いていませんでした。断片が実在パスに化ける仕組みを実測で切り分け、削除を伴うバッチに置く件数アサーションまで書き残します。

Claude Code234bash5自動化79個人開発122運用17

プレミアム記事

作業フォルダの中に散らばったドキュメントを一通り点検したくて、拡張子で拾って先頭バイトを読むだけの短いループを書きました。80件ほどあるはずのファイルです。

走らせると、こう出ました。

checked=80 readable=0 unreadable=80

80件を検査して、1件も読めていない。最初は同期の問題を疑いました。クラウド同期のフォルダを作業場所にしているので、実体がまだ降りてきていないのだろう、と。

けれど cat で個別に開くと、どれも普通に読めます。中身も欠けていません。

原因はファイルの側ではありませんでした。フォルダ名に空白が一つ入っていた、それだけです。

検査したはずの80件が、160回に増えていた

問題のループはこういう形をしていました。個人開発の点検スクリプトでは、おそらく最も書かれている形です。

for f in $(find "$ROOT/_documents" -type f -name "*.md"); do
  if head -c 1 "$f" >/dev/null 2>&1; then ok=$((ok+1)); else ng=$((ng+1)); fi
done

"$ROOT/_documents" はきちんとクォートしてあります。ループ変数の "$f" もクォートしてあります。それでも壊れます。

壊れているのは $( ) の外側です。コマンド置換の結果は、クォートされていない位置に置かれた時点で IFS(既定では空白・タブ・改行)によって単語分割されます。find が返した1行のパスが、空白のところで二つに割れる。

実際に数えてみます。空白を含むディレクトリの下に100バイトのファイルを80件置いて、同じループを回した結果です。

=== A: コマンド置換・非クォート ===
iterations=160 readable=0 unreadable=160  (実ファイル数=80)

イテレーションが160。ファイル数のちょうど2倍です。パスが2つの断片に割れ、その断片一つひとつをファイル名だと思ってループが回っていました。当然どちらも開けません。

find-print0 で出し、NUL 区切りで読む形に変えると、こうなります。

while IFS= read -r -d '' f; do
  head -c 1 "$f" >/dev/null 2>&1 && ok=$((ok+1))
done < <(find "$ROOT/_documents" -type f -name "*.md" -print0)
=== B: find -print0 + while read -d '' ===
iterations=80 readable=80 unreadable=0

80件、全件読めました。ファイルは最初から何も壊れていなかったわけです。

断片が「実在するパス」に化けるとき

ここまでなら「読めなかっただけ」で済みます。実際に背筋が冷えたのは、次を確かめたときでした。

割れた断片のうち、前半は実在するディレクトリになり得ます

/work/Dolice Labs/out/tmp_1.txt が割れると、前半は /work/Dolice です。もし同じ階層に Dolice という別のフォルダが本当に存在していたら、その断片は「存在しないゴミ」ではなく「実在する別の場所」を指します。

検証用に、消したいファイルを Dolice Labs/out/ に5件、消してはいけないファイルを Dolice/keep/ に3件置き、素朴なループで削除を回しました。

for f in $(find "$T/Dolice Labs/out" -type f -name "tmp_*.txt"); do
  rm -rf "$f" 2>/dev/null
done

結果です。

before: keep=3 tmp=5
after : keep=0 tmp=5
対象意図実行前実行後
Dolice Labs/out/消したい5件5件(1件も消えていない)
Dolice/keep/消してはいけない3件0件(全部消えた)

意図した対象は一つも消えず、触れてはいけない側が全滅しました。しかもループの終了コードは 0 で、標準エラーには1行も出ません。

rm -rf "$f""$f" はクォートしてあります。クォートは断片を「1つの引数」として渡すことしか保証しません。その断片がどこを指すかまでは面倒を見てくれない、というのがこの現象の芯です。

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

この記事の続きを読む

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

この記事で得られること
空白を含むパスの下で一括処理を任せる前に、自分のスクリプトが黙って全件を落とす形になっていないかを数分で判定できるようになる
「対象が0件だった」と「0件しか開けなかった」を、処理件数の突き合わせで機械的に切り分けられるようになる
同じループが、消したい5件を残したまま消してはいけない3件を消した実測から、削除を伴うバッチのどこにガードを置くかを決められるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Claude Code2026-08-22
長い処理を別セッションに任せて待つ — 通知が届かなかったときのための完了マーカー
Claude Code の notify_when_idle で別セッションの完了通知を受け取る手順と、通知が落ちても待ち続けないための完了マーカーの最小実装。3つの状態切り分けを実行結果つきで解説します。
Claude Code2026-07-19
auto モードの設定が、いつの間にか自分でも思い出せなくなっていた — 既定へ戻す claude auto-mode reset の使いどころ
夜間の自動運用を続けるうちに、auto モードの設定を少しずつ触り足していました。ある朝の違和感で、自分が何を変えたのか思い出せないことに気づきます。既定へ戻す claude auto-mode reset を基点にして設定を組み直した、個人開発の片付けの記録です。
Claude Code2026-07-14
空の変数と rm -rf の夜 — Claude Code auto モードの事前確認に助けられた片付けの記録
空になった変数のせいで rm -rf が広範囲に化けかけた夜の記録です。set -u が空文字を素通りさせる理由を手元のシェルで検証し、ドライランを既定にした掃除スクリプトの実行結果まで残しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →