macOSでIME作ってみた ~ 漢字直接入力IME、MacTcodeについて LT ODC2025

KaoruMaeda 94 views 13 slides Sep 06, 2025
Slide 1
Slide 1 of 13
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13

About This Presentation

macOSでIME作ってみたときの感想などをLTで話しました


Slide Content

macOSでIME作ってみた
Kaoru Maeda

2025/09/06 LL 2025

ちょっとバズりました
●https://x.com/mad_p/status/1794939699418837337
●やじうまwatch
○https://internet.watch.impress.co.jp/d
ocs/yajiuma/1595524.html
●漢字直接入力 T-Codeについては
以前のアイスブレイク参照
○https://dena.enterprise.slack.com/arc
hives/C03JBUHRT/p169353892330
6009
(DeNA社内Slackのリンクです )
○簡単に言うと、機械を訓練するのでは
なく、人間を訓練する方式
2

IME = Input Method Editor
●OSに日本語を入力するためのフレームワーク
○wikipedia:インプットメソッド
○略すとしたら IM。IMEというのはWindows用語なのだが、つい使っちゃう
○PC98時代、MS-DOS時代はFEP (Frontend Processor)とも呼ばれていた
Hardware
BIOS
FEP
OS
Hardware
BIOS
OS  
IM App
3
Application Application
IM API
Hardware
BIOS
FEP
OS
Application
Backend
Frontend
User User User

T-Coderに伝わる格言「必要は実装の母」
●新しいマシン・ OSを入手すると、まず T-Codeドライバを作る
●主なT-Code実装(★印 = 前田が実装 )
○ 1987年ごろ 「Tコード装置駆動機」 PC9801専用 MS-DOS
○★1989年 「tcode.x」X68k
○★1989年 「tc.el」Emacs Lisp
○ 1998年ごろ 「かんな for Windows」Win95 ローマ字変換テーブルを利用
○ 1999年ごろ 「漢直Win」Win95/98 (徳岡さん)
○ 2005年ごろ 「uim」UNIX系 tcode.scm, tutcode.scm (uimは2003年ごろ)
○ 2005年ごろ MacUIM登場(e-katoさん)、tcode, tutcodeが動いていたと思われる
○ 2010年? 「漢直Pad」iOS (haseguwaさん)、input methodではなくコピペして入力
○ 2021年 「漢直WS」Win10以降 (岡さん) 漢直Winの後継
○★2024年 「MacTcode」macOS ← new!
4

MacTcodeを作った動機
●MacUIMのロストテクノロジー化
○2015年にビルドされた intel用バイナリを Rosettaで動かして いる いた
○バイナリを再ビルドできていない。ソースコードとビルド手順書はあるものの、 Ruby 1.9とかを最新
macOSで動かすのが難しい
●過去何度も作った T-Codeドライバは難しくなかったから、作ればかんたんなんじゃ
ね?
○作ってみたらできちゃった
●MacTcodeと命名
○一応、すでに存在する名前かどうかはぐぐった

5

macOSの「InputMethodKit」
●macOSのinput method framework
○import InputMethodKit
●IMに必要な要素がだいたいカバーされている
○入力ソース切り替え、モードアイコン
○入力イベントハンドリング、テキスト送出
○変換前テキスト (未確定テキスト )表示(compositionと呼ばれるようだ )
○変換候補選択画面、選択 &確定イベントハンドリング
6

IMフレームワークの要素は T-Codeに必要か
要素 要/不要 備考
登録・起動・終了 要
入出力イベント処理 要
未確定テキスト表示・編集 不要 前置型変換には必要
変換候補表示・選択 交ぜ書き変換でのみ必要
入力モード 不要 英数/あ/ア/ローマ字、など
7

InputMethodKitによるキー入力
8

T-Code実装に必要な要素
●基本文字入力
○ローマ字テーブル程度にはかんたん
○2次元データをコンストラクタでツリーに変換
●補助入力機能
○モード切りかえ (現在全角英数モードのみ )
○後置型部首変換
○後置型交ぜ書き変換
●後置型変換のための入力履歴保持
●交ぜ書き変換の候補表示・選択 (IMKit利用)
●デバッグログ (NSLog)
●configファイル
9
キーマップ定義

実装
●https://github.com/mad-p/MacTcode
●Swift
○InputMethodKitとCocoaのみ
○UI作成の必要なし (InputMethodKitが用意してくれた候補選択画面があるので自作不要 )
●wc -l **/*.swift
○3524 (テスト956行)
●wc -l MacTcode/*.dic
○ 6072 MacTcode/bushu.dic
○74316 MacTcode/mazegaki.dic
●du -sh /Library/Input\ Methods/*
○2.1M/Library/Input Methods/MacTcode.app
○165M/Library/Input Methods/azooKeyMac.app
○ 90M /Library/Input Methods/GoogleJapaneseInput.app
○664K/Library/Input Methods/MacUIM.app (辞書を含まない )
10

苦労した点
●変換できない
○読みが取得できない
○IMKInputTextインターフェースがカーソル直前の文字 (または選択範囲 )を返す
○なぜか返さないアプリがある
●入力できないアプリ
○Google Docs, Slides
■zero-width spaceやアンダースコアを返す
○Claude Code, Gemini CL
■nodeのInkライブラリは、カーソル直前でなく、最後に描画した文字列を返す
●解決方法
○読みが取れなかったら、入力履歴から取得
○バックスペースを必要個数送ってから確定文字を送る
11

参考文献について
●参考文献は少ないながらもいくつかある
○日本語入力を作るときに必要だった本 ← おすすめ。 AquaSKKメンテナによる同人誌
○azooKey on macOSの開発知見
●既存のmacOS用IMのソースコード
○https://github.com/ensan-hcl/azooKey-Desktop
○https://github.com/codefirst/aquaskk
○https://github.com/khawa-angx/macSKK
○https://github.com/google/mozc
●GitHubのコードサーチ
●macOSフレームワークの逆アセンブルヘッダ
○https://github.com/hughbe/macOS-iOS-headers/blob/a7c89732a3e78c50370880677a06518dd
fc0bcba/macOS/Frameworks/InputMethodKit.framework/IMKTextInput-Protocol.h
●ChatGPTがほとんど嘘しか返さない :cry:
12

2024/8時点の今後の予定 (完了済み)
●配布は署名・ notarizationしてdmgをGitHubのreleaseに置く
○notarizationのやり方も結構難しかった
○Mac App Storeにはinputmethodは出せないらしい (未確認)
●既知のバグを直す
○https://github.com/mad-p/MacTcode/issues
●configファイル対応
○再コンパイルなしにキーマップや辞書を変えられるように (今はできない )
●ソースコードがきたないのでリファクタ
13