PowerShellでファイル操作を自動化してみよう!超入門スクリプト解説
前回の記事では、PowerShellの基本となる10個の便利なコマンドレットを学びました。一つひとつのコマンドが強力なオブジェクトを返し、それをパイプラインで繋ぐことで、複雑な処理も可能になることを体感していただけたかと思います。
さて、コマンドの「単語」を覚えたら、次はいよいよそれらを組み合わせて「文章」を作るステップ、つまりPowerShellスクリプトの作成です。スクリプトとは、一言でいえば「コマンドをまとめた手順書」。一度作ってしまえば、面倒な定型作業をワンクリック(ワンコマンド)で完了させることができます。
この記事では、Webクリエイターの皆さんが日々の業務で直面しがちな「プロジェクトの初期設定」や「不要なファイルの掃除」、「簡単なバックアップ」といった具体的なシナリオを取り上げ、それらを自動化する超入門スクリプトをゼロから解説します。この記事を読み終える頃には、あなたも自分だけの「魔法の杖」を作り出す力を手に入れているはずです!
スクリプト実行の準備:実行ポリシーの変更
PowerShellスクリプト(拡張子 .ps1)を作成して実行する前に、一つだけ準備が必要です。セキュリティのため、Windowsは初期状態ではスクリプトの実行を制限しています。この制限を、ローカルで作成したスクリプトなら安全に実行できるよう変更しましょう。
まず、PowerShellを管理者として開き、現在の実行ポリシーを確認します。
Get-ExecutionPolicy
おそらく「Restricted」(制限付き)と表示されるはずです。これを、以下のコマンドで変更します。
Set-ExecutionPolicy RemoteSigned
RemoteSignedは、「ローカルで作成したスクリプトは実行OK、インターネットからダウンロードしたスクリプトは信頼できる発行元の署名がないとNG」という、開発者にとって安全かつバランスの取れた設定です。確認のメッセージが表示されたら、「Y」を入力してEnterキーを押してください。この設定は一度行えばOKです。
実践例1:Web制作プロジェクトの初期構成を自動生成する
Webサイトを新しく作り始めるとき、毎回 `images`, `css`, `js` といったフォルダや `index.html` を手作業で作るのは地味に面倒ですよね。この作業を自動化するスクリプト `New-Project.ps1` を作ってみましょう。
スクリプトの内容
以下のコードをテキストエディタに貼り付け、`New-Project.ps1` という名前で保存してください。
# スクリプト実行時に渡された最初の引数をプロジェクト名として使用
$projectName = $args[0]
# プロジェクト名のディレクトリを作成
New-Item -Path ".\$projectName" -ItemType Directory
# 作成したディレクトリに移動
Set-Location -Path ".\$projectName"
# サブディレクトリを一括で作成
New-Item -Path ".\images" -ItemType Directory
New-Item -Path ".\css" -ItemType Directory
New-Item -Path ".\js" -ItemType Directory
# HTMLとCSSの雛形ファイルを作成
New-Item -Path ".\index.html" -ItemType File
New-Item -Path ".\css\style.css" -ItemType File
Write-Host "プロジェクト '$projectName' の準備が完了しました!" -ForegroundColor Green
スクリプトの実行
PowerShellでスクリプトを保存したディレクトリに移動し、以下のコマンドを実行します。`./` はカレントディレクトリを意味します。
./New-Project.ps1 "MyNewSite"
結果の確認
実行後、`Get-ChildItem`で中身を確認してみましょう。
Get-ChildItem -Path ".\MyNewSite"
指定した名前のフォルダと、その中に必要なサブフォルダやファイルが一瞬で作成されているはずです。これで、面倒な初期設定から解放されました!
実践例2:古いダウンロードファイルを自動で掃除する
次に、少し応用的なスクリプトです。「ダウンロード」フォルダに溜まった、30日以上前の古いファイルを自動で検索し、削除するスクリプトを考えてみましょう。
スクリプトの内容(まずは安全確認モード)
いきなりファイルを削除するのは危険なので、まずは「もし実行したら、どのファイルが削除されるか」を画面に表示するだけの、安全なバージョンを作成します。Remove-Itemに-WhatIfスイッチを付けるのがポイントです。
# 掃除したいフォルダのパス
$targetFolder = "$HOME\Downloads"
# 何日以上前のファイルを削除するか
$days = 30
# 基準となる日付を計算
$limitDate = (Get-Date).AddDays(-$days)
Write-Host "[$targetFolder] 内の [$limitDate] より古いファイルを検索します..."
# -WhatIf を付けて、削除の「シミュレーション」を行う
Get-ChildItem -Path $targetFolder -File -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate } | Remove-Item -WhatIf
このスクリプト(`Clean-Downloads.ps1`などとして保存)を実行すると、「What if: Performing the operation "Remove File" on target...」のように、削除対象となるファイルの一覧が表示されるだけで、実際には何も削除されません。
スクリプトの完成版(実際に削除する)
-WhatIfで対象ファイルに問題がないことを確認できたら、いよいよ実際に削除するバージョンです。-WhatIfを削除し、代わりに-Verboseを追加して、どのファイルが削除されたかを表示させると親切です。
# (前略)
$limitDate = (Get-Date).AddDays(-$days)
Get-ChildItem -Path $targetFolder -File -Recurse | Where-Object { $_.LastWriteTime -lt $limitDate } | Remove-Item -Force -Verbose
-Forceは読み取り専用ファイルなども強制的に削除するためのオプションです。これで、定期的なファイル整理がコマンド一発で完了します。
実践例3:指定フォルダを日付付きでZIPにバックアップする
最後に、Web制作者にとって重要なバックアップ作業を自動化するスクリプトです。指定したフォルダを、実行した日付と時刻を名前に含んだZIPファイルとして圧縮します。
# バックアップしたいフォルダ
$sourceFolder = "C:\path\to\your\project"
# バックアップファイルの保存先
$destinationFolder = "D:\backups"
# yyyyMMdd-HHmm 形式で現在の日時を取得
$timestamp = Get-Date -Format "yyyyMMdd-HHmm"
# 保存するZIPファイルの名前を決定
$zipFileName = "project-backup_$timestamp.zip"
$destinationPath = Join-Path -Path $destinationFolder -ChildPath $zipFileName
# フォルダを圧縮してバックアップ
Compress-Archive -Path $sourceFolder -DestinationPath $destinationPath
Write-Host "バックアップが完了しました: $destinationPath" -ForegroundColor Green
このスクリプトを実行すれば、project-backup_20250706-1130.zipのような分かりやすい名前で、簡単にバックアップを作成できます。
まとめ
今回は、PowerShellスクリプトの基本的な書き方と、Web制作の現場で役立つ具体的な自動化スクリプトの例を3つご紹介しました。いかがでしたか?
- 繰り返し行うプロジェクトのセットアップ
- 定期的なファイルのクリーンアップ
- 重要なデータのバックアップ
こうした手作業をスクリプトに落とし込むことで、あなたはミスを減らし、時間を節約し、より創造的な作業に集中できるようになります。スクリプト作成のコツは、「手作業で行う手順を、一つひとつのコマンドレットに分解して書き出す」ことです。ぜひ、あなたの周りにある「面倒な作業」を自動化する、自分だけのスクリプト作りに挑戦してみてください。
PowerShellの世界はまだまだ奥が深いです。次回の記事では、多くの人が混同しがちなPowerShellと、古き良き(?)コマンドプロンプトの違いを、図解を交えながら徹底比較します!