Bram Moolenaar the Creator of Vim
2023年8月5日、悲しい知らせが入ってきました。長年、多くのエンジニアに愛され今もなお使われ続けているテキストエディタVimの作者Bram Moolenaar氏が同月3日に亡くなったという知らせです。ショックでしばらく信じることができませんでした。
筆者は長年Vimを使い、Vimに多くのコントリビュートを行ったり、その都度Bram氏と対話したり議論したりしてきました。そのBram氏が突然、この世界からいなくなってしまったことをしばらく受け入れられなかったからです。
本記事では追悼の意味を込め、Bram氏がどのようにVimの開発を始め、Vimがどのように広まっていったのか、また長年Vimを追い続けてきた筆者から見たBram氏の人物像を筆者の思いを交えて解説していきます。
Vimの歴史
Bram氏についてお話しする前に、まずはVimがどのようにして誕生したのかについてお話しします。
Vim
ある日、Amigaと呼ばれるパーソナルコンピュータを買ってきたBram氏は、このコンピュータ上でviを使えるようにしたいと思い、移植を始めました。1980年代の終わりのことでした。これがVimの開発の始まりです。
1980年代、すでにたくさんのviクローンが出回っていました。nviやstevieやelvis
Vimは1991年に一般公開されました。そしてその後30年にもわたって開発が続けられるとても有名なOSSとなりました。
Vimは数多くのプラットフォームに移植されました。Atari MiNT、BeOS、DOS、Windows、IBM OS/
そして今やVimはまるでviを意味するかのように呼ばれ、さらにはh j k lキーでカーソル移動できるユーザーインターフェースは
これほどまでにVimが人気のテキストエディタになった理由は何だったのでしょうか。Vimはviクローンでありながら、開発時に求められている機能を積極的に取り込んでいました。たとえば、
これらの機能を積極的に取り込み、そして開発を止めなかったことがVimをこれほどまで人気にさせた理由と筆者は考えます。
Bram Moolenaar氏の活動
Vim
Vimの開発はほかのOSSプロジェクトに比べて特殊です。すべてのコミットはBram氏のみによって行われます。今でこそGitHubを使うようになりましたが、昔は6.
かつてのVimのコードホスティングサービスは、CVS、Google Codeと移ってきましたが、2015年8月、Google Codeがサービス終了することに伴ってGitHubへと移されました。これを機に、Vimの開発もGitHubでPull Requestを送るとマージされる一般的なOSSの開発手法に変わるのではないか、とVim開発者のみなは期待しました。しかし、実際はそれまでと変わらず、送られてきたPull Requestの内容をBram氏が自分なりに解釈し、それをもとに自らコミットを作成してmasterブランチにpushするという方法が採られました。これについてはいろいろな意見がありましたが、普段から自分のスタイルを崩さないBram氏らしい判断だなと筆者は思いました。
Bram氏のGitHubリポジトリにはVimに関連する物しか置かれていません。また、GitHubのBram氏の活動内容を見ると、ほぼVimのみにコミットしているのがわかると思います。Bram氏の活動のほとんどがVimに注ぎ込まれたのです。
なおVimのリポジトリがGitHubに移されたのは2015年でしたが、過去の履歴から復元し2004年
そんなBram氏にも、Vim以外の活動がありました。
Zimbu
ZimbuはBram氏が開発していたプログラミング言語です。2009年ごろに開発されたもので、本記事を執筆している時点ではすでにドメインがなくなってしまっており、ソースコードリポジトリもなくなってしまっていることから、すでに試すことはできなくなってしまいましたが、おおよそコード1のようなシンタックスを持つ言語です。
Zimbuはブロックの開始に{
を持たず、終了にのみ}
を持つちょっと変わったシンタックスをしています。Zimbuのソース
A-A-P/Agide
A-A-PはBram氏が開発したプロダクトで、ソースコードをダウンロードしてビルド後にインストールするという手順を自動化するためのビルドツールです。
Makefileのようなシンタックスを持つレシピファイルにより、複雑なソース構成でもビルドできるようになっています
A-A-Pでビルドしてインストールできるプロダクトとして、Bram氏本人が開発した統合開発環境
Agideはマルチウィンドウで構成されており、デバッグ機能を持ったIDEです。エディタおよびデバッガのソース表示部分にはVimが使われています。筆者は簡単なプログラムでAgideのデバッグ機能を使ったことがありますが、十分に機能しており実行中の変数の値も確認できました。
現在のVimはGNUデバッガdebug.
を内包しており、Vim単体でコンソール、ソースブラウズ、変数の値表示や更新などができるようになっています。これにはAgideで開発した際の知識が詰め込まれていると言えるでしょう。
ウガンダの恵まれない子供たちへの援助
読者のみなさんはVimを起動したときに表示されるメッセージをしっかり読んだことがあるでしょうか
Bram氏は、定期的にウガンダに足を運び、実際にウガンダの子供たちがどのような生活を送っているのかをVimのホームページを介して紹介していました。
また、VimのオフィシャルサイトにはVimに追加してほしい機能を投票できるページがあります。このページでは、ウガンダへの寄付をした人に追加する機能への投票券が与えられていました。
Bram Moolenaar氏の性格
Bram Moolenaar氏の私生活はとても謎が多いことで有名でした。筆者が知っているBram氏は、お酒とモンティ・
ここまで読んだ方は、Bram氏にどのような印象を持たれたでしょうか。チャリティに積極的で、温厚な人物でしょうか? 実は、Vim開発者のメーリングリストvim-devの間では、Bram氏は
vim-devやGitHub Issuesでは
ソケット通信パッチ
筆者の却下されたパッチの1つがVimにソケット通信機能を追加するパッチです。最近のバージョンのVimではTCP/
Vimユーザーのいくらかの人はこのパッチを喜んでくれましたが、Bram氏は
あとあと、Vimにはchannel機能が入ることになるのですが、それならあのときのパッチが取り込まれても良かったのでは、と思うこともあります。しかし、Bram氏がその時々にVimに求められている物を反映した結果が現在のchannelだったのだろうと感じています。
channelとNeovim
2013年ごろまでのVimのメインループはキーを押したりマウスを操作したり、ウィンドウの幅を変更したりといった外部の要因で初めて処理が実行されるような実装になっていました。これはVimでは非同期処理ができないことを意味しており、たとえばテキストの編集操作を損なわずに重たい処理をバックグラウンドで実行できませんでした。
これを解決するために、当時はあらゆるハックが行われてきました。たとえば、updatetime
というオプションにVimの内部処理を自発的に更新させる作用があることを利用し、その間隔
しかしupdatetime
は本来は画面を更新するためのオプションです。短くすることで画面がチラついてしまいます。多くのプラグイン作者がこのようなVimの動作に悩んできました。
そこで2013年9月、Geoff Greer氏がVimに非同期処理を追加するためパッチをvim-devに投稿しました。こちらはJavaScriptのsetTimeout
のような機能でした。とても小さなパッチでしたが、これまでイベントループを使わず実装してきた物をすべてを改善するには抜けが多いパッチで、Bram氏は難色を示しました。
続く2013年12月、Thiago Padilha氏がvim-devで非同期処理に関する提案を行いました。これはマルチスレッドとメッセージキューを使って、特定のイベントを発火させるというしくみでした。
こちらに関してはBram氏は反応を見せませんでした。Vimはどちらかというと保守的なソフトウェアです。OSの設定ファイルを編集する目的でも利用されているテキストエディタとして、どんな環境でも動作しなければなりません。いろいろな機能やライブラリに依存して特定の環境でしか動かなくなってしまうことは、Vimにとって本末転倒です。マルチスレッドが使えない環境であっても動作しなければなりませんから、筆者としてはBram氏が消極的であった理由もわかります。
その後、これらの進展がないことにいら立ちを感じたのか、Thiago Padilha氏はVimをforkして非同期処理を取り込み始めました。これがNeovimの始まりです。
Neovimはその後、内部のスクリプト言語をLuaに変更したり、ターミナル機能やいわゆるポップアップウィンドウを実装したりして多くのユーザーを獲得しました。今やVimとは別のテキストエディタと言っても良いかもしれません。
筆者が知る限り、Bram氏はNeovimに対して特別に言及したところも、また不満などを漏らしたところも見たことがありません。また、Neovimが開発を先行しているからといって何かの機能の追加を急いだりすることもありませんでした。我が道を行くBram氏らしいですね。
違う道を歩むVimとNeovim
Vimのヘルプファイルには
Vimはシェルやオペレーティング・
システムではありません。Vimの中でシェルを実行したり、Vimを使ってデバッガをコントロールしたりすることはできません。
その代わりこれは動作します:シェルやIDEからVimをコンポーネントとして使う
Vimがターミナル機能を内包するようなことはないと明記されています。そして
この機能が欲しくなったBram氏は2017年のある日、突然vim-devにこんなメッセージを送ってきました。
私はVimの中に端末エミュレータを追加することが果たして良いアイデアなのかずっと疑問を持ち続けてきました。それは危険なことであり、またVimの規模も大きくなり、そしてメンテナンスの悪夢にもなり得ます。しかしそれと同時に、これは非常に、非常に便利になり得ます。
私が今回これを望んだ理由は、ssh接続でVimをデバッグするためです。私はローカルで程よい設定をしているので家にいない時はいつも苦しんでいます。 そういった制限は、私が家に帰りデバッグするための時間を延期してしまいます。デバッガ機能を提供するプラグインがありますが、それを使いVimをデバッグするには端末で実行する必要があるのです。
そしてVimにターミナル機能が実装され始めました。これには多くのVim開発者が驚かされました。なにせ
そして
Vimはシェルやオペレーティングシステムではありません。Vimはシェルやデバッガを実行できる端末ウィンドウを提供します。例えばssh接続ができます。しかしテキストエディタを必要としないのであれば、それはVimの対象外です。
(代わりにscreenやtmuxなどを使ってください)
一見、きまぐれで変更されたようにも感じる方もいるかもしれませんが、これにはVimが今後も生き残るためには時代に合った求められる機能を追加すべきというBram氏の考えがあったのだと思います。これも、Bram氏のこだわりと言って良いと思います。
さらにそのあと、Vimにもchannel機能による非同期処理のしくみが入りました。タイマーも入りました。またポップアップウィンドウの実装も入りました。しかし、Bram氏のこだわりで、たとえNeovimがすでに実装している同様の機能をVimが取り込むことになったとしても、自分が納得のいく形でしか実装しませんでした。
前述のように今やNeovimとVimは実装方式も異なっており、NeovimはVimの操作ができる別のテキストエディタとして開発されていますが、VimはVimのペースで開発が続けられています。またVimにもNeovimにはない新しい機能が追加し続けられています。
vim-devと私
筆者が初めてVimに出会ったのはVimがバージョン2.vimrc
ではif
による分岐ができるようになっていました。当時はお世辞にも使いやすいとは言えず、頻繁にクラッシュした記憶があります。
それから幾年が過ぎてVimがバージョン6.
英語コンプレックス
今も英語は得意ではありませんが、当時の筆者はとくに英語にコンプレックスがあり、幾度か勝手な読み違いをして見当違いなリプライをvim-devに投稿してしまったことがあります。
あるとき、また読み違えてしまった筆者はBram氏に
このリプライが以降の筆者の英語コンプレックスを大きく解消してくれることになり、あらゆるOSSコミュニティでも当たって砕けろの精神で話しかける勇気を得ることができました。筆者が今でもBram氏に感謝している一番大きな出来事です。あのときこの言葉を掛けてくれてなかったら、もしかしたら筆者はOSS活動を続けていなかったかもしれません。
Bram Moolenaar氏と握手
VimConfはVimに関する国際カンファレンスをやろう、という決意で2013年から始められたイベントです。そして以前からどうにかしてBram氏を日本に呼びたいと願い続けてきました。筆者も2017年からスタッフとして活動してきました。
そして2018年、Bram氏からVimConfへの参加にOKをもらい、VimConf 2018が東京の秋葉原アキバプラザの"アキバホール"会場で開催されました。筆者は基調講演をさせていただきました。筆者が会場に到着した際、先に到着していたBram氏を見つけ握手したときの緊張は今も覚えています。
VimConf 2018は筆者とBram氏の基調講演から始まり、多くのVim/
VimConf 2018開催翌日、日本のVim有識者数名とBram氏が1ヵ所に集まりVimの今後について話す会議を行いました。その際、いくら待っても会場に登場しないBram氏を心配していた中、GitHubのvimリポジトリに新しいコミットが追加されたのを見た我々は会場で大爆笑したのを覚えています。
その後Bram氏を交えて我々が考えるVimの未来を説明したりモンティパイソンを観たりしました
Vimのこれから
Bram氏が亡くなり、Vimの将来を不安に思う方もいるでしょう。とくにこれまでBram氏のみがmasterブランチにコードをpushしていた開発体制をこれからどのようにするかについて心配されている方もいると思います。そのように感じられている読者のみなさんには、その心配は必要ないということをお伝えしたいです。
これまでBram氏の右腕としてVimにコントリビュートされていたChristian Brabandt氏は2023年8月9日、それまでGitHubのVimオーガナイザとして選ばれていたChristian Brabandt氏、Dr. Chip氏、日本のK.
そしてこの原稿を書いている2023年8月26日現在、GitHubのVimリポジトリには以前と変わらない流量のPull Requestが送られてきており、Bram氏が体調を崩す以前と同じほどのコミットが行われています
本稿執筆時点ではVim 9.
おわりに
Vimの誕生と成長、Neovim誕生の経緯、またBram氏がどのような人だったのかについて解説しました。これまでのBram氏の意思を引き継ぐべく新しい開発体制となります。これからのVimもよろしくお願いします。