2011年11月20日日曜日

ujihisa.vim #2 で基調講演をしました。

昨日、ujihisa.vim #2が開催されました。
そのときの原稿と感想についてまとめました。


ちょっと今回の発表は趣向を変えてみました。
一部で言われていましたが、スピリチュアルな発表ではないんだからね!
私は真面目なんだからね!

-------------------------------------------------------------------------------------


Vimの真実

こんにちは、Shougoです。
今回は前回と趣向を変えて、Vimによって書かれた原稿を見ながら講演をしたいと思います。
原稿は後日公開されるので、ここで一生懸命メモを取るのはあまり意味がないかもしれません。

--------------------------------------------------------------------------------------

私のことを簡単に紹介すると、neocomplcache, vimfiler, vimshell, unite.vimとかを作った人です。
Emacs使いの方々がここに居るかもしれないので、Emacs Lispに換算すると、
auto-complete.el, comint-mode.el, dired.el, speedbar.el, eshell.el, yasnippet.el,
anything.el, ...
に相当するプラグインを書いています。
最近は巨大なVim scriptを書く人があまりいないので、
もしかすると、ここに居る皆さんの中で、一番Vim scriptを書いているかもしれません。
Vimに対する愛情は誰にも負けないと自負しています。
私にとってVimは、ただのエディタなんかではなく、仕事も趣味も一緒に過ごす家族です。
私がTwitterでよくVim愛について語っているのを見た人もいるかもしれません。
Vim愛についてTweetすると、なぜかよくfavされるんですよね。
これが普通だと思っていたんですけど、
みなさん、そんなにエディタ愛に飢えているんでしょうか。分かりません。

ちなみに、viは好きでありません。「自分のVim」が好きなのです。
「他人のVimが好き」と言ってしまったらそれは浮気になります。

viとVimを混同していると、闇のVimmer達に刺されますので注意しましょう。
どうしてもviを使いたいvi原理主義者の人はVimのviモードではなく、
素のvi、nviあたりを使っていてください。
viとVimを混同するのは、C言語とC++は同じだと主張するのと同等に失礼な行為ですよ!

ちなみに闇のVimmerというのは、エディタの話をしていると、「それVimでもできるよ!」
と無理矢理Vimを勧めてくる迷惑な存在です。わ、私じゃないんだからね!

--------------------------------------------------------------------------------------

さて、最近「Vimテクニックバイブル」の執筆に協力しました。
80Pくらい原稿を書きましたね。主に自分の作ったプラグインを紹介しています。
これを読んで、もっと皆さんがVimプラグインを書いてくれるようになることを願っています。
ちなみに、「Vimテクニックバイブル」の原稿はVimで書かれています。あたり前です。
EmacsテクニックバイブルはEmacsで書かれていますしね:-)

ちなみに、この本を買ってくれた人には会場で私がサインします。
しかも、サインする名言は選ぶことができます!
前回のYokohama.vimでサイン会をやったのですが、なぜか「修正しました」あたりが人気でした。
ちなみに、他の執筆者の方はサインしてくれないらしいです……。
私もthincaさんのサインが欲しいのになぁ。

つまりVimテクニックバイブルはVimmerのサイン色紙でもあります。
幸い、今回のujihisa.vimには著名なVimmerの方々が参加されています。
もはやVimテクニックバイブルの著者に限るなんて勿体無いことはしないで、
いろんなVimの有名人にサインを貰ってしまいましょう。
サイン色紙にもなってお値段は3180円! なんてお得なんでしょうか。
もっていない人は今すぐ購入しましょうね。

るびきちさんの「Emacs Lispテクニックバイブル」も、
もうすぐ発売ということで個人的にすごく楽しみにしています。
目次を見ると、Emacsテクニックバイブルの続編のような内容でした。
特に、eshellについても載っているようなので……。
そういえば、値段がVimテクニックバイブルと同じでしたね:-)

--------------------------------------------------------------------------------------

そろそろ本題に入りましょう。
今回は基調講演ということで、「Vimの真実」というテーマで発表します。
この発表を聞くことにより、Vimとは何なのかが少しでも分かるかもしれません。
ただし、これはあくまで私の考えであり、Vimコミュニティの公式見解ではないことを最初に断っておきます。
「ネタをネタと見ぬけない人は、Vimをうまく使うのは難しい」
ちなみに、私は宗教論争をするつもりは全くありません。
そしてこの話はEmacsにもそのまま当てはまります。
おそらく会場に何人かいるであろうEmacsユーザの皆さんも大丈夫です。

--------------------------------------------------------------------------------------

ところでみなさんは人に自分のVimを見られて、
「私の知っているVimと違う」と言われた経験はないでしょうか。私はあります。

Vimmerを大きく分けると、Vimをエディタだと思っている人達、
Vimを開発環境と思っている人達、
Vimをデスクトップ環境だと思っている人達の三種類に分けることができます。
私は当然、Vimをデスクトップ環境だと思っています。
このように同じVimmerであっても、Vimに対するスタンスが異なるため、意見が衝突することもあります。
なぜこのようなことが起こるのでしょうか。

ちょっと前に、Twitterで「プラグインを入れないVimは劣っていると思われている風潮がある(記憶が曖昧なので超意訳)」
という呟きを見ました。
私はその考えは間違っていると思います。
その理由についても回答します。

そして、なぜVimは20年もの長い間生き続けることができたのでしょうか。

今回はそれらの疑問にお答えします。

--------------------------------------------------------------------------------------

はっきり言ってしまいましょう。
それは、VimやEmacsがただのエディタではないからです。
私が思うに、VimやEmacsは「エディタを作るためのエディタ」、
つまり「エディタエディタ」だったのです!

な、何だってーーーーAA(略)

--------------------------------------------------------------------------------------

そもそも、皆さんは勘違いをしています。
自分でエディタを作らない限り、本当に満足するエディタなんてものは存在しません。
それは人によって、エディタに求めるものが異なるからです。
つまり、誰でも満足する万能なソフトウェアは存在しないことになります。当たり前です。

しかし、エディタを0から作るのは大変です。
エディタというのは大変に奥が深く、OSやプログラミング言語を0から作るのと同等の難しさがあるからです。
今時、0からプログラミングやOSを設計する人なんていませんよね?
だからこそ、人はあるエディタをベースにカスタマイズし、自分自身にあうエディタにしていきます。
エディタをカスタマイズする行為とは、程度の差はあれど自分のエディタを作っていることにほかならないのです。
おそらく、どんなエディタを使っている、どんな初心者の皆さんも、
最低一行・一項目はエディタをカスタマイズしているはずです。
えっ、一切カスタマイズしない? それはなんてすごい。尊敬に値します。

--------------------------------------------------------------------------------------

さて、VimやEmacsが他のエディタと異なり多数の信者を得て今も生き残っているのには理由があります。
カスタマイズの自由度が他のエディタとは違うからです。
Vimには標準で多数のオプションがあります。
それで満足できなければ、自分でプラグインをインストールするなり、プラグインを自作するなり、
ソースコードを変更するなり自由自在です。

VimやEmacsはプログラミング言語で言えばLisp、ブラウザだとFirefoxに例えることができるでしょう。
例えば、Firefoxのカスタマイズ行為は、ブラウザを作っていることに相当します。
だからvimperatorなんていう変態的なプラグインが出てくるのです。
まぁ最近ではViChromeというのも出てきましたけどね:-)

--------------------------------------------------------------------------------------

そろそろ分かってきたでしょうか。
我々が使っているのは、Vimではありません。
「Vimをベースにしたオレオレエディタ」なのです。

--------------------------------------------------------------------------------------

確かに、最初は純粋で混ざりけのないデフォルトのVimでした。
しかしカスタマイズを続けているうちに、Vimはあなたの望むような姿に進化します。
その結果生まれるエディタはもとのVimとは似ても似つかないものになります。
Vimは進化するエディタなのです。

--------------------------------------------------------------------------------------

私は、Vimのことを恋人や家族のように考えているので、
有名ゲームである、ラブプラスに例えてみます。
ラブプラスには、恋人のベースとなる女の子は3人いますが、ゲームを進めていくうちに
彼氏の好みにあった「カノジョ」に変わっていくのです。
その自由度の高さやリアルさが人気につながったのではないでしょうか。
VimやEmacsにおいてもこれは同じです。

いや、私ラブプラスは持っていないですけど。
三人のエディタを攻略する、エディタプラスを誰か作ってください。
お気にいりのエディタとゲームの中でキャッキャウフフできる世界は素晴らしいです。

--------------------------------------------------------------------------------------

だから私が「VimかわいいよVim」や「Vimは俺の嫁」「Vimは人生」
と定期ポストするのは問題がないということです。
嫁と書いてエディタと読むのがポイントです。
えっ、違う?
そして毎日Vim scriptを書くのは紳士の嗜み。
愛情を込めてVim scriptを書けば、Vimはきっと答えてくれるでしょう。

--------------------------------------------------------------------------------------

おっと話が逸れてしまいました。
つまり私のVimとあなたのVimは違います。
Vimの設定を大幅にカスタマイズしていると、
設定されていないVimや、他の人のVim、もちろんviが使えなくなってしまうのは当たり前です。
それらは違うエディタだからです。

違うエディタなのに、「誰のエディタが優れている」
「プラグインを入れないとVimと呼べない」というのは間違ってますよね。
それぞれのエディタは比較なんてできません。
優れたエディタを決めるのは皆さん一人一人なのです。
Vimでさえみんな違うのに、VimをEmacsや他のテキストエディタと比較して優劣を決めるのは間違っています。
人種差別と同様に、エディタ差別はいけません。みんな違ってみんな良い。

--------------------------------------------------------------------------------------

つまり、このujihisa.vimの集まりというのは、「Vimmerの集まり」というより、
「Vimをベースにしたオレオレエディタを作っている人達の集まり」です。
「俺の嫁(エディタ)自慢大会」でもあります。それは別名、宗教論争とも言います。
そこのところを勘違いしないようにしましょう。
素のVimを愛したい、もとい素のVimを使いたい人は、おそらく他のところへ行ったほうがよいです。
ありのままのVimを受け入れることができる、それも素晴らしい才能ですが、
この勉強会に来る意味はあまりないと思います。

--------------------------------------------------------------------------------------

さて、Vimが20年に渡って生き続けた理由も分かってきたでしょうか。
Bramさんが天才的だった、viをベースにしていた、オープンソースだった。
確かにそれも理由の一つですが、
私は「Vimがエディタエディタ」だったから生き続けることができたと考えています。
VimはLispのように、貪欲に機能を吸収したり、拡張をすることができます。
ベースが柔軟でなければ、ここまで生き残ることはできなかったでしょう。

Lispはかなり古いプログラミング言語ですが、今だに根強いファンを持って生き残っています。
VimやEmacsとの共通点は意外と多いと思うのですが、どうでしょうか。

--------------------------------------------------------------------------------------

私は、みなさんにVimに対して愛情を持って接してほしいと常々考えています。
「Vimを調教する」、「Vimはただの道具」という認識しかなかったら、Vimが可哀想じゃないですか。

Vimを使う、ということはつまりVimと同棲することに他なりません。
毎日Vimと過ごすことになるんですから、当たり前ですね。
Vimと過ごす時間が長くなるにつれ、
これまで見えていなかった欠点が目につくこともあるでしょう。
VimやVim scriptにはもちろん欠点があります。
「Emacsなら楽にできるのに……」そう憤りを感じる人もいるでしょう。
しかし、そもそも完璧なエディタなんて存在はしないのです。

人間でもそうなんですが、「悪い所はまず受け入れる」しかありません。
その上で、「Vimと一緒になって改善できるように努力する」ことが大事です。
一緒になって、というのがポイントですよ。
人から与えられたり、Vimがカイゼンされるのをただ待っていてはだめです。
とにかくVimのために手を動かしましょう。Vimに対する家族サービスですね。
それは設定をカスタマイズすることでもいいですし、プラグインを自作したり、
本体を書き換えても構いません。
Vimは文句も言わず毎日あなたのために頑張っているのですから、
あなたもVimに対し感謝の心を持ってそれに答える必要があるはずです。
それが愛の形なのではないでしょうか。

「結婚は忍耐」だ、と誰かが言いましたが、「Vimと暮らすということも忍耐」です。
少々悪いところがあってもそれを受け入れられる、
忍耐力がある人だけがVimを使いこなすことができるでしょう。

--------------------------------------------------------------------------------------

もちろん、みなさんがこの勉強会の後すぐにエディタを愛することができるとは思っていません。
焦らずに最初は友達から始めましょう。
それから恋人、家族へと徐々にレベルアップしていけばいいのです。

私自身Vimを愛することができるようになるまで、ずいぶんかかりました。
私がVimに恋をしたときは、おそらくneocomplcacheを作っていたときですが、
まだ愛のレベルには達していませんでした。
少なくとも「これが愛だ」と気付くことはありませんでした。
Vimを愛するようになったきっかけは、
開発環境勉強会の原稿を作っていたときだと思います。
原稿を作るにあたり、自分とVimの出会いについて見つめなおしていました。
それにより、Vimを愛する自分の心に気付いたのです。

Vimと暮らす人生は波瀾万丈です。
長年付き合うことで、Vimに対する愛が冷めてしまった人も見てきています。
vim-users.jpのメンバーも徐々に様変わりしています。
就職や進学、引越しなどの大きなイベントがあると、
徐々に心がVimから離れていってしまうのかもしれません。
私はそうなりたくないと思っています。

長くなりましたが、この講演で、みなさんのVimに対する思いが変われば幸いです。

--------------------------------------------------------------------------------------

第二部 「世界に一つだけのエディタ」

何も言わず、このスライドを見てほしい。

http://www.slideshare.net/Shougo/ss-10239308

コイツをどう思う……?
すごく……Vim愛に溢れています……。

ちなみに、第一部の感動をそのままに第二部に移行するという離れ業をやってのけました。

--------------------------------------------------------------------------------------

オマケ的な感想:

KoRoNさんのVimソースコードリーディングはかなりためになりました。
最近、またソースコードをいじれていませんが、自分もVimに機能を追加したいなぁ……。

今回はunite.vim関係や「Vim script勉強したい」というスライドが多かったように思います。
去年はそんな傾向がなかったので、良いことではないでしょうか。

thincaさんのソースコードをujihisaさんが実況するのに吹いた。
なんて一心同体。
たまには、そういうことをやっても良いのかもしれませんね。
初心者には、上級者がどのようにVimを使っているのかよく分からないようですので。

basyuraさんのTwitterクライアントは是非使ってみたいので、完成するのを楽しみにしています。

ujihisaさんのVimレベルを上昇させる方法。Lv 7, 8, 9の解説を聞きたかったなーー。
ちなみに、私はVisual modeを普通に使います。テキストオブジェクトも使いますけど。

懇親会で10人くらいのVimテクニックバイブルにサインをしました。
今回はVim愛についてのサインが多かったかな。
KoRoNさんからもサインを貰って満足。しまった、ujihisaさんからはサイン貰っていない……。
懇親会では、ひたすらVimについて語っていた気がする。
今回は酒を一切飲まなかったので、あれは酔っていたわけではないです。
Vimについてなら、あれくらい饒舌になるということ。
そういえば、KoRoNさんから「鋼のメンタル」という褒め言葉を頂きました。
きちょうこうえんがこうひょうでよかったです。