Fluidとは|何ができて、どこで詰まるか

Fluidとは、1つのWebサイトだけを開く小さなMacアプリを作るための道具です。登場は2007年で、配布はいまも続いています。名前だけは知っているが中身は知らない、という状態で検索してたどり着く人が多いソフトでもあります。ここでは、作成ボタンを押したときに実際に何が作られているのか、どういう考え方で動いているのか、そして使い始めた人がどこで手を止めるのかを、公開されている資料と配布ファイルの中身から順に見ていきます。

サイト専用ブラウザという言い方が指すもの

この道具が自分で名乗っている肩書きは「サイト専用ブラウザを作るソフト」です。公式のaboutページには次のように書かれています。

Fluid's goal is to be the best, most native-feeling Site-Specific Browser Creator for Mac OS X. 出典: fluidapp.com

サイト専用ブラウザ(Site-Specific Browser、略してSSB)は、1つのサイトしか表示しないブラウザのことです。アドレスバーで行き先を自由に変えられる普通のブラウザとは逆で、行き先が最初から1つに固定されています。同じaboutページには、この考え方がMozilla Prismとアドビの技術に触発されたものであること、作者がかつてAppleでDashboardの開発に携わっていたことも書かれています。

なぜ行き先を固定することに意味があるのか。ブラウザのタブは、開くのは一瞬ですが、探すのに時間がかかります。20枚以上のタブが横に並んだ状態でメールの画面を探すのと、Dockのアイコンを1回クリックするのとでは、かかる手数が違います。さらにCommand+Tabの切り替え一覧にも独立した項目として出てくるため、キーボードだけで行き来できるようになります。SSBが引き受けているのは、この「探す手間」の部分だけです。表示している中身はブラウザで開いたときと同じWebページのままで、そこは変わりません。

作成ボタンを押したときに、実際に作られるもの

操作そのものは単純です。サイトのURLを入れ、アプリの名前を決め、必要ならアイコン画像を選び、作成を押す。数秒後にはアプリケーションフォルダに1つのアプリが増えています。

では、その数秒で何が起きているのか。配布されているFluid本体の中身を開くと、Resourcesフォルダに1つのアプリがまるごと同梱されています。作成という操作は、この雛形を複製して、指定したURL・名前・アイコンを埋め込む作業です。ゼロからプログラムが書かれるわけではありません。

そのため、出来上がったアプリの素性は雛形と同じものになります。配布版の雛形を調べると、内部の識別子はFluidApp2系、バージョンは2.1.2、動作に必要なmacOSは10.12以降、対応CPUはIntel系の64ビットのみと記録されています。どのサイトから作っても、この土台は共通です。

もう1つ重要なのは、描画エンジンが同梱されていないことです。実行ファイルが参照しているのはmacOS本体のWebKitで、ページの表示はOS側の仕組みが担当します。つまり殻の部分は2018年のまま止まっている一方で、ページそのものは使っているMacのWebKitで描かれます。表示が崩れたときに、原因が殻の側にあるのか描画の側にあるのかを切り分けるうえで、この区別は効いてきます。

ホワイトリストという設計思想

この道具の性格がいちばんよく出ているのがホワイトリストです。作られたアプリは「どのURLまでを自分の担当とみなすか」という一覧を持っていて、担当外のリンクを踏むと既定のブラウザにそのURLを渡します。逆に言えば、一覧に書いていないドメインは、たとえ同じサービスの一部であってもアプリの中には表示されません。

配布ファイルには、よく使われるサイト向けのプリセットが43件分収められています。中身を見ると、たとえばカレンダーのプリセットには表示用のドメインだけでなくログイン用の別ドメインまで並んでいます。SSOで認証だけ別のドメインに飛ぶ設計のサービスが多いため、ログインの道筋も一緒に許しておかないと、サインインの途中で外のブラウザに放り出されてしまうからです。

初期値も確認できます。新しく作ったアプリの既定のホワイトリストはGoogle系の1行だけで、ホームに設定されているURLも同じくGoogleです。プリセットが用意されていないサイトからアプリを作った場合は、この一覧を自分で書き足す前提になっています。あわせて、ホワイトリストの意味を反転させる設定や、どのドメインへの移動も許す設定も用意されていて、閉じ込め方の強さを自分で決められます。

この設計は、裏を返すと初期設定の手間を利用者に渡しているということでもあります。プリセットに載っている有名サービスなら数秒で終わりますが、社内の管理画面のように認証が別ホストに分かれている環境では、どのドメインを許すかを自分で調べる時間が必要になります。調べ方は難しくありません。ブラウザでそのサービスにログインし直しながら、アドレス欄のドメインがいくつ変わるかを見ておけば、許可すべき行はそこで出揃います。

指定はワイルドカードで書く形が基本で、正規表現でも書けるようになっています。前後をスラッシュで挟むと正規表現として解釈される仕様で、これは1.7の更新で加わりました。サブドメインが利用者ごとに変わる業務用のサービスでは、ワイルドカードより正規表現のほうが短く書けることがあります。

一度消えて、少しずつ戻ってきた機能

この道具の履歴を読むと、機能の並びが特徴的な形をしています。バージョン2.0で、Appleの新しいWebKitの仕組みに乗せ替えるための大きな書き直しが行われました。表示の処理を別のプロセスに分ける方式で、ページが重くなっても窓全体が巻き込まれにくくなる代わりに、それまでの作りに依存していた機能がいったん外れています。

その後の更新履歴は、外れた機能が戻ってきた記録になっています。どのアプリを使っていても呼び出せるキーボードショートカット、窓を常に手前に置く設定、仮想デスクトップをまたいだときのふるまい、左右に出せる副画面、タブごとの表示倍率の記憶、他のアプリから受け取ったURLを開く動作、Web Inspectorをメニューから開く設定、最後の窓を閉じたときに終了せず隠すだけにする設定。これらは2.0.1から2.1までの更新で順に復帰しています。ダークモードへの対応もこの流れの最後に入りました。

つまり、いまの配布版は「書き直したあと、元の機能をだいたい取り戻した状態」で止まっています。この道具に何ができるのかを調べるとき、古い解説記事に出てくる機能が現行版にあるとは限らないのは、この経緯があるためです。逆に、いったん無くなったと書かれている機能が戻っている場合もあります。判断の根拠は解説記事ではなく公式の更新履歴に置くのが確実です。

サイトの側から窓に触れる仕組み

この道具には、ページの中のJavaScriptから窓そのものを操作するための独自APIが用意されています。公式の開発者向けページに一覧が公開されていて、Dockアイコンに数字のバッジを出す、Dockメニューに項目を足す、通知を出す、アプリを隠す、前面に出す、終了する、といった操作が並んでいます。

拡張の入口がJavaScriptに一本化されているのも特徴です。開発者向けページには、追加のプラグイン機構を使わずにユーザースクリプトとユーザースタイルを内蔵していると明記されています。ページの見た目を自分好みに変えたり、サイト側が用意していない動きを足したりする作業は、すべてスクリプトで行う形です。ただしこの2つは無料の範囲には含まれておらず、ライセンスを買うと使えるようになる機能として整理されています。

既定の安全側の設定も分かりやすく残っています。JavaScriptは有効、プラグインは無効、Javaも無効というのが初期値です。登場した時期を考えると当時の標準的な判断で、いまのブラウザの既定ともおおむね同じ方向を向いています。

使い始めた人が手を止めやすい場所

この道具でつまずく場所は、機能の善し悪しとは別のところに集まっています。

  • 更新が止まっている。配布版は2.1.2で、アプリ内の更新確認が見にいく配信ファイルの最終更新日は2018年10月19日のままです。更新確認そのものは動くので、何度確かめても最新版だという答えが返ってきます
  • 対応CPUがIntel系だけ。Appleシリコンのマシンでは翻訳の仕組みを通して動くことになります
  • 画面表示が英語だけ。配布ファイルに入っている言語資源は英語の1種類で、日本語のメニューは用意されていません
  • 有料になる機能が3つある。ステータスバーへの常駐、ユーザースクリプトとユーザースタイル、フルスクリーンがそれにあたります
  • 公式ページの記述が揃っていない。トップページは必要なmacOSを10.12以降と書いていますが、aboutページには10.6以降と書かれたままです

どれも致命的な不具合ではありません。ただ、最初に知っておかないと「自分の操作が悪いのか」と時間を使ってしまう種類の話です。

判断の分かれ目になるのは、この道具に何を任せたいかです。いま開いているサイトを1つだけ切り出して、しばらく使えれば十分という用途なら、上のどれも障害にはなりません。一方で、業務の窓口として何年も使い続ける前提なら、更新が止まっている点と対応CPUの点は、機能の比較より先に検討すべき材料になります。道具の良し悪しではなく、使う期間の長さで答えが変わる種類の論点です。

対応表と使い方ガイドから読み取れること

サイトをアプリにする道具は、いまでは複数の系統に分かれています。比べるときに効くのは機能表の長さではなく、自分が毎日開く5つほどのサービスが最初から用意されているかどうかです。プリセットが用意されていれば、許可するドメインを自分で調べる工程がまるごと消えます。現行の道具では対応サービス一覧に300以上のプリセットが並んでおり、SSOで別ドメインを踏むサービスもそこに含まれています。

窓の作り方そのものは、どの系統でもURLと名前を入れるところから始まります。違いが出るのは、作ったあとにどこまで手で調整できるかです。アイコンの差し替え、常駐のさせ方、ログイン情報の分け方といった細かい設定の項目は使い方ガイドで確認できます。どの項目が自分に必要かが先に分かっていれば、道具を選ぶ基準が機能の数ではなく「その項目があるか」に変わります。

費用の考え方も整理しておくと選びやすくなります。この分野には無料のもの、買い切りのもの、月額のものが混在しており、同じ作業をするのにかかる金額が桁で違うことがあります。現行の道具の価格帯は料金で公開されています。判断の材料が足りないと感じたら、導入前によく聞かれる点をまとめたよくある質問を先に読んでおくと、試す前に消せる疑問が減ります。実際にどこまでできるのかはできることに一覧があります。

最後に判断の順番を書いておきます。まず自分が毎日開くサービスを紙に書き出し、そのうちタブを探すのに時間をかけているものに印を付ける。印が3つ以上あるなら、独立した窓に出す価値があります。印が1つなら、ブラウザの機能で足ります。道具を比べるのは、この印の数を数えたあとで十分です。

よくある質問

Fluidで作ったアプリは、普通のMacアプリと同じものですか?

形式としては同じ拡張子のアプリで、Dockにも並びます。ただし中身は同梱された雛形の複製で、ページの描画はmacOS本体のWebKitが担当します。ネイティブに書き起こされたアプリとは成り立ちが違い、対応CPUや必要なmacOSのバージョンも雛形のまま引き継がれます。

作ったアプリの中でリンクを踏むと外のブラウザが開くのはなぜですか?

アプリごとに「担当するURLの一覧」を持っていて、その範囲外のリンクは既定のブラウザに渡す設計だからです。範囲は設定で足せます。ログインだけ別ドメインに飛ぶサービスでは、認証用のドメインも一覧に加えておく必要があります。

日本語で使えますか?

配布ファイルに入っている言語資源は英語だけで、メニューや設定画面は英語表示になります。表示するWebページ自体は日本語のままなので、日々の利用で困る場面は限られますが、設定項目の意味を英語で読む必要はあります。

最終更新はいつですか?

公開されている配布版は2.1.2で、アプリ内の更新確認が参照する配信ファイルの最終更新日は2018年10月19日です。更新確認の仕組み自体は現在も応答するため、実行すると最新版である旨が返ってきます。

記事一覧へ戻る