PR

【簡単!】windowsでエイリアスを設定する方法【Powershell】

OSS開発

windowsでコマンドにエイリアスを設定する方法はとてもシンプルです。
Profile.ps1Set-Alias エイリアス名 コマンドとするだけです。例えば、「Set-Alias pwd pwd.exe」とすれば、Powershellの pwd Git Bashのpwdで上書きできるようになります。

さらに、オプションも一緒に登録したい場合は、function エイリアス名 { コマンド オプション }として、関数を設定することで実現できます。

Profile.ps1はドキュメントフォルダ以下に特定の親フォルダとともに置くことで自動で機能します。
ただし、使用するPowershellのバージョンによってProfile.ps1の親フォルダ名が変わるので注意が必要です。

WordPressブロガーの方必見! 外出先でもブログ執筆作業がはかどる、 Ankerの大容量モバイルバッテリー をご紹介します。

エイリアスとは?

そもそもエイリアスとは一体何なのでしょうか?
エイリアスとは、ファイル等の実体を別の名前で参照するシンボル及び機能のこと[1]です。一般的には元の本体には影響を与えずに名前を変更できるファイルのことで、Windowsではこれを「ショートカット」、Linuxでは「シンボリックリンク」と呼びます。

また、Linuxでエイリアスと言った場合、コマンドを別名で登録する機能を指します。

例えば、

  • ls -lを「ll」というコマンドで登録する
  • marktreeを mdtree と登録する

この機能は応用として、「元々のPowershellのpwdを、Git Bashのpwdで上書きする」といった具体的な事例にも適用できます。

この記事で取り上げているエイリアスも、基本的にはこの「コマンド登録機能」に焦点を当てています。エイリアスを活用することで、コマンドの呼び出しを簡略化し、作業効率を向上させることが可能です。

Profile.ps1とは?

Windowsでエイリアスを設定する際には、まず設定を書き込むためのファイルを作成する必要があります。このファイルの名前は通常、Profile.ps1とされています。

以下が手順の整理です:

  1. ファイルの作成: Profile.ps1という名前のファイルを作成します。
  2. 設定の記述: 作成したProfile.ps1ファイルに、エイリアスの設定を書き込みます。
  3. ファイルの配置: 作成したProfile.ps1ファイルを特定のフォルダに配置します。これにより、Powershellを起動すると自動でエイリアスの設定が反映されます。

注意点として、PowershellのバージョンによってProfile.ps1を配置する場所が変わる可能性があるため、詳細については関連する記事やドキュメントを確認することをお勧めします。

詳しくは以下の記事を御覧ください。

Windows PowerShell 5.1 から PowerShell 7 への移行 - PowerShell
Windows プラットフォームで PowerShell 5.1 から PowerShell 7 に更新します。

PowerShell 5 の場合

おそらく多くのユーザーが使用しているPowershellは、デフォルトでWindowsに組み込まれているバージョンだと考えられます。これは、Windowsに最初からインストールされているためです。

簡単な判別方法は、Powershellを起動したときに表示されるダウンロード情報です。以下のように「最新のPowershellをインストールしてください」と出れば、「Powershell 5」です。

PowerShell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

Powershell 5の場合、Profile.ps1ファイルを配置するパスは以下の通りです。

PowerShell
C:\Users\ユーザー名\Documents\WindowsPowerShell\Profile.ps1

Powershell 7との違いは、Profile.ps1の親フォルダが 「WindowsPowerShell」となっている点です。

PowerShell 7 の場合

URLからPowershellをダウンロードした場合、おそらく「Powershell 7」を使用していると考えられます。

Powershell 7の場合、Profile.ps1ファイルを配置するパスは以下の通りです。

PowerShell
C:\Users\ユーザー名\Documents\PowerShell\Profile.ps1

Powershell 5との違いは、Profile.ps1の親フォルダが「PowerShell」となっている点です。したがって、バージョンによるフォルダの違いに留意して、Profile.ps1を正しい場所に配置する必要があります。

windowsでエイリアスを設定する方法

シンプルなエイリアス設定方法

では、さっそくWindowsにエイリアスを登録する方法を解説致します。
Windowsにコマンドを登録するにはいくつかの方法[2][3][4]があるのですが、ここではとてもシンプルな方法を紹介します。

それは、 Profile.ps1Set-Alias エイリアス名 コマンド を登録するという方法です。

さっそく試してみましょう。
Powershellには、いくつかのコマンドが初めからエイリアスとして登録されており、pwdの場合はGet-Locationコマンドが起動するようになっています。

PowerShell
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が起動するように上書きされます。

PowerShell
Set-Alias pwd pwd.exe

一旦Powershellを閉じて、再び立ち上げると、今度は「pwd.exe」が起動するようになっています。

PowerShell
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 と入力することでバージョンを取得できます。

PowerShell
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を登録してみましょう。

PowerShell
Set-Alias version $PSVersionTable

しかし、”version”と入力すると、以下のようなエラーが発生します。

PowerShell
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

この場合、以下のように関数の中に入れることで、エイリアスとして機能します。

PowerShell
function version() {
    $PSVersionTable
}

確かに、エイリアスとして正しく機能しています。

PowerShell
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が実行されるエイリアスを作成してみます。

PowerShell
Set-Alias ll ls.exe -l

ただし、上記の手法ではPowerShellを起動するとすぐに、以下のようなエラーが発生します。

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 とすることで、常に任意のオプションが機能するようにでき、また任意の引数も与えることができるようになります。

PowerShell
function ll() {
    ls.exe -l $args
}

これで、”ll”と入力すると、ls.exe -lが実行されるようになりました。

PowerShell
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」がエイリアスとして登録されています。そのため、この状態で関数を設定しても上書きできません。

PowerShell
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:コマンド」と記述して、既存のエイリアスを削除します

その次に、以下の関数を記述します。下記のコードは、以下の記事を参考にして作成しました。

powershell から fzf を使用する際の文字化け対策 - Qiita
環境PS > $PSVersionTableName Value---- -----PSVersion 5.1.18362.145PSEdition DesktopPSCompatibl…
PowerShell
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が使えるようになります。

PowerShell
PS C:\Users\user\テスト> ls
test
テスト

参考: powershell から fzf を使用する際の文字化け対策 #Windows – Qiita

まとめ

この記事では、「Windowsでコマンドのエイリアスを登録する方法」をまとめました。

エイリアスを登録するには、Profile.ps1に記述して、PowerShellを起動するだけで反映されます。ただし、Profile.ps1を配置するフォルダはPowerShellのバージョンによって変わるあるため、注意が必要です。

単純なエイリアス登録の場合は、「Set-Alias」を使用します。一方で、引数やオプションを含んだコマンドをエイリアスに登録する際には、「関数」を使用します。

これにより、WindowsでもLinuxのBashのようにPowerShellを扱うことができ、文字化けなどのトラブルも回避できるようになります。


  1. エイリアス | 用語集 | SPIRAL® サービスサイト ↩︎

  2. Windowsのコマンドプロンプトでaliasを設定する (cmderの設定含む) #Windows – Qiita ↩︎

  3. 【Windows】エイリアスを作って作業効率アップする方法の解説 ↩︎

  4. WindowsコマンドプロンプトのAliasを設定してみる。 – 研究人生 ↩︎

タイトルとURLをコピーしました