VimConf 2018のスポンサーをしました

はじめに

こんにちは。
入社2年目のエンジニア、moppです。

2018/11/24にVimConf 2018が開催されました。
昨年のVimConf 2017に引き続き、今年もドワンゴもスポンサーとして参加しました。

スポンサー一覧

私も運営としての活動を昨年から継続して、司会進行役を務めさせて頂きました。

Bram Moolenaar氏と司会をする私

VimConfはブログを書くまでがVimConf、なので、私も簡単ではありますがレポートを書きたいと思います。

VimConfとは

VimConfとは、世界で最も有名と言っても過言ではないテキストエディタであるVimの国際会議です。 2013年から開催されており、昨年に規模を大きく拡大しました。 さらに、今年はVimの作者であり、今も活発に活動をしているBram Moolenaar氏をKeynoteスピーカーとして招待しました。 これはVimConf発足当初、つまり、2013年からの大きな目標の一つだったそうです。 これを5年足らずで達成できたということは快挙であり、スタッフ一同、感無量でした。

発表振り返り

今年も素晴らしい発表ばかりでした。 正直に書いてしまうと司会進行や裏方仕事で慌てているのであまり落ち着いて聞けていません。 しかし、多くの参加者が各々の観点からブログ記事を書いているので安心です。 私もそれらを使ってVimConf 2018当日を復習させていただきました。 この場を借りてお礼を申し上げます。

mattn - What is the next feature?

mattnさんは昨年に引き続きのkeynoteとしての登壇です。 前半はvim-jpというコミュニティが出来た流れと、なんのためのコミュニティなのか、というお話でした。 その目的は英語に自信がない開発者、ドキュメントの日本語翻訳の補助などです。 vim-jpによって追加されたものにはLambdaとjob/channelの改善とDirectX描画、カラー絵文字、incsearch、Windowsでの:terminal機能があります。

後半はタイトルこそ"What is the next feature?“でしたが、我々はfuture tellerではない、コードを書くことで新たなfeatureを追加できるとし、この日のために準備してきたVimへのパッチを3つも披露してくださいました。 これは何かを開発することでコミットしていくぞ、というエンジニアらしいもので尊敬の念を抱かずにはいられませんでした。

Bram Moolenaar - Vim: From hjkl to a platform for plugins

待望のBramさんの発表はタイトルの通りPluginにフォーカスした話でした。 発表はViの話から始まりました。 当時のViにはif命令や変数などはなかったそうです。(しかしmappingを使って迷路を解くことは出来たといいます。) Vim 4.0でautocommandが導入され、Vim 5.0でVim scriptのsyntax、if、while、式、変数が導入されたそうです。(4.0が1996年、5.0が1998年らしいです。) 更にVim 5.2でユーザ定義関数が実装されました。 このとき既にGCはありましたが、Pluginを作るには機能が不足しており、.vimrcへの大量のコピペが必要だったそうです。 そのために、Vim 6.0でPluginに対応し、Pluginによる進化が始まりました。 次にPluginの実行速度改善のためにVim 7.0でPluginの一部ファイルの遅延読み込みであるautoloadが入ったとのこと。 私がVimを使い始めたのは確かVim 7.3からだったので既に多くのPluginが存在していました。 さらなる高速化のために、Pluginをマルチスレッドで読み込む、という案も紹介されていましたがBramさんも話していたように実現は非常に困難そうです。 また、Vim scriptを中間表現にコンパイルして、パース処理を1回で済ませる、という案もありました。 Vimは非常に便利なPluginが数多くあり、自分も97個ほどインストールしています。 すると、大量のPluginをどのようにして管理するかが問題となります。 これはBramさんも認識しており、Vim 8.0でPlugin管理を補助する機能が導入されてました。 これはみんなが求めているPlugin管理機能がそれぞれ異なっており、Pluginを管理するPluginを助ける機能を追加しよう、という方針になったそうです。

さらに、Bramさん自身が最近行った、Pluginを作る上でどういう機能がほしいか?という投票結果の話もありました。 個人的にもpopup windowのサポートが非常に欲しいと思っています。 ドキュメントの表示や、使用箇所の表示といった、現在はIDEが圧倒的優位に立っている機能もVimで太刀打ちできるようになるでしょう。 彼の開発のスタンスとして、たくさんの機能を入れるには慎重で、みんなに求められる機能をしっかりと考えて追加したい、という話でした。 これら開発の話をBramさん本人の口から聞けるのは非常に素晴らしい体験でした。

daisuzu - Migrating plugins to standard features

daisuzuさんもVimConf 2017に登壇してくださってた方の一人です。 彼はVim標準の補完機能に造詣が深いVimmerとして有名です。 今回の発表では大量のPlugin使っていた状態からVim標準の機能を使い、足りない部分は最低限のminimalなコード/pluginに移行していく、というお話でした。 実際にコードの具体例を示しながら、それぞれの標準補完機能、オムニ補完、単語補完、ファイル補完などなど、Vim標準の強力な補完機能の紹介をしてくれました。 次にPlugin managerをVim 8.0から入ったpackage機能と自前の数十行のコードで置き換えるために、同じくVim 8.0から導入さた非同期APIを活用してPluginを非同期読み込みなど、最新の機能も多く活用していました。

VimはPluginを入れずともかなり高機能です。 Pluginはそれらで不足するものを補い、更に作業効率を高める、というものなので、私も彼のように標準機能を使いこなしていきたいものです。 余談ですが実践Vimという本がVimの標準機能を学ぶには最適な本です。

Ujihisa - Modes

UjihisaさんはVimConf 2018の運営もしつつ登壇もしてくださいました。 彼の今回の話はなかなか普段は聞けないようなVimのコアに寄った話でした。 Vimには多くのモードがありますが、C実装上でどのようにキーを受け取ってどのようにデータが流れていくかを最近追加されたばかりの機能である:Termdebugを組み合わせてデモしてくれました。 これはVimの組み込みPluginでGDBの実行を補助するためのもので、かなり最近に追加された機能です。 私も今まで知らなかったので今後は活用していきます。

OKURA Masafumi - A day in the life of (ordinary) Vimmer

OKURAさんは彼が普段実際に開発している、ローカルでの開発、コードリーディング、リモートサーバ上での編集の3つをデモと共に発表してくださいました。 なぜ、モダンエディタ/IDEではないのか、という理由をしっかりと述べていたのが個人的に高印象でした。 また、彼の"Daily startup routine"は以下のようなものです。

  1. Vim/Neovimを更新
  2. pluginを更新
  3. mhinz/vim-startifyの牛の引用を見る

私はvim-startifyを使用していませんが、1と2は自分もPCを起動するたびに行いますし、多くのVimmerはそうでしょう。 他にも彼のAgコマンドによる検索やTagによるjumpなど、私も日頃からやっている作業と似ている部分もあり、嬉しく思いました。

USAMI Kenta - Modern editor-independent development environment for PHP

USAMIさんのお話はPHPをベースにした発表でした。 いろいろなエディタの新しい機能にアンテナを立てているそうで、PHPが進化していくなかでそれを書くエディタ/IDEでどのようなものが追加されていったのか、という話でした。

Alisue - Effective Modern Vim scripting

Alisueさんも昨年からの継続登壇です。 彼はDark Vimmer(Pluginをもりもり入れてVimをカスタマイズするVimmer)として、自分のPluginを作成することを助長する発表でした。 30分間の発表で予め用意してきた入門用Pluginのコードを示し、Vim Pluginのhello world、同期的なPluginの実装、それを非同期にvitalを使って拡張する方法を見ていくものでした。 非常に勢いのある発表で聞いていて楽しかったです。 コードはlambdalisue/vim-amake: An example Vim plugin for asynchronous script runnerで公開されています。 今どきのVim pluginの開発の基礎がバッチリ抑えられており、更に最近の機能である非同期APIの使い方も学べるいいサンプルです。

Akin - Oni - The GUI-fication of Neovim

AkinさんはVimConf 2018のためにロンドンからはるばる来てくださいました。 彼はonivim/oni: Oni: Modern Modal Editing - powered by NeovimというNeovimのGUIフロントエンドの開発者です。 Akinさんは、Neovimがターミナルベースであることの制約をなくしたり、Neovimだけでは出来ないことを出来るようにしたいという思いでoniを開発している、と語っていました。 実装はTypeScriptでWebGLで描画し、Reactも使っているそうです。 拡張機能もJavaScriptで記述できるのでフロントエンドに強い人にとっては嬉しいことだと思います。 また、新しく入門する人のために実績機能も搭載されているそうです。 GUIの特徴を活かして、様々なものを描画するデモはターミナルでは出来ないものなので強く印象に残りました。

rhysd - Vim ported to WebAssembly

タイトルの通りVimをWebAssemblyへコンパイルしてブラウザ上で如何にして動かしたか、というお話でした。 Vim.Wasmで実際にブラウザで動くものが見られます。 ブラウザ固有の話が多くありましたが、実装概要を、ブラウザ表示、ブラウザとの橋渡し、Vimとの橋渡し、Vimのコアとに分けて解説されていました。 現在はVimのtinyまで動作するようです。

Web componentとしてVimを使えるようになったら面白いんじゃないか、という話もあり、質問でも、作ったpluginのデモをブラウザで試せるようにできるか?というのがありました。 これがもっと発展したら、GitHubのREADME.mdでこれを埋め込み、Pluginを試せる、という日が来るのかもしれないなと思いました。 かなりニッチな内容でしたが運営で発表順序を決定するときにも濃い特異なものを最後に持ってきたらかなり盛り上がるだろうと考えて決めましたが、大成功でした。

LT発表

今年は1発表あたり5分のLT枠も募集しました。 登壇者は合計5人で、それぞれvim-orgmode、Vimからブラウザを操作する話、VimPhone、Vim/Neovimの違い、vim-history repositoryについてでした。 また、時間を過ぎたら強制的に終了するためにドラを叩くようにしたのでよく盛り上がったと思っています。 個人的にはVimからブラウザを操作してWeb開発を高速化するという話と、vim-history repositoryにバージョン1.14以降のソースコードを古いVCSか変換してgit化したものが興味深かったです。

運営として

今年も準備には半年程かけました。 しかし、昨年の経験もあって去年よりは自信を持ってより良いVimConfであったと言えます。 準備も非常に大変でした。 ファミレスに集まってCFPの採択をしたときには約5時間も議論が続きました。 (しかもそのときに完全決定することができませんでした。) 他にもvim-jpに記事を追加したり、チケット販売を管理したりと、みんな仕事や趣味の傍らで活動をしました。 しかし、当日が終わって、有志の方がまとめてくれたVimConf 2018 まとめ - Togetterを振り返ったり、続々と集まってくる参加報告ブログを見ていると、楽しかった、やってよかったと感じられました。

翌日にはVimthonという運営と一部のVim貢献者が集まってBramさんとワイワイするイベントを行いました。 この記事はBramさんの向かいの席に座りながら書いています。 そのときのBramさんの言葉をVimConf 2018 – VimConf official blogから引用します。

“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

大学時代にVimに出会い、熱中してから、今もこうしてコミュニティの中にいられるのは非常に嬉しく感じます。 これからも楽しくVimで開発をして、何らかの形でVimに貢献していこうと思います。

Happy Vimming!

mopp