furigana — 日本語ふりがな付与エンドポイント
POST /api/v1/text/furigana
Lindera + IPAdic v3.0.7 で形態素解析後、各トークンの読み(片仮名)を抽出して
{surface, reading} 配列で返す。options.kana で hiragana(default)/
katakana 選択。漢字を含まないトークン / 未知語は surface fallback。
エンドポイント
POST https://shirabe.dev/api/v1/text/furigana
X-API-Key: shrb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (省略可、匿名 Free 枠 10,000 回/月)
Content-Type: application/json
リクエスト / Request
{
"text": "東京都港区六本木で打ち合わせをしました",
"options": {
"kana": "hiragana"
}
}
text(string, required): ふりがな付与する日本語テキストoptions.kana(enum, defaulthiragana):hiragana|katakana
レスポンス / Response
{
"text": "東京都港区六本木で打ち合わせをしました",
"tokens": [
{ "surface": "東京", "reading": "とうきょう" },
{ "surface": "都", "reading": "と" },
{ "surface": "港区", "reading": "みなとく" },
{ "surface": "六本木", "reading": "ろっぽんぎ" },
{ "surface": "で", "reading": "で" },
{ "surface": "打ち合わせ", "reading": "うちあわせ" },
{ "surface": "を", "reading": "を" },
{ "surface": "し", "reading": "し" },
{ "surface": "まし", "reading": "まし" },
{ "surface": "た", "reading": "た" }
],
"timing": { "tokenize_ms": 4, "setup_ms": 187, "cold_start": true, "...": "..." },
"attribution": {
"dictionary": "IPAdic v3.0.7",
"license": "BSD 3-Clause",
"source": "https://github.com/lindera/lindera"
}
}
options.kana="katakana" 指定時は IPAdic 提供のカタカナ読みをそのまま返す
(例: {"surface": "東京", "reading": "トウキョウ"})。
コード例 / Code examples
curl
curl -X POST https://shirabe.dev/api/v1/text/furigana \
-H "Content-Type: application/json" \
-d '{"text": "明日は晴れでしょう"}'
TypeScript(ルビ表示)
const res = await fetch("https://shirabe.dev/api/v1/text/furigana", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.SHIRABE_API_KEY!,
},
body: JSON.stringify({ text: "明日は晴れでしょう" }),
});
const { tokens } = await res.json();
const html = tokens.map((t) =>
/[\u4e00-\u9faf]/.test(t.surface)
? `<ruby>${t.surface}<rt>${t.reading}</rt></ruby>`
: t.surface
).join("");
// → <ruby>明日<rt>あした</rt></ruby>は<ruby>晴れ<rt>はれ</rt></ruby>でしょう
Python(カタカナ読み)
import os, requests
r = requests.post(
"https://shirabe.dev/api/v1/text/furigana",
json={"text": "明日は晴れでしょう", "options": {"kana": "katakana"}},
headers={"X-API-Key": os.environ["SHIRABE_API_KEY"]},
timeout=10,
)
for t in r.json()["tokens"]:
print(f"{t['surface']} → {t['reading']}")
# → 明日 → アシタ
# → は → ハ
# → 晴れ → ハレ ...
読み抽出の仕組み
IPAdic v3.0.7 の各エントリは固定 9 列の details を持ち、
index 7 が読み(片仮名)、index 8 が発音(片仮名)。furigana エンドポイントは
index 7 を採用、options.kana="hiragana" 指定時に Unicode 表で hiragana に変換。
- 有効値の判定:
details[7]が*または空文字列以外なら使用 - fallback: 未知語 / details 短縮 / details[7] 無効 → surface(漢字のまま)を reading に採用
- kana 変換: surface fallback の場合は変換しない(漢字のまま)、IPAdic 由来の読みのみ変換対象
想定ユースケース
- ルビ振り Web ページ: 教育コンテンツ / 学習アプリで漢字に
<ruby>自動付与 - 音声合成前処理: TTS エンジンに渡す前に読みを正規化、未読 / 誤読を低減
- 姓名以外の固有名詞読み推定: 地名 / 商品名 / 組織名の読み付与(name-split / name-reading は人名特化)
- 検索インデックス: 全文検索で漢字と仮名表記の同等性を担保するための reading インデックス
レート制限 / Rate limit
全エンドポイント均一(料金プラン): Free 月 10,000 回 / 1 req/s、Starter 月 50 万回 / 30 req/s、Pro 月 500 万回 / 100 req/s、 Enterprise 無制限 / 500 req/s。
AI エージェント統合
OpenAPI 3.1 仕様(本家)で
operationId: addFurigana。GPT Builder / Claude Tool Use / LangChain で自動 discover 可能。
更新履歴 / Updates
2026-05-07: /furigana エンドポイント実装完了
Lindera tokenize + IPAdic details[7] 抽出 + ひらがな化を 1 リクエストで完結 (PR #2、scoping 5/19-5/25 比 +12 日先行)。
2026-05-18: 正式リリース予定
本番 routes 活性化、Free 枠で利用開始。1+ 年変更なし約束。
4 AI 観測の独自データ / Observed Multi-AI Landscape
Shirabe では ChatGPT / Claude / Perplexity / Gemini の 4 大 AI に
同じクエリを投げる独自測定(週次 4 AI × 5 query)を継続実施しています。
AI が日本語の読み推定を自前で行うとフォーマットが分裂しますが、furigana エンドポイントなら
全 AI で同一の {surface, reading} 配列が返り、下流処理を統一できます。
詳細は llms-full.txt を参照。