Skip to content

About

Jev と Mozc を使った macOS 向け日本語入力アプリ

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

jev-ime-ja

jev-ime-ja は、変換する読み全体を一つの変換単位にまとめるべきか Jev が判断する、macOS 向けの日本語入力アプリです。通常の変換と候補生成は Mozc が担当し、Jev は変換単位だけを判断します。

Apple Silicon / macOS 26.2 以降に対応しています。macOS 26.5、Xcode 26.2 でビルドとデスクトップアプリの動作を確認しています。

動作

最初の Space で Mozc の通常変換をすぐに表示し、Jev の判断を非同期で待ちます。Noul 値が設定した閾値以上なら、未確定の読み全体を一単位にして Mozc で再変換します。

  • 初期設定では Noul 値 0.85 以上で結合し、判定開始から1秒以内の結果だけを反映します。
  • 応答前に入力、候補操作、確定、フォーカス移動が進んだ場合は、古い結果を反映しません。
  • 通信失敗、期限超過、不正な応答では Mozc の通常変換を保ちます。
  • 結合直後は Esc で元の区切りと候補へ戻せます。
  • すでに一単位の入力と、同じ条件で直近に判定した入力では通信を省きます。
  • 128 Unicode スカラーを超える読みでは、問い合わせと結合を行いません。

必要なもの

  • Apple Silicon 搭載 Mac
  • macOS 26.2 以降
  • Xcode
  • Python 3
  • Git
  • Bazelisk
  • Jev を使う場合は TypeSafe API キー

Homebrew を使う場合、Bazelisk は brew install bazelisk で導入できます。

ビルド

git clone https://github.com/m1ng112/jev-ime-ja.git
cd jev-ime-ja
./build.sh

初回は Mozc の固定コミットを work/mozc に取得します。ビルド後、リポジトリ直下に次のアプリが作られます。

  • jev-ime-ja.app:単体で入力と変換を確認できるデスクトップアプリ
  • jev-ime-ja IME.app:InputMethodKit を使う入力ソース

Bazelisk の場所を明示する場合は、JEV_BAZELISK=/path/to/bazelisk ./build.sh のように指定します。

デスクトップアプリを使う

  1. jev-ime-ja.app を開きます。
  2. 入力欄へローマ字で入力し、Space で変換します。
  3. TypeSafe API を使う場合は「API 設定…」に API キーを保存します。
  4. 「結合を比較(Jev 未使用)」では、API を呼ばずに一単位へまとめた結果を確認できます。

API キーは macOS Keychain に保存します。環境変数 TYPESAFE_API_KEY からの読み込みにも対応しています。

IME として使う

  1. Install IME.command を実行します。
  2. 作業を保存してログアウトし、もう一度ログインします。
  3. システム設定 → キーボード → テキスト入力 → 編集 → + → 日本語から jev-ime-ja IME を追加します。
  4. 入力メニューから jev-ime-ja IME を選びます。

既存の同名 IME がある場合は、~/Library/Input Methods/jev-ime-ja IME backups/ に退避してから置き換えます。既定の入力ソースやログイン状態は自動で変更しません。

TypeSafe へ送る情報

送信先は https://api.typesafe.ai/v1/systemone、モデルは jev-latest です。次の情報を送信します。

  • 対象の読み
  • Mozc の変換表記と区切り
  • 同じ入力セッションで jev-ime-ja が確定した直近120文字

文書全体は取得しません。入力内容や API キーをアプリのログへ保存する処理はありません。判定結果のキャッシュは最大128件、5分間だけメモリに保持します。詳しい API 仕様は TypeSafe API と Noul を参照してください。

現在の機能範囲

  • 判断は「読み全体を一つにする」か「通常の区切りを保つ」かの二択です。
  • 部分範囲の推定、漢字候補の順位変更、再変換、辞書登録、かな入力には対応していません。
  • Mozc の OSS 辞書を使用し、学習は無効です。
  • 一単位へまとめても、望む漢字候補が出るとは限りません。
  • IME のアプリ別互換性、実 API の精度と遅延、Apple の公証、他の Mac での配布は未検証です。

実装

場所 役割
Sources/Core.swift Jev API、Keychain、状態と世代番号の管理
Sources/Lab.swift デスクトップアプリ
Sources/IME.swift InputMethodKit による入力ソース
Sources/UIShared.swift キー変換、設定、候補パネル
engine/jev_bridge.cc Mozc のセッションを利用する C++ ブリッジ
engine/prepare.py 固定版 Mozc への最小限の拡張
Tests/ 実 API を呼ばない自動テスト

Mozc はコミット 13c98988247aa711d99db9e348ec2a597d14b5cd に固定しています。内部の SegmentWidthExpand で区切りを拡張し、読み全体が一単位になったことを確認してから結果を反映します。失敗した場合は元のセッション状態へ戻します。

テスト

ビルド後、Swift の状態管理テストと実 Mozc を使う統合テストを実行できます。テストは TypeSafe API を呼びません。

./Tests/run.sh

検証結果は docs/TEST_RESULTS.md、性能測定は docs/PERFORMANCE.md を参照してください。

ライセンス

jev-ime-ja の独自コードは MIT License で公開しています。Mozc と同梱コンポーネントには、それぞれのライセンスが適用されます。詳細は THIRD_PARTY.md を参照してください。

About

Jev と Mozc を使った macOS 向け日本語入力アプリ

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages