プログラミングやテキスト編集をしていて、こんな場面に遭遇したことはありませんか?
「変数名を変更したけど、プロジェクト全体で同じ名前を使っている箇所がたくさんある」
「APIのエンドポイントURLが変わったので、全ファイルで一括変更したい」
「コメントの誤字を全て修正したい」
こうした作業を手動で行うと、時間がかかるだけでなく、修正漏れのリスクもあります。
VS Codeの一括置換機能を使えば、これらの作業を安全かつ効率的に実行できます。
この記事では、VS Codeで一括置換を行う方法を基本から応用まで、初心者にもわかりやすく解説します。
一括置換の基本概念

一括置換とは
一括置換は、指定した文字列パターンに一致するすべての箇所を、別の文字列に同時に変更する機能です。
一括置換の利点
効率性の向上
- 手動修正に比べて圧倒的に高速
- 数百、数千箇所の変更も一瞬で完了
- 作業時間の大幅短縮
正確性の確保
- 人的ミスによる修正漏れを防止
- 一貫した変更の適用
- 変更履歴の明確な記録
開発生産性の向上
- リファクタリング作業の効率化
- 仕様変更への迅速な対応
- コードの保守性向上
VS Codeの置換機能の種類
1. ファイル内置換
- 現在開いているファイル内のみで置換
- 小規模な修正に適している
- リアルタイムプレビューが可能
2. プロジェクト全体置換
- ワークスペース内の全ファイルを対象
- 大規模なリファクタリングに適している
- ファイル種別やディレクトリでの絞り込み可能
3. 選択範囲置換
- 選択したテキスト範囲内のみで置換
- 部分的な修正に適している
- 慎重な変更作業に有効
ファイル内一括置換の方法

基本的な置換手順
ショートカットキーでの起動
Windows/Linux:
Ctrl + H
macOS:
Cmd + Option + F
置換パネルの構成
置換パネルが表示されると、以下の要素が確認できます:
- 検索フィールド: 置換対象の文字列を入力
- 置換フィールド: 置換後の文字列を入力
- オプションボタン: 大文字小文字の区別、完全一致、正規表現など
- 置換ボタン: 個別置換、一括置換の実行
実践的な置換例
例1: 変数名の変更
// 置換前
let userName = 'Alice';
console.log(userName);
if (userName === 'Alice') {
alert('Hello, ' + userName);
}
// 検索: userName
// 置換: currentUser
// 置換後
let currentUser = 'Alice';
console.log(currentUser);
if (currentUser === 'Alice') {
alert('Hello, ' + currentUser);
}
例2: 文字列リテラルの修正
# 置換前
print("エラーが発生しました")
log_message = "エラーが発生しました"
error_text = "エラーが発生しました"
# 検索: エラーが発生しました
# 置換: 予期しないエラーが発生しました
# 置換後
print("予期しないエラーが発生しました")
log_message = "予期しないエラーが発生しました"
error_text = "予期しないエラーが発生しました"
置換オプションの活用
大文字小文字の区別
<!-- 大文字小文字を区別しない場合 -->
<div class="Container">
<div class="container">
<div class="CONTAINER">
<!-- 検索: container(大文字小文字区別なし)-->
<!-- 置換: wrapper -->
<!-- 結果: 全て置換される -->
<div class="wrapper">
<div class="wrapper">
<div class="wrapper">
完全一致モード
/* 完全一致を使用しない場合 */
.container { width: 100%; }
.sub-container { width: 50%; }
.mini-container { width: 25%; }
/* 検索: container */
/* 置換: wrapper */
/* 結果: 部分一致で全て置換 */
.wrapper { width: 100%; }
.sub-wrapper { width: 50%; }
.mini-wrapper { width: 25%; }
/* 完全一致を使用した場合 */
/* 検索: container(完全一致有効)*/
/* 置換: wrapper */
/* 結果: 完全一致のみ置換 */
.wrapper { width: 100%; }
.sub-container { width: 50%; }
.mini-container { width: 25%; }
段階的置換の手順
安全な置換プロセス
- 事前確認: 置換対象の箇所数を確認
- テスト置換: 最初の数箇所を個別に置換
- 結果確認: 意図した通りに置換されているかチェック
- 一括実行: 問題なければ残り全てを一括置換
置換前のバックアップ
# Gitでの変更追跡(推奨)
git add .
git commit -m "置換作業前のバックアップ"
# ファイルの手動バックアップ
cp important_file.js important_file.js.backup
プロジェクト全体での一括置換

グローバル検索・置換の起動
方法1: サイドバーから
- 左サイドバーの虫眼鏡アイコンをクリック
- 検索パネルが表示される
- 検索フィールドに対象文字列を入力
- 置換フィールド(▼アイコンで展開)に新しい文字列を入力
方法2: ショートカットキー
Windows/Linux:
Ctrl + Shift + H
macOS:
Cmd + Shift + H
ファイル・ディレクトリの絞り込み
インクルードパターンの指定
# JavaScript/TypeScriptファイルのみ対象
**/*.{js,ts,jsx,tsx}
# 特定ディレクトリ内のファイルのみ
src/**/*.*
# 複数の拡張子を指定
**/*.{html,css,js}
# 特定のファイル名パターン
**/component*.js
エクスクルードパターンの活用
# node_modulesを除外
**/node_modules/**
# ビルド成果物を除外
**/dist/**
**/build/**
# 設定ファイルを除外
**/.vscode/**
**/.*
実践的なプロジェクト全体置換
例1: API エンドポイントの変更
// 複数ファイルでのAPI URL変更
// 置換前(多数のファイルに散在)
const API_BASE = 'https://api-old.example.com';
fetch('https://api-old.example.com/users');
axios.get('https://api-old.example.com/posts');
// 検索: https://api-old.example.com
// 置換: https://api-new.example.com
// 対象: **/*.{js,ts}
// 置換後
const API_BASE = 'https://api-new.example.com';
fetch('https://api-new.example.com/users');
axios.get('https://api-new.example.com/posts');
例2: CSSクラス名の統一
/* 複数のCSSファイルでクラス名変更 */
/* 置換前 */
.btn-primary { background: blue; }
.button-primary { background: blue; }
.primary-btn { background: blue; }
/* 検索パターン: btn-primary|button-primary|primary-btn */
/* 置換: primary-button */
/* 対象: **/*.{css,scss,less} */
/* 置換後 */
.primary-button { background: blue; }
.primary-button { background: blue; }
.primary-button { background: blue; }
置換結果の確認と管理
置換プレビュー機能
- 置換実行前に結果をプレビュー
- ファイル別の変更箇所を一覧表示
- 個別の変更可否を選択可能
- 最終確認後に一括実行
変更履歴の管理
# VS Code のタイムライン機能
# - ファイルの変更履歴を時系列で表示
# - 任意の時点への復元が可能
# Git での変更管理
git diff # 変更内容の確認
git add . # 変更をステージング
git commit -m "プロジェクト全体でAPI URLを変更"
正規表現を使った高度な置換
正規表現モードの有効化
正規表現モードの開始
- 置換パネルを開く
- 検索フィールド右側の**「.*」アイコン**をクリック
- アイコンがハイライトされ、正規表現モードが有効になる
基本的な正規表現パターン
# 数字にマッチ
\d+
# 英数字にマッチ
[a-zA-Z0-9]+
# 空白文字にマッチ
\s+
# 任意の文字にマッチ
.*
# 行の開始/終了
^ # 行の開始
$ # 行の終了
実用的な正規表現置換例
例1: 数字のフォーマット変更
// 置換前
const price1 = 1000;
const price2 = 2500;
const price3 = 150;
// 検索パターン: (\d+)
// 置換パターン: $1円
// 置換後
const price1 = 1000円;
const price2 = 2500円;
const price3 = 150円;
例2: 日付フォーマットの統一
// 置換前(様々な日付形式)
2024/01/15
2024-01-15
2024.01.15
// 検索パターン: (\d{4})[/-.](\d{2})[/-.](\d{2})
// 置換パターン: $1年$2月$3日
// 置換後
2024年01月15日
2024年01月15日
2024年01月15日
例3: HTMLタグの変更
<!-- 置換前 -->
<div class="old-style">Content 1</div>
<div class="old-style">Content 2</div>
<div class="old-style">Content 3</div>
<!-- 検索パターン: <div class="old-style">(.*?)</div> -->
<!-- 置換パターン: <section class="new-style">$1</section> -->
<!-- 置換後 -->
<section class="new-style">Content 1</section>
<section class="new-style">Content 2</section>
<section class="new-style">Content 3</section>
キャプチャグループの活用
基本的なキャプチャグループ
// 関数名の変更例
// 置換前
function getUserData() { }
function getProductData() { }
function getOrderData() { }
// 検索パターン: function get(\w+)Data\(\)
// 置換パターン: function fetch$1Info()
// 置換後
function fetchUserInfo() { }
function fetchProductInfo() { }
function fetchOrderInfo() { }
複数キャプチャグループの組み合わせ
/* CSSプロパティの値変更 */
/* 置換前 */
margin: 10px 20px;
padding: 5px 15px;
border: 2px 8px;
/* 検索パターン: (margin|padding|border):\s*(\d+)px\s*(\d+)px */
/* 置換パターン: $1: $2rem $3rem */
/* 置換後 */
margin: 10rem 20rem;
padding: 5rem 15rem;
border: 2rem 8rem;
高度な正規表現テクニック
先読み・後読みアサーション
// パスワード形式の変更(特定の条件を含む場合のみ)
// 置換前
const password1 = "abc123"; // 英数字混在
const password2 = "abcdef"; // 英字のみ
const password3 = "123456"; // 数字のみ
// 検索パターン: (?=.*\d)(?=.*[a-zA-Z])\w+
// (英字と数字の両方を含む文字列のみマッチ)
// 置換パターン: STRONG_PASSWORD
// 置換後
const password1 = "STRONG_PASSWORD"; // 置換される
const password2 = "abcdef"; // 置換されない
const password3 = "123456"; // 置換されない
条件付き置換
<!-- 特定の属性を持つタグのみ置換 -->
<!-- 置換前 -->
<img src="image1.jpg" alt="Description">
<img src="image2.jpg">
<img src="image3.jpg" alt="Another description">
<!-- 検索パターン: <img src="([^"]+)"(?=\s+alt="[^"]+") -->
<!-- 置換パターン: <picture><source srcset="$1"><img src="$1" -->
<!-- alt属性がある場合のみ置換 -->
よくあるトラブルとその対処法

置換後の意図しない結果
問題1: 部分一致による誤置換
// 問題のある例
// 検索: "user"
// 置換: "customer"
// 置換前
const user = 'Alice';
const userData = {...};
const userInfo = {...};
const superUser = 'Admin';
// 意図しない結果
const customer = 'Alice'; // 意図した置換
const customerData = {...}; // 意図しない置換
const customerInfo = {...}; // 意図しない置換
const supercustomer = 'Admin'; // 意図しない置換
解決方法:
# 完全一致パターンを使用
\buser\b
# または具体的なパターンを指定
^user$|user(?=\s|$|[^a-zA-Z])
問題2: 正規表現の特殊文字
// 問題のある例
// 検索: "price.$"(ドットを文字として検索したい)
// しかし、正規表現では"."は任意の文字を意味
const price1$ = 100;
const price2A = 200; // 意図せずマッチしてしまう
解決方法:
# 特殊文字をエスケープ
price\.\$
# または正規表現モードを無効にして通常検索を使用
パフォーマンスの問題
大規模プロジェクトでの置換
問題: 数万ファイルを含むプロジェクトで置換が遅い
解決策:
- ファイル種別で絞り込み
**/*.{js,ts,jsx,tsx} # JavaScriptファイルのみ
- 除外パターンの活用
!**/node_modules/** !**/dist/** !**/*.min.js
- 段階的な置換実行
# ディレクトリ別に分けて実行 src/**/*.* # まずsrcディレクトリ tests/**/*.* # 次にtestsディレクトリ
メモリ使用量の最適化
// settings.json での最適化
{
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/*.log": true
},
"files.exclude": {
"**/node_modules": true,
"**/.git": true
}
}
データ保護とバックアップ
置換前の安全対策
# 1. Gitでの変更管理
git add .
git commit -m "置換作業前のコミット"
# 2. ブランチでの作業
git checkout -b feature/mass-replace
# 置換作業実行
git add .
git commit -m "一括置換完了"
# 3. 問題があった場合の復元
git checkout main
git branch -D feature/mass-replace
VS Code の復元機能
// VS Code タイムライン機能の活用
// - ファイルエクスプローラーでファイルを右クリック
// - "タイムライン"を表示
// - 任意の時点のバージョンを表示・復元可能
// Ctrl + Z による段階的な取り消し
// - 置換操作は一つの操作として記録
// - Ctrl + Z で一括で取り消し可能
高度な置換テクニック

スニペットとの組み合わせ
カスタムスニペットでの置換パターン登録
// .vscode/settings.json
{
"editor.snippetSuggestions": "top",
"editor.suggest.snippetsPreventQuickSuggestions": false
}
// スニペットファイル例
{
"Console log replacement": {
"prefix": "clog-replace",
"body": [
"console.log('$1:', $1);"
],
"description": "Console log with variable name"
}
}
マクロ機能との連携
複雑な置換パターンの自動化
// マクロ設定例
{
"macros": {
"replaceAndFormat": [
"editor.action.startFindReplaceAction",
"editor.action.formatDocument",
"workbench.action.files.save"
]
}
}
拡張機能との連携
置換作業を支援する拡張機能
Multiple Replace
- 複数の置換パターンを一度に実行
- 設定ファイルでパターンを管理
Regex Previewer
- 正規表現パターンのリアルタイムプレビュー
- マッチ結果の視覚的確認
Find and Transform
- より柔軟な変換ルールの設定
- 条件付き置換の実行
実際の開発での活用例
リファクタリングでの活用
クラス名の変更
// 置換前(複数ファイルに散在)
class UserManager {
constructor() { }
}
const manager = new UserManager();
const userMgr = new UserManager();
// 検索パターン: UserManager
// 置換パターン: AccountManager
// 対象ファイル: **/*.{js,ts}
// 置換後
class AccountManager {
constructor() { }
}
const manager = new AccountManager();
const userMgr = new AccountManager();
設定値の更新
# 設定ファイルの一括更新
# 置換前
DATABASE_HOST = "localhost"
DATABASE_PORT = 5432
DATABASE_NAME = "development"
# 検索パターン: DATABASE_(\w+) = "([^"]*)"
# 置換パターン: DB_$1 = "$2"
# 置換後
DB_HOST = "localhost"
DB_PORT = 5432
DB_NAME = "development"
ドキュメンテーションの更新
APIドキュメントの修正
<!-- バージョン情報の一括更新 -->
<!-- 置換前 -->
## API Version 1.0
This API version 1.0 provides...
For version 1.0 documentation...
<!-- 検索パターン: version 1\.0 -->
<!-- 置換パターン: version 2.0 -->
<!-- 置換後 -->
## API Version 2.0
This API version 2.0 provides...
For version 2.0 documentation...
国際化対応
文字列の多言語化
// 文字列リテラルの置換
// 置換前
alert("Hello, World!");
console.log("Error occurred");
const message = "Welcome to our site";
// 検索パターン: "([^"]*)"
// 置換パターン: t('$1')
// 置換後
alert(t("Hello, World!"));
console.log(t("Error occurred"));
const message = t("Welcome to our site");
まとめ
VS Codeの一括置換機能は、開発効率を大幅に向上させる強力なツールです。
重要なポイント
- ファイル内置換:
Ctrl + H
で現在のファイル内を効率的に置換 - プロジェクト全体置換: グローバル検索で複数ファイルを一括処理
- 正規表現活用: 柔軟なパターンマッチングで高度な置換を実現
- 安全な作業: バックアップと段階的実行で安全性を確保
効果的な活用方法
- 事前準備: バックアップとテスト実行で安全性を確保
- 段階的実行: 小規模テストから大規模実行への段階的アプローチ
- パターン活用: 正規表現とキャプチャグループで柔軟な変換
- ツール連携: 拡張機能やマクロとの組み合わせで更なる効率化
コメント