Webサービスのリリース前監査をClaude Codeのサブエージェントで自動化した話

概要

今回はWebサービスを公開する前のリリース前監査を、Claude Codeのサブエージェントで並列自動化したツールを作ったので紹介していきます。

自作のWebサービスをリリースするとき、セキュリティ・法務・プライバシー・コンテンツ・OSSライセンス・運用コストなど見るべき観点が多いんですよね。
こんなの個人でチェックできるわけないですよ。。。

だからと言って無視すると色々大変なことになる(- -;

そこで、Claude Code のサブエージェント機能を使って、6つの観点を並列に走らせて Go / Conditional Go / No-Go を自動判定するツールを自作しました。

実際に故意に脆弱にしたテスト環境を監査させたら、Critical 10件 / High 19件 を取りこぼさず検出できたので、使用感も含めて書いていきます。

まぁあくまで実験レベルの試みなので、まったり見ていってください!

それではやっていきましょう!

npm ciで「Exit handler never called!」エラーが発生したときの対処法

概要

今回はnpm ci を実行したときに発生する「Exit handler never called!」エラーの対処法について紹介していきます。

CI環境やローカルで依存関係を再インストールしようとして npm ci を叩いたら、見慣れない「Exit handler never called!」というメッセージで止まってしまった、という経験はありませんか(- -;

これはnpm自体の内部エラーで、キャッシュの破損や node_modules 側の不整合が原因で発生することが多いです。

対処法はいろいろあると思いますが、少なくともチームで動いている場合は誰かしらはその手順でできているのですよね。。。

自分だけ通らない。。。そういった無いように寄り添った内容となっています(^^b

それではやっていきましょう(^^!

ブラウザ完結の日本語 OCR アプリを作って学んだこと(全 5 記事まとめ・設計と結果)

概要

今回はブラウザだけで完結する日本語 OCR アプリを作ってみた経緯と、全 5 記事に分けて書いた知見のまとめについて紹介していきます。

数週間かけて、Tesseract.js で日本語 OCR → Fuse.js で辞書マッチという仕組みを作ってみました。
細かいテクニックは個別の記事に分けて書いたので、ここでは全体像と、実際にどういう課題にぶつかって・何を学んだかを振り返ります。

各論は個別記事に、全体像と学びはこの記事にという構成です。
それではやっていきましょう!

調教したOCR精度を測るベンチマークの作り方( F1 / CER / 4-gram recall)

概要

今回はOCR の精度を F1 / CER / 4-gram recall で客観的に測るベンチマークの作り方について紹介していきます。

OCR の改善を「なんとなく良くなった気がする」で進めると、ある日いきなり精度が落ちていることに気付く事故が必ず起きます。
実際、僕も複数の補正パターンをまとめて入れたら精度が50% から 30%ほどに下がって、原因を切り分けるのに半日溶かしました(- -;

数値で測れるベンチを最初に整えておくと、その手の事故を防げます。
それではやっていきましょう!

【Python】PyMuPDFでPDFを画像化するバッチを社内配布する方法(AGPLライセンスと運用設計)

概要

今回はPyMuPDFを使ってフォルダ配下のPDFを再帰的に一括PNG化するWindows向けバッチツールを、社内配布する際の設計と注意点について解説していきたいと思います。

「PDFをページ単位でPNGにしたい」というニーズ、業務だと地味に多いですよね(^^

OCR前処理、スライドの画像化、PDFの比較の為の画像化あたりでよく行います。

ただ「動くだけ」のスクリプトと「社内配布して運用できる」バッチでは、設計で意識するポイントが結構違います

さらにPyMuPDFはAGPL-3.0 / Artifex商用のデュアルライセンスというクセ付きなので、配布範囲を誤るとライセンス違反になるリスクもあります(- -;

本記事ではPyMuPDF 1本で作った小さなツールを題材に、ライセンス運用・再帰探索・設定ファイル駆動・ジェネレータ設計・終了コード連携など、社内配布を想定した判断ポイントを一通り解説します。
それではやっていきましょう!

【Python】requirements.txtをハッシュピン+wheelsでpip installをオフラインで実行する方法

概要

今回はPythonツールを業務端末やエアギャップ環境で安全に配布するための、requirements.txtのハッシュピンとwheelsを使ったオフラインインストールについて解説していきたいと思います。

社内ツールを配布していると「この端末、インターネットにつながりません」といわれることありませんか(- -;

情シス管理下の端末だとプロキシでpip接続がブロックされてたり、そもそもインターネット非接続のエアギャップ環境だったりします。

さらに最近はサプライチェーン攻撃(PyPIにマルウェア混入パッケージが上がる事案)も増えていて、「社内ツールだから適当にpip installでOK」という時代ではなくなってきました。

そこで本記事では、SHA256ハッシュで依存パッケージを検証しつつ、ローカルのwheelファイルだけで完結するオフラインインストールの手順を、実プロジェクトで使っている構成そのままで紹介します。

これで少しは安心してPythonを使用できると思います!

それではやっていきましょう!

日本語 OCR の誤認識を正規表現で補正する方法(カタカナ混同と文脈パターン)

概要

今回は日本語 OCR の誤認識を正規表現パターンで補正する方法について紹介していきます。

Tesseract.js の日本語認識はそこそこ優秀なんですが、カタカナの ソ↔ンシ↔ツュ↔ョ などで頻繁に崩れます
前処理を頑張っても、根本的に字形が似ている文字は 1 文字ずれたまま出てきやすいです。

そこで、OCR 結果をそのままファジーマッチにかける前に、混同しやすい字のペアから変種を生成して辞書に当てることと、語レベルの正規表現で既知の表記ゆれを潰すことの 2 本立てで補正します。

地味ですが、これだけで取りこぼしが目に見えて減るので、辞書ベースの OCR アプリを作るなら外せないテクニックです。

それではやっていきましょう!

【Claude Design】黒猫シックな『嘘ブログ』LP をプロンプト一本で作ってみた

概要

今回はAnthropic が 2026-04-17 にリリースした新プロダクト「Claude Design」で、架空サイト「嘘ブログ」の LP モックを作ってみた体験レビューを紹介していきます。

結論から言うと、プロンプト一本投げるだけで、黒猫マスコット+セリフ体のシック系 LP が遷移込みで組み上がるという、かなりインパクトのあるツールでした。

題材は、以前から冗談半分で温めていた「全部嘘しか載ってないブログ=嘘ブログ」という個人ネタです。

ポップな明るいデザインじゃなくて、セピアがかった墨黒基調のシックなトーンで仕上げてほしい、というのも含めて Claude Design に丸投げしてみました。

それではやっていきましょう!

Fuse.js でトークン長に応じた動的しきい値ファジー検索を作る方法

概要

今回はFuse.js でトークンの長さに応じて動的にしきい値を切り替えるファジー検索の作り方について紹介していきます。

OCR やユーザ入力から拾ったキーワードを辞書に当てるとき、Fuse.js は便利ですが、しきい値を固定にすると短い単語で誤爆・長い単語で取りこぼしが発生します。
「3 文字のカタカナが関係ない単語に引っかかる」「長い専門用語なのに 1 文字ずれで外れる」という、よくあるやつですね(- -;

ここでは、単一しきい値の限界を説明しつつ、トークン長に応じた段階しきい値・曖昧判定・長さ比キャップの 3 段構えで精度を上げる実装を紹介します。

それではやっていきましょう!

Canvas で OCR 前処理:Sauvola 二値化とコントラスト伸長で認識精度を上げる

概要

今回はCanvas で画像を前処理して、Tesseract.js の OCR 認識精度を上げる方法について紹介していきます。

スマホで撮った写真をそのまま Tesseract.js に渡しても、日本語の認識結果はけっこうボロボロになりがちです。
原因はシンプルで、OCR エンジンは「白い紙に黒い文字」みたいな、くっきりした画像が得意なんですよね。

でも写真って、色はついてるし、影もあるし、光の当たり方にムラもある。OCR から見ると「情報が多すぎて読みにくい」状態になっています。

なので、OCR に渡す前にひと手間加えて、写真を「白黒のくっきり画像」に変換してから渡すというのが今回のテーマです。手順はこんな感じ。

<4 段階の前処理>
  1. グレースケール化 … 色を捨てて白黒に
  2. コントラスト伸長 … 明るさのメリハリを強くする
  3. 二値化 … 完全な「白 or 黒」だけの画像にする
  4. 明暗の反転(必要なら) … 黒背景の画像を白背景に直す

全部ブラウザの Canvas API だけで完結するので、サーバーも追加ライブラリも不要です。

それではやっていきましょう!