はじめに
まずはじめにVimConfとは何なのか。
VimConf は、世界初かつ世界で唯一のコミュニティによって定期運営されているVimの国際カンファレンスです。
そう、世界初かつ世界で唯一のコミュニティドリブンで開催されるVimの国際カンファレンスなのです。
Vimとはなにか、そう言わずとしれたテキストエディタです。
テキストエディタの国際カンファレンス?もうそう聞いただけでも何じゃそりゃと思われるかもしれません。
けどよく考えてください。私達プログラマが最も触るツールといえばテキストエディタです。次点はブラウザでしょうか。
テキストエディタを効率よく使えるということはイコール仕事の効率化につながるわけで、
これについて突き詰めて考えることは実は非常に重要なことなのです。
それを示唆するようにVimConfの開催規模は年々大規模になっており、特に国際化の流れは非常に顕著に出ています。
去年Vimの作者であるBram Moolenaar氏が招待され、今年も著名なVimmerがゲストとして参加していました。
今回のVimConf2019の英語発表の比率は凄まじく、11本中の7本がスライド、発表ともに英語で行われるほどです。
日本開催の著名な国際カンファレンスでもこの比率はなかなかならないと思います。
そしてニッチな領域であるがそれだけにその熱量は凄まじいものがあります。
皆がテキスト編集という一つの領域にこれほどまでに情熱を注ぎ込める。唯一にして最高の場だと私は思います。
けして参加費は安くはないですが、その価値は十二分に味わえる素晴らしいカンファレンスだといえます。
少しでも気になっているのであれば、ぜひ来年Early bird ticket発売日にサイト前で張り付いてチケットをゲットしてはいかがでしょうか。
今回VimConf2019開催に尽力してくださったvim-jpの皆さまや素晴らしいプレゼンを披露していただいたスピーカーの皆様。
本当にありがとうございました。
Keynote speakers
正直、去年は最大の大御所であるBram氏が招待されてどうなるのだろうと思っていました。
Bram氏以上の人物なんて居ないのではないだろうか。今年のゲストのハードルは非常に高いものであったと思います。
けれどその懸念はKeynote Speakerの発表で消し飛びました。
なんと今回は2人、しかも今最もVim界でホット(個人的には)な人物が招待されたのです。
https://vimconf.org/2019/#menu-keynote-speakers
まず結論から、今回のKeynoteはまさに圧巻の一言。
今まさにVimを取り巻く状況の変化や今後の進化を示唆した非常に素晴らしい発表でした。
Vim Renaissance (by Prabir Shrestha)
まず最初のスピーカーを務めるのはvim-lsp,asyncomplete.vimという有名プラグイン
を開発したprabirshrestha氏。
内容としては、近年登場した新しいVimのFeatureとLanguage Server Protocol(LSP)によって、
Vimの編集にいくつかの革命が起き、その革命に対してprabirshrestha氏がいかにして寄与してきたかという話でした。
LSPについては以下を参照してください。
https://microsoft.github.io/language-server-protocol/
平たく言えばLSPとはプログラミング言語をサポートする機能をサーバ(Language Server)として立てて、それと通信するプロトコルを規定することで、
各エディタのプラグイン開発と言語サーバの開発リソースを集中させようという試みです。
現代のエディタにはもはや必須と言ってもいい機能ではないでしょうか。
prabirshrestha氏が所属するMicrosoftがLSPの仕様をリードしていることは有名です。
さて話を戻しますが、prabirshrestha氏の開発したvim-lspはいくつかあるVimのLanguage Server Client代表格の一角です。
元々LSPの策定当初には他のLSクライアントは存在せず、ないなら作ろうというのが最初のステップだったそうで、
発表ではLSPの仕様の話から始まり、vim-lspを作るまでの流れを丁寧に話してくれました。
その中でvim-lspのデザインをする上でのポリシーを話してくれていて
小さく、一貫性があり、非同期であり、互換性があることを強調していました。
実は私は以前からprabirshrestha氏のプラグインのコードを拝見いたのですが、
すごくそのあたりを気にされているんだなという感想を抱いていて、その答え合わせてしてもらった形になりました。
他のLSPクライアントの中にはNeoVimのリモートプラグインを活用してRustやType Scriptなどで構築された巨大なコードベースなどもあり、
それらのクライアントとは、思想が違うというのはコードから見て取れるのです。
vim-lspが特徴的なのはPureなVim scriptで記述されており、VimとNeoVimの独自Featureに対応しているという点です。
そのためにprabirshrestha氏はVimとNeoVimのjob(Vimの非同期実行のしくみ)の差分を吸収するための
async.vimを開発しています。
特に印象的だったのは発表後の質問タイムにて、
VimやNeoVimなど特定のプラットフォームに依存する形でプラグインを書くなどをすればもっと楽に開発できたのでは?(英語質問だったので細部は違うかも)
という質問に対する回答。
prabirshrestha氏は特定のVimユーザに使ってもらえないよりも全ての人に使ってほしいと回答しました。(多分)
エンジニアリングといえばともすればコードをガリガリ書くだけになりがですが、
それだけでなくトータルで見た様々な要因をバランスよく見ているという、よく人柄が現れた素晴らしいプレゼンでした。
エンジニアリングマネージャをされているというもの納得。
We can have nice things(by Justin M. Keyes)
NeoVimといえばVimのフォークであり、いくつかの革新的な機能を実装して本体であるVimにまで影響を与えた(であろう)ことは有名です。
Jastin氏はそのNeoVimのリードメンテナーの一人だ。NeoVimを語る上でこの人以上の人はいないのではないでしょうか。
かくいう私もVimとNeoVimの違いがすごく気になって記事をしたためたことがあります。
ですが私が書いたものよりも遥かにJustin氏のスライドを是非見ていただきたい。それこそが紛れもない正解なのですから。
意外だったのが、NeoVimの独自Featureをピックアップした発表になると思いきや、
まずテキスト編集やVimというエディターの思想をとても丁寧にお話されていたことです。
特にNeoVimがターゲットとするペルソナを『Vimは好きだが、いくつか変えるべきところがあると考える人』と定めており、
そのターゲットにリーチするためにインパクトが大きいユーザビリティと拡張性に重きをおいている。
という明確な戦略を持っていることには感銘を受けました。
これはNeoVimがただVimに不満をもって変えてやろうというだけの思想ではないことの証明です。(そんなこと思っている人はいないと信じたいが。)
他にも新しくテキストエディタを作る上でフォークする選択肢があり、それでうまくいっているという例を指し示してくれたのはすごい。
ともすれば本流から外れて亜流とも取られないフォークですが、
NeoVimとVimの関係は意味ではうまくいっている部分も多くあります。
またNeoVimのロードマップの一つであるメンテナンスできる人を増やすという目標について、
NeoVimが作られてから途切れずにCommitが行われている点もフォーカスが当てられていました。
このままこの思想の話で終わると思ったのですが、後半に怒涛のNeoVimのFeatureラッシュが始まったのには驚きました。
NeoVimによって拡張された数多の拡張UI郡の紹介やFloating Window、
次期NeoVimに組み込まれるであろうTree sitterなど私の知りたいこと目白押しでした。
しかしそこは時間が足らず中断されてしまいました。
ぜひそこを見たいので、スライド公開が待たれます。早く...早く公開して...
公開されたらまた追記しようと思います。
来場者の中でNeoVimを使っている人が挙手するタイミングがあったのですが、3割近い人が手を上げていました。
なお私もFloating Windowなしでは生きていけないNeoVimユーザなのです。
Speakers
Your Vim is Only for You (by mopp)
https://docs.google.com/presentation/d/1KPe1OEL5mCvDFWe7RhxB94lXUaGjiW_U176-X1vax9g/edit
「Your Vim is Only for You」と強烈なメッセージを叩きつけるmopp氏の発表です。
Vimを自分が使いやすいように以下にしてvimrcを整えていくか、という今回のテーマに非常に沿ったに内容になっていました。
まず一日何回も起動するVimを高速に起動するようにlazy loadingを活用するという話から始まり、
ポータビリティを高めるためのチェックやVim/NeoVimの互換性を保つためのTipsや
マッピングをする上で判断基準などのvimrcの設計思想。
知りたいけど、検索してもなかなか出てこないありがたい内容でした。
そして以下にしてVimを自分好みのvimrcを構築するかのワークフローを提示していて、
毎日vimrcいじり(業務時間中はやらないポリシー)を日課にしている私は、
思わず発表中に頷き過ぎて常時首が上下していたのではないでしょうか。
Grown up from Vim User to Vim plugin developer side (by IK)
https://speakerdeck.com/kazukazuinaina/grown-up-from-vim-user-to-vim-plugin-developer-side-japanese
Vimハラ(Vimハラスメント)をうけて暗黒面に落ちた若きVimmerであるIK氏の
Vimを2017年末から使い始めて、Vimユーザから開発者へなったらいいかという発表。
プラグインをインストールするところから初めて、虎視眈々とコントリビュートチャンスを待ち受け、
すかさずPRを送るその姿は見習うべきところがたくさんありました。
実は私も彼からPRを受け取っていて。コントリビュートしたプロジェクト一覧にdeoplete-vim-lspがあってニヤリとしたものです。
若いっていいですね。私はVim scriptをよし書こうと思うまで数年を要しました。
Usage and manipulation of the tag stack (by daisuzu)
https://speakerdeck.com/daisuzu/usage-and-manipulation-of-the-tag-stack
vim-lspのtagstack対応の不具合からはじめ、発表するために問題を解析し、まとめて、今回の発表につなげるという一連の流れがきれいすぎました。
これぞPresentation Drive Developmentともいううべき発表です。
そもそもVimのタグジャンプとはなにか、ctagsとの組み合わせでどんなことができるのか。
tagstackの内部的なモデルの構成とその挙動について一つ一つ実に丁寧に解説が成されており。
これをLSPのDefinition Jumpに対応するためにどのような対応が必要であったかが頭にスッと入ってくる。
細部までバランスよくまとめられた職人芸のようなプレゼンテーションでした。
この発表をみてタグを意識して使うようになる人もいるのでは?
make test (by m-nishi)
今回のスライドの中では珍しくVim(本家側)のテストに焦点を当てたプレゼン。
普段Vimを使う上では意識しませんが、バグを減らし品質を高める上で非常に重要な要素です。
私も本体側のコントリビュートには参加できておらず、テストならと思わせてくれます。聞いてよかった。
m-nishi氏とは、割とVimコミュニティの中でお会いしていて、Vim歴がそんなに違わないのに、
本体側のコントリビュートや翻訳に参加されててすごいなといつも思ってます。
My Vim life (by gorilla0513)
熱い...というワードが『りゅうおうのおしごと』(超面白い将棋ラノベ)ばりに出てくるそんなプレゼン。
Vim界で最も強い名前と話題のgorilla0513氏の発表です。
Vim歴1年でVimConfで登壇するまでになったその経緯を説明されていました。
操作に慣れたら早速VimプラグインとCLIコマンドを製造しまくり。
ゴリラ.vim開催からWebでVim記事を連載、そして本の出版からVimConf登壇まで一気に駆け上る。
これ本当に1年かというぐらいの濃い密度。これからも彼の活躍は要チェックです。
かくいう私もgorilla0513氏の主催するゴリラ.vimでは何回か登壇させて頂いていております。
貴重な登壇の機会を何度もいただきありがとうございます。
Using Vim at Work! (by Danish Prakash)
なんと心理学的な観点から、Vimをどのように使うかを探るというアプローチ。
マウスの利用やファイルツリーやステータスラインなど、視覚に頼るべき部分を拡張していく、
キーボードだけで使うのが最高なんだよとのたまう私のような親父にカツを入れる。
非常に新鮮なプレゼンでした。
Let's Play with Vanilla Vim (by Hezby Muhammad)
Vimを使い倒す上でデフォルトとプラグインをどう組み合わせるかは非常に重要な課題であるわけです。
ここでこの発表を入れてくるVimConf運営は流石と言わざるを得ない。
あえてプラグインなしのVimを使いRubyをコーディングしていくわけですが、
その中で以下にしてデフォルトの機能を使うか、特にgrepに関しては重要ですよね。
13 Vim plugins I use every day (by Tatsuhiro Ujihisa)
https://speakerdeck.com/ujihisa/13-vim-plugins-i-use-every-day
mopp氏の発表でもあった「Your Vim is Only for You」をここで早速実感するとは思いませんでした。
それほどに独自のカスタマイズによってもはやVimはUjihisa氏のオンリーワンの環境になっていることをまざまざと見せつけられました。
Ujihisa氏の利用する13のプラグインをライブコーディングの流れでアレよコレよと使い倒す。
まさにVimプラグインの見本市。Vim20年は伊達ではありません。
GVimを起動すればシェルが起動し、縦横無尽に飛び出るいくつものタブとバッファは頭が回る程の速度でした。
My dark plugins development history ~ over 10 years ~ (by Shougo)
ご存知の暗黒美無王のプレゼンです。
Shougo氏の10年にも渡るプラグインのふりかえりとその設計思想について。
私もShougo氏のプラグインのヘビーユーザであり、
彼の作るプラグインはどれも私の開発には欠かすことができないもはやエディタ操作の一部と化しています。
これほどまでにVimのキラープラグインを最前線で作り続ける日本人Vimmerはそうは居ないでしょう。
Shougo氏のプラグインには1~4までの世代があり、そのたびに大幅なUser Experienceの向上を果たしています。
物静かな印象を受けますがその実誰よりも熱いテキストエディタに対する情熱を感じました。
過去のShougo氏のプレゼンもぜひ見てほしいですね。
なおShougoさんの発表開始時に「きゃーShougoさーん」とつぶやいたら、
自分のLT発表時にもShougoさんが「きゃー」って返してきて、おっさん2人(年齢聞いたことないですが割と歳は近い気がする)
がキャーキャー言い合うシュールな図になっていました。完全な余談です。
Lightning Talk
今回は発表ネタがなくて、せめてLTだけでもと応募させていただきました。
Connect with many developers from the small pluginと題して、
deoplete-vim-lspがいかに他の開発者の努力のもとに成り立っているかを発表させていただきました。
発表でいくつかの関連要素を述べさせて頂いたのですが、
実は会場にはdeoplete-vim-lspを成り立たせるために重要な動きをしてくださった関係者のほとんどが居たんです。
なので今回の発表はその方々にお礼を申し上げるラブレターのような役割を持っていました。実は。
この発表をするのに、VimConf2019以上にふさわしい舞台はなかったと自負しております。
発表の機会をいただき、スタッフの方々には感謝してもしきれません。
After party
非常に豪華なアフターパーティでは、普段お話できないたくさんのVimmerの方とお話できました。
何人か私の作ったdeoplete-vim-lspを使ってくださっている方が話かけてくれました。
作成した当初、私くらいしか使う人は居ないと思っていたのですが、本当に作ってよかった。
去年お話できなかったmattnさんとお話することもでき。まさに夢心地でした。