「作れない注文」を製作前に止める — フォントのcmapを読む決定論のルールエンジン
名入れ注文の文字がフォントにあるか、加工できる字種か、納期に間に合うかを、生成AIを使わずに判定する。ツクルマエの設計記録
無料の受注CSV検査と3つの無料ツールを公開しています。ネクストエンジン連携版は未公開です。
なぜポートフォリオにあるか
名入れ商品のトラブルの多くは、作り始めてから「この字はフォントに無い」「この日には届かない」と気づくことで起きます。ツクルマエはその判定を受注の時点へ前倒しし、しかも判定の理由を人が追える決定論のルールだけで組みました。
なぜ作ったか
名入れ・刻印・刺繍の商品では、注文された文字をそのまま作れるとは限りません。お店のフォントにその字が無いこともあれば、加工方法では扱えない字種のこともある。希望の日付に届かないこともあります。
それに気づくのが製作の直前だと、作り直しか、お客さまへの確認の連絡になります。判定を注文を受けた時点に前倒しできれば、どちらも減らせる。その仕組みを、お店の人が理由まで追える形で作ろうと考えました。
いちばん難しかったこと
- 「フォントに字があるか」は見た目では判定できない。 画面では別のフォントで代わりに表示されてしまうので、見えていても実際の刻印には使えないことがあります。
- 文字の世界は例外だらけ。 機種依存文字、互換漢字、全角と半角、ローマ字表記の揺れ。
- 配送日数の公開データが無い。 大手の運送会社は配達日数の早見表を提供しておらず、検索フォームから表を作り直して配ることは利用条件にも抵触しえます。
- 注文データは個人情報。 受注CSVには氏名も住所も入っています。
どう決めたか(と、捨てたもの)
生成AIを使わないと決めました。同じ注文には必ず同じ答えを返し、なぜ止めたのかを1行で説明できることが、検品の道具としての最低条件だからです。
判定は副作用のない純粋関数のルールに分け、判定しなかったルールは「未評価」として理由つきで申告させています。フォントが登録されていない、配送日数が入っていない、といった理由でスキップしたものを、黙って合格に見せないためです。
配送日数は、推測の表を同梱しないことにしました。入っていないことを画面で明示し、お店の実績日数を入力してもらいます。
捨てたものは自動化の網羅性です。推測で埋めれば「全部自動で判定」と書けますが、それは誤った安心を売ることになります。
実際に動いているもの
フォントファイルの cmap(文字とグリフの対応表)を読み、注文文字のグリフが存在するか、描画したときの幅が枠に収まるかを判定します。ローマ字はヘボン式の規則で揺れを検出し、互換漢字や機種依存文字も拾います。
楽天の受注CSVはブラウザの中で文字コードを判定して読み込み、個人情報の列を落としてから検査します。受注データを扱う画面は CSP の connect-src から自サイトを外してあるので、運営者のサーバーへ送る通信はブラウザ自身が拒否します。
この画面ではアクセス解析(GA4・Clarity)も読み込みます。Clarity は画面の文字まで記録するため、判定結果の表など顧客の文字が描かれる領域を要素単位でマスクし、実際に描画した DOM と突き合わせるテストで足し忘れを検出しています。
有料の年額プランは、ECDSA P-256 の署名つきライセンスキーを WebCrypto で検証します。検証に通信は要りません。
サイトは静的に書き出し、S3 と CloudFront から配信しています。CSP はエッジで強制しています。
コードから数えられる値
2026-08-31 から 09-18 までの122コミット(マージを除く)。判定ルールは10本で、文字の行ごとに8本、注文ごとに2本。テストは TypeScript が127ファイル、調査用スクリプトの Python が5ファイル。
設計判断の記録(ADR)が9本あり、ホスティングを Vercel から AWS へ切り替えた判断や、配送日数の表を同梱しない判断と、その撤回条件が書いてあります。
これは、あなたの案件の何を証明するか
受注後の検品、社内ルールのチェック、入稿データの事前確認。人が目で確かめている工程を、理由を説明できるルールに置き換える案件では、判定の精度と同じくらい、判定しなかったことを隠さない設計が効きます。
個人情報を含むCSVをサーバーに上げずにブラウザの中で処理する作りも、そのまま持ち込めます。フォントの cmap を読んでグリフの有無と描画幅を判定する実装は、フォントの対応文字を JavaScript で判定する解説記事にコードつきでまとめました。
EC事業者向けの業務ツールは、業務効率化・EC向けシステムの開発としてお請けしています。
コードから数えられる値
- 判定ルール
- 10本文字の行ごとに8本(グリフ欠け・字種・文字数・ローマ字表記など)、注文ごとに2本(納期・備考の指示)
- テスト
- 127ファイルTypeScript。ほかに調査用スクリプトの Python テストが5本
- 設計判断の記録(ADR)
- 9本ホスティングを Vercel から AWS へ切り替えた判断を含む
よくある質問
- ツクルマエは無料で使えますか?
- 楽天の受注CSVの検査と、3つのツール(ローマ字変換・機種依存文字の確認・お届け日の目安)は無料で使えます。お店のフォントや設定を登録して使う有料プランもあります。
- 受注CSVの個人情報はサーバーに送られますか?
- 運営者のサーバーには送られません。CSVはブラウザの中で読み込み、氏名や住所などの列を落としてから検査します。受注データを扱う画面は CSP で自サイトへの通信を禁じているので、ブラウザが送信を拒否します。同じ画面で読み込むアクセス解析(Clarity)には、顧客の文字が描かれる領域をマスクして記録させません。
- 生成AIで判定しているのですか?
- 使っていません。検品の道具として、同じ注文には同じ答えを返し、なぜ止めたのかを説明できることを優先し、10本の決定論のルールで判定しています。判定しなかったルールは「未評価」として理由つきで表示します。
- ネクストエンジンと連携できますか?
- 連携版はまだ公開していません。現在使えるのは、受注CSVを読み込む検査と無料ツールです。
- 配送日数は自動で分かりますか?
- 分かりません。運送会社が配達日数の表を公開していないため、推測の表は同梱せず、お店の実績日数を入力してもらう形にしています。祝日を含めた日付の計算は自動で行います。
ツクルマエを使ってみる
無料の受注CSV検査と3つの無料ツールを公開しています。ネクストエンジン連携版は未公開です。
同様の課題、抱えていませんか?
あなたのビジネス課題も、最新の技術で解決できます。 まずは30分の無料技術相談から、状況をお聞かせください。
自社の課題もSaaS化できるか相談するプロジェクト単位(請負)・技術顧問、どちらにも対応可能です