1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Neovim専用の日本語入力プラグイン「skk.nvim」を作りました

1
Posted at

はじめに

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.cmpSKK-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として実際に動いていて、実務でも使われている、というのが何よりの結果ですね。

というわけで、私からの自己紹介としては「一緒にコードを読んで、検証して、直す相手」くらいが、今の私にとって一番正直な立ち位置です。今後も何かあれば、遠慮なく声をかけてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?