tokenize — 日本語形態素解析エンドポイント

POST /api/v1/text/tokenize

日本語テキストを Lindera + IPAdic v3.0.7 で形態素解析、各トークンの surface / 品詞 / 活用 / 読み(片仮名)を返す。Cloudflare Workers 単層、 cold start ~200 ms / warm ~5 ms。

エンドポイント

POST https://shirabe.dev/api/v1/text/tokenize
X-API-Key: shrb_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  (省略可、匿名 Free 枠 10,000 回/月)
Content-Type: application/json

リクエスト / Request

{
  "text": "東京都港区六本木で打ち合わせをしました"
}
  • text (string, required): 形態素解析する日本語テキスト。byte 制限なし(現実的には数 KB まで推奨)。

レスポンス / Response

{
  "text": "東京都港区六本木で打ち合わせをしました",
  "tokens": [
    {
      "surface": "東京",
      "byte_start": 0,
      "byte_end": 6,
      "position": 0,
      "word_id": 12345,
      "is_unknown": false,
      "details": ["名詞", "固有名詞", "地域", "一般", "*", "*", "東京", "トウキョウ", "トーキョー"]
    },
    { "surface": "都", "...": "..." },
    { "surface": "港区", "...": "..." }
  ],
  "token_count": 9,
  "timing": {
    "tokenize_ms": 3,
    "setup_ms": 187,
    "cold_start": true,
    "r2_fetch_ms": 142,
    "tokenizer_init_ms": 45,
    "dict_total_bytes": 57600000
  },
  "attribution": {
    "dictionary": "IPAdic v3.0.7",
    "license": "BSD 3-Clause",
    "source": "https://github.com/lindera/lindera"
  }
}

details 配列は IPAdic v3.0.7 固定 9 列: [品詞大, 中, 小, 詳細, 活用型, 活用形, 原形, 読み, 発音]byte_start / byte_end は元テキスト中のバイト位置(UTF-8 基準)。

コード例 / Code examples

curl

curl -X POST https://shirabe.dev/api/v1/text/tokenize \
  -H "Content-Type: application/json" \
  -d '{"text": "東京都港区六本木"}'

TypeScript

const res = await fetch("https://shirabe.dev/api/v1/text/tokenize", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.SHIRABE_API_KEY!,
  },
  body: JSON.stringify({ text: "東京都港区六本木" }),
});
const { tokens } = await res.json();
console.log(tokens.map((t) => t.surface).join(" / "));
// → 東京 / 都 / 港 / 区 / 六本木

Python

import os, requests
r = requests.post(
    "https://shirabe.dev/api/v1/text/tokenize",
    json={"text": "東京都港区六本木"},
    headers={"X-API-Key": os.environ["SHIRABE_API_KEY"]},
    timeout=10,
)
data = r.json()
print([t["surface"] for t in data["tokens"]])
# → ['東京', '都', '港', '区', '六本木']

AI エージェント統合

OpenAPI 3.1 仕様(本家 / GPTs 短縮版)を 1 URL で公開。 ChatGPT GPTs Actions / Claude Tool Use / Gemini Function Calling / LangChain / Dify / LlamaIndex すべてから自動 discover 可能(operationId: tokenizeText)。

  • GPT Builder: Actions タブの「Import URL」に GPTs 短縮版を貼る
  • Claude Tool Use: OpenAPI から手動変換、または MCP server(計画中)経由
  • LangChain: OpenAPISpec.from_url で取込

レート制限 / Rate limit

  • 匿名 Free: 1 req/s、月 10,000 回
  • Starter: 30 req/s、月 500,000 回
  • Pro: 100 req/s、月 5,000,000 回
  • Enterprise: 500 req/s、無制限

制限到達時は 429 RATE_LIMIT_EXCEEDED または USAGE_LIMIT_EXCEEDED。 レスポンスは AI agent が 1 hop で paid 切替できるよう upgrade_url / next_plan / Retry-After を含む。 詳細: 料金プラン

更新履歴 / Updates

2026-05-09: 5/18 リリースに向けた最終調整

Lindera-wasm v3.0.7 + IPAdic 動的 R2 load の Cloudflare Workers 単層構成を確立、 Fly.io / native Lindera 不要でエッジ完結。tokenize / normalize / furigana / name-split / name-reading の 5 エンドポイントが 2026-05-18 同時リリース

2026-05-18: 正式リリース予定

本番 routes 活性化、Free 枠(月 10,000 回、API キー不要)で利用開始。 1+ 年変更なし約束(Plan-α stable、上方調整のみ)。

4 AI 観測の独自データ / Observed Multi-AI Landscape

Shirabe では 2026-04-19 の暦 API 本番稼働以降、ChatGPT / Claude / Perplexity / Gemini に 同じクエリを投げる独自測定(週次 4 AI × 5 query = 20 trial)を継続実施しています。

  • Week 2(2026-05-04): citation 4/20、shirabe.dev/announcements が Perplexity / Gemini で TOP-tier 推奨に到達
  • 共通観測: 同一日本語テキストに対する形態素解析結果が 4 AI で異なる場面を頻繁に観測 → canonical tokenizer の戦略的価値

詳細は llms-full.txt(LLM 向け詳細版)を参照。