LeedyBox の仕組み
LeedyBox がブラウザ内で画像、PDF ファイル、データ、テキストを処理する方法、ツールが使うライブラリとブラウザ機能、そしてページで引き続きネットワークを使う部分について説明します。
ブラウザ内でのファイル処理
LeedyBox のツールは、ウェブブラウザ内で JavaScript として動作します。ファイルを選んだりテキストを入力したりすると、ブラウザが端末上でそれを読み込み、処理はお使いのパソコンやスマートフォン上で行われます。処理のためにファイルやテキストを LeedyBox のサーバーへアップロードすることはありません。多くのツールは標準的なブラウザ機能を使います。画像には Canvas API、ハッシュ・パスワード・UUID には Web Crypto API、単語数のカウントには Intl.Segmenter、タイムゾーンには Intl の日付 API を使います。PDF テキスト抽出と画像からテキスト抽出(OCR)で行う OCR には、ブラウザ内で WebAssembly のコードを実行する Tesseract.js を使います。
ファイルはどう扱われますか?
- 端末からファイルを選ぶかドラッグ&ドロップするか、ツールにテキストを入力または貼り付けます。
- ブラウザが現在のページのメモリにファイルを読み込みます。
- ツールが、端末上で動く JavaScript ライブラリでファイルを変換、編集、結合、分割、または読み取ります。
- 結果はブラウザ内で作成され、ページに表示されるか、ダウンロードとして提供されます。かかる時間は入力内容と端末によって異なります。
- コピーボタンは、クリックしたときにだけ結果をクリップボードに書き込みます。
- ページを閉じるか再読み込みすると、そのページのメモリにあるファイル、テキスト、生成された値は破棄されます。
各ツールが使うライブラリ
一部のツールはオープンソースライブラリを基に作られており、ほかのツールは LeedyBox 独自のスクリプトとブラウザに組み込まれた機能だけを使います。すべてのライブラリと、それが必要とするデータ(フォントの対応表、OCR の言語データ、モデル)は、バージョンを固定して leedybox.com 自体から配信しており、ツールのページが公開のコンテンツ配信ネットワーク(CDN)からコードを読み込むことはありません。リクエストするのはライブラリのコードとデータだけで、処理するファイルやテキストがそのリクエストに含まれることはありません。
| ツール | ライブラリ | 読み込み元 |
|---|---|---|
| 画像変換 | ブラウザの Canvas API、LeedyBox の BMP/ICO エンコーダー、JSZip(一括ダウンロード用) | leedybox.com |
| 画像リサイズ、画像の回転・反転 | ブラウザの Canvas API、JSZip(一括ダウンロード用) | leedybox.com |
| 画像トリミング | ブラウザの Canvas API(サードパーティのライブラリなし) | leedybox.com |
| 画像圧縮 | ブラウザの Canvas API、UPNG.js 2.1.0 と pako 1.0.11(MIT ライセンス、PNG の減色)、JSZip(一括ダウンロード用) | leedybox.com |
| EXIF情報の削除 | LeedyBox のメタデータ読み取り・削除スクリプト(画像データは再エンコードせずにコピー)、JSZip(一括ダウンロード用) | leedybox.com |
| 画像からテキスト抽出(OCR) | Tesseract.js(OCR エンジンと言語データ) | leedybox.com |
| ファビコン生成 | ブラウザの Canvas API、LeedyBox の ICO エンコーダー、JSZip(ZIP パッケージ用) | leedybox.com |
| 証明写真作成 | MediaPipe Tasks Vision 0.10.35(Apache License 2.0)と Face Landmarker、Selfie Segmenter モデル、ブラウザの Canvas API | leedybox.com(自己ホスト) |
| QRコード・バーコード生成 | qrcode-generator 1.4.4、JsBarcode 3.11.6(MIT ライセンス) | leedybox.com(自己ホスト) |
| PDF を JPG に変換 | PDF.js、JSZip | leedybox.com |
| JPG を PDF に変換 | jsPDF、SortableJS | leedybox.com |
| PDF テキスト抽出 | PDF.js、Tesseract.js(OCR エンジンと言語データ) | leedybox.com |
| PDF 結合、分割、圧縮 | PDF.js、pdf-lib、JSZip(PDF 分割) | leedybox.com |
| PDFページ整理、PDF回転 | PDF.js(ページのサムネイル)、pdf-lib、SortableJS(PDFページ整理) | leedybox.com |
| PDFに透かしを追加、PDFにページ番号を追加 | PDF.js(プレビュー)、pdf-lib。標準の PDF フォントで表示できない文字体系のテキストは、端末のフォントで描画して画像として追加します | leedybox.com |
| データ変換 | js-yaml、PapaParse、LeedyBox のデータツール用スクリプト | leedybox.com |
| Base64 / URL / JWT、Cron 解析、正規表現テスター | LeedyBox のデータツール用スクリプトとブラウザの組み込み機能(サードパーティのライブラリなし) | leedybox.com |
| ハッシュ生成 | MD5 はページ独自のスクリプト、SHA-1・SHA-256・SHA-384・SHA-512・HMAC はブラウザの Web Crypto API | leedybox.com |
| パスワード・UUID生成 | Web Crypto API(crypto.getRandomValues、crypto.randomUUID) |
leedybox.com |
| Unixタイムスタンプ変換 | ブラウザの Intl 日付・タイムゾーン API と BigInt(サードパーティのライブラリなし) |
leedybox.com |
| DNI・NIE・NIFチェック, TC Kimlik番号チェック, INN・SNILSチェック, ブラジルCPF・CNPJチェッカー, IBANチェッカー, イタリアのコーディチェ・フィスカーレ計算 | LeedyBoxの番号検証モジュール(サードパーティのライブラリなし)、テスト用番号はブラウザの crypto.getRandomValues、IBANの国別形式はSWIFTのIBAN登録簿によるもの(LeedyBoxが配信するデータファイル)、コーディチェ・フィスカーレの地名コードはイタリア内務省ANPRの表によるデータファイル(そのツールで必要なときだけ読み込み) |
leedybox.com |
| 文字数・単語数カウンター | ブラウザの Intl.Segmenter |
leedybox.com |
| ケース変換、テキスト比較、Lorem Ipsum 生成 | LeedyBox のデータツール用スクリプト(サードパーティのライブラリなし) | leedybox.com |
| 漢数字・大字変換 | LeedyBoxの金額変換モジュール(外部ライブラリなし)、ブラウザのIntl.NumberFormat・Intl.DisplayNames |
leedybox.com |
| 全角・半角変換 | LeedyBox のテキスト変換モジュール(外部ライブラリなし)、ブラウザのString.prototype.normalize() |
leedybox.com |
| ベトナム語の声調記号除去 | LeedyBox のテキスト変換モジュール(外部ライブラリなし)、ブラウザのString.prototype.normalize() |
leedybox.com |
| スラッグ生成 | LeedyBox のテキスト変換モジュール(外部ライブラリなし)、ブラウザのString.prototype.normalize() |
leedybox.com |
| 韓国人名のローマ字表記 | LeedyBox のテキスト変換モジュール(外部ライブラリなし) | leedybox.com |
| キリル文字→ラテン文字 | LeedyBox のテキスト変換モジュール(外部ライブラリなし) | leedybox.com |
| 簡体字・繁体字 変換 | opencc-js 1.4.2(MIT ライセンス)と OpenCC の辞書(Apache License 2.0) | leedybox.com |
| 音声の文字起こし | Transformers.js 4.3.1(Apache License 2.0)、ONNX Runtime Web(MIT ライセンス)、Whisper の base・small・large-v3-turbo モデル(MIT ライセンス) | leedybox.com |
| 和暦西暦変換 | LeedyBoxの日付モジュール(外部ライブラリなし)。日付の表示にはブラウザのIntl日付書式を使用 | leedybox.com |
| タイ仏暦・西暦変換 | LeedyBoxの日付モジュール(外部ライブラリなし)。日付の表示にはブラウザのIntl日付書式を使用 | leedybox.com |
| 旧暦・新暦変換(韓国・中国・ベトナム) | LeedyBoxの日付モジュールと、韓国天文研究院・香港天文台のデータによる旧暦の表(外部ライブラリなし)。日付の表示にはブラウザのIntl日付書式を使用 | leedybox.com |
| 韓国の満年齢計算 | LeedyBoxの日付モジュールと、韓国天文研究院のデータによる旧暦の表(外部ライブラリなし)。日付と単位の表示にはブラウザのIntl書式を使用 | leedybox.com |
| 消費税計算 | LeedyBoxの消費税モジュール(サードパーティーのライブラリなし)。正確な計算にブラウザーのBigInt、金額と通貨の表示にIntl.NumberFormatを使用。税率表(vat-rates.json、約35 KB)はページを開いたときに読み込み | leedybox.com |
| パーセント計算 | LeedyBox計算モジュール(外部ライブラリなし)。数値・通貨・日付はブラウザのIntlで表示 | leedybox.com |
| ローン返済シミュレーション | LeedyBox計算モジュール(外部ライブラリなし)。数値・通貨・日付はブラウザのIntlで表示 | leedybox.com |
| 複利計算 | LeedyBox計算モジュール(外部ライブラリなし)。数値・通貨・日付はブラウザのIntlで表示 | leedybox.com |
| BMI計算 | LeedyBox計算モジュール(外部ライブラリなし)。基準表(bmi-standards.json、約7KB)をページを開いたときに読み込み | leedybox.com |
| 基礎代謝・消費カロリー計算 | LeedyBox計算モジュール(外部ライブラリなし)。計算式(energy-equations.json、約8KB)をページを開いたときに読み込み | leedybox.com |
| 年齢計算 | LeedyBox計算モジュール(外部ライブラリなし)。数値・通貨・日付はブラウザのIntlで表示 | leedybox.com |
ツールのページは、スタイルのために Tailwind CSS のスクリプト(バージョン 3.4.17)も leedybox.com から読み込みます。ライブラリのライセンス文は LICENSES.txt にあります。
ローカル処理が大切な理由
端末上で処理すれば、ファイルを変換サーバーへ送って順番待ちをする必要がなく、LeedyBox がファイルのコピーを受け取ることもありません。その一方で、結果はお使いの端末に左右されます。メモリに余裕のあるパソコンは、古いスマートフォンより大きなファイルを扱えます。
ブラウザの制限
処理は端末のリソースに依存するため、性能は空きメモリ、ブラウザの機能、CPU の速度、ファイルの複雑さによって変わります。非常に大きなファイルや複雑なファイルには、より多くのメモリと時間が必要です。タブのメモリが不足するとブラウザがページを停止することがあり、作業を小さなファイルに分けると改善することがよくあります。出力形式によっては、ブラウザがエンコードできるかどうかにも左右されます。
プライバシーとネットワークリクエスト
ローカル処理によってファイルは端末内にとどまりますが、ウェブページ自体は引き続きネットワークを使います。ページは自身の HTML、スタイル、スクリプトと上記のライブラリをすべて leedybox.com から読み込み、Google Analytics と Google AdSense も読み込みます。この 2 つが Cookie を保存するのは、Cookie に同意した場合だけです。サイトをホストしている Cloudflare も、ページの表示速度を計測しています(Cloudflare Web Analytics、Cookie は使いません)。これらのリクエストに、処理するファイルやテキストの内容、生成したパスワード、UUID、ハッシュ、コードが含まれることはありません。
PDF テキスト抽出と画像からテキスト抽出(OCR)は、初めて必要になったときに OCR エンジンと言語データを leedybox.com からダウンロードします。Tesseract.js はダウンロードした言語データをブラウザの IndexedDB ストレージに保存し、再びダウンロードしなくて済むようにします。このデータは、ブラウザでこのサイトのデータを消去すると削除できます。
証明写真作成は、最初の写真を選んだときに MediaPipe ライブラリ、その WebAssembly ランタイム、顔検出モデルを leedybox.com からダウンロードします。転送量は約7MB(展開後は約15MB)で、背景を置き換えるときだけ小さなモデル(0.25MB)を追加でダウンロードします。これらはブラウザの通常のキャッシュにだけ残り、写真はどこにも送信されません。
簡体字・繁体字 変換は、使い始めたときに opencc-js と選んだ変換の辞書を leedybox.com からダウンロードします。繁体字→簡体字は最大約100KB、簡体字→繁体字は約1.1MBです。入力した文章はどこにも送信されません。
音声の文字起こしは、最初の文字起こしを始めたときに Transformers.js、ONNX Runtime の WebAssembly エンジン、選んだ Whisper モデルを leedybox.com からダウンロードします。base は約 90 MB、small は約 250 MB、WebGPU でグラフィックス処理装置を使う large-v3-turbo は約 750 MB です。これらは再びダウンロードしなくて済むようブラウザの Cache Storage に保存され、ツールでサイズを確認して削除できます。モデルを動かす部分はほかのサイトに接続できないよう制限されており、録音はどこにも送信されません。
関連: プライバシーポリシーを読む · Cookieポリシーを読む
よくある質問
ローカル処理なら、データはどこにも送られないのですか?
処理のためにファイルやテキストを LeedyBox にアップロードすることはありません。ただし、ページは通常のウェブリクエストを行います。自身のファイルと必要なライブラリを leedybox.com からダウンロードし、Google Analytics と AdSense へのリクエストを送り(Cookie を保存できるかどうかは同意の選択で決まります)、Cloudflare がページの読み込み時間を計測します。これらのリクエストにファイルやテキストの内容は含まれません。
同じ PDF でも端末によって動作が違うのはなぜですか?
クライアント側の処理は、端末の空きメモリ、ブラウザの描画エンジン、CPU の速度、インストールされているシステムフォントに依存します。ハードウェアやブラウザのバージョンの違いによって処理速度が変わり、まれにページの描画結果が変わることもあります。
オフラインでも使えますか?
確実には使えません。まずページとライブラリをダウンロードする必要があり、PDF テキスト抽出と画像からテキスト抽出(OCR)は、初めて必要になったときに OCR の言語データをダウンロードします。