7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

上司が後ろを通っても安心?「終わらないインストール画面」を生成するブラウザ拡張機能を作ってみた

7
Posted at

はじめに

ビルド待ちやデプロイ待ちの時間、しょうがないですよね。
たとえ暇そうにしている人がいても、インストール中の画面が見えたら「なんか何もしてないけど、インストール作業してるし…」と思ってそっとしますよね。
そんな感じを演出するために、Infinity Loaderというブラウザ拡張機能を作りました。

この記事では、ジョークアプリとして作り込みつつも、真面目に取り組んだ技術的な知見(ターミナルシミュレーション、ランダム故障、多言語対応など)について共有します。

Infinity Loaderとは

一言で言うと、「無限に続くフェイクのインストール作業してる風画面」を表示するブラウザ拡張機能です。

Infinity Loader - 個人 - Microsoft_ Edge 2026-01-04 22-55-15.gif

  • それっぽいコマンド(npm install, docker pullなど)が流れる

  • プログレスバーが99%で止まる、あるいは突然エラーを吐く
    Infinity Loader - 個人 - Microsoft_ Edge 2026-01-04 22-48-02 (1).gif

  • 「Doors OS」という謎のパロディOS上で動作する

ジョークソフトですが、見た目の「本物感」にはこだわりました。

技術スタック

  • Frontend: React + Vite + TypeScript
  • Styling: Vanilla CSS (Terminalデザイン)
  • i18n: Chrome extension i18n API (_locales)

工夫した点と技術的Tips

1. ターミナルの「本物感」を出すロジック

単にテキストを流すだけでは面白くありません。以下の3つを組み合わせて「待たされている感」を演出しています。

  • タイピング演出: コマンド入力を1文字ずつ表示。
  • 非線形プログレスバー: 進捗が一定ではなく、80%くらいから急激に遅くなったり、99%で一時停止したりする「あるある」を実装しました。
  • ランダム故障シミュレーター: 稀に「Kernel Panic」などの派手なエラーログが表示され、自動修復される機能を入れました。(Ctrl + e で手動でエラーを出せます。)
// 進捗を遅くするロジックの抜粋
const increment = progress < 80 
    ? getRandomInt(1, 10) 
    : progress < 95 
        ? getRandomInt(0, 2) 
        : getRandomInt(0, 1); // 95%以降は牛歩

2. Chrome Extension標準のi18nへの移行

当初はReact内で簡易的な翻訳オブジェクトを持っていましたが、Chrome Web Storeで多言語向けに公開するにあたり、
https://developer.chrome.com/docs/extensions/reference/api/i18n#concepts_and_usage
に記載してある方法で多言語化が必要だったため、chrome.i18n API(_locales フォルダを使用する方式)に移行しました。(いつも忘れる)

Vite環境でこれを扱う際、public/_locales にファイルを置く必要があります。また、React側から呼び出すためにシンプルなラッパーを作成しました。

const getMsg = (key: string) => {
    if (typeof chrome !== 'undefined' && chrome.i18n) {
        return chrome.i18n.getMessage(key) || key;
    }
    return key;
}

3. パロディデータの自動生成

npm install {pkg}{pkg} 部分に、react-fake, typescript-lighting, fs-extra-cheese といった実在しそうで絶妙に違うパロディ名を大量に用意し、ランダムで組み合わせています。

おわりに

「役に立たないものを全力で作る」っていいですよね。

でも、役に立つはずと思って作成したアプリ・拡張機能もあるので、見て気になるものはインストールしていただけると嬉しいです。
https://t-okb-dev.github.io/

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?