VimConf 2018でLT発表をしてきた

11/24に開催された[VimConf 2018](https://vimconf.org/2018/)に参加し、LT発表をしてきましたので、その報告をします。

VimConfはVimについての国際カンファレンスで、今回で6回目の開催です。今回の目玉は何といっても、Vimの原作者であるBram Moolenaar氏が来日した点でしょう。

# 1日目(?)

会場に入り、KoRoN氏に挨拶したところ、すぐさま手招きされ、Bram氏に紹介していただきました。"You wrote many patches." と自分のことを認識してもらえていたのは非常にうれしかったです。ただ、それ以上あまり話すべき内容が思い浮かばず、その場はすぐに別れてしまいました。残念！


## 発表内容

スライドとビデオは公式サイトの[タイムテーブル](https://vimconf.org/2018/#link-timetable)から参照できます。

### mattn氏

Bram氏の前で、vim-jpがVimの開発に果たしてきた役割を説明したことには大きな意味があったと思います。改めてvim-jpのパワーを認識してもらえたのではないでしょうか。
そして`ch_listen`やBLOBなどの新機能をさらっと出してくるところがすごいです。

### Bram氏

想像していたよりもかなりアグレッシブな内容で、Vim scriptを高速化するために、一度コンパイルして `*.vic` などというファイルを作るという案や、プラグイン間の依存を解決するための新しいルールの提案、テキストプロパティーとポップアップの実装案など、今後のさらなる発展が期待できる内容でした。

### daisuzu氏

多数のプラグインを本体の機能で置き換えていった話。何でもかんでもプラグインを入れるのではなく、Vim本体の機能を活用できるではないかと工夫してみるのは重要だと思います。

### ujihisa氏

Vimの基本的なモードの話から入ったかと思えば、最終的にはモードの遷移がどう行われているか、実際にGDBで動かしながらコードを見てみるという話の飛びっぷりにびっくりｗ
Termdebugの存在は前から知っていましたが、実際に動いているところを見るのは初めてで、便利だなあと感心していました。

### OKURA Masafumi氏

"普通"のVimmerのVimの使い方の紹介。
毎朝、(Neo)vimとプラグインのアップデートを行うというのは、皆さん納得ですねｗ

### USAMI Kenta氏

PHPの開発環境について。
(PHPはよくわかりません。)

### Alisue氏

今どきのVimプラグインの開発方法。基本からはじまり、vital.vim の使い方まで、一通りの流れが分かりやすかったと思います。
Bram氏がvital.vimの存在を認識してくれたならばうれしいですね。

### Akin氏

NeovimのGUI対応版の1つであるOniについての話。
VS CodeやATOMなどと同じくElectronを使い、Neovimとはプロセス間通信をしながらあの軽快さとはすごいです。

### rhysd氏

WASM上にVimを移植した話。軽い話と言いつつ、まったく軽くなかったですｗ
実際に自分でもブラウザ上で試してみましたが、軽快に動作しており、感心しました。
ujihisa氏の発表で出てきたVimのメインループの話がここでも出てきており、よい導入になっていたのではないでしょうか。

### Lightning Talks

#### Takaaki ISHIKAWA氏

Emacsのvim-orgmodeの紹介。

#### notomo氏

NeovimからWebブラウザをコントロールする方法の紹介。

#### rattcv氏

デモが動作せず、時間切れの銅鑼が鳴ってしまいました。残念！

#### Shougo氏

NeovimとVimの違い。

#### k-takata (私)

[vim-history](https://github.com/vim/vim-history)リポジトリについて話してきました。基本的には、当該リポジトリの`README.md`に記載してある内容を再構成したものです。当初想定していたよりも話が短く終わってしまいそうだったので、少し話を引き延ばしたところ、うまい具合にピッタリ話を終わらせることができました。最後の最後に銅鑼も激しく鳴って盛り上がって終わってよかったのではないでしょうか。

スライドは以下です。LTではうまく伝えられなかった部分もあると思うので、話した概要と補足事項を記載しておきます。

<strong> <a href="//www.slideshare.net/k-takata/the-vimhistory-repository-vimconf-2018-lightning-talk" title="The vim-history repository (VimConf 2018 Lightning Talk)" target="_blank">The vim-history repository (VimConf 2018 Lightning Talk)</a> </strong>

現行のVimのリポジトリは、2004年、Vim 7.0に向けた開発が始まったときからの履歴しかありません。実は、Vim 5.5から6.4までは別のCVSリポジトリで開発が行われていたのです。さらにVim 1.14から5.4まではリリースごとのtarballしか残っていないという問題があります。

古い履歴を見れないのは残念なので、今回、Vim 1.14から6.4までの履歴を再構築しました。1.14から5.4までは手動で再構築し、5.5から6.4は(Christian氏が)CVSをGitにインポートし、それらを結合することで、再構築を行いました。これが今回のvim-historyリポジトリです。
(実は、[vim_faq](https://github.com/chrisbra/vim_faq)に記載されているVimのリリース日が、情報源によって異なっていることから、[情報を整理しようとした](https://github.com/chrisbra/vim_faq/issues/8)ところからこのプロジェクトが始まりました。)

さらに、以下のコマンドを実行すれば、Vim 1.14から、最新のVim 8.1.xxxxまでの27年間のすべての履歴を1つのローカルリポジトリ上で見ることができて便利です。

```
git clone https://github.com/vim/vim.git
cd vim
git remote add vim-history https://github.com/vim/vim-history.git
git fetch vim-history --tags
git replace --graft v7.0001 vim-6-3-004
```

これは、`git replace --graft`コマンドを使って、履歴を仮想的につなぎ直しているのです。
調査の結果、Vim 7は、Vim 6.3.004辺りから分岐して、約2年間に渡ってVim 6.3/6.4と並行して開発が行われたようです。上記コマンドによって、その履歴を再現することができます。
(一方、Vim 6は、Vim 5.7.002辺りから分岐して、約1年間Vim 5.7/5.8と並行して開発が行われたようです。)

履歴を(仮想的に)結合することにより、トップ5の貢献者によるおよそのパッチ数は以下のコマンドで見ることができます。(発表では2番目のDominique氏が抜けていました。すみません。キリよくするために5位まで載せることにします。) (VimConf 2018前日のVim 8.1.0542までのデータです。)

```sh
$ git log --grep 'Brabandt' --oneline | wc -l        # Christian Brabandt
538
$ git log --grep 'Dominique' --oneline --all | wc -l # Dominique Pelle
451
$ git log --grep 'Takata' --oneline | wc -l          # Ken Takata
360
$ git log --grep 'Yasuhiro' --oneline --all | wc -l  # Yasuhiro Matsumoto
345
$ git log --grep 'Higashi' --oneline | wc -l         # Hirohito Higashi
225
```

Bram氏によるパッチは上記5人よりもはるかに多いはずですが簡単には計測できないので、今回は割愛しています。

自分の最古のパッチを検索することもできます。

```sh
$ git log -1 $(git log --grep 'Takata' --format=%h | tail -1)
commit 01c10524d25e36e72c7e45048a80cdb410165560 (tag: v7.3.668)
...
```

Vimの古い履歴を知りたいときは、vim-historyを活用してみてください。

## 懇親会

vim-jpでよくアイコンを見る何人かとお話しできて良かったです。(本当はもっといろんな方とお話しできれば良かったのですが。)


# 2日目(!)

VimConfの翌日には、VimConfのスタッフとVim開発のコアメンバーなどで "VimConf Hackathon"、略して vimthon というイベントがこっそり開催されました。

当日の様子は、[VimConf Hackathon - Togetter](https://togetter.com/li/1291915)でうかがい知ることが出来ます。

9時開場のはずが、Bram氏がなかなか現れないと思ったら、何とホテルから新しいパッチをコミットしてから登場！

VimConfの会場で行われた、どんな新機能が欲しいかのアンケートなども参考にしつつ、今後のVimの開発について熱い議論が交わされました。

私は、現在開発中の[Windows用新MUI2インストーラー](https://github.com/vim/vim/pull/3501)([詳細記事](https://qiita.com/k-takata/items/343c5ee6abbe34e85571))について説明を行いました。(ほぼ)開発は完了しマージしても問題ない段階であることを説明したところ、悪くない反応だったので、そう遠くない将来、マージしてくれるはずだと期待しています。さらに、これを実験的に公開している[vim-win32-installer](https://github.com/vim/vim-win32-installer)では、既に64bit版の新インストーラーのダウンロード数が32bit版の現行インストーラーのダウンロード数を大幅に上回っていることも紹介しておきました。もしかしたら次のVim 8.2からは64bitインストーラーが公式に用意されることになるかもしれません。

前日のLTで紹介したパッチの数についても再度紹介したところ、Bram氏から、自分のパッチは何個あるのかと聞かれましたが、簡単に計測することはできないため、答えられませんでした。1000個なのか、2000個なのか、もっと多いのか…。

他の方たちは、さまざまなVimの使い方のデモをしたり（実用的なものからゲームまで）、Bram氏も興味深そうに見ていました。

さらにBram氏からは以下の言葉も[ありました](https://vimconf.wordpress.com/2018/11/25/vimconf-2018/)。

> “I am amazed to experience the professional level of this conference
> about one piece of open source software that I happened to start 27
> years ago.  Thanks to all the organisers and speakers for this exciting
> conference!”
> — Bram Moolenaar, 2018-11-25

Bram氏にも絶賛してもらえた素晴らしいカンファレンスで、今後のVimの開発にさらなる期待が持てるとても充実した2日間でした。スタッフの皆様、お疲れさまでした。