ToolActToolAct

ファイル一括リネームツール

プレフィックス・サフィックス追加、連番、検索&置換、大文字小文字変換、拡張子変更 — すべてブラウザ内で完結

ファイルを追加

ファイルをここにドロップ、または下のボタンをクリック

あらゆるファイル形式・数量に対応、ブラウザ内でのみ処理 — アップロードは一切なし

ファイル一括リネームとは?

ファイル一括リネームとは、一連のルールに従って一群のファイル名を一度にまとめて変更する操作のことです。よくある場面としては、IMG_1234.JPG のようなカメラの吐き出しを 2026-06-trip-001.jpg に変えたり、UI のエクスポート素材に @2x_ のプレフィックスを付けたり、スキャンした領収書を請求日順に連番化したりといったものがあります。macOS Finder の標準リネーム機能は検索&置換と「名前+カウンタ」形式に対応していますが、拡張子の書き換えはできません。Windows エクスプローラーのタブリネームは単純な連番しか扱えず、PowerToys PowerRename を別途インストールすれば正規表現が追加できる程度です。これより複雑な処理は通常、ReNamer や Bulk Rename Utility といったデスクトップアプリ、あるいは PowerShell やシェルスクリプトに頼ることになります。本ツールはこれらの操作 — プレフィックス/サフィックス、連番、検索&置換、大文字小文字、拡張子 — をビジュアルなコントロールに分解し、リアルタイムプレビューと重複検出を備えているため、ダウンロード前に結果を確認できます。すべての処理はブラウザのメモリ内で完結するため、プロジェクトコード、クライアント名、個人情報を含むファイル名がユーザーのマシンから外に出ることはありません。

使い方

手順

  1. ファイルをアップロードエリアにドロップするか、「ファイルを選択」をクリックして追加します — 何度追加してもリストに追記されます
  2. 「名前で並び替え/サイズで並び替え」で並び順を変更するか、各行の上下矢印で細かく調整します
  3. 3 つのカードでルールを設定します:プレフィックス/サフィックス、検索&置換、連番、大文字小文字、拡張子
  4. 「新しいファイル名」列はリアルタイムで更新されます — 青色は元の名前と異なることを示し、赤色は他のファイルと衝突していることを示します
  5. 「このファイルをダウンロード」で個別に保存するか、「ZIPでダウンロード」で一括取得します

ルールの適用順序

  • 最初にベース名を置き換えます(空欄のままにすれば元の名前を保持)— 元の名前にかかわらず、すべてのファイルを「photo」+連番のような形にしたいときに便利です
  • 次に検索/置換がベース名のみに対して実行され、拡張子には触れません
  • 続いて連番が挿入され、プレフィックス、サフィックス、またはベース名の完全置換として配置されます
  • プレフィックスとサフィックスが結果を包みます
  • 最後に大文字小文字変換と拡張子処理が適用されます。拡張子は独立して処理されます

利用シーン

カメラ/スマートフォンの写真整理DSC_0001.JPG や IMG_1234.JPG といったカメラのデフォルト名には意味のある情報がありません。日付やテーマのプレフィックスと連番を付けることで、アルバムが一目で判別できるようになります。拡張子を小文字に統一しておけば、JPG と jpg が混在することによる問題を防げます — 大文字小文字を区別しない Windows/macOS から区別する Linux に同期したとき、JPG と jpg が別ファイルとして扱われて壊れるのを回避できます。
iOS 素材の命名デザイナーから書き出された「icon-home @2x.png」のようなファイルは、「icon-home@2x.png」へ一括変換することで Xcode の Asset Catalog の命名規則に合致します。検索&置換でスペースを除去してから小文字化することで、本番環境での大文字小文字の違いによるロード失敗を回避できます。
Android drawable 名の正規化Android はリソース名がすべて小文字の snake_case で、先頭に数字を含まないことを要求します。IcHomeActive.png や ic-home-active.png のような大小文字混在の書き出しは、`-` を `_` に置換し、ベース名を小文字化、拡張子を小文字化することで、一括で ic_home_active.png に変換できます。ビルド時の lint エラーを未然に防げます。
領収書/契約書の月次アーカイブscan001.pdf〜scan100.pdf のようなスキャンファイルにはアーカイブ用の文脈情報がありません。ベース名を「2026-06-receipts-」、3 桁ゼロ埋めの連番を設定すれば「2026-06-receipts-001.pdf」が得られます。ファイル名でソートすれば日付順ソートと同等になり、月単位で 1 つの ZIP にまとめられます。
編集用メディアクリップの標準化編集者は GoPro の GH010001.MP4 を SceneA_take01.mp4 のようにシーンごとに命名し直す必要があることがよくあります。ベース名フィールドで元の名前を消し、連番を有効化し、拡張子を小文字化すれば、NLE のアルファベット順で一括が並び、マルチカム同期が容易になります。
ファイル名から機密情報や冗長な部分を除去書き出されたファイルには (1)、(copy)、_final_v2_FINAL のようなサフィックスが付くことがよくあります。検索&置換で一気にきれいにできます。クライアントやプロジェクトコードを含むファイルは、外部共有前に匿名コードへ一括変換できます。すべての処理はブラウザのメモリ内で行われ、元のファイルがデバイスから外に出ることはありません。
Web 用静的素材の正規化CDN やオブジェクトストレージにアップロードする前に、スペース、非 ASCII 文字、大文字を正規化することで、URL エンコードの落とし穴を回避できます。スペースをハイフンに置換し、ベース名を小文字化、拡張子を小文字化すれば、SEO に優しく、クロスシステムで安全な素材名が一発で得られます。

動作原理

本ツール全体はブラウザの File API、Blob、URL.createObjectURL の上で動作し、すべてのバイトはメモリ内に留まります。ファイルをドロップまたは選択すると、ブラウザは JS ヒープ上の File オブジェクト(Blob のサブクラス)を JavaScript に渡します。本ツールはリネーム用に各ファイルの `name` プロパティのみを読み取り、バイナリ内容には一切触れません。 ルールは干渉を避けるため固定の順序で適用されます:まずベース名が決定され(ユーザー指定または元のベース名)、拡張子は lastIndexOf('.') で分割されます(.gitignore のようなドットファイルは拡張子なしのベース名のみとして扱われます)。次に検索/置換が String.prototype.split + Array.prototype.join として実行されます(正規表現は使わず、特殊文字の意図しないマッチを回避します)。続いて連番が `String(start + i).padStart(pad, '0')` で計算され、ベース名のプレフィックス/サフィックス/置換として配置されます。プレフィックスとサフィックスが結果を包み、大文字小文字変換は結合後のプレフィックス+ベース名+サフィックス文字列全体に対して一度に適用されます。拡張子は独立して処理されます(保持/大文字化/小文字化/置換)。 重複検出はプレビュー時に各新しい名前を Map<string, number> でカウントし、複数回出現する名前は duplicateSet に入り、UI で赤色にハイライトされます。duplicateSet が空でない状態で「ZIPでダウンロード」をクリックするとエラートーストが表示されてパッケージングは中止されますが、元のファイルリストは保持されるため、ルールを調整してすぐに再試行できます。この処理は useMemo([files, opts]) 内で実行されるため、ルール編集はインクリメンタルに再計算され、ファイルリストの再レンダリングは発生しません。 単一ファイルダウンロードは File を URL.createObjectURL でラップし、合成された `<a download>` クリックをトリガーし、即座に URL を revoke します。ZIP パッケージングは初回クリック時に JSZip を動的インポートし(約 80 KB、初回描画コストなし)、各ファイルの arrayBuffer() を読み取り、新しい名前で書き込み、generateAsync({type:'blob', compression:'DEFLATE', compressionOptions:{level:6}}) を呼び出します。DEFLATE は ZIP のデフォルトであり、レベル 6 は圧縮率と速度のバランスポイントです。 ルールの計算量はファイル数に対して O(n) であり、パッケージング時間は総バイト数に比例します。ブラウザは通常、File の中身を遅延読み込みします — arrayBuffer() を呼び出して初めてバイトがディスクから読み出されるため、数千ファイルをキューイングしてもプレビュー時はほぼコストがかからず、メモリのピークは「ZIPでダウンロード」時のみとなります。

  • lastIndexOf('.') で拡張子を分割します。ドットがインデックス 0(例:.gitignore)にしかない場合、そのファイルには拡張子がなく、先頭のドットはベース名に残ります
  • 検索&置換は replaceAll の代わりに String.prototype.split + Array.prototype.join を使用し、置換文字列内の $1/$& が誤って解釈されるのを回避します
  • padStart(pad, '0') でゼロ埋め番号を生成します。pad=0 の場合は素の数字を出力し、桁揃えが不要なケースに対応します
  • 大文字小文字変換はプレフィックスとサフィックスが結合された後に実行されるため、ベース部分全体を一度に正規化します。拡張子は独立して処理されます
  • 重複検出は useMemo 内で Map を使って実行されます。再計算は O(n) で、UI はハイライト行の className を入れ替えるだけで DOM の再構築は行いません
  • Blob URL は URL.revokeObjectURL で即座に revoke され、URL の割り当てプールを解放します。多用するとオブジェクト URL の予約がすぐに溜まってしまうためです
  • JSZip はパッケージングがトリガーされたときにのみ動的インポートで読み込まれるため、約 80 KB のコードは初回描画や LCP に影響しません
  • DEFLATE レベル 6 はブラウザ側のスイートスポットです。レベル 9 は 1〜2% の圧縮率向上のために 2〜3 倍の時間がかかり、すでに圧縮済みの画像/動画にはほとんど効果がありません

使用例

プレフィックス + 3 桁ゼロ埋め連番

入力: photo.jpg, sunset.jpg, beach.jpg
ルール: prefix=trip2026_, start=1, pad=3, position=after
出力:
trip2026_photo001.jpg
trip2026_sunset002.jpg
trip2026_beach003.jpg

ベース名を完全に置き換え

入力: GH010001.MP4, GH010002.MP4, GH010003.MP4
ルール: base=SceneA_take, start=1, pad=2, position=after, ext=lowercase
出力:
SceneA_take01.mp4
SceneA_take02.mp4
SceneA_take03.mp4

検索/置換で冗長なサフィックスを除去

入力: report_v1_FINAL.docx, summary_v1_FINAL.docx
ルール: find=_v1_FINAL, replace=(空), case=lowercase
出力:
report.docx
summary.docx

拡張子を置き換え

入力: index.htm, about.htm, contact.htm
ルール: extension=replace, new ext=html
出力:
index.html
about.html
contact.html

プレフィックス + スペースをハイフンに + 小文字化

入力: Banner Image.PNG, Hero Photo.JPG
ルール: prefix=web-, find=(スペース), replace=-, case=lowercase, extension=lowercase
出力:
web-banner-image.png
web-hero-photo.jpg

よくある質問

ファイルはサーバーにアップロードされますか?

いいえ。ファイル追加から新しい名前の生成、ZIP パッケージングまで、すべてブラウザ内でローカルに実行されます。アップロードリクエストは一切発生しません。ブラウザの DevTools の Network パネルで確認できます。

なぜ .gitignore や .bashrc は拡張子付きとして扱われないのですか?

本ツールは最後のドットで分割しますが、ドットが先頭にしかない場合(ドットファイル)、名前全体がベース名として扱われます — これは隠しファイルマーカーを拡張子と誤認するのを避けるためです。

新しい名前が衝突した場合どうなりますか?

プレビューリストでは重複が赤色でハイライトされ、件数バッジが表示されます。重複がある状態で「ZIPでダウンロード」をクリックするとエラーメッセージが表示されてパッケージングは中止されます — ただしファイルリストは失われないため、ルールを調整してすぐに再試行できます。よくある対処法:連番を有効化する、ゼロ埋め桁数を増やす、プレフィックス/サフィックスを追加する。

フォルダのリネームやネスト構造の保持はできますか?

現時点では非対応です。現バージョンはフラットなファイルリストのみを扱います。ディレクトリを意識した一括リネームを行う場合は、ここでファイル名を変更したあと、ZIPパッケージ圧縮ツールでディレクトリツリーを組み立ててください。

検索&置換は正規表現に対応していますか?

いいえ。意図的にリテラル文字列マッチング(split-join)を採用しているため、ユーザーが置換文字列に $1 や $& といった置換文字列の特殊トークンを誤ってトリガーすることはありません。プレーンマッチングで大半のクリーンアップ用途はカバーできます。

何ファイルまで処理できますか?

件数自体に明確な上限はありません — プレビューは実質ノーコストです。パッケージングはブラウザのメモリに制限されます。合計サイズが非常に大きい場合(数 GB 規模)、単一の Blob の確保に失敗することがあります。その場合はファイルをバッチに分割し、それぞれを個別にパッケージングしてください。

ダウンロードした ZIP で非 ASCII の名前が文字化けします。なぜですか?

JSZip はデフォルトで UTF-8 ファイル名を書き込み、最近の解凍ツール(macOS のアーカイブユーティリティ、Windows 11 のエクスプローラー、7-Zip、WinRAR 5+)は正しく読み取れます。Windows 7/8 の古いエクスプローラーでは非ラテン文字の名前を誤デコードすることがあります — その場合は 7-Zip や Bandizip を使用してください。

間違えてリネームした場合、元に戻せますか?

リネームはダウンロード時にのみ実行されます — 「ZIPでダウンロード」または「このファイルをダウンロード」をクリックするまで、ディスク上の元のファイルには一切手が加えられません。プレビューは完全に元に戻せます。ルールをクリアしたり、編集したり、リストから個別のファイルを削除したりできます。すでにダウンロード済みの場合は、ルールを調整して、同じソースファイルでもう一度ダウンロードしてください。