windowsでコマンドにエイリアスを設定する方法はとてもシンプルです。
Profile.ps1 にSet-Alias エイリアス名 コマンドと書くだけです。例えば、Set-Alias pwd pwd.exeとすれば、Powershellの pwd をGit Bashのpwdで上書きできるようになります。
さらに、オプションも一緒に登録したい場合はfunction エイリアス名 { コマンド オプション }として、関数を設定することもできます。
Profile.ps1はドキュメントフォルダ以下に特定の親フォルダとともに置くことで自動で機能します。
 ただし、使用するPowershellのバージョンによってProfile.ps1の親フォルダ名が変わるので注意が必要です。
エイリアスとは?
そもそもエイリアスとは一体何なのでしょうか?
エイリアスとは、ファイル等の実体を別の名前で参照するシンボル及び機能のこと[1]です。一般的には元の本体には影響を与えずに名前を変更できるファイルのことで、Windowsではこれを「ショートカット」、Linuxでは「シンボリックリンク」と呼びます。
また、Linuxでエイリアスと言った場合、コマンドを別名で登録する機能を指します。
- ls -lを「ll」というコマンドで登録する
- marktreeを mdtree と登録する
この機能は応用として、「元々のPowershellのpwdを、Git Bashのpwdで上書きする」といった具体的な事例にも適用できます。
この記事で取り上げているエイリアスも、基本的にはこの「コマンド登録機能」に焦点を当てています。エイリアスを活用することで、コマンドの呼び出しを簡略化し、作業効率を向上させることが可能です。
Profile.ps1とは?
Windowsでエイリアスを設定する際には、まず設定を書き込むためのファイルを作成する必要があります。このファイルの名前は通常、Profile.ps1とされています。
以下が手順の整理です。
- ファイルの作成 : Profile.ps1という名前のファイルを作成します。
- 設定の記述 :Profile.ps1にエイリアスの設定を書き込みます。
- ファイルの配置 :Profile.ps1を特定のフォルダに配置します。
これにより、Powershellを起動すると自動でエイリアスの設定が反映されます。
注意点として、PowershellのバージョンによってProfile.ps1を配置する場所が変わる可能性があるため、詳細については関連する記事やドキュメントを確認することをお勧めします。
詳しくは以下の記事を御覧ください。

PowerShell 5 の場合
おそらく多くのユーザーが使用しているPowershellは、デフォルトでWindowsに組み込まれているバージョンだと考えられます。これは、Windowsに最初からインストールされているためです。
簡単な判別方法は、Powershellを起動したときに表示されるダウンロード情報です。以下のように「最新のPowershellをインストールしてください」と出れば、「Powershell 5」です。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindowsPowershell 5の場合、Profile.ps1を配置するパスは以下の通りです。
C:\Users\ユーザー名\Documents\WindowsPowerShell\Profile.ps1Powershell 7との違いは、Profile.ps1の親フォルダが 「WindowsPowerShell」となっている点です。
PowerShell 7 の場合
URLからPowershellをダウンロードした場合、おそらく「Powershell 7」を使用していると考えられます。
Powershell 7の場合、Profile.ps1を配置するパスは以下の通りです。
C:\Users\ユーザー名\Documents\PowerShell\Profile.ps1Powershell 5との違いは、Profile.ps1の親フォルダが「PowerShell」となっている点です。したがって、バージョンによるフォルダの違いに留意して、Profile.ps1を正しい場所に配置する必要があります。
windowsでエイリアスを設定する方法
シンプルなエイリアス設定方法
では、さっそくWindowsにエイリアスを登録する方法を解説致します。
Windowsにコマンドを登録するにはいくつかの方法[2][3][4]があるのですが、ここではとてもシンプルな方法を紹介します。
それは、 Profile.ps1にSet-Alias エイリアス名 コマンド を登録するという方法です。
さっそく試してみましょう。
 Powershellにはいくつかのコマンドが初めからエイリアスとして登録されており、pwdの場合はGet-Locationコマンドが起動するようになっています。
PS C:\Users\user> pwd
Path
----
C:\Users\user
PS C:\Users\user> Get-Location
Path
----
C:\Users\userこの状態でProfile.ps1にSet-Alias pwd pwd.exeと記述すれば、Git Bashのpwdが起動するように上書きされます。
Set-Alias pwd pwd.exe一旦Powershellを閉じて、再び立ち上げると、今度はpwd.exeが起動するようになっています。
PS C:\Users\user> pwd
/c/Users/user
PS C:\Users\user> pwd.exe
/c/Users/userより応用が効くエイリアス設定方法
これにより、エイリアスが設定できるようになります。ただし、$PSVersionTableなどの環境変数やls -aなどのオプションを含む場合、さらにls.exeなどで発生する文字化けを修正するには、Set-Aliasではうまくいきません。
これらの場合には、「関数」を使用してエイリアスを作成します。
環境変数をエイリアスに登録する方法
実際に、バージョンを参照するエイリアスを試しに作成してみましょう。PowerShellでバージョンを知りたい場合、$PSVersionTable と入力することでバージョンを取得できます。
PS C:\Users\user> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      7.4.1
PSEdition                      Core
GitCommitId                    7.4.1
OS                             Microsoft Windows 10.0.22621
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0先ほどの $PSVersionTable に対して、「version」という名前でSet-Aliasを登録してみましょう。
Set-Alias version $PSVersionTableしかし、”version”と入力すると、以下のようなエラーが発生します。
PS C:\Users\user> version
version: The term 'System.Management.Automation.PSVersionHashTable' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.“PSVersionHashTable” は、コマンドレット、関数、スクリプトファイル、または実行可能なプログラムの名前として認識されません。
名前のスペルを確認するか、パスが含まれている場合はそのパスが正しいことを確認してもう一度試してください。
この翻訳はChatGPTによるものです(出典: ChatGPT)
この場合、以下のように関数の中に入れることで、エイリアスとして機能します。
function version() {
    $PSVersionTable
}確かに、エイリアスとして正しく機能しています。
PS C:\Users\user> version
Name                           Value
----                           -----
PSVersion                      7.4.1
PSEdition                      Core
GitCommitId                    7.4.1
OS                             Microsoft Windows 10.0.22621
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0引数(オプション)をエイリアスに登録する方法
オプションを含むコマンドをSet-Aliasで登録してみましょう。例えば、”ll”と入力したら、ls.exe -lが実行されるエイリアスを作成してみます。
Set-Alias ll ls.exe -lただし、上記の手法ではPowerShellを起動するとすぐに、以下のようなエラーが発生します。
PowerShell 7.4.1
Set-Alias: C:\Users\user\Documents\PowerShell\profile.ps1:25
Line |
  25 |  Set-Alias ll ls.exe -l
     |                      ~~
     | A parameter cannot be found that matches parameter name 'l'.
Loading personal and system profiles took 679ms.つまり、Set-Aliasでは引数(オプション)を含めた状態でエイリアスに登録することはできません。
そのため、関数を使用します。関数の中で、コマンド -オプション $args とすることで、常に任意のオプションが機能するようにでき、また任意の引数も与えることができるようになります。
function ll() {
    ls.exe -l $args
}これで、”ll”と入力すると、ls.exe -lが実行されるようになりました。
PS C:\Users\user\テスト> ll
total 0
drwxr-xr-x 1 user 197609 0 Feb 13 16:58  test
drwxr-xr-x 1 user 197609 0 Feb 13 16:57 '□'$'\203\206''□'$'\202''□□'$'\203\210'
PS C:\Users\user\テスト> ls.exe -l
total 0
drwxr-xr-x 1 user 197609 0 Feb 13 16:58  test
drwxr-xr-x 1 user 197609 0 Feb 13 16:57 '□'$'\203\206''□'$'\202''□□'$'\203\210'文字化けを直しつつエイリアスに登録する方法
さて、前述のls.exeの出力を見ると文字化けしていることが分かります。これは「コンソールのエンコードがUTF-8ではない」ことが原因です。この問題もSet-Aliasではなく、関数を使って解決できます。
まず、lsはPowerShell側で初めから「Get-ChildItem」がエイリアスとして登録されています。そのため、この状態で関数を設定しても上書きできません。
PS C:\Users\user\テスト> ls
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/13 火曜日    16:58                test
d----   2024/02/13 火曜日    16:57                テスト
PS C:\Users\user\テスト> Get-ChildItem
    Directory: C:\Users\user\テスト
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/13 火曜日    16:58                test
d----   2024/02/13 火曜日    16:57                テスト
そこで、まずは「del alias:コマンド」と記述して、既存のエイリアスを削除します。
その次に、以下の関数を記述します。下記のコードは、以下の記事を参考にして作成しました。

del alias:ls  # PowerShell 側の ls を削除
function ls() {  # 文字化け回避のls
    $origin = [System.Console]::OutputEncoding
    $utf8 = [System.Text.Encoding]::GetEncoding("utf-8")
    $OutputEncoding = $utf8
    [System.Console]::OutputEncoding = $utf8
    $(ls.exe $args)
    [System.Console]::OutputEncoding = $origin
}これにより、文字化けしないlsが使えるようになります。
PS C:\Users\user\テスト> ls
test
テスト参考: powershell から fzf を使用する際の文字化け対策 #Windows – Qiita
まとめ
この記事では、「Windowsでコマンドのエイリアスを登録する方法」をまとめました。
エイリアスを登録するには、Profile.ps1に記述して、PowerShellを起動するだけで反映されます。ただし、Profile.ps1を配置するフォルダはPowerShellのバージョンによって変わるあるため、注意が必要です。
単純なエイリアス登録の場合は、Set-Aliasを使用します。一方で、引数やオプションを含んだコマンドをエイリアスに登録する際には、「関数」を使用します。
これにより、WindowsでもLinuxのBashのようにPowerShellを扱うことができ、文字化けなどのトラブルも回避できるようになります。
