Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

応用編:モジュール管理とPowerShell Gallery

PowerShell の機能を拡張・共有するためのモジュールの仕組み、公式リポジトリからのパッケージ導入、および自作モジュールの設計と配備方法を解説します。

モジュールとは何か

モジュールとは、関連するコマンドレット、関数、変数、プロバイダをひとまとめにした再利用可能なパッケージです。

PowerShell には標準でOS管理やネットワーク制御などのモジュールが組み込まれているほか、世界中の開発者が公開した数万を超えるモジュールを追加して利用できます。

モジュールを配置する標準のディレクトリパスは、環境変数 $env:PSModulePath にセミコロン(Windows)またはコロン(Unix)区切りで定義されています。

# モジュール検索パスの確認
$env:PSModulePath -split [System.IO.Path]::PathSeparator

「PowerShell Gallery」は、Microsoft およびコミュニティが提供する公式のリポジトリ(パッケージカタログ)です。

» 従来の PowerShellGet による管理

# モジュールの検索
Find-Module -Name "PSScriptAnalyzer"

# 現在のユーザー環境にインストール
Install-Module -Name "PSScriptAnalyzer" -Scope CurrentUser -Force

# インストール済みモジュールの更新
Update-Module -Name "PSScriptAnalyzer"

» 最新の PSResourceGet(PowerShell 7 推奨)

PowerShell 7.4 以降では、より高速で軽量な Microsoft.PowerShell.PSResourceGet が標準採用されています。

# 高速なリソース検索とインストール
Find-PSResource -Name "Terminal-Icons"
Install-PSResource -Name "Terminal-Icons" -Scope CurrentUser

モジュールのインポートと一覧確認

モジュールの読み込み状態を確認・制御するコマンドレットです。

PowerShell 3.0 以降、モジュール内に含まれるコマンドを実行すると自動的にバックグラウンドでインポートされる「自動ロード(Autoloading)」が機能します。そのため、明示的なインポート処理を省略できるケースが一般的です。

# 現在のセッションに読み込まれているモジュール一覧
Get-Module

# システムにインストールされており読み込み可能な全モジュール
Get-Module -ListAvailable

# 明示的なモジュールの読み込みとアンロード
Import-Module -Name "PSScriptAnalyzer"
Remove-Module -Name "PSScriptAnalyzer"

独自スクリプトモジュールの作成

チーム内での共通処理や定型スクリプトを共有するための自作モジュール作成手順です。

» 1. スクリプトファイル(.psm1)の作成

モジュールの本文となる関数を定義し、公開したいコマンドのみを Export-ModuleMember で明示します。

# MyTools.psm1
function New-CustomLog {
    [CmdletBinding()]
    param([string]$Message)
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    Write-Output "[$timestamp] $Message"
}

# 外部に公開する関数を指定
Export-ModuleMember -Function New-CustomLog

» 2. マニフェストファイル(.psd1)の生成

バージョン番号、作成者、依存モジュールなどのメタデータを定義します。New-ModuleManifest を使用してテンプレートを自動生成できます。

New-ModuleManifest -Path "./MyTools.psd1" `
    -RootModule "MyTools.psm1" `
    -ModuleVersion "1.0.0" `
    -Author "DevTeam" `
    -Description "Internal automation toolset"

作成したフォルダ(MyTools)を $env:PSModulePath のいずれかの配下に配置することで、他のスクリプトから簡単に呼び出せるようになります。