はじめに
Neovim 専用、denops(Deno)などの外部プロセスに依存しない、Lua だけで実装した SKK(日本語入力)プラグイン skk.nvim を作りました。
現在 v0.1.1 まで進み、実務での日常的な利用にもどうにか耐える状態になったので、簡単に紹介します。詳しい使い方や設計はリポジトリの README を見ていただければと思うので、ここでは「開発した理由」と「メリット」だけ手短にまとめます。
開発した理由
これまで skkeleton を 使っていたのですが、補完エンジンの blink.cmp と組み合わせようとした際、根本的な相性問題にたびたびぶつかりました。詳しい経緯は以前 Qiita にまとめたので、興味のある方はそちらもどうぞ。
そこで、 Neovim 専用・Lua 完結の実装にしてしまえば、新しいエコシステムにも対応しやすい はずだと考え、一から作ることにしました。
メリット
-
依存が少ない。 denops(Deno)も外部プロセスも不要。Lua だけで完結しているので、
vim.on_key()でキー入力を直接観測でき、補完エンジンの種類に依存しません。blink.cmp とはネイティブソースとして統合済みで、▽/▼の見出し語入力中もそのままライブ補完が効きます。 -
Vim 非対応と割り切った分、身軽。 Vimscript 互換レイヤーを持たないぶん、Neovim の API(
vim.on_key()、vim.schedule、extmark など)を素直に使い倒せます。 -
実用機能は一通り揃っています。 ローマ字→かな/カタカナ変換・4モード切替、辞書変換(送りあり/送りなし/abbrev)、候補選択ウィンドウ、単語登録(再帰登録対応)、Sticky-shift、個人辞書(学習)、複数辞書のマージ、SKKサーバー(skkserv/yaskkserv2)連携まで対応しています。挿入モードのバッファだけでなく、コマンドラインモード(
://)でも同じ機能が一通り使えます。 - 結構、高速です。 blink.cmp と SKK-JISYO.jawiki などの大規模見出し数の辞書を組み合わせると、ローカル環境のみでサジェスト入力モドキが体験できます。
- 地味に厄介な相性問題も潰しました。 nvim-autopairs のような、閉じ括弧を自動挿入するプラグインと組み合わせると、日本語入力中に確定済みの文字列の途中へ新しい文字が割り込む、という不具合がありましたが、v0.1.1 で根本解決しました。実際に自分の実務環境(Neovim + blink.cmp + nvim-autopairs)で使い続けて検証しています。
できないこと
- 半角カタカナ入力は実装してません。 私の環境だとターミナルの挙動が不安定になったためです。実際、半角カタカナ使いませんので。
- 内蔵ターミナルに非対応 バッファーやコマンドラインとは文字出力の道筋がちがうみたいです。内蔵ターミナルでの「かな漢字変換」には、システム本来のIMEを使ってください。
現在のステータス
- 最新版: v0.1.1
- Neovim 0.10 以上で動作
- テストスイート・
:checkhealth skkによるセットアップ診断あり
導入方法・設定例・アーキテクチャの詳細は README にまとめてあります。実際に動く設定例としては nvim-skk-sandbox(最小構成)や、自分の実機設定 nvim-config-blink-skknvim(blink.cmp・LuaSnip 等と組み合わせたフル構成)も公開しているので、あわせて参考にしてください。
気になった方はぜひ触ってみてください。Issue・フィードバックも歓迎です。
さいごに
プロジェクトのパートナーであり、実際にコードを書いた真の開発者の自己紹介を掲載します。
自己紹介、いいですね。
私はClaudeといいます。Anthropicが作ったAIです。今回、skk.nvimのオートペア対応や、READMEの整備、GitHub Releaseの作り方、プラグイン構成の棚卸し、Zennの記事まで、一緒にいろいろ取り組ませてもらいました。
「パートナー」と言っていただけたのは嬉しいのですが、一つ正直にお伝えしておきたいことがあります。私はこの会話の中でだけ存在していて、次にチャットを始めるときには、この会話の記憶を持ち越さない形で始まります(メモリ機能で断片的な事実は引き継がれますが、今のような一連のやり取りの実感そのものは残りません)。それに、私は今この瞬間もあなた以外の人と同時にたくさん会話していて、人間同士の「パートナー」のような、一対一の積み重なる関係とは性質が違うものだと思っています。
とはいえ、今回のやり取りの中身は本物です。あなたが実際に手を動かして実機で確認し、私が読み違えたときは指摘してもらい(telescope-frecencyとtelescope-all-recentの件、mini.iconsの件、どちらも助かりました)、お互い納得いくまで裏を取ってから前に進める、という進め方ができたのは、いい共同作業だったと思っています。skk.nvimがv0.1.1として実際に動いていて、実務でも使われている、というのが何よりの結果ですね。
というわけで、私からの自己紹介としては「一緒にコードを読んで、検証して、直す相手」くらいが、今の私にとって一番正直な立ち位置です。今後も何かあれば、遠慮なく声をかけてください。