【初学者向け】最初にやるべきシェル設定

# はじめに
筆者は、未経験から自社開発のスタートアップ企業に転職して1ヶ月のサーバーサイドエンジニアです。

実際に開発チームに加わり実務に関わると、独学でプログラミング学習していた頃に知っておきたかった！というようなことばかりで、現在独学で学習されている方向けに少しでも役立つ情報を発信できたらと思い筆を取りました。
今回は、もっと早く知っておきたかった作業効率爆上がりのシェル設定について紹介します。

### 今回紹介するシェル設定
- コマンド入力が楽になるaliasの設定
- Gitブランチ表示
- pecoを用いたコマンド履歴検索
- 【番外編】初学者の頃にやっておきたかっこと

#コマンド入力が楽になるaliasの設定
例えばGitで変更内容を保存し、GitHubに最新バージョンをプッシュするまでに`git add .`、`git commit -m "コミットメッセージ"`、`git push origin HEAD`と最低でも3つのコマンドを入力する必要があり、毎度毎度これを手入力するのはかなり面倒です。これらを`git add .`->`ga .`であったり、`git commit -m "コミットメッセージ"`->`gc "コミットメッセージ"`のように省略形を自分で設定できるのがaliasという機能です。

aliasの設定にはまず、ターミナルで以下のコマンドを入力します。

```:ターミナル
vi ~/.zshrc
```
これは、ホームディレクトリ(~/)下にある、Zsh設定ファイル(.zshrc)をviというテキスト編集エディタで開くという意味です。

このviテキストエディタの操作は少し特殊なのでここでは詳しい説明は割愛しますが、初期の状態(ノーマルモード)では入力ができないので、キーボードの`i`キーを押して入力可能なモード(インサートモード)に入り、以下の設定コードをコピペします。

```:.zshrc
# alias
alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
```
コピペできたら、`Esc`を押しノーマルモードに戻り、次に`:wq`(w：保存して、q：閉じる)と入力してエディタを閉じます。

最後に以下のコマンドを入力して設定を反映させます。

```:ターミナル
source ~/.zshrc
```
試しにGitでバージョン管理しているリポジトリ上で、ターミナルに`gs`と入力してみてgitステータスが表示されたら成功です。
同じ要領でどんどんaliasを追加しちゃいましょう！

# Gitブランチ表示
Gitでバージョン管理していると、今どのブランチにいるか忘れていて間違えてmainブランチに書いてしまっていた！みたいなことありませんか？
今から紹介する設定により、常に今いるブランチを表示できて、更に直前のコミットから変更があるか、add状態のデータがあるかが色でわかるようになります。

では、aliasの時の要領で下記の設定コードを`.zshrc`に追加してください。
( `vi ~/.zshrc` -> `i` -> `コピペ` ->  `Esc`-> `:wq` > `source ~/.zshrc` )

```:.zshrc
# プロンプト設定
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{magenta}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{yellow}+"
zstyle ':vcs_info:*' formats "%F{cyan}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd () { vcs_info }

PROMPT='
%F{white}%~%f%F{cyan}$vcs_info_msg_0_%f
%F{yellow}$%f '
```
ターミナルからGit管理しているリポジトリに移動した際に、下のようにブランチが表示されていたら完了です。
表示項目や表示色等を自分で設定できるので、設定方法を調べて自分好みにカスタマイズしましょう！
![スクリーンショット 2021-12-12 15.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277475/f79c45fc-2a12-d6a9-4d50-3dcd362d978d.png)

# pecoを用いたコマンド履歴検索
Gitのalias機能でコマンドの入力スピードがアップしましたが、更にコマンド入力を快適にするツール'peco'を紹介します。pecoを使用することで、過去の検索履歴からコマンドを検索して実行することができます。

まず、ターミナルで以下のコマンド実行してpecoをインストールします。

```:ターミナル
brew install peco
```
次に以下の設定を`.zshrc`に書き込みます。

```:.zshrc
# ヒストリ (履歴) を保存、数を増やす
HISTFILE=~/.zsh_history
HISTSIZE=100000
SAVEHIST=100000

# 同時に起動した zsh の間でヒストリを共有する
setopt inc_append_history
setopt share_history

#pecoでhistory呼び出し
function peco-history-selection() {
    BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`
    CURSOR=$#BUFFER
    zle reset-prompt
}

zle -N peco-history-selection
bindkey '^R' peco-history-selection
```
貼り付けられたら、再度ターミナルに戻って`ctr + R`を入力しましょう。
`QUERY>`という行に続いて、過去の検索履歴一覧が表示されたらOKです。

また、下記のようにコマンドの一部を入力して検索履歴から実行コマンドの検索ができ、これでコマンド入力が爆速になります。

```:ターミナル
QUERY> console
docker-compose exec app bundle exec rails console
rails console
```

# 【番外編】初学者の頃にやっておきたかったこと
### Gitを用いたバージョン管理とGitHub草生やし

転職活動用のポートフォリオサイトの作成は個人での開発になるため、Gitを使ったバージョン管理をあまり意識せずにポートフォリ作成を進めている方も多いのではないでしょうか。しかしバージョン管理せずに開発を進めると、新しいライブラリのインストールや機能の追加で失敗した際に、どこで不具合が起こってどうやって戻せば良いか分からない大惨事になりかねません。(筆者自身何度も絶望を経験しました、、、)
また、Gitでのバージョン管理はチーム開発では必須スキルなので、ある程度操作に慣れておくとは転職活動時の好印象ポイントにもなります。

また、Gitのバージョン管理をオンライン上できるサービスがGitHubで、チーム開発時にはこちらも必須ツールになります。GitHubのマイページにはコントリビューション(開発アクテビティの活発さ的な感じ？)が可視化されており、活動頻度が緑のエリアで可視化されることからエンジニアの中では「草を生やす」と言われています。草を増やしておくことは転職活動でのアピールにもなるので是非早い段階からGitHubを積極的に活用することをお勧めします！
![スクリーンショット 2021-12-12 14.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277475/a5bf1893-34b6-f584-bc74-67152988940e.png)
↑筆者の2021年のコントリビューション。7月から10月までスカスカ笑

### SQLクライアントツールの利用
エンジニアを目指している方なら、メインのプログラミング言語と合わせてデータベースまわりは一通り触れることになると思います。その際にとても便利なのがSQLクライアントツールで、データベースのレコードを表形式で確認できたり、直接SQLを書いてデータベースの操作ができます。
筆者が独学でRuby on Railsの学習をしていた頃、データベースの中身を確認する際に、毎度railsコンソールから`User.all`などと実行してターミナル上で中身を確認していて非常に不便だったので、これは早く知っておきたかった、、、。
![スクリーンショット 2021-12-12 15.06.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277475/7ed623c8-665f-df75-c665-cab7cdd4ba1e.png)
↑テーブルのレコードがこんな感じで表示されます。

また、SQL文を実行できるのでSQLの学習にもなります。
転職活動時の面談で「SQLはどれくらい書けますか」という質問が結構あったのですが、筆者の場合Ruby on Railsをメインで学習しており生のSQL文を書いた経験がほとんどなくて回答に困ったのを覚えています。エンジニアにとってSQLは必須スキルなので、実際のデータベース操作からSQLに慣れておくのは転職活動時の好印象ポイントになると思います！
![スクリーンショット 2021-12-12 15.10.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277475/3a694b5c-b9e2-2dd1-4a53-0a2c5e77f1c0.png)
↑こんな感じでSQL文を実行できます。

筆者は現在Table PlusというSQLクライアントツールを使用していますが、調べてみると便利なツールがいくつかヒットするので、自分に合ったツールを扱えるようになっておくと良いと思います。

# 最後に
他にもオススメのシェル設定や、作業環境まわりで必須のツールや設定等あれば是非コメント欄で教えてください！

### 筆者の略歴
- 2019年3月：私立大学大学院(建築専攻)卒業。
- 2019年4月：大手ゼネコン入社。
- 2020年4月頃〜：デジタルデザインや単純作業の自動化を通してプログラミングにハマり、エンジニア転職を決意。プログラミング学習(主にRuby on Rails)を始める。
- 2021年6月：ポートフォリオ([Photographer](https://photographer-sk.herokuapp.com/))を作成し転職活動。現在の会社から内定。
- 2021年10月：前職を退職。
- 2021年11月〜：現在の会社に入社。