Deno + Fresh + Deno KVを使用した、日本語文章のトークン効率を最適化するWebアプリケーションです。
このツールは、入力された日本語文章を解析し、Sudachi同義語辞書と実際のトークン数計測を使用して、読みやすさを保ちながらより効率的な日本語表現に自動変換します。
- 📝 日本語文章の入力・編集
- 🔄 リアルタイム最適化処理
- 📊 トークン数の比較表示
- 📋 最適化結果のワンクリックコピー
- 📱 レスポンシブ対応UI
- 🗄️ 高速KVストレージによる辞書管理
- 🕐 毎日自動辞書更新(Deno Cron)
- Deno - モダンなJavaScript/TypeScriptランタイム
- Fresh - Denoベースの高速Webフレームワーク
- Deno KV - 高性能なKey-Valueストレージ
- Deno Cron - スケジュールタスク実行
- Preact - 軽量なReactライク
- TailwindCSS - ユーティリティファーストCSS
- wakachigaki - 日本語形態素解析
- Sudachi同義語辞書 - 15,085個の同義語マッピング + 64,747個の辞書単語
- js-tiktoken - GPT-4o互換トークン数計測(o200k_base)
# リポジトリをクローン
git clone <repository-url>
cd jp_token_compressor
# KV辞書を初期化(初回のみ)
deno run -A --unstable-kv scripts/init-kv.ts
# 開発サーバーを起動
deno task startアプリケーションは http://localhost:8000 で利用できます。
- 文章入力: 左側のテキストエリアに最適化したい日本語文章を入力
- 最適化実行: 「最適化実行」ボタンをクリック
- 結果確認: 右側に最適化された文章とトークン数の比較が表示
- コピー: 「コピー」ボタンで最適化結果をクリップボードにコピー
Deno KVによる高速辞書アクセス
- KVストレージによる瞬時の辞書検索
- メモリ効率的な設計
- 常に最新の辞書データ(毎日自動更新)
Deno Cronによる完全自動化
このアプリケーションは、Deno Cronを使用して辞書データを完全自動で最新に保ちます:
- スケジュール: 毎日深夜2:00 AM(JST)に実行
- 更新判定: 前回更新から24時間以上経過時のみ実行
- 自動処理: 最新のSudachi辞書をダウンロード・解析・KVに保存
- ログ出力: 更新状況とパフォーマンス統計を詳細ログ
- エラー処理: 更新失敗時の適切なエラーハンドリング
// cron.ts - 毎日自動実行される辞書更新
// JST深夜2:00 AM = UTC 17:00 (前日)
Deno.cron("Update Sudachi Dictionary", "0 17 * * *", async () => {
await updateDictionary();
});これにより、ユーザーは常に最新の同義語データでトークン最適化を利用できます。
- キーボードショートカット:
Ctrl + Enterで最適化実行 - クリア機能: 入力欄を一括クリア
- リアルタイムフィードバック: 処理中のローディング表示
# 開発サーバー起動(ホットリロード)
deno task start
# KV辞書の初期化・再構築(ローカル)
deno run -A --unstable-kv scripts/init-kv.ts
# KV辞書の初期化・再構築(リモート)
deno run -A --unstable-kv scripts/init-kv.ts --remote
# .envファイルを使用する場合
deno run -A --unstable-kv --env-file=.env scripts/init-kv.ts --remote
# 本番ビルド
deno task build
# 本番サーバー起動
deno task preview
# コード品質チェック(lint + format + type-check)
deno task check# 1. 本番ビルド
deno task build
# 2. Deno Deployへデプロイ
deployctl deploy --project=your-project main.ts
# 3. アクセストークンとデータベースIDを設定(環境変数または.envファイル)
export DENO_KV_ACCESS_TOKEN="your_access_token_here"
export DENO_KV_DATABASE_ID="your_database_id_here"
# または .envファイルに以下を記載:
# DENO_KV_ACCESS_TOKEN=your_access_token_here
# DENO_KV_DATABASE_ID=your_database_id_here
# 4. リモートKV辞書を初期化
deno run -A --unstable-kv scripts/init-kv.ts --remote
# .envファイルを使用する場合:
# deno run -A --unstable-kv --env-file=.env scripts/init-kv.ts --remote🔐 KVアクセストークンとデータベースIDの取得方法:
- Deno Deploy Dashboardにアクセス
- プロジェクト → KV → KVデータベースを選択
- "Connect to this database from Deno CLI" セクションから:
- データベースID(URL内の UUID)を
DENO_KV_DATABASE_IDに設定
- データベースID(URL内の UUID)を
- "Set up access tokens for Deno CLI" から:
- 生成されたトークンを
DENO_KV_ACCESS_TOKENに設定
- 生成されたトークンを
✨ Deno KVによる本番環境の利点:
- 高性能: KVストレージによる瞬時の辞書アクセス
- 自動更新: Deno Cronによる毎日深夜2時(JST)の自動辞書更新
- メンテナンス不要: 辞書の更新・管理が完全自動化
- スケーラビリティ: Deno Deployの自動スケーリング対応
- データ永続化: クラウドベースの永続化ストレージ
🤖 Deno Cronによる自動メンテナンス:
// 本番環境で自動実行される処理
- 毎日2:00 AM JST: 辞書更新チェック・実行
- 更新判定: 24時間以上経過時のみ実行
- 自動ログ: 更新状況の詳細記録
- エラー回復: 失敗時の適切なエラーハンドリング📅 Cron設定の確認方法:
Deno Deployでデプロイ後、Cronジョブが正しく登録されているかを確認:
- Deno Deploy Dashboardにアクセス
- プロジェクト → Cron タブを選択
- "Update Sudachi Dictionary" ジョブが表示されることを確認
- スケジュール:
0 17 * * *(UTC 17:00 = JST 2:00 AM)
main.tsでcron.tsをimportしているため、アプリケーションの起動時にCronジョブが自動的に登録されます。
このプロジェクトではlefthookを使用して、Git commit時に自動的に以下を実行します:
- Lint:
deno lint- コード品質チェック - Format:
deno fmt- コードフォーマット - Type Check:
deno check- TypeScript型チェック
- 形態素解析: wakachigakiで日本語文章を単語に分割
- 同義語検索: 各単語についてSudachi辞書から同義語候補を取得
- トークン効率評価: js-tiktokenで各候補の実際のトークン数を計測
- 最適置換: 最もトークン効率の良い単語に置換
- 結果表示: 元の文章と最適化後の文章、トークン数を比較表示
入力: 「コンピュータとアルゴリズムを活用したデータベースシステム」(21トークン)
出力: 「電算機とアルゴリズムを使用したデータベースシステム」(19トークン)
効果: 約10%のトークン削減(コンピュータ→電算機、活用→使用)
- 日本語のみ: 英語への変換は行わず、可読性を重視
- 全ての削減効果: トークン削減効果のある変換をすべて適用
- 品質重視: 15,085個の厳選されたマッピングを使用
- 複合語対応: 部分マッチによる複合語内最適化
jp_token_compressor/
├── routes/
│ ├── api/
│ │ └── optimize.ts # 最適化APIエンドポイント
│ ├── index.tsx # メインページ
│ ├── _app.tsx # アプリケーションルート
│ └── _404.tsx # 404ページ
├── islands/
│ └── TextOptimizer.tsx # クライアントサイド処理
├── scripts/
│ └── init-kv-dict.ts # KV辞書初期化スクリプト
├── utils/
│ └── kv.ts # KVストレージユーティリティ
├── static/ # 静的ファイル
├── cron.ts # Deno Cron定義(毎日辞書更新)
├── deno.json # Denoプロジェクト設定
├── lefthook.yml # Git hooks設定
└── fresh.config.ts # Fresh設定
このプロジェクトはMITライセンスの下で公開されています。