本日、2019 年 10 月 11 日は、Vim Vixen リリースからちょうど 2 年が経過します。 昨日リリースした 0.25 が最新バーションで、今後も引き続き開発を続けていく予定です。 現在はおかげさまでユーザー数は 12,000 を超えて、GitHub スター数も 1,500 を超えました。
この 2 年間の Vim Vixen を振り返って行きたいと思います。
2 年間の実績
まずは 2 年間の開発実績を見ていきます。 最初のコミットは 2017 年 8 月 11 日なので、この日が開発開始と言えるでしょう。
この 2 年間でリリースした回数は 25 回で、コミット数は 1,285 です。 現在は TypeScript で記述しており、コード量は本体コードが 8,795 行、テストは 7,263 行になりました。 このコードには自分以外に 30 人のコントリビューターから送られた Pull Req.も含みます。 基本的にメインメンテナーは自分ひとりで、新規機能やバグフィックスは GitHub 上で行ってます。
2 年間で Close した Issue の数は 246 件です。 着手する Issue の優先度は、:thumbs_up: が多い物を優先的に取り組んでますが、基本的に自分が欲しい機能から実装してます。
2 年間のリリースの歴史
Vim Vixen のバージョンは特にメジャーバージョン・マイナーバージョンを意識するのが面倒だったので、0.xx というナンバリングにしています。 初期の頃は機能追加とバグフィックスを交互にリリースしてましたが、現在は各リリースの変更サイズをできるだけ揃えるようにしてますが、大抵は気まぐれです。
バージョン 0.1
最初のリリースです。 スクロール、タブ切り替え、リンクオープンなどの基本的なブラウザ操作をできるのを第一目標にリリースしました。 こ最初は Babel + webpack という構成で、ES2015 を ES5 にトランスパイルしてます。 また内部の状態管理には Redux 風のオレオレライブラリを実装して、HTML の描画は素朴な DOM API を使ってます。
バージョン 0.2
主な新規機能は以下のとおりです。
- リンクの follow モードで、frame/iframe 対応をしました。
follow モードの frame/iframe は機能としては小粒ですが、frame/iframe ではそれぞれ個別にプラグインがロードされるので、
アンカーの採番やリンククリックなどを実装するためにpostMessage()
を使って協調動作するのが大変だった記憶があります。
バージョン 0.3
主な新規機能は以下のとおりです。
- Shift+Escでアドオンの有効・無効を切り替えるようにしました。
- Blacklist を導入し、URL にマッチするページでアドオンを無効化できるようにしました。
このリリース以降、急激に GitHub スター数が増え始めました。 それと同時に Issue も報告されはじめ、1 日 10 件以上の報告が毎日続いた期間がありました。
バージョン 0.4
主な新規機能は以下のとおりです。
<area>
タグ内のリンクを follow モードで開けるようにしました。
<area>
タグ内のリンクを開けるようにしたのは、自分がよく利用する気象庁のページでよく利用されてるためです。
バージョン 0.5
主な新規機能は以下のとおりです。
- g0/g$で先頭・末尾のタブを選択するようにしました
- zpでタブのピン留めを切り替えるようにしました
- zdでタブを複製するようにしました
- /キーでページ内検索に対応しました。
バージョン 0.6
バグフィックスと細かなユーザーエクスペリエンスの向上です。
バージョン 0.7
主な新規機能は以下のとおりです。
- GUI の設定画面をサポートしました
JSON で設定してたのを、GUI のフォーム画面にも対応しました。 フォーム画面の描画には Preact を採用しました。
バージョン 0.8
バグフィックスと細かなユーザーエクスペリエンスの向上です。
バージョン 0.9
不具合があったのでリリーススキップです。
バージョン 0.10
不具合があったのでリリーススキップです。
バージョン 0.11
バージョン 0.9 と 0.10 で不具合があったので、緊急リリースしたバージョンです。 主な新規機能は以下のとおりです。
- プロパティという概念を導入しました。
smoothscroll
プロパティとhintchars
プロパティを追加しました。 - giで最初の
<input>
タグにフォーカスするようにしました。 - !dでピン留めされたタブを閉じるようにしました。
- p/Pでクリップボードから URL を開くようにしました。
このバージョンでアドオンパッケージをシェルスクリプトから Node に移行しました。 その時にパッケージ作成に失敗して、AMO アップロード後にロードできないというのに気づきました。
その修正後、改めてリリースすると、新たに導入したプロパティにも不具合があり、プラグインが動作しないというのに気付きました。 結果として 2 バージョンもリリースを中止しました。
バージョン 0.12
バグフィックスと細かなユーザーエクスペリエンスの向上です。
このリリースからリリース前に実施してた試験項目を、自動化への移行を始めました。 またこのリリース前後で、GitHub スターが 1,000 も超えました。
バージョン 0.13
不具合があったのでリリーススキップです。
バージョン 0.14
バージョン 0.13 で不具合があったので、緊急リリースしたバージョンです。 主な新規機能は以下のとおりです。
- このバージョンから Firefox のツールバーに Vim Vixe のアイコンが表示されるようになりました。アイコンをクリックすることで、Vim Vixen を有効・無効を切り替えることができます。
- Vim Vixen の更新があった時、ユーザーに通知するようにしました。
- ggでページのソースを開くようにしました。
:addbookmark
コマンドを追加して、コンソールからブックマークを作成できるようにしました。:quit
コマンドを追加して、コンソールから現在のタブを閉じられるようにしました:bdelete
/:bdeletes
コマンドを追加して、コンソールからキーワードにマッチするタブを閉じられるようにしました。
また Travis CI から CircleCI に移行しました。
バージョン 0.15
バグフィックスと細かなユーザーエクスペリエンスの向上です。
Promise ではなく ES6 の async/await を利用するようにしました。 Babel 使ってるからもっと早くに async/await 使えばよかった。
バージョン 0.16
主な新規機能は以下のとおりです。
:buffer
コマンドで、#
/%
でタブを選択できるようにしました。- 全てのタブを閉じる
:quitall
コマンドを追加しました。 - p/Pでクリップボードからキーワード検索できるようにしました。
:quitall
コマンドで全てのタブを閉じるようにしました。
バージョン 0.17
バージョン 0.16 で Firefox60 ESR 上の動作に不具合があったので緊急リリースしたバージョンです。 Mozilla が公式にサポートしてる Firefox 上での動作を保証するために、ユニットテストの実行環境をサポートしてる一番古い Firefox ESR にしました。
状態管理で実装したオレオレ Redux 風ライブラリから、公式の Redux パッケージを利用することにしました。 また Background script の設計を Redux ではなく、Clean Archtecture にほぼフルスクラッチで書き直しました。
バージョン 0.18
バグフィックスと細かなユーザーエクスペリエンスの向上です。
バージョン 0.19
主な新規機能は以下のとおりです。
- ページ内マークmとジャンプ'に対応しました。
complete
プロパティを追加して、タブを開くときの補完を管理できるようにしました。
CircleCI 2.1 に移行しました。
バージョン 0.20
主な新規機能は以下のとおりです。
- gh/gHキーで、ホームページを開くようにしました
コンソールの描画に Preact を使って描画するようにしました。
また follow モードでメッセージ送信にpostMessage()
使ってた部分を、セキュリティの理由で WebExtensions API を使うようにしました。
バージョン 0.21
バグフィックスと細かなユーザーエクスペリエンスの向上です。
バージョン 0.22
バグフィックスと細かなユーザーエクスペリエンスの向上です。
E2E テスト自動化ツールとして、プロジェクトの内部ライブラリして実装してましたが、 1 から作り直して npm パッケージに切り出しました(ドキュメントはまだ整備できてません)。
バージョン 0.23
主な新規機能は以下のとおりです。
- .で最後の操作を繰り返すようにしました
本体のコードを JavaScript から TypeScript に移行しました。 そして Content Script の設計を、Redux ではなく Clean Archtecture にほぼフルスクラッチで書き直しました。 また画面描画を、Preact から React に変更しました。
バージョン 0.24
バグフィックスと細かなユーザーエクスペリエンスの向上です。
バージョン 0.25
主な新規機能は以下のとおりです。
- Partial blacklist に対応しました。
- 公式ページも兼ねたヘルプページを作成しました。https://ueokande.github.io/vim-vixen/
:help
コマンドで上記のページを開くようにしました
このバージョンから、CircleCI を使って自動リリースも導入しました。 これで Git 上でタグを打つだけで AMO にアップロードされます。
まとめ
もともと Vim Vixen の開発を始めたきっかけは、Firefox 53 から Vimperator が使えなくなったという理由でした。 最初は自分が使えればいいと思ってひっそりとリリースしたのですが、現在たくさんのユーザーに使っていただいてます。 初期リリース 1 ヶ月後くらいにユーザー数が急激に増えた頃は、Issue 対応やバグフィックスに追われて大変だった時期もありました。 それも地道に対応を進めて、今では落ち着きました。
Vim Vixen の開発で、貰った一番嬉しい Pull Req.は、ドキュメントの修正です。 自分が書く英語は、英語ネイティブな人たちがの文書よりも遥かに下手くそです。 助詞が足りないとかの些細な変更でも、ありがたく受け入れます。
今後も Vim Vixen の応援をよろしくおねがいします。