自作コマンドで業務効率UP


# 概要

普段の開発業務で切っても切り離せないターミナル。

みなさんこんな経験ありませんか？

- コマンドが長くて覚えられない
- コマンドの結果が見にくい

私自身、長いコマンドを覚えることが苦手な一人です。
そこで、今回は自作のコマンドを作って便利にターミナルを使うライフハックをご紹介します。

サンプルのコードは自由に使っていただいて大丈夫です。

# コマンドエイリアス

こちらは、単純によく使うコマンドを別の名前をつけて、使いやすくする方法です。

## 設定の仕方

~/.zshrc にコマンドのエリアス記述を書くことで実行できるようになります

### 例　ls -la を llで呼び出せるようにする

```~/.zshrc 

# 追記
alias ll='ls -la'
```

現在のターミナルに反映させる

```
$ source ~/.zshrc
```

実際に実行してみる

```
wotsuka2@MBPC02FV44PQ05P: ~ 
$ ll
total 104800
drwxr-xr-x+  67 wotsuka2  staff      2144  6  7 13:42 .
drwxr-xr-x    6 root      admin       192  3 26 16:21 ..
-r--------    1 wotsuka2  staff         7  7  6  2021 .CFUserTextEncoding
-rw-r--r--@   1 wotsuka2  staff     26628  6  6 17:00 .DS_Store
drwx------+  58 wotsuka2  staff      1856  6  6 16:16 .Trash
drwxr-xr-x   12 wotsuka2  staff       384  6  2 11:37 .bin
-rw-r--r--    1 wotsuka2  staff       446  6  2 11:30 .gitconfig
-rw-r--r--@   1 wotsuka2  staff        82  6  1 11:07 .gitflow_export
-rw-r--r--@   1 wotsuka2  staff        13  6 13  2021 .gitignore_global
-rw-r--r--@   1 wotsuka2  staff        27  6 13  2021 .hgignore_global
drwxr-xr-x    4 wotsuka2  staff       128  7 30  2021 .kube
-rw-------    1 wotsuka2  staff        60  6  6 12:17 .lesshst
drwxr-xr-x    8 wotsuka2  staff       256  7  8  2021 .mume
drwxr-xr-x  200 wotsuka2  staff      6400  6  6 19:07 .pdepend
drwxr-xr-x    4 wotsuka2  staff       128  7  5  2021 .pyenv
-rw-------    1 wotsuka2  staff        32  7  6  2021 .python_history
drwxr-xr-x   15 wotsuka2  staff       480  6  2 14:18 .ssh
-rw-r--r--@   1 wotsuka2  staff         0  6  2 11:30 .stCommitMsg
-rw-r--r--    1 wotsuka2  staff       326  7  5  2021 .tcshrc
-rw-------    1 wotsuka2  staff     25574  6  7 13:42 .viminfo
drwxr-xr-x    4 wotsuka2  staff       128  7  1  2021 .vscode
-rw-r--r--    1 wotsuka2  staff       210  2 22 16:20 .wget-hsts
-rw-r--r--    1 wotsuka2  staff       609  7  5  2021 .xonshrc
-rw-r--r--    1 wotsuka2  staff     47668 10  7  2021 .zcompdump
-rw-r--r--@   1 wotsuka2  staff       113  1 24 13:55 .zprofile
drwxr-xr-x    5 wotsuka2  staff       160  7 19  2021 .zsh
-rw-------    1 wotsuka2  staff     21552  6  6 12:48 .zsh_history
drwx------   48 wotsuka2  staff      1536  6  6 17:45 .zsh_sessions
-rw-r--r--@   1 wotsuka2  staff      1330  3  2 14:53 .zshrc
drwx------@   3 wotsuka2  staff        96  6 28  2021 Applications
drwx------@  28 wotsuka2  staff       896  6  6 20:07 Desktop
drwx------+   4 wotsuka2  staff       128  7  2  2021 Documents
drwx------@  11 wotsuka2  staff       352  6  6 19:58 Downloads
drwx------@  97 wotsuka2  staff      3104  4 25 20:45 Library
drwx------    9 wotsuka2  staff       288  4 12 12:38 Movies
drwx------+   4 wotsuka2  staff       128  7  2  2021 Music
drwx------+   7 wotsuka2  staff       224  4 12 10:30 Pictures
drwxr-xr-x+   4 wotsuka2  staff       128  6 25  2021 Public
```

# 複雑な処理をしたい場合

複雑な処理をしたい場合には、ShellScriptを使用すると思います。
こんな時にコマンドの置き場所に困りますよね？

AのプロジェクトでもBのプロジェクトでも使用するといった場合、それぞれにシェルスクリプトを置くのはメンテナンス性も悪化しますし、
何より、設置した場所がわからなくなってしまって結局使わなくなってしまったり

そんな時は、今回の本題でもある、自作コマンドを作ろうというものになります

## 設置方法
### 1. ホームディレクトリ配下に .binフォルダを作成

```
wotsuka2@MBPC02FV44PQ05P: ~ 
$ mkdir .bin
```

### 2. 作成した.binに対してPATHを通す
```~/.zshrc 
# 追記
export PATH=$HOME/.bin:$PATH
```

### 3. 現在のターミナルに反映させる

```
$ source ~/.zshrc
```

これで下準備は完了
あとは、作成した ~/.bin 配下に拡張子を外したShellScriptを設置

### 4. 実行権限を付与する
```
chmod +x ./設置したシェルスクリプト名
```

### 5. 実際に実行する
```
$ 設置したシェルスクリプト名
実行結果が出てきます
```


# 便利なgit関連サンプルコード

## git のブランチに名前をつける

### git_bra : 名前をつけたブランチ一覧を表示するコード
```
#!/bin/zsh

for bra in `git branch`; do
        if [ $bra = "*" ]; then
                echo -ne "\e[32m※ \e[m "
        else
                echo "${bra}"
                echo -n "└"
                git config branch.$bra.description
                echo "\n------------------"
        fi

done

echo "ブランチへのコメントは 'git_combra'"
```

### git_combra : ブランチに名前をつける
```
#!/bin/zsh

for bra in `git branch`; do
        if [ $bra = "*" ]; then
                echo -ne "\e[32m※ \e[m "
        else
                echo "${bra}"
                echo -n "└"
                git config branch.$bra.description
                echo "\n------------------"
        fi

done

echo "どのブランチのコメントを書きますか？"
read branch

git branch --edit-description $branch
```

## gitのブランチ間差分処理系


### git_export : 特定のブランチ間で差分のあるファイルのみを階層を維持して抽出
```
#!/bin/zsh


for bra in `git branch`; do
        if [ $bra = "*" ]; then
                echo -ne "\e[32m※ \e[m "
        else
                echo "${bra}"
                echo -n "└"
                git config branch.$bra.description
                echo "\n------------------"
        fi

done



echo "どのブランチとの差分を取得しますか？"
read branch

git archive --format=zip --prefix=_diff/ HEAD `git diff ${branch} --diff-filter=ACMR --name-only` -o _diff.zip
```

### git_diff ： 差分のあるファイルのファイル名を見やすく表示
```
#!/bin/zsh

brunch=$1



function select_branch {
	echo "\n------------------\n"
	for bra in `git branch`; do
		if [ $bra = "*" ]; then
			echo -ne "\e[32m※ \e[m "
		else
			echo "${bra}"
				echo -n "└"
				git config branch.$bra.description
			echo "\n------------------"
		fi

	done
	echo 比較したいブランチ名を入力してください
	read brunch 

	if [ -z $brunch ] ; then
		select_branch
	fi


}

if [ -z $brunch ] ; then
	select_branch
fi

next_target=0
for bra in `git branch`; do
	if [ $next_target = 1 ]; then
		next_target=0
		echo "\n比較ブランチ"
		echo -e "\e[32m${bra}\e[m => \e[32m${brunch}\e[m "
	fi

	if [ $bra = "*" ]; then
		next_target=1
	fi
done

echo "\n------------------\n"

for diff in `git diff $brunch --name-status`; do

	case "$diff" in
		"A" ) echo -ne "- \e[31m追加\e[m : ";;
		"C" ) echo -ne "- \e[31mコピー\e[m : ";;
		"D" ) echo -ne "- \e[33m削除\e[m : ";;
		"M" ) echo -ne "- \e[32m変更\e[m : ";;
		"R" ) echo -ne "- \e[31mリネーム\e[m : ";;
		"T" ) echo -ne "- タイプ : ";;
		"U" ) echo -ne "- 追跡無し : ";;
		"X" ) echo -ne "- 不明 : ";;
		"B" ) echo -ne "- 破損 : ";;	
		* ) echo $diff
	esac


	 

done

echo "\n------------------\n"


```