この店に並んでる道具、端末間でメモを中継するDevice Bridgeなど一部の通信ツールを除いて、その多くが「ブラウザの中だけで処理が完結する(クライアントサイド動作)」タイプです。インストールも登録も要らず、開いてすぐ使える手軽さは自分でも気に入っているポイントなんですが、作ってる本人としては「これ、万能じゃないよな」というのも同じくらい実感しています。せっかくなので、こうしたブラウザ完結型ツールの裏事情を正直に書いておきます。
良い点:データをどこにも送らない(クライアント完結型の場合)
ブラウザ完結型の道具は、入力したデータをサーバーに送る必要がありません。例えばSPLIT TIMERに打ち込んだタイマーの名前も、モールス変換ツールに貼った文章も、全部その場のブラウザの中だけで処理されて、外部のサーバーには一切送信されません。
「入力した内容が勝手にどこかのサーバーへ保存されてるんじゃないか」と不安にならなくていいのは、地味だけど結構大事な安心材料だと思っています。(※端末間でのデータ受け渡しを目的としたDevice Bridge等では、利便性と安全性を考慮して暗号化・72時間自動削除のDBサーバーを介していますが、それ以外の単機能ツールの多くは通信を行わない設計に徹しています)
限界:重い処理と、消える入力内容
まず重い処理はそもそも無理です。端末の性能に丸ごと依存しますし、タブを閉じた瞬間に全部終了します。次に、サーバーにデータを保存しないブラウザ完結型の道具は、裏を返せば「リロードしたら入力内容が全部消える」ということでもあって、継続的にデータを扱いたい用途にはそもそも向いていません。
そうした道具については何度か「保存機能をつけてほしい」という要望をいただいたこともあるんですが、ブラウザ完結という手軽さ重視の設計思想上、そこはあえて踏み込まないようにしています(すみません)。端末をまたいでメモを一時保持したい用途には、別のアプローチとしてDevice Bridgeのような道具を用意して棲み分けを図っています。
あとはSPLIT TIMERの開発記でも書いた話ですが、タブが裏に回ったり画面がスリープしたりすると、ブラウザの省電力機能で処理が間引かれます。ずっと画面を表示していないといけないというのは、ネイティブアプリに慣れてる人からすると地味に不便に感じる部分だと思います。
Service Workerを使ってPWA化すれば、オフライン表示やホーム画面への追加ぐらいはできます。それでも、バックグラウンドでの継続処理や確実な通知配信までは、正直まだネイティブアプリの足元にも及びません。
ブラウザに保存する技術はあるけれど、なぜ使っていないのか
「サーバーを使わなくても、ブラウザ側にデータを保存する仕組み(Web Storageなど)があるんだから、それを使えば保存機能ができるのでは?」と思われるかもしれません。実際、ブラウザにはデータを手軽に扱える仕組みがいくつか用意されています。
- ローカルストレージ(localStorage):ブラウザを閉じてもデータが消えずに残り続ける仕組み。容量も約5MBとそこそこあり、ユーザーの設定やテーマ(ダークモード等)を次回以降も引き継ぎたい場合に向いています。
- セッションストレージ(sessionStorage):タブやウィンドウを閉じると自動的にデータが消える仕組み。そのタブを開いている間だけ有効なので、作業中の一時的なデータ保護や、誤ってリロードした際の入力復元に向いています。
- Cookie(クッキー):容量は約4KBと小さく、サーバーとやり取りする際に自動送信される仕組み。ログイン認証などのセッション管理向けで、純粋なブラウザ完結の保存にはあまり向いていません。
- IndexedDB:ブラウザ内に大量の構造化データを保存できる本格的なデータベース。オフライン対応や複雑なデータを扱うアプリに向いています。
これだけ便利な選択肢があるのに、なぜ赤猫座の道具で積極的に使っていないのかというと、「いつでもまっさらな状態で、誰でも気兼ねなく使い捨てられる手軽さ」を一番大事にしているからです。
ブラウザ内に過去の作業データや入力履歴が中途半端に残っていると、「前回の内容が残っていて紛らわしい」「学校や職場の共用PCで作業内容が残ってしまう」「ストレージの古いデータが原因で思わぬ不具合が起きる」といった別の問題を生むことがあります。「使ったあとは足跡が一切残らず、立ち去れば何事もなかったように終わる」というプライバシーと手軽さの心地よさを優先して、現状はあえて保存しない設計に倒しています(半分は、ストレージ管理や削除UIの実装を増やしたくないという作者都合の言い訳でもありますが…)。
とはいえ、「文字サイズや配色の好みを記憶させておく(localStorage)」や「うっかりリロードしたときだけ入力を戻せるようにする(sessionStorage)」といった、ユーザーの利便性を純粋に高める使い方であれば話は別です。作業データそのものは残さずクリーンに保つ原則を守りつつ、そうした「道具をより使いやすくするための補助」としてストレージを活用することは、今後のアップデートでも前向きに検討していきたいなと思っています。
| できること(ブラウザ完結型) | できないこと |
|---|---|
| データを外部に送らずに処理 | 重い処理・大量データの計算 |
| インストールなしですぐ使える | 入力内容の永続的な保存 |
| PWA化でオフライン表示 | 確実なバックグラウンド通知 |
手軽さと引き換えに何を諦めているのか、というのは作る側としても使う側としても、頭の片隅に置いておいて損はないと思います。かくいう自分も、便利さに慣れて「あれ、なんでこれ動かないんだっけ」と一瞬パニックになることがあるので、人のことは言えません。
