【開発効率化】PowershellやGitBashで入力するコマンドにエイリアスを設定して省略コマンドで入力の手間を省く！

**みなさん、コマンド打ってますか？**

僕の場合はGitBashやPowershellをよく使います。
よく使うコマンドとしてはgitやdockerのコマンドをよく使うのですが、頻度が高いコマンドは省略系で入力ができるように設定をしています。

ただ、こういう環境設定系って最初だけやって後は触らないのでPCを変えたときに

**「あれ？コマンドが使えない…。
そうだ、設定しないといけないんだった…。」**

となることが多いです。皆さんもそうじゃないですか？？
これまではその都度調べて設定してましたが、改めて設定する内容についてまとめておきたいと思います。

### 対応内容

本記事では「Git Bash」「Powershell」での設定方法を記載します。

### Git Bashの場合

Git Bashは設定内容はとてもシンプルです。

1.`C:\Users\ユーザー名\` 配下に`.bashrc`ファイルを作る

``` bash
# コマンドで行う場合
$ cd
$ pwd #/c/Users/{自分のユーザー名} が出ればOK
$ touch .bashrc
```

2.エイリアスとして登録したいコマンドを以下の形で記載

``` .bashrc
alias 省略形='対象のコマンド'
(例) alias ll='ls -al'
```

3.Git Bashを開く（既に開いている場合は開き直す）

```terminal
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.

This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.
```

開くと上記の警告ログと共に`.bash_profile`ファイルが自動で作成されます。これはbashを起動したときに読み込まれる`.bash_profile`、`.bashrc`のファイルについて **「.bashrcを読み込む.bash_profileを作成したよ。あなたのために。」** という内容のものです。一度作成されれば二度は表示されません。

.bash_profileが自動で作成される理由は、.bashrcは/bash_profileから読み込まれる、という形で実行される必要があるため、.bashrcのみ存在する場合は自動で作成がされる、という認識です。

#### 設定確認
エイリアスが登録できたかどうかは `alias`コマンドで確認できます。 

```bash
$ alias
alias ll='ls -l'
alias ls='ls -F --color=auto --show-control-chars'
alias node='winpty node.exe'
alias php='winpty php.exe'
```

### Powershellの場合

1.`C:\Users\{ユーザー名}\Documents\WindowsPowerShell\` 配下にファイル`Microsoft.PowerShell_profile.ps1`を作成する。
存在しない場合はディレクトリも作成する。

2.その中にエイリアスに登録したいコマンドを以下の形で記載

```Microsoft.PowerShell_profile.ps1
Set-Alias {省略形} 対象のコマンド
(例)Set-Alias d docker

#空白を含むコマンドの場合はfuctionを使う
function {省略形}
{
    対象のコマンド
}

(例)
function dp
{ 
    docker ps
}

```

3.Powershellを開く（既に開いている場合は開き直す）

#### 設定確認
エイリアス登録したものは`Get-Alias`で、function登録したものは`Get-ChildItem -path function:`で確認できます。（functionの方は対象のコマンドまでは見れないのであまり意味ないかも）

## マイ設定値

僕が使っている設定ファイルを記載します。コピペで使えます。
と言っても、他の方が載せていたものに手を加えただけなので似たような内容になっていると思います。
イチオシは `dp` と `dexec` です。 **`dp` でコンテナIDを確認して、 `dexec {コンテナID}` でコンテナに入る**という流れでよく使うので重宝しています。

```.bashrc
# docker
alias d='docker'
alias dc='docker-compose'
alias dp='docker ps'
alias dcnt='docker container'
alias dcur='docker container ls -f status=running -l -q'
alias dexec='docker exec -it $(dcur) bash'
alias dexecash='docker exec -it $(dcur) ash'
alias dimg='docker image'
alias drun='docker container run --rm -d'
alias drunit='docker container run --rm -it'
alias dcstart='docker container start $(dcur)'
alias dcstop='docker container stop $(dcur)'
alias la='ls -la'
alias ll='ls -ll'
alias dx='docker exec -it'

# git
alias ga='git add'
alias gall='git add .'
alias gc='git commit'
alias gs='git status'
alias gb='git branch'
alias gc='git checkout'
alias gcb='git checkout -b'
```

```Microsoft.PowerShell_profile.ps1
#長いコマンドを短くしたいだけならSet-Aliasを使う。
# docker系
Set-Alias d docker
Set-Alias dc docker-compose

# git系
Set-Alias g git

#空白を含むコマンドの場合fuctionを使う。
#docker系
function dp
{ 
    docker ps
}

# $argsは引数。dexec A とした場合に$argsにAが入る
function dexec
{ 
    docker exec -it $args /bin/sh
}

function dexeca
{ 
    docker exec -it $args ash
}

#git系
function gd
{ 
    git diff
}

function gs
{ 
    git status
} 

function gb
{ 
    git branch
}

function gba
{ 
    git branch -a
}

function gpush
{ 
    git push origin $args
}

function gcb
{ 
    git checkout -b $args
}

function gg
{ 
    git grep $args
}
```

## QA

#### Q.PowerShellを開くと「このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。」というメッセージが表示されて、エイリアス登録したコマンドが使えない。

```bash
ファイル C:\Users\takafumi\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 を読み込めません。
ファイル C:\Users\takafumi\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 はデジタル署名されてい
ません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「a
bout_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ . 'C:\Users\takafumi\Documents\WindowsPowerShell\Microsoft.P ...
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
```

##### A.Powershellの実行ポリシーがどうなっているか確認

Powershellでファイルを実行する際のポリシーが設定されており、ポリシーの種類によって実行可能なファイルの種類が変わります。

[詳しくはこちら→ about_Execution_Policies](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3)

Windowsのバージョンによってデフォルトのポリシーが異なると一般の方が書いた記事にありました（公式情報ではない）。実行ポリシーを緩めすぎるとセキュリティ上、不安があるため、実行ポリシーを変更する際は自己責任でお願いします。

僕の環境の場合はデフォルトが「RemoteSigned」となっており、この場合はローカルで作成したファイルについては署名無しで実行可能なので実行ポリシーは変更せずに進めました。「RemoteSigned」の場合は **”ローカルで作成したファイルは署名無しで実行可能”** です。大切なので2回書きました。（僕は別PCで使っていたps1ファイルをダウンロードして実行しようとしていたので「なんでこの設定なのに動かないの！？」で少し引っかかりました…）

#### Q.Macでも使える？
##### A.同じような手順で使えるようになる
僕はMacではbashを使っているのですが「Git Bashの場合」と同じ手順で設定すればOKです。
ターミナルを開いたまま変更内容を反映したいときは `source ~/.bashrc` で反映されます。


これでPCを変えても楽に環境設定ができそうです。他におすすめの設定があればぜひ教えてください。
それでは！

### 参考
>Microsoft公式 実行ポリシーについて
[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3)

>.bash .bash_profileについて
https://oxynotes.com/?p=5418

>PowerShellのエイリアス登録について
[https://qiita.com/karakuri-t910/items/d751987065d4c52b3af4](https://qiita.com/karakuri-t910/items/d751987065d4c52b3af4)

>WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.　について
[https://qiita.com/ko-zi/items/7563cae9d336626c3637](https://qiita.com/ko-zi/items/7563cae9d336626c3637)

>このスクリプトは現在のシステムでは実行できません。の原因他
[https://kondeneenen.com/powershell_digitalsignature/](https://kondeneenen.com/powershell_digitalsignature/)