docs: tools.md コード・バーコードカテゴリの本文を追記 - #526
Conversation
QRコード(qrcode-generator UTF-8パッチ/a11y title)、JAN(モジュラス10ウェイト3-1/ jsbarcode)、GS1 DataBar(bwip-js合成シンボル/AI/FNC1自動/テキスト注入)、 QRリーダー(jsQR/canvas/ダウンスケール/AbortSignal)の仕組み・準拠・制限を記述。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
🖼️ Visual Regression Test 結果
|
fumtas1k
left a comment
There was a problem hiding this comment.
レビュー: tools.md コード・バーコードカテゴリ本文追記(4 ツール)
最重要の「記述が実装と一致しているか」を軸に、4 ツールのソースを実際に読んで突き合わせました。検証したすべての技術的主張が実装どおりで、merge 可能です。以下、依頼の観点別に評価します。
✅ ロジック・記述精度(ソースと一致)
- QRコード生成(
QrCode.tsx/utils/qrcode.ts):qrcode.stringToBytesをTextEncoderで上書きする UTF-8 パッチ ✓、型番0で自動決定(qrcode(0, errorLevel))✓、誤り訂正 L7/M15/Q25/H30% ✓、エラー文言「テキストが長すぎる可能性があります」も実装どおり ✓。 - JANコード生成(
jan-code.ts): mod10 ウェイト3-1(calcJan)、JAN-13=12桁(奇数×1/偶数×3)、JAN-8=7桁(奇数×3/偶数×1)、(10 − 合計 mod 10) mod 10、サンプル先頭「49」固定— すべて一致 ✓。 - GS1 DataBar(
gs1-databar.ts):calcGtin14CheckDigit(左端=奇数位×3)✓、先頭桁 0/1 のみ(DATABAR_LIMITED_FIRST_DIGITS)✓、bwip-jsdatabarlimitedcomposite✓、対応 AI 17/10/11/15/21 がAI_DEFSと完全一致 ✓、FNC1 はgs1process()自動挿入 ✓、includetextがリニア部のみ→AI テキストをinjectCompositeTextで手動注入 ✓、decisions [067]/[082]/[083] 参照も正確 ✓。 - QRリーダー(
qr-reader.ts):jsQR、createObjectURL→Image→canvas→getImageData→jsQR、maxDim既定 1600px(DEFAULT_QR_MAX_DIM)、各 await でAbortSignal確認、detectQrContentの http/https 判定— すべて一致 ✓。
✅ セキュリティ観点
dangerouslySetInnerHTML を使う QR 描画・SVG <text> 注入の両経路について、escapeXml/escapeHtml を XSS 二次防衛線として明記できており実装の意図と整合。GS1 で「呼出側で二重 escape しない」契約も injectCompositeText の JSDoc どおり。QRリーダーの「画像・映像はサーバー送信しない」「カメラはセキュアコンテキスト前提」も実装・ブラウザ制約と一致。
✅ フロントエンド/a11y 観点
QR の role="img" は付けるが aria-label は意図的に付けない(ARIA 名前計算で <title> が除外され URL 本文が読まれなくなる)という a11y 上の微妙な判断が、QrCode.tsx のコメント(issue #386 / PR #434)どおり正確に記述されています。👍
✅ アーキテクチャ観点
カテゴリ単位の段階追記(#523 設計)に沿った第 2 弾で一貫。qrcode-generator を直接 import せず @/utils/qrcode 経由に統一する方針も正しく記述。decisions.md への経緯リンク誘導も住み分けどおり。
✅ テスト・検証
ローカル再確認: prettier --check ✅ / docs-section-references meta テスト ✅(7 passed)。ガード追加なしのため test-gates 対象外。
指摘事項なし、approve 相当です。残り 7 ツール(エンコード3 / 変換・解析4… 変換・解析は7)も同じ品質で続けば理想的です。
備考: PR の
mergeable_stateがblockedですが docs 単独変更のため機能的リスクはありません。必須チェック/ベース追従の保留であれば追従後に解消するはずです。
Generated by Claude Code
概要
docs/tools.md(ツール技術リファレンス)の残ツール本文をカテゴリ単位で追記する第 2 弾。本 PR は「コード・バーコード」カテゴリの未記述 4 ツールを埋める(QRチケットは #523 で記述済み)。変更内容
qrcode-generatorの UTF-8 パッチ(stringToBytes上書きで日本語対応)、誤り訂正 L/M/Q/H、SVG のrole="img"+<title>注入(aria-labelを付けない理由含む)・escapeXmljsbarcode描画bwip-jsのdatabarlimitedcomposite、AI(17/10/11/15/21)と FNC1 自動挿入(gs1process())、AI テキストの SVG<text>手動注入、PNG 白背景必須・経緯は decisions [067]/[082]/[083] へリンクjsQR、画像の canvas 経由デコード・長辺 1600px ダウンスケール・AbortSignal対応、URL/text 判定、カメラはuseQrCameraいずれも実ソース(
QrCode.tsx/jan-code.ts/gs1-databar.ts/qr-reader.ts等)を読んで記述。進捗
コード・バーコード完了で 残り 10 ツール / 2 カテゴリ(エンコード・デコード3 / 変換・解析7)。
検証
prettier --check✅ /astro check✅(pre-commit hook)🤖 Generated with Claude Code