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では変換ミスにつながらない。
また、前者は再変換のために文節の選択を(例えば、右から左へ)変更する必要性があり、打鍵のコストが多くかかるが、SKKの場合は入力と変換を逐一行うことによって、ペンで文字を描くように自然に左から右へ文章を書いていくことが可能である。カーソルキーを多用しないということはそれだけホームポジションから手を離す機会が減るため、高速な入力も可能となる。
SKKでは、ローマ字を直接入力するとそのままひらがなに変換される。かなを漢字に変換する場合は、漢字の開始部分を大文字で指定する。活用のある場合には送りがなの開始部分を、活用のない場合は空白を入力することで漢字へ変換する。例えば、「彼は足が速い」という文を入力する場合、「<kbd>Kare␣haAsi␣gaHayaI</kbd>」と入力する(但し左の例では空白を<kbd>␣</kbd>で表わし,一度目の変換で望む候補が出たことを仮定している)。
他の特徴として、シームレスな辞書登録が挙げられる。辞書に登録されていない単語を変換しようとした場合はミニバッファで変換結果の入力が促され、その結果は個人用の辞書に登録される。辞書の登録は再帰的に行うことができる。そのため、使っているうちに自然と辞書が成長していき、より快適な変換を実行することができるようになる。
SKKの大きな欠点のひとつは大文字を入力するためのシフトキーの多用、すなわち小指の酷使である。2023年1月設定によりシフトキーを押しやすい別のキーにアサインしてこの小指問題を回避する方法もある。
SKKはローマ字かな変換に基づいた入力方式だが、漢字の始点と終点を指定できれば、直接かな入力に対応できる。多少のインストールと設定の追加により、親指シフト配列やJISかな入力、T-CodeやTUT-Codeでの使用が可能である。親指シフト配列では漢字変換の始点を大文字で指定するのではなく、ホームポジションの両人差し指のキーである「f」と「j」の同時打鍵を使用する。
SKKはEmacs Lispで実装されているため、Emacsが動く環境ならばどこでも使うことができる。一方、Emacs以外で使いたい場合は、何らかの手段を講じる必要がある。様々な環境のインプットメソッドに対応したSKKライクな変換エンジンが開発されており、それらを利用してSKK方式の入力を行うことができる。
Unix系環境においては、X Window System上で動作する伝統的なX Input Method (XIM) のためにskkinputが開発された。skkinputには現在skkinput2とskkinput3のふたつの実装が存在する。
また、XIMにかわるインプットメソッドとして開発された、多言語対応のインプットメソッドのIIIMF (Internet/Intranet Input Method Framework)、 uim (Universal Input Method)、SCFcitx5IM (Smart Common Input Method)、IBus (Intelligent Input Bus) 、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上でSKKライクな入力を実現するにはskkimeやcorvus-skkやSKK日本語入力FEPがある。これらはOS付属のMSIMEを含めて全て同時にインストールでき、言語バーおよび入力言語のホットキー操作によりアプリケーション実行中でも自由に切り替えて使用することが可能である。skkime と corvus-skk はコントロールパネルからGUIを用いて設定を行うことができる。
Vim上でSKKライクな入力を実現するにはeskk.vimとskk.vimでどちらもVim scriptで実装されている。 eskk.vimはskk.vimの後継を目指して活発に開発されており、 skk.vimは2006年以降開発が停止している状況であったが、2010年にメンテナが変わって以降パッチなども精力的に取り入れている。
こうした他実装は、Daredevil SKKと独立に開発・保守されている。したがって、機能的に劣ることや、独自の拡張機能を持つこともある。
SKKの使用する辞書は、複数のユーザによって共有する書き換えられない辞書と、ユーザのホームディレクトリに置かれ、登録した単語や変換の履歴が追加されていく個人用の辞書がある。どちらも、かな(送りがなのある場合はかな+送りがなの最初のローマ字)と変換対象のひとつ以上の漢字とを対応させたテキストファイルである。基本語を集めた辞書は、サイズ別に、S、M、ML、Lの4つが公開されている。また、人名、地名などの固有名詞や専門用語は別のファイルとして配布されており、環境や目的に応じ複数の辞書を自由に組み合わせて使うことができる。
SKKは、辞書をバッファにとりこんで検索を行うため、最初の読み込みの際若干時間がかかることがある。また、emacs 毎に大きな辞書をとりこむのは非効率でもある。そうした欠点を補うため、共有の辞書を辞書サーバで置き換えることができる。これをSKKサーバと呼ぶ。SKKサーバへは skkserv という独自の簡易なプロトコルを用いて問い合わせを行い、入力文字列から変換結果を受け取る。SKKサーバはSKKの辞書ファイルの形式に依存しないため、様々な方式で高速化、効率化を図った実装が存在する。
SKKにはskkserv以外にも多数の辞書サーバが存在する。主なSKK辞書サーバプログラムとその特徴を下記に示す。
オリジナルのSKKサーバ。
辞書をメモリ上にハッシングすることで検索を高速化したSKKサーバ。
dbskkd-cdb
辞書形式としてcdbを利用したSKKサーバ。
複数辞書の管理が可能なSKKサーバ。
Rubyで実装されたSKKサーバ。EPWING形式の辞書も利用可能。
OCamlで実装されたSKKサーバ。内部の索引構造にパトリシア木を用いている。
mecab-skkserv
MeCabを利用して、擬似的に連文節変換を可能にするSKKサーバ。
また、入力予測システムであるPOBoxの変換サーバプロトコルは、skkservプロトコルをもとに拡張を加えたものである。
辞書サーバのフロントエンドによっては、Google日本語入力と通信することによって、より多くのキーワードを利用できるものもある。
SKIコンビネータ計算において、SKKという式は恒等関数と同じ結果となる。作者の佐藤自身も、SKK=Iを念頭に置いて、「ユーザの頭の中にある日本語のテキストを,なるべくストレスなしに,そのままディスプレイに出力するプログラムにしたいという気持ちが込められている」としている。また、東北大学の教授により開発されていたわけであるが、新制東北大学の工学部の母体のひとつ仙台高等工業学校の略称もSKKである。