contrast_check
WCAGコントラスト比チェック
文字色と背景色のWCAG 2.1コントラスト比を計算し、AA/AAA基準(通常/大テキスト・UI部品)の合否を返す。Webデザインの配色検証・アクセシビリティチェックに使う。
bg必填fg必填
io.github.First-CH由 GitHub 帳號 First-CH 發布v0.51.0更新於 Nov 8, 2026
Web production tools for AI agents: contrast, JP text, WebP, JSON-LD, slugs, dates and 40+ more
本機 MCP 伺服器,為助理提供 40 多種網頁製作工具(對比度、編碼、差異、雜湊、JSON-LD、Marp 簡報)及可選的網站檢查工具。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
MCP server exposing First CH Tools' free web-tool logic — WCAG contrast, JP character/X-weight counting, WebP conversion, JSON-LD generation, llms.txt generation, encoding/line-ending conversion, Marp Markdown→slide rendering, Japanese/English test-data generation, text/code diffing, cron-expression explanation, Base64/data-URI encoding, URL query-parameter editing, HTML entity escaping/unescaping, JSON⇄YAML conversion, px ⇄ rem/em unit conversion, colour-code conversion with alpha compositing, MD5/SHA-1/SHA-256/SHA-384/SHA-512 hashing, JWT decoding with expiry and signature checks, User-Agent parsing with device/bot detection, bulk UUID v4 / ULID generation, aspect-ratio calculation with responsive sizing, case conversion between camelCase, snake_case and kebab-case, CSV/TSV ⇄ JSON conversion, IP/CIDR calculation with subnet splitting and IP-range reduction, business-day date calculation with Japanese public holidays, HTML-to-Markdown conversion, Japanese era ⇄ Western date conversion with age calculation, and URL-slug generation from Japanese titles — to AI agents such as Claude Code. All of those run on your machine.
It also ships app_* tools for the 39 web apps at apps.first-ch.com (site checks such as GEO/AI-search readiness, meta tags, security headers, SSL certificates, DNS and email DNS, redirects, broken links, structured data, AI-crawler access, Japanese readability, and AI-assisted business-tone and LP-copy checks). Unlike the local tools, an app_* tool sends its input (a URL, domain name or text) to apps.first-ch.com and returns the JSON the app's API responds with — see Network access, files and privacy.
日本語版は 後半セクション を参照してください。
Three ways to add this server, pick whichever fits your client.
Requires Node.js >=24 (all three methods below run the server via npx, so Node must be installed even when the MCP client itself — e.g. Claude Code's native, no-Node install — doesn't strictly require it).
Add to your client's server config (e.g. mcp.json / claude_desktop_config.json):
This server is also registered in the MCP Registry as io.github.First-CH/tools-mcp (see server.json), so registry-aware clients can discover and install it by that name too.
app_*, sent to apps.first-ch.com)Off by default. These tools send your input to apps.first-ch.com, so they are only registered when you opt in with the environment variable FIRSTCH_ENABLE_APPS=1 (for example claude mcp add firstch-tools -e FIRSTCH_ENABLE_APPS=1 -- npx -y @first-ch/tools-mcp). Without it, every tool runs on your machine and nothing is sent anywhere.
Each app_* tool calls one app's public JSON API (POST https://apps.first-ch.com/<slug>/api/<action>, no auth; the list is in llms.txt) and returns its JSON response as is. The input is sent to apps.first-ch.com and processed there; the apps store neither the input nor the result. Apps that check a site make First CH's server request that site, so the site sees a request from apps.first-ch.com, not from you. Every app_* tool also takes lang? (ja default / en) for the language of verdicts and error messages. Calls time out after 30 s (60 s for the heavier apps and the AI apps). API errors (invalid input, unreachable site, rate limit) come back as tool errors carrying the app's error code and message.
See server.mjs for the exact Zod input schemas of the local tools and apps.mjs for the app_* tools.
PDF output (marp_render) needs a local Chrome/Chromium. marp-core renders the HTML with no browser dependency (so the package stays light for npx); PDF is produced by driving a locally-installed Chrome/Chromium in headless mode. It is auto-detected on common paths, or set MARP_CHROME_PATH to the executable. If none is found, marp_render returns the HTML only and reports pdf_skipped — you can still open that HTML and print → PDF yourself (one slide per page).
app_* tools. Every tool without the app_ prefix runs entirely on your machine and sends nothing anywhere. The app_* tools are the exception by design: each call sends its input (the URL, domain name, DKIM selector or text you pass) to First CH's server at apps.first-ch.com, which processes it and returns the result. The apps store neither the input nor the result; the AI apps (app_tone_check, app_lp_persona_check) pass the text to Cloudflare Workers AI and keep only a per-day call count (no text, no IP) to enforce the daily cap. Like any web request, the call reveals your public IP address to apps.first-ch.com (hosted on Cloudflare); it is used only for in-memory per-IP rate limits and is not stored. The apps that check a site fetch that site from First CH's server. The User-Agent is first-ch-tools-mcp/<version>. Don't pass anything confidential to an app_* tool, and stick to the local tools when nothing may leave your machine. FIRSTCH_APPS_BASE_URL overrides the base URL (for testing).npx downloading the package from the npm registry, and marp_render with allowRemote: true (your local Chrome/Chromium then fetches the remote images/stylesheets your Markdown references). By default marp_render loads no web fonts, keeps emoji as text, strips remote @imports from the built-in themes and runs Chrome with network access blocked and its sandbox enabled (MARP_CHROME_NO_SANDBOX=1 opts out where the sandbox cannot start, e.g. root in a container).outputPath/outputDir, webp_convert, marp_render) refuse to replace an existing file unless you pass overwrite: true. They are annotated readOnlyHint: false / destructiveHint: true; every other tool is readOnlyHint: true. The app_* tools (and marp_render) are annotated openWorldHint: true because they reach the network. marp_render without any path writes to <OS temp dir>/firstch-tools-mcp/; the server never deletes result files.Nothing is logged by default. Usage is recorded only when you set the FIRSTCH_TOOLS_USAGE_LOG environment variable to a file path — each tool call then appends one JSON line ({ ts, tool, source }) to that local file. The log itself is never transmitted; if the variable is unset, no file is written. (This covers usage logging only — the app_* tools still send their input to apps.first-ch.com as described above.)
The same algorithms are also available as a free, no-install browser tool at tools.first-ch.com — useful when you want a UI instead of an MCP call, or want to hand a link to someone without an MCP client. The app_* tools correspond one-to-one to the web apps at apps.first-ch.com.
webp_convert bundles a vendored, unmodified subset of @jsquash/webp v1.5.0 under vendor/jsquash-webp/. The web version at tools.first-ch.com vendors the exact same v1.5.0 subset, so both surfaces produce identical output. Each side's CI independently verifies its vendored files against vendor/jsquash-webp/CHECKSUMS.sha256 (see .github/workflows/ci.yml), so a silent, unnoticed drift between the two copies isn't possible.
The package itself is licensed under MIT.
It bundles a subset of jSquash's WebP codec under vendor/jsquash-webp/ to power webp_convert, which carries its own licenses:
vendor/jsquash-webp/LICENSE.vendor/jsquash-webp/codec/LICENSE.codec.md.Both license files are included verbatim in the published npm package, as required by their respective terms (BSD-3-Clause in particular requires the copyright notice, condition list, and disclaimer to be reproduced in binary redistributions).
test-apps.mjs also checks that apps.mjs matches functions/_shared/apps-registry.ts of the FirstCHApps repository when it is checked out next to this one (or at FIRSTCH_APPS_REPO); otherwise that check is skipped.
CI runs both on Node 24, plus a vendor checksum check and a published-tarball content check — see .github/workflows/ci.yml.
Release rule: a push to main automatically publishes a new package version through npm Trusted Publishing (OIDC) after every CI gate passes. No NPM_TOKEN, npm login, OTP, or manual approval is used. The workflow verifies npm propagation and creates the matching vX.Y.Z tag. Package changes must bump every synchronized version field; if a version already exists with different package contents, CI fails instead of overwriting it. CI-only changes with identical package contents safely skip publishing.
@first-ch/tools-mcp は、First CH Tools(無料Webツール集)の計算ロジック — WCAGコントラスト比・日本語文字数/Xウェイト計測・WebP変換・JSON-LD生成・llms.txt生成・文字コード/改行コード変換・Marp Markdown→スライド レンダリング・テストデータ生成・テキスト/コード差分・Cron式の解説・Base64/Data URI変換・URLパラメータの分解/編集/再構築・HTML特殊文字のエスケープ/エンティティのデコード・JSON⇄YAMLの相互変換・px⇄rem/emの単位換算とCSSの一括変換・カラーコードの相互変換とアルファ透過の合成・MD5/SHA-1/SHA-256/SHA-384/SHA-512のハッシュ生成と照合・JWTのデコードと有効期限/署名の検証・User-Agent文字列の解析とデバイス判定・UUID v4 / ULIDの一括生成・アスペクト比の計算とレスポンシブサイズの算出・camelCase / snake_case / kebab-case などの文字列ケース変換・CSV/TSV ⇄ JSON の相互変換・日数/営業日の計算(日本の祝日を内蔵)・HTML→Markdownの変換・和暦⇄西暦の変換と満年齢の計算・日本語タイトルからのURLスラッグ生成 — をAIエージェント(Claude Code等)向けMCPツールとして提供するサーバーです。これらは全て端末内で処理します。
あわせて、apps.first-ch.com のWebアプリ39本(GEO・メタタグ・セキュリティヘッダー・SSL証明書・DNS/メールDNS・リダイレクト・リンク切れ・構造化データ・AIクローラー許可・和文可読性・AIによるビジネス文面/LP文言のチェックなど)を呼ぶ app_* ツールも提供します。app_* ツールは入力(URL・ドメイン名・文面)を apps.first-ch.com のサーバーへ送り、アプリの API が返した JSON を返します(端末内で完結する他のツールとはここが違います)。詳しくは 通信・ファイル・プライバシー を参照してください。
導入経路は3通りあります。使っているクライアントに合わせて選んでください。
Node.js >=24 が必要です(以下いずれの方法も npx 経由でサーバーを起動するため。Claude Code本体はNode不要のnativeインストールもありますが、その場合でもNodeは別途必要です)。
設定ファイル(mcp.json / claude_desktop_config.json 等)に以下を追加します。
本サーバーは MCP Registry にも io.github.First-CH/tools-mcp として登録済みです(server.json 参照)。レジストリ対応クライアントはこの名前からも発見・導入できます。
app_*・apps.first-ch.com へ送信)既定では無効です。 入力を apps.first-ch.com へ送るため、環境変数 FIRSTCH_ENABLE_APPS=1 で明示的に有効にしたときだけ登録されます(例: claude mcp add firstch-tools -e FIRSTCH_ENABLE_APPS=1 -- npx -y @first-ch/tools-mcp)。指定しなければ、すべてのツールが端末内で動き、どこにも送信しません。
各 app_* ツールは、アプリ1本の公開 JSON API(POST https://apps.first-ch.com/<slug>/api/<action>・認証なし。一覧は llms.txt)を呼び、応答の JSON をそのまま返します。入力は apps.first-ch.com へ送られてそこで処理され、入力も結果もサーバーには保存されません。 対象サイトを取得するアプリは First CH のサーバーから相手のサイトへアクセスするので、相手側には apps.first-ch.com からのアクセスとして記録されます。全ての app_* ツールは lang?(既定 ja/en)で判定・エラー文の言語を選べます。待ち時間は30秒(重いアプリと AI のアプリは60秒)。入力の不備・相手サイトに届かない・回数制限などの API エラーは、アプリの error コードと message を含むツールのエラーとして返ります。
正確な入力スキーマ(Zod定義)は、端末内のツールが server.mjs、app_* ツールが apps.mjs を参照してください。
marp_render のPDF出力にはローカルの Chrome/Chromium が必要です。 marp-core によるHTML生成はブラウザ非依存(npx 導入を軽く保つため)で、PDFはローカルインストール済みの Chrome/Chromium を headless で駆動して生成します。定番パスから自動検出し、MARP_CHROME_PATH で実行ファイルを明示することもできます。見つからない場合は HTML のみを返し pdf_skipped を報告します(そのHTMLを開いて印刷→PDF保存でも1スライド=1ページで作成できます)。
app_* ツールの違い。 app_ で始まらないツールは全て端末内で処理し、どこにも送信しません。app_* ツールだけは設計上の例外で、呼び出すたびに入力(渡した URL・ドメイン名・DKIM セレクタ・文面)を First CH のサーバー apps.first-ch.com へ送り、そこで処理した結果を受け取ります。入力も結果もサーバーには保存しません。AI のアプリ(app_tone_check・app_lp_persona_check)は文面を Cloudflare Workers AI に渡して判定し、1日の上限を数えるために日付と全体の回数だけを記録します(文面・IP は記録しません)。通常の Web アクセスと同じく、呼び出し元のグローバルIPは apps.first-ch.com(Cloudflare 上で稼働)に届きますが、IP ごとの回数制限(メモリ上のみ)に使うだけで保存しません。サイトを診断するアプリは First CH のサーバーから対象サイトを取得します。User-Agent は first-ch-tools-mcp/<version> です。機密の文面や社外秘の URL は app_* ツールに渡さず、端末の外へ出したくない入力には端末内のツールを使ってください。テスト用に FIRSTCH_APPS_BASE_URL で送り先を差し替えられます。npx が npm レジストリからパッケージを取得することと、marp_render に allowRemote: true を渡したとき(Markdown が参照する外部の画像・CSS をローカルの Chrome が読み込む)だけです。既定の marp_render は Webフォントを読まず、絵文字は文字のまま、組み込みテーマの外部 @import を取り除き、Chrome も外部通信を止めサンドボックス有効のまま起動します(サンドボックスが使えない環境だけ MARP_CHROME_NO_SANDBOX=1 で外せます)。outputPath/outputDir を持つもの・webp_convert・marp_render)は、同名のファイルがあれば overwrite: true を渡さない限りエラーにします。これらは readOnlyHint: false・destructiveHint: true、それ以外は readOnlyHint: true を付けています。ネットワークへ出る app_* ツール(と marp_render)には openWorldHint: true を付けています。パス指定の無い marp_render は <OSの一時ディレクトリ>/firstch-tools-mcp/ に書き、書いたファイルはサーバーが消しません。既定では何も記録しません。環境変数 FIRSTCH_TOOLS_USAGE_LOG にファイルパスを設定したときのみ、各ツール呼び出しごとに1行のJSON({ ts, tool, source })をそのローカルファイルへ追記します。この記録ファイルを送信することはありません(未設定であればファイルへの書き込み自体が発生しません)。なお、これは利用記録の話で、app_* ツールは上記のとおり入力を apps.first-ch.com へ送ります。
同一アルゴリズムを、インストール不要の無料ブラウザツールとしても公開しています: tools.first-ch.com。UIで使いたいとき・MCPクライアントを持たない相手にリンクを共有したいときはこちらをどうぞ。app_* ツールは apps.first-ch.com のWebアプリと1対1で対応しています。
webp_convert は @jsquash/webp v1.5.0 の無改変サブセットを vendor/jsquash-webp/ 配下に同梱しています。Web版(tools.first-ch.com)も同じv1.5.0サブセットを無改変で使っており、双方が同一の出力を返します。各リポジトリのCIが独立に、自身のvendorファイルを vendor/jsquash-webp/CHECKSUMS.sha256 に対して検証するため(.github/workflows/ci.yml 参照)、両者が気づかないうちに乖離することはありません。
本パッケージ自体は MIT です。
webp_convert のために jSquash のWebPコーデックの一部を vendor/jsquash-webp/ 配下に同梱しており、それぞれ別のライセンスが適用されます。
vendor/jsquash-webp/LICENSE を参照vendor/jsquash-webp/codec/LICENSE.codec.md を参照いずれのライセンスファイルも公開npmパッケージに原文のまま同梱しています(BSD-3-Clauseはバイナリ再配布時にも著作権表示・条件・免責事項の再掲を求めるため)。
test-apps.mjs は、FirstCHApps リポジトリがこのリポジトリの隣(または FIRSTCH_APPS_REPO)にあれば、apps.mjs の定義が functions/_shared/apps-registry.ts の一覧と一致するかも確かめます(無ければその検査だけ飛ばします)。
CIはNode 24 でのテストに加え、vendorチェックサム検証・公開tarball内容検査を実行します(.github/workflows/ci.yml 参照)。
來源:README.md,提交 4541c5b
WCAGコントラスト比チェック
文字色と背景色のWCAG 2.1コントラスト比を計算し、AA/AAA基準(通常/大テキスト・UI部品)の合否を返す。Webデザインの配色検証・アクセシビリティチェックに使う。
bg必填fg必填文字数カウント(Xウェイト対応)
日本語テキストの文字数(書記素単位)・全角/半角内訳・行数と、X(Twitter)の投稿ウェイト(全角=2・半角=1・URL=一律23、上限280)を返す。SNS投稿や文字数制限のあるフォーム入力の検証に使う。
text必填画像→WebP変換
PNG/JPEG画像ファイルをWebPへ変換して保存する。エンコーダは tools.first-ch.com/webp/ と同一のlibwebp WASM(品質既定80)。Web制作の画像最適化・納品前の軽量化に使う。入力は絶対パス。出力先を省略すると入力と同じ場所に拡張子.webpで保存する。
paths必填qualityoutputDiroverwriteJSON-LD構造化データ生成
schema.org準拠のJSON-LD構造化データを生成する(tools.first-ch.com/jsonld/ と同一ロジック)。対応タイプ: organization(会社情報)/ faqpage(よくある質問)/ service(提供サービス)/ breadcrumb(パンくず)。空の項目は出力から自動で省略される。返り値は json オブジェクトと <script> スニペット。
faqtype必填servicebreadcrumborganizationllms.txt 生成
生成AI・AI検索にサイト概要を伝える llms.txt(llmstxt.org 提案フォーマット準拠)を生成する(tools.first-ch.com/llms-txt/ と同一ロジック)。生成テキストをサイトのルート(/llms.txt)に設置して使う。
notessummarysectionssiteName必填文字コード・改行コード変換
CSV/テキストの文字コード(UTF-8 / Shift_JIS)・BOM有無・改行コード(CRLF/LF/CR)を判定し、UTF-8へ変換する。顧客から受け取ったCSVの文字化け調査、フォーム取り込みデータの前処理、リポジトリ内ファイルの改行コード事故(CRLFがLFに書き換わる等)の確認に使う。mode=analyze なら判定のみ、mode=convert なら変換後のテキストとbase64を返す。
bommodetextbase64newlineencodingMarp Markdown→スライド レンダリング
Marp Markdown をスライドへレンダリングし、HTML(テーマCSSをインラインした自己完結ファイル)や PDF を書き出す。AIが生成したスライド用Markdownをそのまま渡せば描画まで完結する(社内の marp ビルドの定型化・顧客配布資料の生成に使う)。和文テーマ firstch(紙/墨/朱・IBM Plex Sans JP が入っていれば使う)を同梱し、既定テーマにする。Markdown 側の Marp フロントマター(例: theme:/paginate:/size:/`<!-- _class: lead -->`)はそのまま効く。PDF はローカルの Chrome/Chromium を headless で呼び出して生成する(未検出なら HTML のみ返し理由を添える。環境変数 MARP_CHROME_PATH で実行ファイルを明示可)。既定では外部へ通信しない(Webフォントを読まず、絵文字は文字のまま、組み込みテーマの外部フォント @import は取り除き、PDF を作る Chrome も外部への通信を止めて起動する)。Markdown が参照する外部の画像・CSS を PDF に入れたいときだけ allowRemote: true を渡す。出力した HTML を利用者がブラウザで開いたときは、Markdown に書いた外部画像をそのブラウザが読み込む。ファイルを書き出す(outputPath・inputPath と同じ場所、どちらも無ければ OS の一時ディレクトリ下の firstch-tools-mcp/)。同名のファイルがあれば上書きせずエラーにする(上書きは overwrite: true)。書き出したファイルは消さない。
themetitleformatsmarkdowninputPathoverwriteoutputPathallowRemoteテストデータ生成(ダミーCSV/JSON/Excel・境界値テキスト)
フォーム入力テスト・CSV取り込みテスト用のダミーデータを生成する。mode=records(既定)は氏名・フリガナ・住所・郵便番号・メール・電話番号などをCSV/TSV/JSON/XLSXで返し、文字コード(UTF-8 / Shift_JIS)・BOM・改行コード(LF/CRLF)を指定できる。format=xlsx は Excel の .xlsx ファイル(バイナリ)を base64 で返す。outputPath を併せて渡すとファイルに書き出せる。mode=text は maxlength の境界値テスト用に、指定文字種で n-1 / n / n+1 文字ちょうどの文字列を返す。生成データはすべて架空(メールは RFC 2606 の example.com 系)。seed を渡すと同じデータを再現できる。
bommoderowsseedfieldsformatheaderlengthlocalepresetnewlineencoding另有 2 個テキスト・コード差分チェック
2つのテキスト(またはファイル)を比較し、追加・削除・変更の件数と unified diff(.patch)を返す(tools.first-ch.com/diff/ と同一ロジック)。原稿の推敲差分の確認、コード修正のレビュー、設定ファイルの比較、AIが書き換えた文章の変更点の抽出に使う。行の対応づけは patience diff(両方に1回だけ現れる行をアンカーに分割)+アンカーの取れない範囲だけ Myers。format=blocks / both では、変更行のペアを語単位(英数字はひとかたまり・和文は1文字ずつ)で比較した changed_parts も返すため、「どの語が変わったか」まで取れる。完全ローカル処理・ネットワーク送信なし。
abpathApathBwordsformatcontextignoreCaseignoreWhitespaceCron式の解説+次回発火日時
Cron式(例: */15 * * * *)を人間向けの文へ読み下し、次回からの発火日時を返す(tools.first-ch.com/cron/ と同一ロジック)。バッチ・CI・スケジューラの設定レビュー、「この式は結局いつ動くのか」の確認、書き間違いの検出に使う。解釈は Vixie cron(crontab(5))準拠で、範囲・ステップ・列挙・JAN-DEC / SUN-SAT の名前・@daily 等の省略記法に対応し、6フィールドのときは先頭を秒として扱う。「日」と「曜日」の両方が指定されたときの OR 解釈、範囲を割り切らない */n、存在しない日付(2月30日など)は warnings で知らせる。発火日時はタイムゾーンの壁時計上で求めてから実時刻へ戻すため、夏時間のある地域でもずれない。完全ローカル処理・ネットワーク送信なし。
fromcounttimeZoneexpression必填Base64 / Data URI エンコード・デコード
テキストやファイルを Base64・data URI へ変換し、そのまま貼れる HTML <img> / CSS background-image のスニペットも返す(tools.first-ch.com/base64/ と同一ロジック)。mode="decode" では Base64 や data URI を元のバイト列へ戻し、outputPath を渡せばファイルとして書き出す。アイコンやSVGのCSS埋め込み、メールHTML用の画像インライン化、APIやJWTで受け取ったBase64の中身の確認、ログに出てきたdata URIの復元に使う。SVGは base64(必ず約1.33倍になる)よりパーセントエンコードの方が小さいため両方の長さを返して短い方を既定にし、& " < > # % と空白・非ASCIIを必ずエスケープするのでHTML属性にもCSSの url("…") にもそのまま貼れる。デコードは標準/URLセーフのどちらでも、空白・改行混じりでも、パディングが欠けていても読み取り、data URI が名乗るMIMEタイプより実際のマジックナンバー(PNG/JPEG/GIF/WebP/ico/PDF/zip/woff/woff2/SVG)から判定した種類を優先する。完全ローカル処理・ネットワーク送信なし。
modepathtextwrapbase64dataUriurlSafemimeTypesnippetsoverwriteoutputPathURLパラメータの分解・編集・再構築
URLのクエリ文字列をキーと値へ分解し、編集・追加・削除・並べ替えをして再構築する(tools.first-ch.com/url/ と同一ロジック)。UTMタグの付与、gclid等のクリックIDの一括削除、文字列単体のURLエンコード/デコード(mode="encode" / "decode")もできる。リダイレクトURLやAPI引数の中身の確認、計測用URLの作成、共有前のクエリの掃除に使う。値はデコードして返し(%XX を元の文字へ、+ を半角スペースへ)、編集していないパラメータは生の文字列のまま書き戻すため、何も指定しなければ再構築後のURLは入力と1バイトも変わらない(署名付きURLを通しても壊れない)。reencode=true で全体を encodeURIComponent の規則へ正規化する。重複キー・未エンコードのスペースや非ASCII・壊れた %XX・+ のスペース解釈・UTM値の大文字混在やsource/mediumの片落ち・URL内のパスワード・トークンらしきキー・2000文字超を warnings で知らせる。相対パスや壊れたパーセントエンコードでも例外にせず、読める範囲まで分解する。完全ローカル処理・ネットワーク送信なし(URLへのアクセスは行わない)。
seturlutmmodesorttextremoveschemereencodespaceAsPlusremoveTrackingHTML特殊文字のエスケープ・エンティティのデコード
テキスト中の < > & " ' をHTMLエンティティへ変換し、逆に & ' あ などの文字参照を元の文字へ戻す(tools.first-ch.com/html-escape/ と同一ロジック)。記事やコード例へHTMLをそのまま載せる、テンプレートへ差し込む値を安全にする、スクレイピングやAPIで受け取ったエンティティ混じりのテキストを読める形に戻す、といった用途に使う。エスケープは & を最初に処理するため何度実行しても二重エスケープにならず、名前付き参照と数値文字参照(10進・16進)を切り替えられる。デコードはHTML 4.01の名前付き文字参照252個すべてと10進/16進に対応し、知らない名前や範囲外の数値は推測で変換せずそのまま残して notes で知らせる。€ のようなC1領域の数値参照はHTML仕様どおり Windows-1252 の文字(€)へ読み替える。すでにエスケープ済みの入力・裸の &・セミコロンで閉じていない参照・ノーブレークスペース(U+00A0)の混入も notes で指摘する。完全ローカル処理・ネットワーク送信なし。
aposmodepathtextquotesnumericnonAsciioverwriteoutputPathJSON → YAML 変換・整形
JSONをYAMLへ変換して整形する(tools.first-ch.com/json-yaml/ と同一ロジック)。APIレスポンスやテンプレートの出力を docker-compose・GitHub Actions・Kubernetes マニフェストのような設定ファイルへ写すときに使う。インデント幅・引用符の付け方・null の書き方・複数行文字列をブロックスカラー(|)で書くか・キーを名前順に並べるか・先頭に --- を付けるかを選べる。別の型に読まれうる文字列(yes / no / on / off / 0755 / 12:30 / 2026-08-12 / 数値に見える文字列)、前後に空白がある文字列、- や * や # で始まる文字列は自動で引用符を付けるので、YAML 1.1 のパーサ(PyYAMLなど)に渡しても意味が変わらない。改行を含む文字列は | のブロック表記にし、行末の空白など復元できない形のときだけ "…" に倒す。コメント・末尾カンマ・シングルクォート・引用符なしのキーを含むJSON(tsconfig.json など)も読み取って変換し、JSONとしては不正であることを notes で知らせる(relaxed=false で厳密に拒否できる)。変換は完全ローカル処理・ネットワーク送信なし。text か path のどちらか一方を渡す。outputPath を渡すとファイルへ書き出す(本文は返さない)。構文エラーのときは「何行何桁・原因・直し方」と、その前後2行の抜き出しをエラーとして返すので、設定ファイルの構文チェックにも使える。読み替えで意味が変わる箇所は notes で知らせる(キーの重複=後が勝つ・2の53乗を超える整数の桁落ちなど)。
pathtextblockquoteindentrelaxeddocStartsortKeysnullStyleoverwriteoutputPathYAML → JSON 変換・構文チェック
YAMLをJSONへ変換する(tools.first-ch.com/json-yaml/ と同一ロジック)。docker-compose・GitHub Actions・Kubernetes マニフェスト・CIの設定を、プログラムから扱える形へ読み替えるときや、構文の妥当性を確かめるときに使う。インデント2/4/タブ/1行(indent=0)を選べ、キーの並べ替えと非ASCII文字の \uXXXX 化もできる。複数ドキュメント(--- 区切り)はJSONの配列1つにまとめ、アンカー &名前 / エイリアス *名前 /マージキー << は展開する(JSONに参照の仕組みが無いため。展開したことは notes で知らせる)。スカラーの解釈は YAML 1.2 core schema に従うので yes / no / on / off / NO は文字列のままだが、YAML 1.1 のパーサでは真偽値になる値、0755(10進の755になる)、12:30(60進数の750になる)、日付に見える値は notes で知らせる。対応: ブロックマップ/シーケンス・フロー表記 [] {}・引用スカラー(複数行・エスケープ)・ブロックスカラー | > と chomping - + と明示インデント・タグ(!!str !!int !!float !!bool !!null !!binary)・コメント。未対応は「? キー」の明示キー記法のみ。変換は完全ローカル処理・ネットワーク送信なし。text か path のどちらか一方を渡す。outputPath を渡すとファイルへ書き出す(本文は返さない)。構文エラーのときは「何行何桁・原因・直し方」と、その前後2行の抜き出しをエラーとして返すので、設定ファイルの構文チェックにも使える。読み替えで意味が変わる箇所は notes で知らせる(キーの重複=後が勝つ・2の53乗を超える整数の桁落ちなど)。
pathtextasciiindentsortKeysoverwriteoutputPathpx ⇄ rem / em 単位換算・CSSの一括変換
CSSの長さの単位を px ⇄ rem / em / pt で換算する(tools.first-ch.com/px-rem/ と同一ロジック)。value を渡すと1つの値の換算になり、px・rem・em・pt の値と、そのまま貼れる font-size の1行、よく使うフォントサイズ(12〜64px)のスケール表を返す。css か path を渡すとCSS全体の一括変換になり、px→rem(px2rem)のほか px2em / rem2px / em2px を選べる。デザインカンプのpx指定をremへ直す、既存のスタイルシートをアクセシビリティのためにrem化する、rem表記のCSSを実寸で確かめる、といった用途に使う。一括変換ではコメント・文字列(content: "10px")・url() の中身と、--size-16px のように識別子の一部になっている数字は書き換えない。既定では minPx=2 で1pxの罫線を残し(remにすると環境によって太さがばらつくため)、@media などアットルールの条件(ブレークポイント)も変換しない。ルートは 62.5% のようなパーセントでも指定でき、その場合はブラウザ既定16pxに対する割合として読む。割り切れない値は丸めたことを notes で知らせる。完全ローカル処理・ネットワーク送信なし。
csspathrootunitminPxscalevalueparentdirectionoverwriteprecisionskipMedia另有 3 個カラーコード変換・アルファ透過計算
色のコードを HEX / RGB / HSL / OKLCH で相互変換し、アルファ(透過度)付きの rgba() / hsla() / 8桁HEX を返す(tools.first-ch.com/color/ と同一ロジック)。入力は HEX(3/4/6/8桁)・rgb()・hsl()・hwb()・oklch()・oklab()・CSSの名前付き色(148色)・transparent を受け付け、旧記法のカンマ区切りと新記法のスラッシュ区切り、角度の単位(deg / grad / rad / turn)も読む。background を渡すと、透過色をその背景の上に重ねたときに実際に見える色(アルファ合成の結果)を flattened で返すので、デザインカンプの半透明レイヤーを不透明なHEXへ置き換える用途に使える。あわせて白文字・黒文字とのWCAG 2.1コントラスト比、アルファを刻んだ表(alpha_table)、色相と彩度を保ったまま明度だけを50〜950の11段に振った明度パレット(palette)を返す。sRGBで表現できないOKLCHは、RGBを切り詰めると色相がずれるため、明度と色相を保ったまま彩度だけを下げて収める。完全ローカル処理・ネットワーク送信なし。
stepalphacolor必填syntaxpaletteuppercasealphaTablebackgroundalphaPercentMD5 / SHA-1 / SHA-256 / SHA-384 / SHA-512 ハッシュ生成・照合
テキストまたはファイルの MD5・SHA-1・SHA-256・SHA-384・SHA-512 ハッシュ値を一度に算出する(tools.first-ch.com/hash/ と同一の仕様)。ダウンロードしたファイルが配布元のチェックサムと一致するかの確認、変更の検出、APIリクエストの署名計算の下ごしらえ、キャッシュキーの生成といった用途に使う。expected に期待値を渡すと桁数から対象のアルゴリズムを判定して照合し、一致したかどうかを返す。expected は `sha256sum` の出力(`<ハッシュ値>␣␣<ファイル名>`)・`SHA256 (file) = …`・`sha256:` のような接頭辞付き・コロン区切りの16進・Base64 をそのまま渡せる。出力は16進の小文字/大文字・Base64・base64url を選べる。text は改行コード(lf / crlf)とUTF-8のBOMの有無を指定できるので、Windowsで作られたファイルの値も再現できる(文字コードはUTF-8固定)。ファイルは大きくてもストリームで1パス処理する。MD5とSHA-1は衝突耐性が破られており署名・改ざん検知には使えないこと、ハッシュ値をそのままパスワード保存に使ってはいけないこと(ソルト付きのbcrypt / scrypt / Argon2を使う)は notes で知らせる。完全ローカル処理・ネットワーク送信なし。
bompathtextformatnewlineexpectedalgorithmsJWTのデコード・有効期限チェック・署名の検証
JWT(JSON Web Token)をデコードしてヘッダーとペイロードを返し、有効期限(exp / nbf / iat)を判定する(tools.first-ch.com/jwt/ と同一の仕様)。開発中の認証トークンの中身の確認、「なぜ401になるのか」の切り分け、期限切れかどうかの判定に使う。token は `Authorization: Bearer <token>` のヘッダー1行のまま渡してよい(前後の引用符・改行も除去する)。key を渡すと署名も検証する: HS256/384/512 は共有鍵の文字列(keyEncoding で base64url / hex も可)、RS・PS・ES・EdDSA は SPKI形式のPEM公開鍵、またはJWK / JWKS のJSON(JWKSはヘッダーの kid で自動的に選ぶ)。秘密鍵・証明書・PKCS#1 を渡した場合は検証せず、正しい取り出し方を返す。clockTolerance で時計のズレを秒単位で許容でき、now でUNIX秒の現在時刻を固定できる(再現テスト用)。alg:none・署名なし・期限切れ・nbfが未来・expがミリ秒(Date.now()の入れ間違い)・有効期間が長すぎる・ペイロードに秘密情報や個人情報が入っている、といった落とし穴は warnings で知らせる。5セグメントのJWE(暗号化トークン)はヘッダーのみ返す(復号は行わない)。完全ローカル処理・ネットワーク送信なし(JWKSの取得も行わないので、鍵は呼び出し側が渡す)。
keynowtoken必填keyEncodingclockToleranceUser-Agent文字列の解析とデバイス判定
User-Agent文字列から、ブラウザ名とバージョン・レンダリングエンジン・OSとそのバージョン・デバイス種別(desktop / mobile / tablet / tv / console / wearable / bot)・メーカーと機種・CPUアーキテクチャを判定する(tools.first-ch.com/user-agent/ と同一の仕様)。アクセスログの調査、問い合わせに付いてきたUAの読み解き、対応ブラウザの棚卸しに使う。ua はアクセスログの行のまま渡してよい(先頭の `User-Agent:`・前後の引用符・末尾のカンマは除去する)。uas に配列を渡すと複数件をまとめて解析し、ブラウザ・OS・デバイス種別の内訳を summary で返す。判定は「より限定的なトークンから先に試す」順序で行う(Edg/ → OPR/ → Chrome/ → Safari/)。Chrome・Edge・Opera はいずれも `Safari/` と `Chrome/` を名乗るため、部分一致では取り違える。tokens でUA文字列をトークン単位に分解し、`Mozilla/5.0` や `KHTML, like Gecko` のような化石の意味を返す。notes では「UAでは分からないこと」を知らせる: Chrome 110以降の削減済みUA(マイナー版は 0.0.0、Androidの機種名は `K` に凍結)、macOSが常に 10.15.7 を名乗ること、Windows 10と11が区別できないこと、iPadがMac版Safariと同じUAを送ること、アプリ内ブラウザ(LINE / Instagram / Facebook / Android WebView)、そしてUAは誰でも名乗れるためアクセス制御の根拠にできないこと。Googlebot・GPTBot・ClaudeBot などのクローラーや curl・python-requests のHTTPクライアントも判定する。完全ローカル処理・ネットワーク送信なし。
uauasincludeTokensUUID v4 / ULID の一括生成
UUID v4 または ULID を1〜100件まとめて生成する(tools.first-ch.com/uuid/ と同一の仕様)。テストデータやマイグレーションの一意なIDの発行、DBのダミーレコード作成に使う。UUID v4 は128bitのうち122bitが乱数(残る6bitがバージョン4とバリアント)で、順序を持たない。ULID は26文字で、先頭10文字が生成時刻(UNIX時間のミリ秒・48bit)、後ろ16文字が乱数(80bit)。時刻が先頭にあるため文字列の辞書順が生成順と一致し、IDから作成日時を読み戻せる(DBの主キーにするとB+treeインデックスの断片化を避けやすい。ただし生成時刻は誰にでも読める)。同一ミリ秒内に複数生成するときは ULID 仕様の単調増加(monotonic)に従って乱数部を+1するため、100件を一度に作っても順序が崩れない。乱数は node:crypto の randomBytes(CSPRNG)で、Math.random は使わない。format で出力の形(1行1件 / JSON配列 / カンマ区切り / SQLのINSERT向けの引用符付き)を、uppercase・hyphens・braces で表記(UUIDの既定は RFC 9562 に従い小文字・ULIDの既定は大文字)を選べる。完全ローカル処理・ネットワーク送信なし。
typecountbracesformathyphenstimestampuppercaseアスペクト比の計算・レスポンシブサイズ算出
アスペクト比と寸法を相互に計算する(tools.first-ch.com/aspect-ratio/ と同一ロジック)。ratio('16:9' / '16/9' / '1.85')と width か height の片方を渡すと、もう一方の寸法を返す。width と height を渡して ratio を省くと、最大公約数で約分した比率・小数・向き・画素数と、いちばん近い定番比率(16:9・4:3・3:2・1:1・4:5・9:16・21:9・1.85:1・2.39:1・1.91:1(OGP)・黄金比など)からのずれを返す。1920×1080 のように名前のある寸法はその名前も返す。round で 四捨五入(round)・偶数(even)・切り捨て(floor)・切り上げ(ceil)を選べ、丸めた場合は丸め後の実際の比率と指定した比率からのずれ(%)を返す。H.264 / H.265 は色情報を縦横半分で持つ(YUV 4:2:0)ため幅・高さとも偶数が必要で、動画向けには round="even" を使う。box を渡すと、その枠へ contain / cover ではめ込んだときの描画サイズ・拡大率・余白(レターボックス / ピラーボックス)・切り取られる量・見える割合を返す。widths か table=true でブレークポイントごとの高さの早見表を、snippet=true で aspect-ratio のCSSと(CLSを防ぐ width / height 属性入りの)HTMLを返す。完全ローカル処理・ネットワーク送信なし。
boxfitratioroundtablewidthheighttargetwidthssnippetfallbackselector另有 1 個TSV/CSV → Markdownテーブル整形・相互変換
ExcelやスプレッドシートからコピーしたTSV/CSV(クリップボードの中身はカンマ区切りではなくタブ区切り)をMarkdownの表へ整形し、逆にMarkdownの表をCSV/TSV/HTML/JSONへ書き出す(tools.first-ch.com/markdown-table/ と同一ロジック)。区切り文字はタブ・カンマ・セミコロンのそれぞれで実際に読んでみて「列数がいちばん揃うもの」を選ぶ方式で自動判定するため、金額の桁区切り(1,200)が入っていても列がずれない。CSVはRFC 4180の引用符(セル内のカンマ・改行・"" )に対応。桁揃えでは全角文字をUnicodeのEast Asian Width(Wide / Fullwidth)に従って2桁として数えるので、等幅フォントで縦線が揃う。空でないセルがすべて数値(桁区切り・小数点・通貨記号・%・単位を含む)の列は自動で右寄せ(---:)にし、aligns で列ごとに指定もできる。セルの中の | は \| へエスケープし、セル内の改行は <br> か半角スペースへ置換し、列数が足りない行には空セルを補う(直した件数は notes で返す)。Markdownを読むときは区切り行のコロンから配置を読み取り、<br> は改行へ戻すので、CSVへ書き出せばセル内改行のあるデータとして表計算ソフトへ戻せる。text か path のどちらか一方を渡す。outputPath を渡すとファイルへ書き出す(本文は返さない)。完全ローカル処理・ネットワーク送信なし。
toeolpadfrompathtexttrimalignalignsheadereastAsianmultiline另有 5 個SQLクエリの整形(予約語の大文字化・句ごとの改行・字下げ)
ログやORMが吐いた1行に固まったSQLを、予約語の大文字化・句ごとの改行・字下げの付いたクエリへ整形する(tools.first-ch.com/sql-format/ と同一ロジック)。SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT / INSERT INTO / VALUES / UPDATE / SET / DELETE FROM / WITH / UNION などの句を行頭へ、その中身を1段下げて並べ直す。JOIN は行頭に置いて ON を1段下げ、AND / OR は条件ごとに改行する(BETWEEN a AND b の AND は条件の区切りではないので改行しない)。( の直後が SELECT / WITH / VALUES のときだけサブクエリとみなして改行+字下げし、関数呼び出し(SUM(…) / IN (1, 2, 3) / OVER (PARTITION BY … ORDER BY …))は1行のまま保つ。CASE 式は WHEN / ELSE / END を縦に並べる。予約語と型名だけを大文字(または小文字)へ揃え、テーブル名・列名・別名の綴りは変えない(識別子の折りたたみ方がDBごとに違うため)。文字列('…')・引用符付き識別子("…" / `…` / […])・コメント(-- / # / /* … */)・プレースホルダ(? / :name / $1 / @var)はそのまま残す。整形と同時に、WHEREの無いUPDATE/DELETE・閉じていない括弧や引用符・SELECT *・暗黙の結合・プレースホルダの有無を notes で返す。compact=true にすると逆に改行を畳んで1行へ戻す。特定DBのパーサーではなく字句ベースの整形器なので、MySQL・PostgreSQL・SQL Server・SQLite・Oracle の方言も壊さずに通す(構文エラーの検出はしない)。text か path のどちらか一方を渡す。outputPath を渡すとファイルへ書き出す(本文は返さない)。完全ローカル処理・ネットワーク送信なし。
eolpathtextindentbreakOncompactbreakCaseoverwritebreakLogiccommaStylelogicStyleoutputPath另有 5 個QRコードの生成(SVG / PNG / 文字の図)
URLやテキストからQRコードを生成し、SVG(ベクター)・PNG・端末に貼れる文字の図で返す(tools.first-ch.com/qr/ と同一ロジック)。符号化(数字 / 英数字 / UTF-8のバイトモードを入力に応じて自動選択)・リード・ソロモン符号による誤り訂正・位置検出パターンや型番情報の配置・8種類のマスクからの自動選択まで自前で実装しており(JIS X 0510 / ISO 18004・型番1〜40)、外部のAPIも画像生成サーバーも使わない。誤り訂正レベルは L(約7%)/ M(約15%)/ Q(約25%)/ H(約30%)から選ぶ(印刷物はQ以上を推奨)。size は出力の一辺(px。SVGでは表示上の初期サイズ)、margin は余白=クワイエットゾーンのモジュール数で規格の推奨は4(0にすると背景によっては読み取れなくなる)。Wi-Fi(WIFI:T:WPA;S:…;P:…;;)・メール(mailto:)・電話(tel:)・SMS(SMSTO:)・座標(geo:)などの定型書式も、その文字列をそのまま text に渡せばよい。outputPath を渡すとファイルへ書き出す(本文は返さない)。format="png" で outputPath を省いた場合は data URI で返る。容量の上限は数字7089桁・英数字4296文字・バイト2953文字(いずれもレベルL)で、超えるとエラーになる。完全ローカル処理・ネットワーク送信なし。
maskmodesizetext必填formatmarginecLeveloverwriteminVersionoutputPathUNIXタイムスタンプ⇄日時の相互変換
UNIX秒・ミリ秒・マイクロ秒・ナノ秒と、ISO 8601や日時文字列を相互に変換する(tools.first-ch.com/unixtime/ と同一ロジック)。ログに出ている数値が結局いつなのかの確認、期限や有効期限の突き合わせ、タイムゾーンをまたぐ時刻のすり合わせに使う。数値の単位は桁数から自動判定する(10桁までを秒 / 13桁までをミリ秒 / 16桁までをマイクロ秒 / それ以上をナノ秒)。unit を渡せば自動判定を使わずその単位で読む。ミリ秒より下の桁は切り捨て、その旨を notes で返す。日時側は 2026-08-24T09:30:00Z(ISO 8601)・2026-08-24 18:30・2026/8/24 9:05・2026年8月24日 18時30分・Sun, 24 Aug 2026 03:00:00 GMT(HTTP-date)・now を受け付け、CSVやJSONから貼ったときの引用符・角括弧・行末カンマは自動で外す。input は1行1件で最大500行まとめて変換でき、行ごとにUNIX秒・ミリ秒・ISO 8601(UTC)・指定タイムゾーンの現地時刻(曜日・UTCオフセット付き)・相対表示(○分前 / ○日後)を返す。読めなかった行は他の行を巻き込まず、その行だけ error として返す。**オフセットを持たない日時は timeZone の壁時計として解釈**し、必ず notes で明示する(+09:00 や Z が入力にあれば timeZone より入力側が優先される)。夏時間で存在しない時刻は切り替え後へ繰り上げ、こちらも notes に出す。8桁の数字(20260824)はUNIX秒として読むため、日付のつもりの入力には notes で注意を返す。負の値(1970年より前)と小数点付きの秒にも対応する。完全ローカル処理・ネットワーク送信なし。
nowlangunitinput必填timeZonerobots.txt の生成(AIクローラー対応)
クロールの許可/禁止ルール・サイトマップ宣言・AIクローラーの許可プリセットから robots.txt を組み立てる(tools.first-ch.com/robots-txt/ と同一ロジック)。サイト公開前の robots.txt の作成、「AIの学習には使わせたくないが、AI検索の結果には出したい」といった書き分けに使う。ai.preset で24種のAIクローラー(GPTBot / OAI-SearchBot / ClaudeBot / Claude-SearchBot / Google-Extended / PerplexityBot / Bytespider / CCBot など)の扱いをまとめて決められる: 'training'(既定=学習目的だけ拒否しAI検索と都度取得は許可) / 'allow'(全部許可) / 'block'(全部拒否) / 'none'(AIクローラーを書かない) / 'custom'(ai.overrides で1件ずつ指定)。**クローラーは自分に一致するグループを1つだけ読む**ため、AI用のグループを作ると User-agent: * の禁止ルールがそのクローラーへ届かなくなる。既定では共通の禁止パスをAI側のグループへ書き写して取りこぼしを防ぐ(ai.inherit=false で止められる)。パスは先頭の / の補完と絶対URLからのパス抽出を自動で行い、空白を含むパス・パーセントエンコードしていない日本語のパス・ワイルドカード非対応クローラー・Googlebotが読まない Crawl-delay・サイトマップの宣言漏れ・同じUser-agentの重複・サイト全体の拒否などを warnings で返す。listCrawlers=true を渡すと生成せずAIクローラーの一覧(名前・提供元・目的)だけを返す。outputPath を渡すとそのパスへ書き出す。完全ローカル処理・ネットワーク送信なし。
ailangallowgroupssiteUrlcommentsdisallowsitemapsoverwriteallowStylecrawlDelayoutputPath另有 3 個文字列のケース変換(camelCase / snake_case / kebab-case)
識別子を camelCase / PascalCase / snake_case / CONSTANT_CASE / kebab-case と、Train-Case・dot.case・Title Case・Sentence case・lower case・UPPER CASE を合わせた11形式へ相互変換する(tools.first-ch.com/case/ と同一ロジック)。変数名の一括リネーム、DBの列名とAPIのJSONキーの読み替え、CSVヘッダーの整形といった定型処理に使う。scope で処理の単位を選ぶ: lines(既定=1行1件) / items(行内のカンマ・タブ区切りで1件ずつ=CSVヘッダー) / whole(全体で1件)。**前後の空白・インデント・改行コード(LF/CRLF)・区切り記号はそのまま残す**ので、表の列やコードの並びを崩さずに名前だけ置き換わる。語の分かち書きは、大文字の連なりの直後に「大文字+小文字」が続くときだけ手前で切る(XMLHttpRequest → XML / Http / Request)。数字は既定で直前の語に付ける(sha256Hash → sha256 / Hash。splitDigits=true で sha / 256 / Hash)。頭字語は既定で畳んで parseXmlData にし、keepAcronyms=true なら parseXMLData のまま残す(camelCase の先頭語はどちらでも小文字=URLParser → urlParser)。大文字小文字を持たない文字(日本語など)はそのまま出力し、ローマ字化はしない。**変換後に同じ名前へ衝突する項目**(first name と first_name はどちらも first_name)・数字で始まって識別子にできない結果・頭字語を含む項目・入力の形式の推定を notes と stats で返す。allFormats=true で各項目を全形式へ展開、listFormats=true で変換せず形式の一覧と使いどころだけを返す。outputPath を渡すとそのパスへ書き出す。完全ローカル処理・ネットワーク送信なし。
langpathtextscopeformatoverwriteallFormatsoutputPathlistFormatssplitDigitskeepAcronymsCSV/TSV ⇄ JSON の相互変換
CSV/TSVとJSON配列を相互変換する(tools.first-ch.com/csv-json/ と同一ロジック)。表計算ソフトから書き出した表をAPIに渡せるJSONにする、逆にAPIの応答をExcelで開ける表にする、といった用途に使う。direction を省くと入力の先頭が [ か { なら json2csv、そうでなければ csv2json と推定する。区切り文字は先頭20行で「どの記号が各行に同じ個数だけ現れるか」を見て自動判定し、delimiter で固定もできる。**stock.qty のような列名は入れ子のオブジェクトとして読み書きし、tags.0 / tags.1(tags[0] も同義)は配列になる**。逆向きも同じ規則で平らにするので、CSVへ出してJSONへ戻すと元の構造に復元される(nest=false なら入れ子はJSONの文字列としてセル1つに入る)。**型の読み替えは「一度数値にして文字列へ戻したとき元の表記と1文字も違わないか」で決める**ため、0123・+1・1.50・2の53乗を超えるID(12345678901234567890)は文字列のまま残り、郵便番号・電話番号・伝票番号・バージョン番号が壊れない。読み取りは RFC 4180 準拠で、引用符・"" エスケープ・セル内改行・CRLF・BOM に対応する(書き出し側は bom / newline を選べる)。JSONは配列・単体のオブジェクト・{"data":[…]} のように配列を包んだもの・1行1件のJSON Lines を受け取れる。**JSONの構文エラーは行・桁と前後の抜粋を返す**(例外にせず ok:false の結果として返すので、そのまま直しどころになる)。あわせて、列数が見出しと合わない行・重複した列名(name_2 として残す)・空の見出し(column4 を割り当てる)・桁落ちする数値・= + - @ で始まり表計算ソフトが数式として実行しうるセル(CSVインジェクション)・キーの並びが揃わないオブジェクトを notes で指摘する。outputPath を渡すとそのパスへ書き出す(本文は返さない)。完全ローカル処理・ネットワーク送信なし。
bomlangnestpathtexttrimtypesheaderindentnewlinequoteAlldelimiter另有 4 個全角⇄半角の変換とテキストの掃除
英数字・カタカナ・記号・スペースを**文字種ごとに**全角⇄半角へ変換し、あわせて空白まわりを掃除する(tools.first-ch.com/zenkaku/ と同一ロジック)。顧客支給原稿の表記統一、CSV取り込み前の正規化、フォーム入力値の掃除に使う。alnum / kana / symbol / space をそれぞれ keep(そのまま)/ han(半角へ)/ zen(全角へ)で指定する。既定は日本語の原稿で最も多い「英数字・記号・スペースは半角、カタカナは全角」(preset="ja" と同じ)。preset は ja / csv(jaに空白の掃除と見えない文字の除去を足したもの)/ han(すべて半角)/ zen(すべて全角)で、個別指定が優先される。**半角カタカナは1文字ではない**ため、半角→全角では次が濁点なら1文字へ合成し(ガ→ガ・パ→パ・ヴ→ヴ)、全角→半角では2文字へ分解する。句読点・カギ括弧・中黒・長音(。 、 「 」 ・ ー)は半角カタカナのブロック(U+FF61〜U+FF9F)に同居しているので**カタカナと同じ文字種**として扱う(kana="han" は「テスト」。を 「テスト」。 にする。句読点を全角で残したいなら kana="keep")。スペースは全角スペース(U+3000)⇄半角スペースで、NBSP(U+00A0)や欧文の各種スペースも半角側へ寄せる。掃除は collapseSpaces(連続する空白を先頭の1文字へ)/ trimLines(行頭行末の空白)/ blankLines(keep・collapse・remove)/ removeInvisible(ゼロ幅・BOM・制御文字)/ composeMarks(結合した濁点をNFCで合成)。**改行コード(LF/CRLF)とタブ、ひらがな・漢字は書き換えない**。出力に残った半角カナ・全角スペース・見えない文字・結合文字の濁点と、波ダッシュ〜(U+301C)/全角チルダ~(U+FF5E)・環境依存文字(① ㈱ Ⅲ)を notes で指摘する(後の2つはどちらへ寄せるべきかが届け先で変わるため、指摘のみで自動変換しない)。**NFKC正規化とは別物**で、①→1 や ㈱→(株) のような潰し方はせず、選んだ文字種しか触らない。inspect=true なら変換せず、半角カナ・全角スペース・見えない文字が入っていないかの点検だけを返す。outputPath を渡すとそのパスへ書き出す。完全ローカル処理・ネットワーク送信なし。
kanalangpathtextalnumspacepresetsymbolinspectoverwritetrimLinesblankLines另有 4 個IPアドレス・CIDRの計算
CIDR表記・サブネットマスク・ワイルドカードマスク・単体のIPから、ネットワークアドレス・ブロードキャスト・使えるホストの範囲・アドレス数・逆引きゾーン・2進表記までを計算する(tools.first-ch.com/cidr/ と同一ロジック)。サーバー設定・ファイアウォール・許可リストの作成時のサブネット計算に使う。**IPv4とIPv6の両対応**(IPv6は `::` の省略・末尾のIPv4表記・`[...]`・`%zone` を読み、出力は RFC 5952 に従う)。`192.168.1.5 255.255.255.0`(マスク併記)や `192.168.1.5/0.0.0.255`(ACLのワイルドカード)も同じ入力欄で受け取る。**ホスト数の例外も織り込む**: `/31` は点対点リンクとして2アドレスとも使え(RFC 3021)、`/32` は1台、IPv6にブロードキャストは無い。入力がネットワークアドレスでない(ホスト部にビットが立っている)ときは、設定に書くべき本来のCIDRを notes で返す。**先頭に0の付いたオクテット(192.168.001.1)は受け取らない**(8進数として読む実装があり、同じ表記が別のアドレスになるため)。アドレス帯は IANA の Special-Purpose Address Registry の主要ブロック(プライベート・CGNAT・ループバック・リンクローカル・文書用・マルチキャスト・ULA ほか)と照合して種別を返し、ネットワークがその帯からはみ出す場合も指摘する。`split` を渡すとそのプレフィックス長で均等に分割した一覧を、`contains` を渡すと各アドレスがそのネットワークに入るかを返す。`range` に「10.0.0.5 - 10.0.0.200」のような範囲・CIDR・単体IPを(`;` か改行で区切って)渡すと、**重なりと隣接をまとめたうえで過不足なく覆う最小個数のCIDR集合**へ逆算する。計算はすべてBigIntで行い、完全ローカル処理・ネットワーク送信なし。
cidrlanglimitrangesplitcontains日数・営業日の計算
2つの日付の間の日数・営業日数、起点日から N日後/N営業日後の期日、締め日と支払サイトからの支払日を計算する(tools.first-ch.com/date-calc/ と同一ロジック)。納期・検収期限・支払サイトの確認に使う。**営業日は「土日・日本の祝日・指定した休業日を除いた日」**で、祝日は内閣府「国民の祝日について」の一覧を同梱しており(1970年〜2027年)、ハッピーマンデーで動く祝日・日曜と重なったときの振替休日・前後を祝日に挟まれた国民の休日(2026-09-22 など)・年で変わる春分の日/秋分の日がすべて入る。`mode="between"` は start と end の間の暦日数・営業日数・休みの内訳・期間内の祝日一覧を返す。`mode="add"` は base から n(負なら過去へ)を unit の単位で進めた期日を返し、飛ばした休みも一覧で返す。**「受領後10営業日」は初日を数えるかで1日ずれる**ため、民法の原則どおり翌日起算を既定とし、`include_start=true` で起点日を1日目として数える。`mode="payment"` は invoice・closing(締め日)・pay_months・pay_day から支払日を求め、休みに当たったら `pay_adjust`(既定 prev=前営業日へ繰り上げ・日本の商慣習)で寄せる。週の休み(weekend)・年末年始(year_end)・自社の休業日(closed_dates)・休日出勤(work_dates)を指定できる。日付は「1970-01-01からの通算日」の整数で扱うのでサーバーのタイムゾーンで1日ずれない。完全ローカル処理・ネットワーク送信なし。
nendbaselangmodeunitstartadjustclosinginvoicepay_dayweekend另有 7 個HTML → Markdown 変換
HTML断片をMarkdownへ変換する(tools.first-ch.com/html-md/ と同一ロジック)。取得したページの本文をMarkdownに直して渡す前処理、既存サイトの原稿をMarkdown管理へ移す移行作業に使う。見出し(h1〜h6)・段落・改行・強調・取り消し線・リスト(入れ子・start 属性・チェックボックス)・表(thead / caption と align / text-align による列の配置)・リンク・画像・コードブロック(class="language-*" から言語を拾う)・引用・水平線・定義リスト・figure / figcaption・details / summary に対応し、script・style・hidden や display:none の要素・装飾のための div / span は自動で取り除く。**HTMLの解釈にブラウザのDOMを使っていない**——字句解析も木の組み立ても自前なので、Web版と結果が一致し、閉じ忘れたタグは末尾で閉じ、行き場のない閉じタグは捨てて変換を続ける(**属性の引用符が閉じていない場合だけは打ち切る**。続けると残りの文書全体を1つの属性値として飲み込むため)。補った内容・落とした内容はすべて notes で返す。**Markdownに書けないものは黙って捨てない**: セルの結合(colspan は空セルで埋め、rowspan は先頭行にだけ値が入る)・セル内のリスト/コードブロック(その表だけHTMLのまま残す)・定義リスト(Markdown Extra の ": " 記法)・sup / sub / mark / iframe / svg(unknown で「HTMLのまま残す/文字だけ残す/取り除く」を選ぶ)。表・タスクリスト・取り消し線はGFMの拡張でCommonMarkには無いため gfm=false で切れる。**相対URLは貼り先で必ず壊れる**ので、base_url を渡すとリンクと画像を絶対URLへ直す(アンカーと絶対URLはそのまま)。main_only=true は main / article の中だけを取り出して header・nav・footer・aside・form を落とす。html か path のどちらか一方を渡す。outputPath を渡すとファイルへ書き出す(本文は返さない)。ネットワークへは出ないので、ページの取得は呼び出し側で行うこと。完全ローカル処理・ネットワーク送信なし。
brgfmhtmllangpathlinksbulletescapeimagestablesunknownbase_url另有 6 個和暦 ⇄ 西暦変換・満年齢
和暦(令和・平成・昭和・大正・明治)と西暦を相互に変換し、曜日と干支を返す(tools.first-ch.com/wareki/ と同一ロジック)。契約書・請求書・行政書類の日付表記の変換と検算に使う。`mode="convert"` は date(1件)か dates(配列・1000件まで)を受け、**西暦か和暦かを自動で見分ける**: 2026-10-01 / 2026/10/1 / 20261001 / 2026年10月1日 / 令和8年10月1日 / R8.10.1 / 令和八年十月一日 / ㋿8.10.1 / Reiwa 8 など。年だけ(1989・昭和64年)・年月だけ(2019-05)も変換でき、改元をまたぐときは両方の元号を返す。書き方は和暦(元年表記・曜日つき・漢数字)・略記(R8.10.1 / R08.10.01)・西暦・ISO 8601・英語を formats で返す。改元日は大正1912-07-30・昭和1926-12-25・平成1989-01-08・令和2019-05-01。**存在しない和暦(平成32年・平成31年5月1日・令和元年4月30日)も西暦へ直したうえで正しい和暦を notes で指摘**し、書き添えの曜日((金)など)が実際と違えば WEEKDAY_MISMATCH を返す。**明治5年(1872年)以前は旧暦のため年単位でだけ換算する**(LUNAR_CALENDAR)。`mode="age"` は birth(和暦可)と reference(省略時は日本時間の今日)から満年齢(誕生日に1つ増える・2月29日生まれは平年だと3月1日)・年月日の内訳・数え年・次の誕生日と、小学校〜大学の入学・卒業の年(4月2日〜翌4月1日生まれが同学年・浪人なし)を返す。`mode="eras"` は元号一覧を返し、from_year / to_year を渡すと和暦・干支・満年齢の早見表も返す(500年分まで)。日付の書き方の誤りは ok:false と error.code で返す。日付は通算日の整数で扱うのでサーバーのタイムゾーンで1日ずれない。完全ローカル処理・ネットワーク送信なし。
datelangmodebirthdatesto_yearfrom_yearreferenceURLスラッグ生成(日本語タイトル→ローマ字)
日本語の記事タイトルから WordPress 等の URL スラッグを作る(tools.first-ch.com/slug/ と同一ロジック)。かなをヘボン式ローマ字にし(し→shi・ち→chi・つ→tsu・ふ→fu・じ→ji・しゃ→sha・促音は子音を重ねて kitte/ch の前は matcha・ん は常に n・ファ→fa・ティ→ti・ヴァ→va)、記号を除いてハイフン(separator="snake" ならアンダースコア)でつなぎ、小文字にする。結果は a-z・0-9・区切り文字だけ。**漢字の読みは推定しない**: reading にかなで読みを渡すと、title の代わりに reading から作る(読みは呼び出し側=AIが決める)。reading の空白は区切りになるので語の切れ目で空ける("とうきょう で たべた ラーメン 10せん" → tokyo-de-tabeta-ramen-10-sen)。reading なしで漢字が残ると漢字を飛ばして作り、飛ばした字を skipped と notes(KANJI) で返す。区切りは空白・記号・漢字・かな⇄英数字の切り替わり(splitKatakana=true〔既定〕ならひらがな⇄カタカナの切り替わりも)。longVowel="omit"(既定)は「おう・おお・うう」と長音記号ーを1字にする(とうきょう→tokyo・ラーメン→ramen。えい・いい は残す)、"keep" は toukyou・raamen。助詞の は・へ・を は字のとおり ha・he・o。半角カナ・全角英数字はそろえ、アクセント記号は外す(Café→cafe)。maxLength で上限(語の切れ目で切る)。数字だけのスラッグ(日付アーカイブと衝突し WordPress が -2 を付けうる)と60文字超を notes で指摘。区切り×長音の4通りを variants で返す。items で1000件までまとめて作れ、同じスラッグになる項目を DUPLICATE で指摘する。完全ローカル処理・ネットワーク送信なし。
langitemstitlereadinglongVowelmaxLengthseparatorsplitKatakanahtpasswd 生成・照合(Basic認証)
Basic認証用の htpasswd の行を作る(tools.first-ch.com/htpasswd/ と同一ロジック)。ステージングサイト・納品前の確認環境に Basic 認証を掛けるときに使う。ハッシュは bcrypt($2y$・Apache の htpasswd -B と同じ・既定コスト5)か apr1-md5($apr1$・Apache 2.2 など bcrypt を読めない環境向け)。1人なら user と password、まとめて作るなら users(文字列 "user:pass" か {user, password})か bulk(1行1人の「ユーザー名:パスワード」・# で始まる行と空行は飛ばす)を渡す(200人まで)。**パスワードが空のユーザーは16文字のパスワードを自動生成し、generated で返す**(紛らわしい字 0 O o 1 l I を除いた CSPRNG)。利用者が渡したパスワードは結果に繰り返さない。「:」を含む・空・255バイト超のユーザー名は飛ばし、重複・12文字未満・ユーザー名と同じ・前後の空白・全角文字・bcrypt の72バイト超(以降は無視される)を notes で指摘する。server(apache / nginx)を渡すと .htaccess か nginx の設定スニペットも返す(file・realm・認証なしで通す ips〔IPv4 / IPv6 / CIDR〕を反映。空白を含むパスは引用し、読めないIPは外して指摘)。mode="verify" か hash を渡すと、既存の htpasswd の1行(またはハッシュ)と password を照合する($2y$/$2b$/$2a$・$apr1$・$1$・{SHA}。コスト15以上の bcrypt は照合しない)。outputPath を渡すと htpasswd の中身をファイルへ書き出す(本文は返さない)。パスワードはどこにも記録しない。完全ローカル処理・ネットワーク送信なし。
ipsalgobulkcostfilehashlangmodeuserrealmusersserver另有 3 個OpenAPI → 日本語ドキュメント&TypeScript型定義
OpenAPI 3.x / Swagger 2.0 の仕様書(YAML か JSON)から、日本語(lang="en" で英語)の Markdown APIリファレンスと TypeScript の型定義を作る(tools.first-ch.com/openapi-doc-gen/ と同一ロジック)。受け取った仕様書を顧客・チーム向けの読める資料にする、フロントエンドの型を手書きせずに起こす、といった用途に使う。Markdown はベースURL・エンドポイント一覧・タグごとのパラメータ/リクエスト/レスポンスの表・スキーマ一覧を含み、例が書かれていないレスポンスにはスキーマから例を作る(examples=false で切る)。TypeScript は components.schemas(Swagger は definitions)を interface / type にし、operations=true(既定)ならエンドポイントごとの Params / RequestBody / Response の型も出す。$ref・allOf / oneOf / anyOf・enum・nullable・additionalProperties に対応し、TypeScript の予約語や重複する名前は付け替えて notes で知らせる。**別ファイル・URLを指す $ref は読みに行かない**(その部分は unknown にして OA_EXTERNAL_REF で指摘)。1ファイルにまとめた仕様書を渡すこと。YAML/JSON の解析は自前(json_to_yaml と同じパーサ。ただし「- 」で始まる折り返し行も description の続きとして読む)。構文の誤りは ok:false と error(code・行・桁・前後の行の抜粋)で返す。spec か path のどちらか一方を渡す(20MBまで)。outputDir を渡すと <タイトル>.md と <タイトル>.ts を書き出す(本文は返さない)。完全ローカル処理・ネットワーク送信なし。
langpathspecoutputexamplesoutputDiroverwriteoperationsFAQ構造化データ(JSON-LD)&Markdown生成
質問と回答のペアから、schema.org の FAQPage 形式の JSON-LD・同じ内容の Markdown・貼り付け用の HTML(details / summary)を同時に作る(tools.first-ch.com/faq-jsonld/ と同一ロジック)。**jsonld_generate(type=faqpage)との違い**: あちらは質問と回答を文字列のまま入れるだけ。こちらは回答を「空行で段落・改行は <br>・[文字](URL) と裸の https://… はリンク・行頭の - ・ と 1. は箇条書き」として読み、JSON-LD の acceptedAnswer.text を HTML(1行だけなら <p> で包まない)か answer_format="text" のプレーンテキストで書き、Markdown(見出し+本文・記号はエスケープ)と details/summary の HTML も返す。bulk に「Q: / Q1. / Q. / 質問:」「A: / 回答:/ 答え:」で始まる行や「## 見出し」で書いた文章をまとめて渡すと、質問と回答に分けて items の後ろへ足す。リンクは http(s)・mailto・tel・/・# だけをリンクにし、javascript: などは文字のまま残して UNSAFE_LINK で指摘する。相対URL(RELATIVE_LINK)・同じ質問の重複(DUPLICATE・全角半角と空白を無視)・片方だけ空の行(SKIPPED・出力しない)も warnings で返す。<script> の中で途切れないよう </script と <!-- と U+2028/2029 をエスケープする。日本語は \u エスケープしない。質問は200件・質問500字・回答5000字まで。完全ローカル処理・ネットワーク送信なし。
bulklangitemsleveltitleexclusivewrap_scriptanswer_formatテキスト行操作(重複削除・並べ替え・行番号)
1行1項目のテキストを整える(tools.first-ch.com/lines/ と同一ロジック)。キーワード・URL・メールアドレス・商品名の一覧の重複削除や並べ替え、箇条書き化といった定型処理に使う。**適用順は固定**: trim(前後の半角/全角空白・タブ・NBSPを削る) → removeBlank(空行と空白だけの行を削る) → dedupe(dedupeMode: first=最初の1行を残す / unique=重複した行は1行も残さない / dupes=重複した行だけを1行ずつ。ignoreCase で大文字小文字を区別しない) → sort(asc / desc / reverse / shuffle。asc・desc は numeric〔既定 true〕で item2 < item10・-3 < 1.25 < 10 と数を数として比べ、数値の行を文字の行より前に置く。照合は日本語の Intl.Collator) → prefix / suffix → number(start・sep: dot / paren / colon / bracket / tab / space・pad でゼロ埋め。接頭辞の外側に付く)。preset(uniqsort=トリム+空行除去+重複削除+昇順 / clean / numbered / mdlist="- " の箇条書き / shuffle)は Web版のボタンと同じ設定から始め、個別の引数で上書きできる。shuffle は seed(0〜4294967295)を渡すと同じ並びを再現でき、渡さなければ暗号学的乱数で偏りなく混ぜる。改行コードは入力の最初のものに揃え、末尾の改行も保つ。どの行が何回出たか(duplicates)と、前後の空白・大文字小文字・全角半角だけが違う「重複しかけ」の組を notes で返す。text か path のどちらか一方を渡す。outputPath を渡すとそのパスへ書き出す(本文は返さない)。完全ローカル処理・ネットワーク送信なし。
padseplangpathseedsorttexttrimstartdedupenumberprefix另有 8 個印刷サイズ・DPI計算(必要ピクセル数・実効dpi・早見表)
印刷物の仕上がりサイズ(mm)と解像度(dpi)から入稿に必要なピクセル数を求め、逆に手持ちの画像のピクセル数から印刷できる大きさと実効dpiを求める(tools.first-ch.com/dpi/ と同一ロジック)。チラシ・名刺・ポスターの入稿データ作成、支給画像が印刷に足りるかの判定に使う。`mode="size"`(既定)は paper(A0〜A6・B1〜B6〔JIS〕・MEISHI〔名刺91×55〕・HAGAKI・PHOTO_L・LETTER など28種。既定 A4)か widthMm/heightMm(自由なサイズ)と dpi(既定350=日本の商業印刷の標準)・bleedMm(塗り足し・片側。既定3)から、仕上がりと塗り足し込みのピクセル数(**端数は切り上げ**)・インチ・画素数・非圧縮のデータ量(RGB/CMYK)・入稿メモ(memo)と指摘(dpiの過不足・塗り足しなし・安全な範囲3mm・PSDの30,000px上限超え・CMYK入稿)を返す。名刺・往復はがき・封筒・チケットは既定で横向き(orientation で変更可)。`mode="reverse"`(width/height を渡すと既定)は画像のピクセル数から、その dpi での印刷サイズ・350dpiでの上限・paper(既定 A4)に使ったときの実効dpi(**用紙の縦横は有利な向きを選ぶ**)と判定(350以上=十分・300以上=実用・200以上=用途しだい・未満=不足)・350dpiに必要なピクセル数・主要12用紙での実効dpi一覧を返す。`mode="table"` は主要12用紙(papers で指定可)の早見表を text / md(Markdownの表)/ csv で返す。`mode="units"`(value を渡すと既定)は mm・cm・inch・px・pt(1/72インチ)・Q(級=0.25mm)を相互換算する(px は dpi で換算)。`mode="papers"` は用紙の一覧。数値は "210mm"・"4,000" のような文字列でも受ける。完全ローカル処理・ネットワーク送信なし。
dpifromlangmodepapervaluewidthformatheightpapersbleedMmwidthMm另有 2 個SERPメタタグ文字数・ピクセル幅チェック
title / meta description / URL が Google 検索結果でどこまで表示されるかを、文字数ではなく**表示幅(ピクセル)**で判定する(tools.first-ch.com/serp/ の判定部分と同一ロジック。プレビューの描画は除く)。基準はパソコン=結果の幅600px・タイトル20pxで1行・説明文14pxで2行、スマートフォン=380px・タイトル2行・説明文3行(device="both" で両方)。和文は文字単位・欧文は単語単位で折り返し、行頭禁則(、。」など)はぶら下げ・行末禁則(「(など)は次の行へ送る。行数を超えたら最終行を「…」が入る幅まで削り、表示される行(lines)・切り詰められる部分(cut)・幅(width_px / limit_px)・文字数(書記素単位)・状態(ok / cut / short〔上限の半分未満〕/ empty)を返す。指摘(checks)はタイトル・説明文の未入力(fail)、切り詰め・短すぎ・サイト名の区切り(| | - : など)が無い、URL が https でない・パスが4階層以上・%エンコードを含む(warn)。パンくず表示(host › path)と貼り付け用の <title> / <meta name="description"> / <link rel="canonical"> も返す。**ピクセル幅は近似**: Web版はブラウザの canvas で実測するが、ここでは Arial の字幅表と和文=1em で測る(カーニングなし)。ブラウザより数px広く出ることがあり、切り詰めの判定は早め(安全側)に寄る。境目の1〜2文字は目安として扱う。items で500件までまとめて判定できる。URL を取りに行かない。完全ローカル処理・ネットワーク送信なし。
urllangitemstitledevicedescriptionFlexbox / CSS Grid のCSS生成
Flexbox / CSS Grid のコンテナと子要素の指定から、コピーして使える CSS と HTML を組み立てる(tools.first-ch.com/css-layout/ と同一ロジック)。レイアウトの実装・コーディング指示の下書き・プロパティの効き方の確認に使う。**既定値と同じ宣言は書かない**(flex-wrap: nowrap・justify-content: flex-start など)、同じトラックが続けば repeat() に畳む、行と列の gap が同じなら1つにまとめる。`mode="flex"`(既定)は display / direction / wrap / justifyContent / alignItems / alignContent / gap と、items(子要素ごとの grow・shrink・basis・alignSelf・order)。`mode="grid"`(columns / rows / areas / autoFit を渡すと既定)は columns・rows(トラックの配列。例: ["240px", "minmax(0, 1fr)"])・autoFit(repeat(auto-fit, minmax(autoFitMin, 1fr)))・flow・justifyItems・alignItems・justifyContent・alignContent と、items(columnSpan・rowSpan)。**areas(grid-template-areas)は自前で検証する**: 行ごとのマス数が揃っているか・名前が長方形か(L字や分断だと CSS は値全体を捨てる)・名前に使えない字・列トラック数との食い違い。行は改行か " / " で区切る("header header / side main")。正しければ名前ごとの grid-area の規則と HTML を出す。notes は効かない組み合わせ(flex-grow があると justify-content が効かない・nowrap で align-content は無意味・1fr トラックで justify-content に余りが無い)と落とし穴(min-width: auto であふれる・1fr の最小値は auto・reverse や dense で読む順がずれる・flexbox の gap は Safari 14.1 以降)。hints は選んだ値の一言解説。preset で定番(center-row / header / card-row / sidebar / holy-grail / auto-fit / mosaic / stack-bottom)から始められ、mode="presets" で全プリセットの CSS を返す。値の範囲は Web 版のフォームと同じ(gap 0〜80px・子要素 flex 8個 / grid 12個まで・grow/shrink 0〜5・order -2〜2・span 1〜6)。プレビューの描画と折り返し行数の実測はブラウザ専用のため返さない。完全ローカル処理・ネットワーク送信なし。
gapflowlangmoderowswrapareascountitemscolGappresetrowGap另有 9 個社内文書の重複・孤立・表記ゆれチェック
Notion・Backlog Wiki・Confluence などから書き出した社内文書(Markdown / HTML / テキスト)を点検する(tools.first-ch.com/wiki-doc-lint/ と同一ロジック)。社内資料の棚卸しや、AIに読ませる前の古い・重複した情報の洗い出しに使う。返すのは①内容がほぼ同じページの組(duplicates: 記号と空白を除いた本文の4文字単位の断片の Jaccard 係数・threshold 以上・それぞれにしかない行・被リンクの多い方〔同数なら本文が長い方〕を残す修正案)②ほかのどのページからもリンクされていない孤立ページ(orphans: Notion 型の親ページか目次ページに足すリンクの1行 addLine つき。index・README・home などの目次ページは entryPages=false にしない限り数えない)③表記ゆれ・旧称(terms: 「揃える表記 ← ゆれ」の辞書〔既定の辞書に dictionary を足す〕と、辞書に無いカタカナ語の語末の長音ゆれ〔多い方に揃える案〕。各箇所の行番号と修正前後の文)④リンク切れ(broken: 文書の拡張子を持つ相対リンクと [[ページ名]] のうち、読み込んだファイルに行き先が無いもの)と、修正案をまとめた Markdown の report。リンクは [文字](パス)・[[ページ名]]・a タグを読み、相対パス・ページ名・Notion のIDつきファイル名・Notion/Confluence のURL末尾のページ名で照合する。コードブロック・インラインコード・URL・HTMLタグは表記ゆれの対象外で、語の途中(ユーザビリティの中のユーザ)は拾わない。paths(ファイルかフォルダーの絶対パス。フォルダーはサブフォルダーまで読み、隠しフォルダーと node_modules は飛ばす)か files({ path, text } の配列)のどちらか一方を渡す。文字コードは UTF-8 / Shift_JIS / UTF-16(BOM)を自動判別。3,000ファイル・合計60MBまで。ZIP は展開してから渡す。ファイルは読むだけで書き換えない。完全ローカル処理・ネットワーク送信なし。
langfilespathsformatautoChoonthresholddictionaryentryPagesuseDefaultDictionary記入欄に収める字の大きさと改行位置
印刷済みの記入欄(市販の中袋〔ご祝儀袋・香典袋〕の「住所」「金額」「氏名」の欄など)に手で書くとき、欄の幅・高さ(mm)と向きから、文字列が収まる1字の大きさ(mm・0.1mm 単位で切り捨て)・行数・改行した後の各行を返す(tools.first-ch.com/nakabukuro-ran/ と同一ロジック)。字の大きさは、欄の線から内側へ1.5mmずつ余白を取り、行間を字の大きさの0.3倍として、行の長さと行数の両方から決める(横書きでは半角英数を全角の0.6字分で数える。上限は住所9mm・金額と氏名14mm・plain 12mm)。`kind="address"`(既定)は住所を「〜番地」と「建物名・部屋番号」の境目で改行し、そこで4mmに届かないときだけ都道府県・市区町村の後や番地の前でも区切る(「12番地の18」「1203号室」など数字の並びの途中では切らない・text に改行を入れるとそこを建物名の前として扱う・最大4行)。postalCode を渡すと「〒」付きの1行を先頭に足す。縦書きの欄では番地の数字を漢数字(numerals: "digits"=一〇型 / "tens"=十型)にする。1字が4mmを下回るときは alternatives に「都道府県を省いた場合」と「建物名を2行にした場合」の大きさと行を返す(省いてよいかは判断しない)。asIs は改行せずに1字5mmで書いたときに欄の外へはみ出す字数。`kind="amount"` は金額(30000・3万・30,000円)を大字(壱・弐・参・四・伍・六・七・八・九・拾・百・阡・萬)の「金参萬円」にして欄に合わせる(1〜99,999,999円・圓/也/「金」「円」が印刷済みに対応)。`kind="name"` は氏名(空白でだけ改行)、`kind="plain"` は任意の文字列。完全ローカル処理・ネットワーク送信なし。
kindlangnaritext必填width必填height必填yenCharnumeralspostalCodeorientationkinEnPrintedthousandCharインボイス値下げ、応じる前に相手へ聞く3問チェック
インボイス発行事業者でない側(個人のデザイナー・ライターなど)が取引先から値下げを求められたとき、取引先に控除の減り(差)が本当に出るかを時期別に返す(tools.first-ch.com/invoice-nebiki/ と同一ロジック)。入力は3問: method(取引先の申告方式 general=一般課税 / simplified=簡易課税 / niwari=2割特例 / sanwari=3割特例 / exempt=免税事業者・消費者 / unknown)、party(individual / corporation・2割特例と3割特例では必須)、small(1回の請求が税込1万円未満か yes / no / unknown)。monthly(月の請求額・税込10%)と cutRate(%)か cutAmount(円/月)は任意。rows は today を含む時期から、判定が同じ時期をまとめて status=diff(差あり・monthlyDiff=税込×10/110×pct% の1円未満切り捨て)/ none(差なし)/ check(要確認)を返す。pct は経過措置で控除できなくなる割合(2026年9月まで20%・2026年10月から30%・2028年10月から50%・2030年10月から70%・2031年10月から100%)。2割特例の差なしは個人2026年分まで・法人は2026年9月30日を含む課税期間まで、3割特例は個人の2027・2028年分だけで、期限後は recheck:true(方式の再確認が必要・簡易課税へ移ったとは仮定しない)。一般課税で small が yes/unknown なら、少額特例(2029年9月30日までの仕入れ)があるため2029年9月までは要確認。questions と message は要確認の項目だけを尋ねる確認文(要確認が無ければ見込みを伝える文。format="md" で Markdown)。前提(概算・全額控除と保存要件・法人税等を含めない・特例の可否は相手が判断)は premises と message に必ず付く。showAmount:false で金額を出さない。自分の納税額・登録の要否・違法かどうか・相手の方式や規模の推定は扱わない。入力の誤りは InvoiceNebikiError(code 付き)。完全ローカル処理・ネットワーク送信なし。
langpartysmalltodayformatmethodcutRatemonthlycutAmountshowAmountAIの返信案の送る前チェック(日付・金額・宛名などの照合)
届いたメール(received)と、任意の「自分で決めた事実」(facts:営業時間・料金・日程など)を、AI が書いた返信案(reply)と照らし合わせる(tools.first-ch.com/okurumae/ と同一ロジック)。返信案から日付・曜日・時刻・金額・数量(〇名・〇泊・%)・電話番号・メールアドレス・URL・宛名(〇〇様・Dear Ms. …)・番号を拾い、received と facts のどちらにも無いものを status=red(reasons に missing)、あるものを green、[お客様1]・〇〇・XX・【】・{name} などの消し忘れを yellow(placeholder)で返す。日付と曜日の食い違い(例: 2026年11月8日(金))と存在しない日付も red(weekday / nodate・date に実際の曜日)。年の書かれていない日付は today の60日前〜305日後に入る年で曜日を確かめる。全角/半角・カンマ・「18時30分」と「18:30」・「3千円」と「3,000円」は照合のときだけそろえ、本文は書き換えない。items の start / end は reply の中の位置(JavaScript の文字列の添字=UTF-16)、line / column は1始まり。hits は一致した原文の箇所(1項目5件まで・hitCount は全数)。count は全項目の件数で、items は500件まで(超えたら truncated:true)。赤が0件でも内容の正しさは保証しない(note)。自動修正・文体の添削・伏せ字はしない。各欄2万字まで。入力の誤りは ReplyCheckError(code 付き)。完全ローカル処理・ネットワーク送信なし。
langfactsreply必填todayreceivedincludeGreen受け取ったComfyUI画像のキー点検とお知らせ文
ComfyUI の PNG の埋め込みデータ(tEXt・非圧縮 iTXt の prompt・workflow など)から APIキーの形(AIza・sk-・sk-ant-・hf_・r8_)を探す(tools.first-ch.com/comfy-key-leak/ と同一ロジック)。status は found(キーの形あり)/ none(見つからず。安全という意味ではない)/ unchecked(zTXt・圧縮 iTXt・eXIf・caBX・不明なチャンク・IEND の後ろ・30MB超で読めない部分がある)/ failed(CRC 不一致・途中で切れた・PNG でない)。findings の場所は prompt なら nodeId・classType・input、workflow だけなら nodeId と widgetIndex(入力欄名は特定できない・fieldUnknown)。JSON は重複キーの前の値も捨てずに読み、inputs の外(extra)・迂回ノード(bypassed)・JSON の外の文字も拾う。ノードの表示名(title)は使わない。値は返さない(masked=先頭4字+伏せ字と length だけ)。notice はキーの持ち主へのお知らせ文(値・ファイル名なし、有効性と原因は確認していないと書く)。revoke は見つかった種類の公式の無効化画面。outPath を渡すと tEXt・iTXt・zTXt を抜いたコピーを書き、書く前に読み直して文字のチャンク0個・残したチャンクのバイト一致を確かめる(元のファイルは変えない・caBX 付きと壊れた PNG は書き換えない・既存ファイルは overwrite:true が無いと上書きしない)。キーが有効かどうかの確認・URL からの取得・JPEG/WebP の書き換えはしない。このツールはネットワークへ何も送らない。入力は path を優先する: base64 で渡すと画像のバイト列(埋め込まれた生のキーを含む)が会話に載り、モデルの提供元へ渡る(そのとき返り値に inputNote が付く)。
langpathbase64outPathoverwriteincludeUrlAIから来た人と検索から来た人の比較(GA4)
GA4「トラフィック獲得」(セッションのデフォルト チャネル グループ・比較とフィルタなし)の CSV から、Google が分類した AI Assistant と Organic Search、それ以外の合計を比べる(tools.first-ch.com/ai-vs-search/ と同一ロジック)。指標はエンゲージメント率(エンゲージのあったセッション÷セッション)・セッションあたりの平均エンゲージメント時間(合わせるときはセッションで重み付け)・キーイベント率(キーイベント÷セッション。GA4 の「セッションのキーイベント率」とは別)。列名は日本語・英語(旧名・コンバージョンも)を読む。ratios は AI ÷ 検索で、AI Assistant が30セッション未満なら null(lowSample)。総計行は足さず、明細の合計との突き合わせ(totals.basis: matched / read / noTotal)にだけ使い、除外した行は excluded に行番号で返す。期間(CSV 先頭の開始日・終了日)が2026-05-13(AI Assistant チャネルの追加日)より前を含めば notes に beforeAiChannel / allBeforeAiChannel。summary は上司や制作会社へ貼る要約。外部の調査値・独自の AI サービスの一覧・GA4 API は使わない。参照元を渡さない AI 訪問(Direct 等)と AI Overviews・AI モード(Organic Search に入る)は区別できない。完全ローカル処理・ネットワーク送信なし。
csvlangpath已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp/plugin marketplace add First-CH/firstch-tools-mcp/plugin install firstch-tools@first-ch{ "mcpServers": { "firstch-tools": { "command": "npx", "args": ["-y", "@first-ch/tools-mcp"] } }}npm cinpm test # unit tests (test.mjs) + app_* tests with a mocked fetch (test-apps.mjs; no network)node e2e.mjs # stdio smoke test: spawns server.mjs, lists tools, calls handlers (app_* against a local fake API)claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp/plugin marketplace add First-CH/firstch-tools-mcp/plugin install firstch-tools@first-ch{ "mcpServers": { "firstch-tools": { "command": "npx", "args": ["-y", "@first-ch/tools-mcp"] } }}npm cinpm test # ユニットテスト(test.mjs)と、fetch を差し替えた app_* のテスト(test-apps.mjs・実ネットワークなし)node e2e.mjs # stdio smokeテスト: server.mjsを子プロセス起動しツール一覧取得・実行を検証(app_* は手元の偽APIへ)