SKK

SKK（エスケイケイ、Simple Kana to Kanji conversion program）は、Emacs上で動く、日本語入力システムの一つである。

歴史 
1987年（昭和62年）に、東北大学教授（当時）佐藤雅彦によって開発された。本家での開発終了が2000年（平成12年）11月頃に宣言され、その後は Openlab を拠点とした開発が行われてきた。
2014年（平成26年）12月21日に開発プラットフォームを GitHub へ切り替える宣言が行われ、辞書ファイルや辞書ツールについても順次 GitHub へ切り替わっている。
SKK Openlab 及び skk-dev がリリースする SKK には、Daredevil SKK(ddskk)の名が付けられている。

特徴 
SKKが他の日本語インプットメソッドと大きく異なるのは、かな漢字変換において形態素解析に基づいた変換を行わないことである。かなと漢字の境界をユーザが指定することになるため、形態素解析では不可避の解析ミスに起因する変換ミスを排除できる。話し言葉や方言を記述する際、その表記のぶれのほとんどはかな文字で表記される部分であるので、SKKでは変換ミスにつながらない。

また、一般のIMEは再変換のために文節の選択を（例えば、右から左へ）変更する必要性があり、打鍵のコストが多くかかるが、SKKの場合は入力と変換を逐一行うことによって、

他の特徴として、シームレスな辞書登録が挙げられる。辞書にない単語を変換しようとした場合、ミニバッファで変換結果の登録が促される。その結果は個人用の辞書に保存される。辞書の登録は再帰的に行うことができる。そのため、使っているうちに自然と辞書が成長していき、より快適な変換を実行することができるようになる。

SKKの大きな欠点のひとつは大文字を入力するためのシフトキーの多用、すなわち小指の酷使である。

SKKはローマ字かな変換に基づいた入力方式だが、漢字の始点と終点を指定できれば、直接かな入力に対応できる。多少のインストールと設定の追加により、親指シフト配列やJISかな入力、T-CodeやTUT-Codeでの使用が可能である。親指シフト配列では漢字変換の始点を大文字で指定するのではなく、ホームポジションの両人差し指のキーである「f」と「j」の同時打鍵を使用する。

操作の要点 
SKKのかな入力モードでは、特に指示することなく入力するとすべてひらがなに確定された状態で入力される。変換を行うには、変換したい語句の頭文字を大文字で(Shiftを押しながら)入力する。また、送り仮名の始点となる文字も大文字で入力する。その状態でスペースを押すと一般のIME同様、辞書にある変換候補が選択できる。

例えば、「ここで履物を脱いでください」と入力したければ、

kokodeHakimono␣woNuIdekudasaiのように入力する(なお、␣はスペースキーの打鍵で、変換が一発で行われたことを仮定している)。ちなみに、NuIと入力した時点で変換候補が出ており、次の入力を受けると確定される(暗黙の確定)。

「ここでは着物…」と入力したければ、kokodehaKimono␣と入力すればよい。これによって、前述の誤解析の問題は生じない。

SKKのバリエーション 
SKKはEmacs Lispで実装されているため、Emacsが動く環境ならばどこでも使うことができる。一方、Emacs以外で使いたい場合は、何らかの手段を講じる必要がある。様々な環境のインプットメソッドに対応したSKKライクな変換エンジンが開発されており、それらを利用してSKK方式の入力を行うことができる。以下の実装は、Daredevil SKKとは独立に開発・保守されている。したがって、機能的に劣ることや、逆に独自の機能を持つこともある。

Unix系 
X Window System上で動作する伝統的なX Input Method (XIM) のためにskkinputが開発された。skkinputには現在skkinput2とskkinput3のふたつの実装が存在する。

また、XIMにかわるインプットメソッドとして開発された、多言語対応のインプットメソッドのIIIMF、 uim、SCIM、IBus、Fcitx、Fcitx5においても同様にSKKを使用することができる。

IIIMFは、XIM開発者自身によりウィンドウシステム非依存としてXIMを置き換えるべく開発されたフレームワークである。複数の言語エンジンを切り替えて使用できることを特徴としており、SKKに似た言語エンジンとして iiimf-skk が開発されている。 

uim は、インプットメソッドサーバを用いずライブラリとして実装された多言語インプットメソッドで、uim-skkというモジュールを使用することでSKK方式の入力が可能となる。コンソールや、GUIフレームワーク、インプットメソッドサーバへのブリッジが提供されている。

SCIMは、できるだけ多くのインプットメソッドに対応することを目標にしている、インプットメソッド・プラットホームである。scim-skk はSCIM上でDaredevil SKKと同等の機能を実装することを目標に開発されている。

macOS 
AquaSKKおよびMacUIM/SKKが利用できる。AquaSKKはその名のとおりmacOSに特化したSKKライクなインプットメソッドである。SKK辞書のほかことえりのユーザ辞書を使用することができる。MacUIMはuimをmacOSで使用するためのパッケージである。

Windows 
Windows上では、skkimeやCorvusSKKやSKK日本語入力FEPを用いればSKKライクな入力を実現できる。これらはOS付属のMS-IMEやGoogle 日本語入力などの入力システムと共存でき、言語バーおよび入力言語のホットキー操作によりアプリケーション実行中でも自由に切り替えて使用することが可能である。いずれもGUIを用いて設定を行うことができる。

Vim 
Vim上でSKKライクな入力を実現するにはeskk.vimとskk.vimでどちらもVim scriptで実装されている。 eskk.vimはskk.vimの後継を目指して活発に開発されており、 skk.vimは2006年以降開発が停止している状況であったが、2010年にメンテナが変わって以降パッチなども精力的に取り入れている。

SKKの辞書とSKKサーバ 
SKKの使用する辞書は、複数のユーザによって共有する書き換えられない辞書と、ユーザのホームディレクトリに置かれ、登録した単語や変換の履歴が追加されていく個人用の辞書がある。どちらも、かな（送りがなのある場合はかな+送りがなの最初のローマ字）と変換対象のひとつ以上の漢字とを対応させたテキストファイルである。基本語を集めた辞書は、サイズ別に、S、M、ML、Lの4つが公開されている。また、人名、地名などの固有名詞や専門用語は別のファイルとして配布されており、環境や目的に応じ複数の辞書を自由に組み合わせて使うことができる。

SKKは、辞書をバッファにとりこんで検索を行うため、最初の読み込みの際若干時間がかかることがある。また、emacs 毎に大きな辞書をとりこむのは非効率でもある。そうした欠点を補うため、共有の辞書を辞書サーバで置き換えることができる。これをSKKサーバと呼ぶ。SKKサーバへは skkserv という独自の簡易なプロトコルを用いて問い合わせを行い、入力文字列から変換結果を受け取る。SKKサーバはSKKの辞書ファイルの形式に依存しないため、様々な方式で高速化、効率化を図った実装が存在する。

SKKにはskkserv以外にも多数の辞書サーバが存在する。主なSKK辞書サーバプログラムとその特徴を下記に示す。
skkserv
オリジナルのSKKサーバ。
skkipserv
辞書をメモリ上にハッシングすることで検索を高速化したSKKサーバ。
dbskkd-cdb
辞書形式としてcdbを利用したSKKサーバ。
multiskkserv
複数辞書の管理が可能なSKKサーバ。
rskkserv
Rubyで実装されたSKKサーバ。EPWING形式の辞書も利用可能。
fskkserv
OCamlで実装されたSKKサーバ。内部の索引構造にパトリシア木を用いている。
mecab-skkserv
MeCabを利用して、擬似的に連文節変換を可能にするSKKサーバ。

また、入力予測システムであるPOBoxの変換サーバプロトコルは、skkservプロトコルをもとに拡張を加えたものである。
辞書サーバのフロントエンドによっては、Google日本語入力と通信することによって、より多くのキーワードを利用できるものもある。

名前 
SKIコンビネータ計算において、SKKという式は恒等関数と同じ結果となる。作者の佐藤自身も、SKK=Iを念頭に置いて、「ユーザの頭の中にある日本語のテキストを，なるべくストレスなしに，そのままディスプレイに出力するプログラムにしたいという気持ちが込められている」としている。

なお、東北大学の教授により開発されていたわけであるが、新制東北大学の工学部の母体のひとつ仙台高等工業学校の略称もSKKである。

脚注

引用

註

外部リンク 
 CorvusSKK(A SKK-like Input Method Editor and some miscellaneous tools for Windows)
 SKK日本語入力FEP
 AquaSKK プロジェクト - 日本語を快適に 
 GitHub - codefirst/aquaskk: An input method without morphological analysis.
 skkinput2's page 
 skkinput3
 iiimf-skk
 
 tyru/eskk.vim - GitHub
 skk.vim - Japanese SKK : vim online
 skk.vim - Japanese SKK（改良版） : vim online
 jj1bdx/dbskkd-cdb - GitHub

日本語入力ソフト
1987年のソフトウェア
オープンソースソフトウェア