- Firefoxベースで、TypeScript設定ファイルを通じてブラウザ自体をプログラム可能なツールにする新しいアプローチ
- Web拡張機能が持つセキュリティ制約なしに、ブラウザUIのカスタマイズや外部プロセスの呼び出しなど、無制限の機能実装が可能
- Vimスタイルのモードシステムとキーマッピングを提供し、マウスなしで完全なキーボード中心のブラウジングをサポート
- ヒントモード、タブのファジーファインダー、REPLなどの開発者向け機能を標準搭載し、6か月間の実運用で検証済み
- macOSとLinuxでアルファ版をダウンロード可能で、既存のFirefox拡張機能およびワークフローと完全互換
Glide開発の背景
- 開発者はFirefoxでTridactyl拡張機能を使っている中で、Web拡張機能の根本的なセキュリティ制約という問題を経験
- addons.mozilla.orgのような特定サイトでは拡張機能が完全に無効化され、すべてのキーマッピングが動作しない
- カスタムホームページでもTridactylが動作しない問題が発生
- こうした制約は、悪意ある拡張機能からユーザーを守るためのブラウザに不可欠なセキュリティモデルだが、同時に拡張性を大きく制限する
- ブラウザUIそのもののカスタマイズから外部ツールの呼び出しまで、制限なく可能な真のカスタムブラウザの必要性を認識し、Glideの開発を開始
Glideの中核的な差別化要素
- TypeScript設定ファイルベースで完全な制御権を提供
- Web拡張機能では決してサポートできないAPIや機能を利用可能
- エンドユーザー自身が設定ファイルを書くため、セキュリティ制約を設ける必要がないという根本的に異なるセキュリティモデル
- 設定ファイルで可能なこと
- カスタムキーマッピングの定義
- Web拡張機能APIへのアクセス
- 任意の外部プロセスの実行
- マクロの定義 など
- Firefoxベースで構築されており、既存のFirefox拡張機能やワークフローがそのまま動作
実用的な設定例
GitHubリポジトリを自動でクローンしてエディタを起動
glide.keymaps.set("normal", "gC", async () => {
// extract the owner and repo from a url like 'https://github.com/glide-browser/glide'
const [owner, repo] = glide.ctx.url.pathname.split("/").slice(1, 3);
if (!owner || !repo) throw new Error("current URL is not a github repo");
// * clone the current github repo to ~/github.com/$owner/$repo
// * start kitty with neovim open at the cloned repo
const repo_path = glide.path.join(glide.path.home_dir, "github.com", owner, repo);
await glide.process.execute("gh", ["repo", "clone", glide.ctx.url, repo_path]);
await glide.process.execute("kitty", ["-d", repo_path, "nvim"], { cwd: repo_path });
}, { description: "open the GitHub repo in the focused tab in Neovim" });
- GitHubリポジトリのページで
gCキーを押すと、自動的に次の処理を実行
- 現在のURLからオーナー名とリポジトリ名を抽出
~/github.com/$owner/$repoパスにリポジトリをクローン
- kittyターミナルでneovimを開き、クローンしたリポジトリへ移動
- 作業ごとに数秒を節約でき、設定の追加に必要なのは数分だけ
カレンダータブへすばやく切り替え
glide.keymaps.set("normal", "gc", async () => {
const tab = await glide.tabs.get_first({ url: "https://calendar.google.com/*" });
assert(tab && tab.id);
await browser.tabs.update(tab.id, { active: true });
}, { description: "[g]o to [c]alendar.google.com" });
gcキーでGoogleカレンダーのタブへ即座に切り替え可能
モードシステム
- Vimのモードの概念を取り入れ、すべてのキーマッピングを特定のモードに紐付け
- ブラウザとの相互作用に応じて自動でモード切り替え
normalモード: 基本モード
insertモード: <input>要素をクリックすると自動で切り替わり、キーマッピングがテキスト入力を妨げない
ignoreモード: Shift+Escapeで切り替え、Webサイトがキーマッピングと衝突するときに使用
キーボードベースのナビゲーション
ヒントモード
fキーを押してヒントモードに入る
- クリック可能なすべての要素(リンク、ボタンなど)の上にテキストラベルのオーバーレイを表示
- ラベルを入力すると、その要素にフォーカスしてクリックを実行
- マウスなしでWebページを完全に操作可能
個人的に気に入っている機能
gI: ページ内で最も大きく見えている入力要素に自動でフォーカスする、魔法のような機能
<space><space>: タブのファジーファインダーを起動し、見失ったタブを簡単に探せる
<c-i>と<c-o>: 前のタブ履歴のナビゲーションに不可欠
:repl: 設定変更をすばやくテスト
- ヒントモード: マウスに手を伸ばしたくないときに便利
- which-keyスタイルのUI: さまざまなキーマッピングを思い出させてくれるインターフェース
現在の状況と利用可能性
- 約6か月間、日常的に使用中
- まだ初期アルファ段階だが、macOSとLinuxでダウンロード可能
:tutorコマンドでチュートリアルの確認を推奨(まだ未完成)
- Linuxユーザーはまだパッケージリポジトリに登録されていないため、手動で展開と設定が必要
- Cookbook と開発者の dotfiles でさらに多くの例を確認可能
- アルファ版のため、まだすべてのAPIが実装されているわけではないが、完全な制御権の提供が主な目標
2件のコメント
かなりマニアックに使いこなさないといけない感じですね。GUIの利点を相殺できるくらい使えるなら別ですが…。
Hacker Newsのコメント