deoplete.nvim開発者、Shougoが考える「Vimの限界ギリギリ」を攻めるプラグイン開発の裏側

多くのエンジニアに愛されるテキストエディタ『Vim』のプラグインを作り続けるShougoさん。Vimmerならば一度は使ったことがある、というほどに広く知られたプラグインを作り続ける理由を聞きました。

deoplete.nvim開発者、Shougoが考える「Vimの限界ギリギリ」を攻めるプラグイン開発の裏側

「あなたにとって、テキストエディタとは何ですか?」

こう聞かれたとき、あなたは何と答えるでしょうか。開発に不可欠な大事なツール、あるいは、ただの道具──。きっと十人十色の回答が返ってくるでしょう。

この問いに対し、「テキストエディタとは世界」と迷いなく答えるエンジニアがいます。Vim/Neovimのプラグインマネージャーdein.vimや、Neovim/Vim8用の入力補完プラグインdeoplete.nvimなどの開発者であるShougo(しょうご/ 1@ShougoMatsuさんです。彼の開発するVimプラグインの完成度の高さは世界中のエンジニアの支持を集め、生み出した全プラグイン累計の獲得GitHubスター数は2万を超え、以下のShougoさんが送り出したリポジトリには、圧巻の開発履歴が残されています

学生時代にテキストエディタに魅了されて以来、孤高の存在としてVimプラグイン開発を続けてきた彼は、いったいどのような道のりを歩んできたのでしょうか。本稿では、その知られざる歴史を紐解きます。

Windowsユーザーじゃなかったら、今ごろEmacsを使っていたかもしれない

2

Shougoさん:情報工学系大学院を卒業後、都内IT企業に入社。学生時代よりVimプラグイン開発、OSSに積極的にコミットしている。VimConfにも積極的にスピーカーとして参加するなど、Vimカルチャー全体に献身的にコミットする。

──Shougoさんは、いつ頃テキストエディタと出会ったのですか?

Shougo 高校生の頃ですね。授業でプログラミングを扱う機会があって、IDEとしてMicrosoft Visual Studioを使っていました。Vimを使い始めたのはもう少し後で、大学生になってからです。

──最初にMicrosoft Visual Studioを使い始めたならば、そのIDEを使い続ける道もあったと思います。なぜ、そうしなかったのでしょうか?

Shougo 答えはシンプルで、自宅のPCにMicrosoft Visual Studioが入っていなかったのと、有償のツールなので別のものを使いたいと思ったからです。

何か良いものはないかと思って、いろいろなエディタやIDEを漁っていました。サクラエディタを使っていた時期もあったんですが、ソースコードを書く上では不便な面が多かったので、やめました。もっと開発がしやすいテキストエディタはないかと探していたところ、Vimと出会いました。

──ここで運命の出会いが! Vimのどんなところが魅力的だったのですか?

Shougo Vimは当時から300種類くらいの言語に対応していて、シンタックスハイライトを各言語に合わせることができたので使いやすかったんです。そして実は、同じ時期にEmacsにも出会いました。

──両者を比較した上で、Emacsを使わなかったのには何か理由があったんですか?

Shougo 私が使っているPCのOSがWindowsだったんですよ。EmacsはLinux上で使用されることを想定しているので、Windowsだとなかなか思うように動いてくれなくて。

もし私がそのころにLinuxを使っていたら、運命が変わっていたかもしれません。「Emacsは使いやすいな。Emacsのプラグインを作ろうかな」と考えていたかもしれないです。けれど、Windows上ではVimの方がちゃんと動いたので、「こっちの方がいいや」となったわけです。

──Vimを使い始めるにあたり、苦労した点などはありますか?

Shougo みんなそうだと思うんですけど、最初は独特の操作性に慣れるのが大変でした。だから最初は、Vimの操作に慣れるよう“矯正”していったんです。

──矯正というと、何をしたのですか?

Shougo 例えば設定を変更して、Windowsのメモ帳の代わりにVimが起動するようにしたり、ひたすらチュートリアルをやりこんだり。そうしながら、よく使う機能から少しずつ覚えていきましたね。

3usr_01 - Vim日本語ドキュメント 

Shougoさんが取り組んだVimのチュートリアル「Vimtutor」は、コマンドライン上に表示されるVimの使い方をもとに、文字を編集しながら操作を練習できるものだ。約30分の演習コースのなかで、Vimを扱う上で最低限必要な操作方法を習得できる。

Vimの設定いじりが導いたプラグイン開発

──それからは、徐々に“Vimの道”へ?

Shougo そうですね。vimrc1ファイルをいじって、自分好みにカスタマイズするようになっていきました。もちろん、ゲームを作ったり、C++でライブラリを書いたりとそれ以外の開発もやっていましたけど、それ以上にVimに触れていること自体が面白かったです。

──Vimの設定が持つ楽しさってどんなところにあるのでしょうか?

Shougo 終わりがないところと変化していくところですかね。設定量が膨大なのでとにかく奥が深いです。それに、コミュニティによる開発が続いているので、多種多様な機能やプラグインが増え続けています。取り巻く環境が常に進化しているんです。もしかしたら、興味がない人にとってはマニアックでわけが分からない世界かもしれません(笑)。でも、私にとってはそれが楽しかったんです。

──そうしてVimの世界にのめり込んでいったのですね。vimrcをいじるようになり、それが徐々にプラグインの自作に結びついていった、という感じですか?

Shougo はい。私にとってはプラグイン開発は設定の延長線上のようなものです。そもそも、Vimのプラグインってそういうものなんですよ。要するに、vimrcに書いた設定やスクリプトを単体で動くようにしたものがプラグインなので、設定を突き詰めていけばいつの間にかプラグインになっているんです。

私の場合、もともとは他の方が開発していたプラグインを使っていたんですけど、うまく動かなかったり、求めている機能がなかったりして、結局は自分で改造していました。それだったら、最初から自分で作った方がいいと思うようになって。もしかしたら、プログラミング言語やフレームワークを作る方もそういうモチベーションで開発を始めるのかもしれないですね。

自分の欲しいプラグインが世の中にないから、作る

4

Shougoさんは、Vimに関するアイデアを書き留めておく通称「Vimノート」を常に持ち歩いている。良い設計や実装の方法を思いついたときには、このノートに書き留めておき、後から読み返すという。ノートパソコンやタブレットは持ち歩かない主義なのだとか。

──最初はどんなプラグインを作ったのですか?

Shougo 最初に作ったのは、vimshell.vimの前身となったプラグインでした。

5

画像はvimshell.vimのスクリーンショット。vimshell.vimのREADMEより。

なぜshellのプラグインだったのかというと、これも私がWindows使いだったことに起因していて、Windowsにまともなコンソールが無かったんです。コマンドプロンプトは非常に使いづらくて。そこで、「Vimからshellを実行可能にしよう」と思って既存プラグインを漁ったんですが、なかなか良いものがなかった。ならば、自分で作った方が早いと考えました。

その後に作ったのがneocomplcache.vimです。これを作る前は、入力自動補完プラグインとしてacp.vimを使っていました。でも、このプラグインはVimの持つ補完機能をそのまま使うという思想だったので、自分の思うようにカスタマイズできません。ならば、独自カスタマイズしやすいプラグインを作ろうと考えました。それがneocomplcache.vimです。

6GitHub - Shougo/neocomplcache.vim: Ultimate auto-completion system for Vim.

──プラグインの着想が「自分の使いたいものを作る」ところからスタートするんですね。

Shougo そうですね。基本的には自分が使うものを作っている感じです。でも実を言うと、私はVimmerのなかでも特殊なタイプなんですよ。というのも、古くからVimを使っている方々は、そもそもあまりカスタマイズやプラグインの利用をしない人が多いんです。

でも、私はIDEから使い始めてVimにたどり着いたので、「IDEでできる機能はVimでもできてほしい」と思っている部分があります。入力補完なんかはまさにそうですね。

──なるほど。ちなみに、他の方が作ったプラグインで「これは素晴らしい」と思うものはありますか?

Shougo VimではなくEmacsのプラグインになりますが、auto-complete.elanything.el(現在の名称はhelm)には大きな影響を受けました。

──どんな部分に影響を受けたのでしょうか?

Shougo これらのプラグインが持つ「情報源」という考え方です。「フレームワークは基本的な枠組みを提供するだけで、情報源となるパーツを組み替えることで多種多様なニーズに対応できる」という設計思想でした。その考え方に衝撃を受けて。

それらはEmacsのプラグインなので、Vimにも同様のものがあればいいと思いました。それが今ではdeoplete.nvimとdenite.nvimになっているんです。

7GitHub - Shougo/deoplete.nvim: Dark powered asynchronous completion framework for neovim/Vim8

8GitHub - Shougo/denite.nvim: Dark powered asynchronous unite all interfaces for Neovim/Vim8

プラグインのインスピレーションは、ボーッとしているだけでは浮かびません。情報を得るために、他の方が作ったプラグインのソースコードを読んだり、テキストエディタに関する著名人が発信した情報を見たりしています。日々の積み重ねが重要ですね。

Vimの限界ギリギリを攻めて開発する

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く