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での日本語入力は、ほかのインプットメソッドと大きく異なるため、初めてのものは戸惑いを感じる。形態素解析を利用した変換では送りがなの開始位置を変換のたびに明示的に指定することはないからだ。しかし、手書きの際には、送り仮名の開始位置で戸惑うことなく記述できているので、慣れてくると(あるいは戸惑いの原因であるシフトキーに慣れさえすれば)手書きと同じ感覚で入力することができるとされている。

## 操作の要点

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には2006年現在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と同等の機能を実装することを目標に開発されている。

#### 共有ライブラリ

##### libskk

SKKの基本機能を提供する。利用するアプリケーションとして、ibus-skk、fcitx-skk、fcitx5-skk等がある。

### macOS

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

またSwiftとSwiftUIを用いて実装されたmacSKKが2023年8月にリリースされ現在も開発が続けられている。

### Windows

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

### Android

Android用SKK
と、それを母体とした
SKK for Android
が存在する。

### 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辞書サーバプログラムとその特徴を下記に示す。

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

## 名前

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

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