プロファイルとは
PowerShell は起動時に $PROFILE のパスに格納されたプロファイルファイルを読み込むようになっています。
このファイルで関数の定義や初期化処理を行うことで、PowerShell を便利に使えるようになります。
$PROFILE には次のようなパスが格納されています。
PS C:\> $profile
C:\Users\maku\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
プロファイルの作成
デフォルトでは $PROFILE が示すファイルは存在しない可能性があるので、New-Item コマンドレットなどを使って、エディタで開く前にファイルを生成しておく必要があります。
New-Item -Path $profile -ItemType file -Force
notepad $profileこのファイルを作成したあとに新しく PowerShell を開こうとすると、実行ポリシー 関連のセキュリティエラーが発生します。
これは、デフォルトで ps1 ファイルの実行が許可されていないからです。
. : ファイル C:\Users\maku\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 を読み込めません。
ファイル C:\Users\maku\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 はデジタル署名されていません。
このスクリプトは現在のシステムでは実行できません。
スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。現在の実行ポリシーの一覧は、Get-ExecutionPolicy コマンドレットで確認できます。
PS C:\> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine AllSigned
カレントユーザーによるスクリプトの実行を許可するには、次のように Set-ExecutionPolicy コマンドレットを実行します。
PS C:\> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
ここで指定している RemoteSigned ポリシーは、「インターネット上の署名されたスクリプト」および「ローカルコンピューター上のスクリプト」の実行を許可するポリシーです。
プロファイルの設定例
例)ディレクトリ移動用のコマンドを定義
下記は、ディレクトリ移動のための関数(cd-gitwork や u)を定義する例です。
ついでに PowerShell の起動時にその関数を呼び出して、ディレクトリを移動しています。
よく使う作業ディレクトリに自動的に移動するようにしておくと便利です(Windows ターミナルの設定でも初期ディレクトリは設定できますが)。
Function cd-gitwork {
cd D:/y/gitwork # Set-Location -Path D:/y/gitwork でも OK
}
Function u { cd .. }
Function uu { cd ../.. }
Function uuu { cd ../../.. }
# PowerShell 起動時にディレクトリを移動
cd-gitwork独自コマンドの定義方法としては、Set-Alias コマンドレットによるエイリアス定義もありますが、Set-Alias は柔軟なパラメーター設定ができないので、Function を使って関数として定義するのがよいです。
例)他のスクリプトを読み込む
複数の PC で設定を共有したいときは、Dropbox などに共通スクリプトを置いておいて、. で読み込むようにします。
各 PC のプロファイル ($profile) には、次のような 1 行だけを記述しておきます。
. D:/Dropbox/share/config/powershell/profile.ps1/) とバックスラッシュ (\) の両方が使えます。
クロスプラットフォームなスラッシュ (/) の方を使うことをお勧めします。
例えば、Vim の gf でカーソル下のパスを開くときに、バックスラッシュだと正しく認識されなかったりします。例)プロファイル設定ファイルを簡単に開けるようにする
プロファイル設定ファイルのパスは PowerShell の中で $profile で簡単に参照できる(例: notepad $profile)のですが、.ps1 ファイルの中で下記のようなコマンドエイリアスを設定しておくと、その .ps1 ファイル自身を簡単に開いて編集できるようになります。
前述のように別の .ps1 ファイルをインクルードしているようなケースでは、$profile が指すファイルを開いて、さらに別の .ps1 ファイルを辿る (Vim の gt など)といった操作が必要になってくるので、このようなショートカットを用意しておくと便利です。
# この .ps1 ファイルをエディタで開く
Function m-edit-profile { nvim $PSCommandPath }ちなみに、m- というプレフィックスは、標準コマンドと自分で定義したコマンドが混ざらないようにするために付けてます。
my とか maku の略です ٩(๑❛ᴗ❛๑)۶
例)変数に格納したコマンドを実行する
例えば、普段使用するエディタのコマンドを $EDITOR 変数に格納しておき、エイリアスや関数を定義するときにその変数経由でエディタを呼び出すようにしておくと便利です。
こうしておくと、エディタを変更したいときに関数の中身を全部書き換える必要がなくなります。
# エディタコマンドを変数に格納
$EDITOR = "nvim" # Neovim を使う場合
# EDITOR 変数に設定したエディタで CLAUDE.md を開く
Function m-edit-claude { & $EDITOR $env:USERPROFILE/.claude/CLAUDE.md }先頭に & 演算子を付けているのは、変数に格納されたコマンド名をコマンドとして実行するためです。
便利っ ٩(๑❛ᴗ❛๑)۶