# yakuhanjp

> Yakumono-Hankaku Fonts

Latest version **5.0.0** (published 2026-10-22) · (OFL-1.1 AND MIT) license · 0 weekly downloads

## Install

```sh
npm install yakuhanjp
pnpm add yakuhanjp
yarn add yakuhanjp
bun add yakuhanjp
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 5.0.0 |
| Published | 2026-10-22 |
| First published | 2016-06-06 |
| Weekly downloads | 0 |
| License | (OFL-1.1 AND MIT) |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 173.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 427 |
| Author | Qrac |
| Maintainers | qrac |
| Keywords | font, webfont, subset, css, japanese, yakuhanjp |

## Links

- npm: https://www.npmjs.com/package/yakuhanjp
- Repository: https://github.com/qrac/yakuhanjp
- Homepage: https://yakuhanjp.qranoko.jp
- Issues: https://github.com/qrac/yakuhanjp/issues
- npm.io page: https://npm.io/package/yakuhanjp

## Alternatives

- [style-dictionary](https://npm.io/package/style-dictionary.md) — 2.0M weekly downloads
- [postcss-merge-idents](https://npm.io/package/postcss-merge-idents.md) — 1.7M weekly downloads
- [@fontsource/noto-sans](https://npm.io/package/@fontsource/noto-sans.md) — 93.0K weekly downloads
- [uglifycss](https://npm.io/package/uglifycss.md) — 71.6K weekly downloads
- [mat4-interpolate](https://npm.io/package/mat4-interpolate.md) — 23.3K weekly downloads

## Recent versions

- 5.0.0 (latest) — 2026-10-22
- 4.1.1 — 2024-05-30
- 4.1.0 — 2024-05-30
- 4.0.1 — 2024-02-04
- 4.0.0 — 2023-09-03
- 3.4.1 — 2021-03-08
- 3.4.0 — 2021-03-07
- 3.3.1 — 2019-10-13
- 3.3.0 — 2019-10-09
- 3.2.0 — 2019-03-12
- 3.1.0 — 2019-02-14
- 3.0.1 — 2019-02-14
- 3.0.0 — 2017-12-22
- 2.0.0 — 2017-04-16
- 1.3.1 — 2016-10-07
- … 7 more at https://npm.io/package/yakuhanjp/versions

## README

# Yaku Han JP

## Site & Documentation

- https://yakuhanjp.qranoko.jp

## About

Yaku Han JP（ヤクハンジェイピー）は、日本語テキストに含まれる約物を半角にするフォントです。

## Packages

- [yakuhanjp](https://github.com/qrac/yakuhanjp/tree/main/packages/yakuhanjp) — ブラウザで使用するYakuHanJP
- [core](https://github.com/qrac/yakuhanjp/tree/main/packages/core) — YakuHanJPのフォントデータ
- [merged](https://github.com/qrac/yakuhanjp/tree/main/packages/merged) — YakuHanJPを元フォントにマージしたデータ
- [unicode](https://github.com/qrac/yakuhanjp/tree/main/packages/unicode) — 内包文字のunicodeを生成するスクリプト

## Development

v4.1.1から開発中のv5.0.0への変更点は[context](context/README.md)にまとめています。

### フォントの生成（Glyphsアプリ不要）

Python 3.12以上と[uv](https://docs.astral.sh/uv/)を用意し、リポジトリのルートで実行します。
依存関係は`uv.lock`に固定しています。元フォントは`resource`、約物の文字・余白・縦書き設定は
`packages/core/*/sources/*.json`、輪郭は`packages/core/*/outlines/*.json`から読み込みます。
生成にはFontToolsを使い、Glyphs形式のデータや専用アプリは使用しません。
調整値の意味と文字追加の手順は[coreのREADME](packages/core/README.md)を参照してください。

```sh
# 全6ファミリー・46ウェイトをbuild/fontsに生成（既存の配布ファイルは上書きしません）
npm run build:fonts

# ファミリー・ウェイトを限定して試す
npm run build:fonts -- --family YakuHanJP --weight 400

# 約物フォントだけ生成
npm run build:fonts -- --target core

# マージ版をTTFとOTFの両方で生成（全字形の形式変換が必要なため低速）
npm run build:fonts -- --merged-format both

# 公開前に全形式でpackages/coreとpackages/mergedを更新
npm run build:fonts -- --merged-format both --output packages

# 生成処理と既存フォントとの互換性を検証
npm run test:fonts
```

`core`にはTTF・OTF・WOFF2、`merged`には元フォントと同じ形式（JP/RPはTTF、MPはOTF）を生成します。
変更のないスタイルはスキップします。`--force`で全て作り直せます。
生成・キャッシュは常に`build/fonts`で行い、`--output packages`は検証済みの生成物をコピーします。
同じ入力と形式で生成済みなら、出力先を変えても再ビルドせず、不足する形式だけ生成します。
マージは元フォントの収録文字とOpenType機能を維持し、約物と縦書き用の代替字形を置き換えます。
置き換えた約物には`palt`・`halt`・`vpal`・`vhal`による追加の詰め処理を適用しません。
ルートの`npm run build`もPythonとuvを使用し、全形式のフォント更新から配布ファイルの生成まで実行します。
`npm run build -w core`と`npm run build -w merge`は各パッケージのフォントを直接更新します。

バイナリの完全一致は保証しません。Glyphsとコンパイラが異なるため、ヒンティングや曲線変換、
内部テーブルに差が出ます。公開前にはplaygroundで表示も確認してください。
また、既存のマージ版には約物ソースと幅が異なる文字があります（例：YakuHanJP Regularの`！`）。
新しいマージ版は約物ソースの幅を採用するため、既存のマージ版から文字送りが変わる場合があります。

### mergedサブセットの調査（配布仕様は未確定）

配布用サブセット版の計画は現在保留中です。ゲームの使用文字から開発時にサブセット化する方が効率的との判断で、
以下の調査結果・スクリプトは参考用に保持しています。

調査方針・結果・固定した資料の取得先は[サブセット計画](context/merged-subset-plan.md)を参照してください。
`scripts/research_merged_subset.py`は取得済みのTUBELEX未正規化頻度データをハッシュ検証して集計します。
通常のフォント生成・ZIPには組み込んでいません。

```sh
.venv/bin/python scripts/research_merged_subset.py \
  --input build/subset-research/source/tubelex-ja_no-normalization.tsv.xz \
  --output build/subset-research/data \
  --font-output build/subset-research/fonts
```

`--font-output`を省くと文字リストと対応範囲の集計だけを行います。試作フォントは`build/`内に限定し、
内部名も全文字版と同じままなので配布・インストール用ではありません。既存の`packages`内のフォントは変更しません。
共通の候補文字リストを維持し、元フォントにない文字はそのフォントの試作から省きます。
省略したコードポイントと対象スタイルは、出力先の`report.json`へ記録します。
別資料での評価は`scripts/evaluate_merged_subset.py`で行います。固定した入力資料の取得先・実行手順と、
基礎文字の補助枠案は[サブセット計画](context/merged-subset-plan.md#別資料評価と基礎文字の補助枠案)を参照してください。

### 配布物の一括ビルド

ルートの`npm run build`は次の順番で実行します。途中で失敗した場合は、後続の処理を実行しません。

1. `build:fonts:packages`：全形式のフォントを生成・検証し、`packages/core`と`packages/merged`に反映
2. `build:unicode`：`packages/unicode/dist/data.json`を更新
3. `build:main`：最新のcoreフォントからCSSとWOFF2を`packages/yakuhanjp/dist`に生成
4. `build:zip`：core・mergedのTTFとOTFを`build/zip/YakuHanJP_v<version>.zip`に梱包

Unicodeと配布用の`dist`は削除してから生成するため、古い成果物は残りません。
`packages/yakuhanjp`の`prepublishOnly`もルートの`build`を実行し、公開前に同じ更新を行います。
フォントの入力・形式が変わっていなければ、キャッシュを再利用します。
CSSだけを作り直す場合は`npm run build:main`を実行してください。

### ダウンロード版ZIP

`npm run build`でWeb用配布物とダウンロード版ZIPをまとめて生成します。
ZIP名と展開後のフォルダー名には`packages/yakuhanjp/package.json`のバージョンを使います
（例：`build/zip/YakuHanJP_v5.0.0.zip`、展開後は`YakuHanJP_v5.0.0/`）。

ZIPには`core/<family>/{otf,ttf}/`と`merged/<family>/{otf,ttf}/`の全6ファミリー・46スタイル、
合計184フォントと、専用README・ライセンスを収録します。WOFF2・CSS・編集用JSONは含みません。
READMEとMIT本文は`scripts/zip/`、元3フォントのOFL本文・著作権表記は`resource/*/OFL.txt`から同梱します。

```sh
# 生成済みのpackages/core・packages/mergedからZIPだけを作り直す
npm run build:zip

# フォントの変更を反映してZIPを作る（Web用配布物の生成は省略）
npm run build:fonts:packages && npm run build:zip
```

`build:zip`単独ではフォントを再生成しません。定義されたフォントやライセンスが欠損・空の場合は失敗し、
同じバージョンの既存ZIPも削除します。ZIPは完成してから出力先に配置します。
梱包処理のテストは`npm run test:fonts`に含まれます。
GitHub Releasesへの添付は別途行ってください。

`prepublishOnly`・`npm run play`・ドキュメントサイトのCIでもルートの`build`を呼ぶためZIPを生成します。
ZIP生成に失敗した場合は後続処理を停止します。

### 配布用CSSの生成設定

`packages/yakuhanjp/project.json`のフォント情報と`packages/core`のWOFF2を元に、
`src/build.ts`が通常版CSS・jsDelivr向けCSS・ライセンスバナーを生成します。
フォントやウェイト、収録文字を変更するときは`project.json`を編集してください。

`npm run play`は配布用ファイルを生成してからplaygroundを起動します。
フォント情報を変更した後は、再度`npm run build`を実行してください。

## Media

- [OG画像の約物を詰める - YakuHanJP v4](https://zenn.dev/qrac/articles/791fd61483a989)
- [HTML5 Conference 2016 LT "Yaku Han JP" by Qrac // Speaker Deck](https://speakerdeck.com/qrac/html5-conference-2016-lt-yaku-han-jp-by-qrac)

## License

- Yaku Han JP : SIL OFL 1.1 AND MIT
- Gothic fonts : Based on [Noto Sans JP](https://fonts.google.com/noto/specimen/Noto+Sans+JP) licensed under the SIL OFL 1.1
- Mincho fonts : Based on [Noto Serif JP](https://fonts.google.com/noto/specimen/Noto+Serif+JP) licensed under the SIL OFL 1.1
- Round Gothic fonts : Based on [M PLUS Rounded 1c](https://fonts.google.com/specimen/M+PLUS+Rounded+1c) licensed under the SIL OFL 1.1

## Credit

- Author: [Qrac](https://qrac.jp)
- Organization: [QRANOKO](https://qranoko.jp)

---
_Source: https://npm.io/package/yakuhanjp · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
