小説を書いているうちに、以前の投稿から一年以上開いてしまいました。
 さすがに二年間放置すると死んだと思われてしまうので、ひとまず再浮上してみます。

 Firefoxのマウスジェスチャーアドオンはいろいろあり、ユーザー数はGesturefyがどうやら多いようですが、私はFoxy Gesturesをおすすめします。何と言っても、自分でWebExtension APIを使ったスクリプトを書いて一歩踏み込んだ動作を作れる、というのは便利で、英語でこんなジェスチャー作ってくれよとリクエストしなくても自分で書けばよい、というのは無敵感があって助かります。書いたユーザースクリプトは以前の投稿に追加しつつ公開しているので、よければどうぞ。

 しかしその一方で、(Foxy Gesturesに限らず全アドオンがそうですが)ビルトインページではジェスチャーできないというデカい制限があるのは地味にネックです。
 これはGoogle Chromeも同じで、仕組み上仕方がないので受け入れるしかないのですが、とはいえ「ページが見つかりません」ページで閉じるジェスチャーができないというのは、誰しも不満のあるところじゃないでしょうか。悲しいかな、なぜ世界で最も見たくない、さっさと閉じたいこのページを、よりによって他のページより手間を掛けて閉じなければならないのか――

 そんな悲劇的状況を打開するために、Foxy Gesturesなどのブラウザーのマウスジェスチャーアドオンを導入しつつ、汎用のマウスジェスチャーソフト「Crevice 4」も併用して問題を解決しよう、というのがこの記事の趣旨です。
 なお、この投稿の結論は非常にシンプルで、コードにしてたった1行なのですが、そもそも「Crevice 4」を知らない人もまだ多いかと思いますので、そこんところもお話しします。

マウスジェスチャーソフトならビルトインページもマウスジェスチャーで閉じられる

 マウスジェスチャーそのものの概要については、Wikipediaが詳しいです。

マウスジェスチャー – Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%81%E3%83%A3%E3%83%BC

 基本的にはブラウザーに実装されている(またはアドオンで追加できる)機能として有名ですが、それをブラウザーだけでなく、エクスプローラや他のソフトでも使えるようにしてしまおう、ということで開発されたのが、マウスジェスチャーソフトということになります。

 Firefoxのアドオンと違って、マウスジェスチャーソフトはWebExtension APIの制約を受けません。つまり、マウスジェスチャーソフトなら、Firefoxの「ページが見つかりません」ページも閉じられるのです。

 しかしその一方で、Foxy Gesturesが使えなくなってしまっては意味がありません。例えばWebExtensionで実装されている機能として最もよく使われるであろう代表的なものが「右のタブを閉じる」で、これはマウスジェスチャーソフトが独自に実装することはまず無理です。このように、Foxy Gesturesしかできない仕事もあるのです。

 というわけで、この両者を好きに使い分けられるよう、共存させる必要があるわけです。

 ちなみにマウスジェスチャーソフト自体は私は昔から使っており、「マウ筋」とか「かざぐるマウス」とかを使ってきましたが、いずれも開発が中止し、公開が終了してしまいました。もっともマウ筋は別の開発者氏が開発を引き継いで続行しており、シェアウェアとして配布を継続しています。しかし私は小説家志望者なので、有料ソフトであるということや、そもそもどこでどう支払えばよいのかということよりも、「マウ筋」という名前のダサさが気にかかるところです。これは一見暴言のように思われるかもしれませんが、タイトルがダサいというのは小説の世界においては執筆の労を水泡に帰すまさに蛮行であり、新人賞の公募で言えば見向きもされず、一次選考すら通過できません。作品のジャンルにもよりますが、長すぎず短すぎず、作品の魅力をポイントを絞って適度に語り読者の興味をそそりつつ、しかし中身は読まないとわからないという期待感もあり、しかも編集者に勝手にタイトルを変えられたりしない、それくらいにマーケティングへの配慮も万全、新人らしく新鮮さ忘れずに自然、折角尽くす最善、傑作生まれる必然、編集フロアの一同騒然、満場一致の受賞は当然、授賞式のスピーチなんて偽善、主役登場にメディアは垂涎、過激なRHYMEに爆発寸前、高畑先生あわや心不全、空前絶後の作品をプレゼン、じゅうはんしゅったいサイン会は丸善、そんなデイドリーム見る月曜午前――

 何の話だったっけ。

Crevice 4とは

ダウンロード

 で、今回使うマウスジェスチャーソフトは「Crevice 4」というフリーソフトです。
 ダウンロードはおなじみ窓の杜から可能です。githubからダウンロードするのもオシャレですが、馴染みのある場所でダウンロードした方が間違いないでしょう。

「Crevice 4」マウスジェスチャーでエクスプローラーやブラウザーを操作 – 窓の杜
https://forest.watch.impress.co.jp/library/software/crevice4/

 ちなみに近年まではかなり頻繁にアップデートされていたため、開発が活発というより開発途上という印象もあったのですが、ここ半年ぐらいは落ち着いているため、むしろ手が出しやすくなった、という気がします。オンラインアップデート機能がある場合は毎日でも自動アップデートがあっていいですが、個人で開発されているフリーソフトの場合は手動アップデートが当たり前なので、そこまで頻繁にアップデートしてもらうのはちょっと……アップデートするのも自由とはいえやっぱりしないのは気になるし……というのが本音なんですよね。そんなわけで個人的には開発が活発なソフトウェアでも数か月に一回が理想だと勝手に思っているのですが、いわゆるアンチの人はたった数か月間アップデートがないだけで「放置してる」「開発終了だね」などと罵ったり嘲ったりするわけです。もうね本当にね、すっこんでろって感じですよ。便りがないのは元気な証拠というのを知らんのかと。とはいえ、最近はIPAから有名フリーソフトが「お前んとこのソフト、セキュリティホールあるで」と突っつかれるケースもよく見るようになり、放置していれば良くはならないが悪くもならない、という前提が崩れてしまいました。そういった経緯もあり、放置されているソフトへの警戒感が過剰に強まっているのは憂慮すべきことです。要するに何が言いたいのかというと、当ブログのような個人ブログがわずか2年放置されていたとしても、それで即座に悪いと言い切ってはならないのです。問題ない放置もあるんです。計算しつくされた放置というのもあるんです――

 何の話だったっけ。

インストールと実行

 脱線はここまでにして、インストールしていきましょう。

 ダウンロードしてきたアーカイブを適当な場所に展開して、実行ファイルcrevice4.exeをダブルクリックします。画面右下に以下のような通知が出たら起動完了、スタンバイOKです。あとは上記のマウスジェスチャーが使えるようになります。

8つのジェスチャーが有効化されました
8つのジェスチャーが有効化されました

基本

 初期状態で使える基本的なジェスチャーは、ストアアプリのページによると以下の通り。

マウスの右ボタンを押しながら:
 ホイール ↑      : 前のタブへ
 ホイール ↓      : 次のタブへ
 マウスを ↑ に動かす  : ページ先頭へスクロール
 マウスを ↓ に動かす  : ページ末尾へスクロール
 マウスを ← に動かす  : 履歴を戻る
 マウスを → に動かす  : 履歴を進む
 マウスを ↑↓ に動かす  : ページを更新する
 マウスを ↓→ に動かす : タブを閉じる

 実にシンプルですが、頻繁に使うのはこれぐらいなので、必要十分とも言えます。

細かい設定やジェスチャー追加はスクリプトの記述が必要

 使い始める前に特徴を抑えておくと、まずCrevice 4には、普通のマウスジェスチャーツールには存在する設定ウィンドウがありません。
 ではどうやって設定やジェスチャーのカスタマイズをするのかというと、スクリプトファイルにスクリプトを自分で書くことになります。
 スクリプトと言っても、JavaScriptではありません。C#です。

 プログラマに限定すれば、C#を書ける人は相当数いるはずです。しかしマウスジェスチャーを使いたい人というレベルまで裾野を広げると、大抵の人はC#が書けません。
 しかし、ここで回れ右してはいけません。使われているのがC#でも、Crevice 4を普通に使う分には、C#の文法を知っている必要は全くありません。

Creviceとマウスジェスチャーアドオンを併用する

 さあ、Crevice 4をスタンバイさせたところで、共存させてみましょう。

 Crevice 4が起動済み、Foxy Gesturesも普通に有効化済み、という状況において、まず普通にFirefox上でマウスジェスチャーを行ってみます。
 どちらのマウスジェスチャーが使われるのでしょうか?

Crevice 4を起動していると、Firefox上でもCrevice 4のジェスチャーになる
Crevice 4を起動していると、Firefox上でもCrevice 4のジェスチャーになる

 この通り、Crevice 4が優先して使用されます。

タイムアウトでFoxy Gesturesを有効化する

 ということなので、普通に使う分にはCrevice 4が優先されることがわかりました。この優先度は変えるに変えられないので、Foxy Gesturesを何らかの方法で有効化することが必要になります。

 で、おそらく一番簡単なのは、Crevice 4のタイムアウトを利用する方法です。
 タイムアウトというのは、動作が自動でキャンセルされるまでの時間のことです。試しに、Firefoxのページ上(ビルトインではないページ、もちろんこのページでかまいません)で右ボタンを押し、そのまま5~10秒くらい押しっぱなしにしてみます。
 そしてマウスジェスチャーをすると、

Crevice 4がタイムアウトした後は、Foxy Gesturesを使える
Crevice 4がタイムアウトした後は、Foxy Gesturesを使える

 というように、見慣れたFoxy Gesturesのジェスチャー軌跡が表示されます。
 これが「タイムアウト」というものであり、つまりは約5秒間マウスボタンを押したまま動かさないことで動作がキャンセルされ、Foxy Gesturesのジェスチャーが有効化された、ということです。
 つまり、右ボタンを押して

  1. すぐにマウスジェスチャーを始めれば、Crevice 4のマウスジェスチャー
  2. 5秒以上待ってマウスジェスチャーを始めれば、Foxy Gesturesのマウスジェスチャー

 とすることで、2つのマウスジェスチャーを使い分けることができる、ということがわかりました。
 これで併用できますね。よかったよかった。

タイムアウト時間を変更する方法(スクリプトファイルの編集)

 ……というのはもちろんツッコミ待ちで、もちろん私たちはマウスの右ボタンを5秒もホールドオンできるほど暇人ではありません。1秒待つのすらまどろっこしく、せめて0.1秒くらいにしたいわけです。

 そんなわけで、Crevice 4のタイムアウト時間を0.1秒に変更します。
 具体的なやり方としては、前述の通り、Crevice 4のスクリプトファイルを編集します。

 スクリプトファイルを開くには、タスクトレイのCrevice 4のアイコンを右クリックして、メニューから「Open UserScript」を選択します。

タスクバーのアイコンを右クリックして出るメニュー
タスクバーのアイコンを右クリックして出るメニュー

 エクスプローラでスクリプトファイルが格納されているディレクトリが表示されるので、default.csxをエディタで開きます。
 Windows8かそれ以降なら、エディタはメモ帳でかまいません。文字コードはUTF-8、BOM付きです。

default.csxをメモ帳で開いたところ
default.csxをメモ帳で開いたところ

 とりあえずだだだーっと下にスクロールして、一番最後の行に、以下を追加します。

Config.Core.GestureTimeout = 100;

 これで設定完了。

 数値はミリ秒です。なので上記の場合、100ミリ秒、つまり0.1秒でタイムアウトします。
 これなら普段使いでもほとんど違和感はなく、

  1. すぐにマウスジェスチャーを始めれば、Crevice 4のマウスジェスチャー
  2. ほんの少しテンポを置いてマウスジェスチャーを始めれば、Foxy Gesturesのマウスジェスチャー

 として使い分けが可能です。
 えーやっぱりワンテンポ置くのー? と思われるかもしれませんが、実用してみるとさほど違和感はないはずです。というのも、戻る・更新・タブ切り替えといったごく基本的なジェスチャーはCrevice 4で行うことになるので、いちいちワンテンポ置いてFoxy Gesturesに切り替える必要がないからです。

 一方、Foxy Gesturesでしかできないほど特殊なことをしたい、というケースは頻度としてそう高くないので、ワンテンポ置いてもそんなにまどろっこしさはない、という考え方です。

 なお私に限っては、マウスジェスチャーの操作をよくよく顧みると「右ボタンを押す前からマウスを動かしている」ため、50とかでも大丈夫でした。ただ10だとダメだった。

まとめ

 まとめると、

  1. Crevice 4の設定で、タイムアウトを極端に短くしておく
  2. 普段のマウスジェスチャーはCrevice 4で行う
  3. Foxy Gesturesを使いたいときは、タイムアウト時間分だけ長押し(実際はワンテンポ置くぐらい)する

 です。
 FirefoxのFoxy Gesturesとの併用しか検証していないので、Gesturefyとかでどうなるかは不明ですが、おそらくどのブラウザーとアドオンでも可能なんじゃないかな……

ビルトインページを閉じるもう一つの方法(上級者向け)

 誰でも簡単、かつ実践しやすくメンテナンスもいらないのは上記の方法だと思いますが、「ウィンドウのタイトルをチェックして、特定のタイトルの場合にCrevice 4のジェスチャーを有効化する」という力業もあります。以下は私が実際に使っていたコードの一部。
 何ともザルっぽい判定に思えますが、意外にも誤判定は少ない(ほぼない)です。閉じられないページを見つける度にここに条件を追加していくスタイル。
 これを組み込むのは中~上級者向けだと思うので、細かい解説は割愛します。ご自由にどうぞ。

string fx_name = "Firefox Developer Edition"; // 環境に合わせる
var Browser = When(ctx =>
{
    string fwname = ctx.ForegroundWindow.ModuleName;
    string pwtext = ctx.PointedWindow.Text;
    return
        (fwname == "firefox.exe" &&
            (
                pwtext == fx_name // about:~ など ただし例外もあり
                || pwtext == "オプション - " + fx_name
                || pwtext == "新しいタブ - " + fx_name
                || pwtext == "Firefox 開発ツール デバッガー - " + fx_name
                || pwtext == "アドオンマネージャー - " + fx_name
                || pwtext == "Firefox をカスタマイズ - " + fx_name
                || pwtext == "ページ読み込みエラー - " + fx_name
                || pwtext == "サーバーが見つかりませんでした - " + fx_name
                || pwtext.EndsWith(" | Firefox ヘルプ - " + fx_name)
                || pwtext.EndsWith("Firefox (ja) 向け拡張機能を入手 - " + fx_name)
                || pwtext.EndsWith("Firefox (ja) 向けアドオン - " + fx_name)
            )
       );
});

せっかくなのでジェスチャーを追加する

 さて、Crevice 4とブラウザーのマウスジェスチャーの共存が晴れて実現できたので、ついでにCrevice 4にジェスチャーを追加してみましょう。
 さっきやった通り、スクリプトファイルであるdefault.csxファイルを編集します。

もともとあるコードをコピペして編集する

 ジェスチャーを追加する場合は、既に記述されているスクリプトをコピペして、一部を書き換えます。
 例えばもともとある「タブを閉じる」ジェスチャーは、以下のような感じになっています。

Browser.
On(Keys.RButton).
On(Keys.MoveDown, Keys.MoveRight).
Do(ctx =>
{
    SendInput.Multiple().
    ExtendedKeyDown(Keys.ControlKey).
    ExtendedKeyDown(Keys.W).
    ExtendedKeyUp(Keys.W).
    ExtendedKeyUp(Keys.ControlKey).
    Send(); // Close tab
});

 3行目のOn(…)の部分で、ジェスチャーを指定します。上記の例では、「下→右」としているので、「L」の字を書くようなジェスチャーになります。
 ここで使えるのはKeys.MoveUpKeys.MoveDownKeys.MoveLeftKeys.MoveRightの四つ。二方向以上のジェスチャーの場合は、半角カンマで区切って書きます。

 7行目から10行目の Extended~ で始まる行が、キーを押す・離す動作です。
 ExtendedKeyDown(…)部分でキーを押し、ExtendedKeyUp(…)部分でキーを離しています。

 それ以外の行については、定型文のようなものなので、気にする必要はありません。

 つまりこの例では、以下を自動で行っていることになります。

(マウスの右ボタンを押して、下→右と動かして右ボタンを離すと)
1. Ctrlキーを押し下げる
2. Wキーを押し下げる
3. Wキーを離す
4. Ctrlキーを離す

 もうお分かりかと思いますが、Crevice 4の基本的な動作は、私たちに替わってショートカットキーを押してくれる、というものになります。

 上記の例はタブを閉じるCtrl+Wですが、例えば左→下→右→下→左でページを保存するCtrl+Sがほしいという場合は、上記の例をその下にコピペして、以下のように書き換えればいいです。強調部分が変えた部分。

Browser.
On(Keys.RButton).
On(Keys.MoveDown, Keys.MoveRight).
Do(ctx =>
{
    SendInput.Multiple().
    ExtendedKeyDown(Keys.ControlKey).
    ExtendedKeyDown(Keys.W).
    ExtendedKeyUp(Keys.W).
    ExtendedKeyUp(Keys.ControlKey).
    Send(); // Close tab
});

Browser.
On(Keys.RButton).
On(Keys.MoveLeft, Keys.MoveDown, Keys.MoveRight, Keys.MoveDown, Keys.MoveLeft).
Do(ctx =>
{
    SendInput.Multiple().
    ExtendedKeyDown(Keys.ControlKey).
    ExtendedKeyDown(Keys.S).
    ExtendedKeyUp(Keys.S).
    ExtendedKeyUp(Keys.ControlKey).
    Send(); // ページを保存する
});

 ……超簡単とまでは言いませんが、思ったよりかは簡単じゃないでしょうか。

 ただおそらく九割くらいの人が「マウスを動かす方向を英語で書くの……?」と思うに違いありませんが、これは慣れです。ここを頑張ればプログラマ並みに脳が活性化し健康寿命も延びるかもしれません。老後のためにがんばりましょう。
 なお、//より後ろの部分はコメントアウトです。自由にメモを書けます。日本語でもOK。

 そんな感じで一通り書き換えたら、普通に上書き保存してください。勝手にスクリプトファイルが再読み込みされ、新しいジェスチャーが使えるようになります。
 この調子で好きなショートカットキーを追加して、最強のマウスジェスチャー用スクリプトを作りましょう。

 なおスクリプトを書く前に、そもそも所望の動作がキーボードショートカットで行えるかを知っておく必要があります。キーボードショートカットでできない操作は、原則Crevice 4でもできません。
 Firefoxのキーボードショートカットは以下のページを参照。

 Firefox のキーボードショートカット | Firefox ヘルプ
 https://support.mozilla.org/ja/kb/keyboard-shortcuts-perform-firefox-tasks-quickly

補足: スクリプトファイル編集でエラーが出た場合

 スクリプトファイルに文法エラーなどがあって正常に読み込めない場合は、「UserScript Compilation Error」というエラー通知が出ます。

エラー表示。クリックすると詳細が表示されます
エラー表示。クリックすると詳細が表示されます
行末の半角セミコロンが足りない場合はこんな感じ
行末の半角セミコロンが足りない場合はこんな感じ

 この場合は、慌てず騒がず、正しく書き直して保存すればちゃんと読み込まれます。

 ちなみに余談ですが、私はこのファイル保存で自動再読み込みされる機能が実装される前から使っていたため、当初はスクリプトファイルを編集してはCrevice 4を終了→また起動、を繰り返しつつ試行錯誤していたため大変だったことを覚えており、同機能が実装された時はこれは便利だと感動したと共に、開発者の利便をいち早く図ってくれたこのアプリは絶対に伸びる、と確信したものです。いや、別に前から使ってたからといって胸を張りたいわけではないですし、ましてや窓の杜に掲載されるほどメジャーになる前から使っていた私に先見の明があったとか言いたいわけではないし、そんな先見の明がある人材なのに電撃小説大賞に応募した作品が一次選考も突破しないというのはどう考えても最終選考員のメンツが悪い、とか今年の大賞作は何だアレは大丈夫なのか、とかそんなことを主張したいわけでもないですよ!

 と、解説系の記事に本筋と全く無関係なテキストをねじ込んで読者を置いてけぼりにする悪い癖が出てしまったところで本編を終わります。
 江嵜先生の次回作にご期待ください。

余談(マウスジェスチャーが組み込まれてるVivaldiではダメなのか)

 と〆たところで、性懲りもなく余談。

 「FirefoxやGoogle Chromeのビルトインページでマウスジェスチャーが使えないなら、マウスジェスチャーが最初から組み込まれているブラウザーを使えばいいじゃない?」という人もいるかと思います。例えばVivaldiのような、Google Chromeのエンジンを使用して開発されたブラウザーですね。

 実際それはそうですし、私が単にネットサーフィン(死語)をするだけにブラウザーを使っているならそれでもいいのですが、大変やっかいなことに、私は小説家志望者であると同時にWeb制作者でもあるため、Firefoxを手放すことができないのです。そんなら普段使いも兼ねてFirefoxだけでいいや、という流れ。

 そのりくつはおかしい、Google Chrome系のブラウザーでもWeb制作はできる――そう思われる同業の方もいるかもしれませんが、私は逆にあの開発者ツールで問題ないと思っている人がいるということ自体、サイエンス・フィクションの一種なのではないかと思っています。だってあれ、そもそも日本語化すらされておらず英語なんだぜ? 私は小説家志望者ですが、英語はやる気がみなぎっている時、具体的には始業から1時間くらいの間しか読めません。個人的なポリシーとして手を抜くことはありませんが、Web制作者がいつもやる気100%でWebを作っていると思ったら大間違いですよ。おいGoogle、いいからまずは開発者ツールを日本語にしろ。話はそれからだ。

 と冗談めかして書きましたが、Firefoxの開発者ツールはChromeと比べて見やすく読みやすく使いやすいのでおすすめです。時々インスペクターとスマホエミュレーターが挙動不審にはなるけれど。

 終わりです。