ターミナルに色を付ける!ついでにbashの設定ファイルをgitで管理する(初心者向け)

BPSの福岡拠点として一緒にお仕事させていただいています、株式会社ウイングドアのウメバヤシです。
今年の9月からジョインさせていただきました。
入社後はまずMacの初期設定から始めたのですが、コマンドラインを見やすくするためにターミナルのカラー変更をしたので、今回はその方法を紹介します。ついでにその設定ファイルをgitでバージョン管理するところまでをやりたいと思います。

概要

はじめに

今回の内容で最終的には、Macのコマンドラインツールであるターミナルでlsした時の色を変え、bashの設定ファイルをgitで管理して、他のPCでも楽に環境を再現できるようにします。より高度な環境構築を行いたい場合は、この内容を応用すれば、ツールの導入まで自動化できたり、よりカスタマイズされた開発環境を再現できるようですが、今回はそのきっかけとなる基本的な内容を紹介します。

作業を行なったPCの環境

  • PC: MacBook Air (Retina, 13-inch, 2019)
  • OS: macOS Mojave 10.14.5
  • コマンドラインツール: ターミナル(実際にはiTerm2で作業しましたがターミナルでも同じです)
  • shell: bash
  • バージョン管理: GitHub

Macには~/.bash_profileと~/.bashrcがない?

まずホームディレクトリを確認したら、どうもMacには初期状態で~/.bash_profile~/.bashrcがないらしいです。
/etc/bashrc/etc/profileはあるので、実際の動作は問題ないと思いますが、今後環境変数などを追加する際に、ユーザーレイヤーで設定したほうがいだろうなと思ったので、そこから始めました。

.bash_profileと.bashrcの作成

  • ホームディレクトリに移動
$ cd ~
  • .bash_profile.bashrcを作成(すでにある場合は省略)
$ touch .bash_profile
$ touch .bashrc
  • .bash_profileを編集する
# ~/.bash_profileを読み込んだ際に~/.bashrcを読み込むようにします。
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

aliasの設定(ターミナルに色付け)

  • aliasの設定をbashrcに書く
# lsコマンドを実行した際に、ls -Gコマンドが走るようにします。
alias ls='ls -G'

以上のことをおこなった後に、ターミナルを再起動すれば、lsコマンドを実行した時にファイルやディレクトリなど属性で色分けされるようになります。これだけでもすこしは見やすくなると思います。

ほかにも色々弄ればbashのカスタマイズが可能ですが、ここでは一例として色を変えてみました。
色だけ変えたい場合は、ここまでの内容で完了します。

見栄えがよくなったし、視認性も高まったので、少しは作業効率も上がるのかなーと思っています。
これだけだと味気ないですが、以下の画像みたいにプロンプトの表示や色も変えることもできます。

どうせならdotfileをgitで管理しよう

dotfileとはいわゆるファイルの先頭が「.(ドット)」で始まる、隠しファイルのことで、先述したbashの設定ファイルである.bash_profile.bashrc然り、ホームディレクトリにはいろんな設定ファイルがdotfileで存在します。これから設定関係をいじっていこうと思うので、どうせならgitに慣れるためにも、GitHubで管理しようと思いました。そうしておけば、PCが変わった際もGitHubからリポジトリを持って来れば、簡単に環境再現できます。

GitHubにリポジトリを作る

GitHubにてusername/dotfilesという名前でリポジトリを作成後、クローンしてローカルに持ってくる。
(GitHubとSSHの説明は省きます)

$ cd ~
$ git clone git@github.com:username/dotfiles.git
# usernameのところは自分のGitHubアカウント名

※先にローカルでもろもろやった後、initからpushまで行う方法もありますが、cloneしたほうがわかりやすいかなと思ったので、今回はこちらの方法をとりました。

dotfileを移動

先ほどcloneしたディレクトリに~/.bash_profile~/.bashrcを移動する。
他にも管理したいdotfileがあればそれも追加します。

$ mv ~/.bash_profile ~/.dotfiles
$ mv ~/.bashrc ~/.dotfiles
...
...
...

シンボリックリンクを貼る

設定ファイル(dotfile)がホームディレクトリから移動するので、もともとあった場所にシンボリックリンクを貼ります。こうすることで、dotfilesディレクトリの中のbashの設定ファイルへの変更がホームディレクトリに反映されるようになります。
ただ、一つ一つシンボリックリンクを貼るとなると、管理するファイルが増えてきた時に大変になるので、次でシンボリックリンクを貼るためのスクリプトを作成します。

# 以下は今回実行しません。
ln -snfv ~/dotfiles/.bash_profile ~/.bash_profile
ln -snfv ~/dotfiles/.bashrc ~/.bashrc
...
...
...
# 一つ一つシンボリックリンクを貼るのは面倒...

スクリプトの作成と実行

  • setup.shを作成する
    一般的にはこのデプロイ用のファイルは、setup.shやinstall.shなどと命名するみたいですが、ここではsetup.shとします。
$ cd ~/dotfiles
$ touch setup.sh
  • setup.shの編集
#!/bin/bash

DOTFILES_PATH=~/dotfiles

# リンクを貼らないディレクトリやファイルは以下のコードで除きます
for f in .??*
do
  [ "$f" = ".git" ] && continue
  [ "$f" = ".DS_Store" ] && continue

  ln -snfv "$DOTFILES_PATH/$f" "$HOME/$f"
done
  • setup.shの権限変更
$ chmod 755 setup.sh
  • setup.shの実行
$ ./setup.sh

これで、ホームディレクトリにシンボリックリンクがちゃんと作成されていれば、バージョン管理の準備は完了です。

dotfileの変更をGitHubに反映

ローカルでの環境は整いましたが、リモートリポジトリに反映されていないので、一応コミットしてプッシュします。
これでdotfileのバージョン管理のベースができました!
反映後のGitHubリポジトリは以下のような感じ。

あとは自由に設定いじってgitで管理。
別のPCに環境構築する場合は、git cloneしてsetup.shを実行するだけ。

こうしておけば後から設定を追加したり変更すればするほど、別のPCに同じ環境を楽に持って来られます。

さいごに

今回の内容は見た目的にも変化が見られますし、shellの理解を深めることも兼ねて、楽しみながら実践できました。
bashの設定ファイル以外にも、色々と管理ができそうなので、これから少しずつ追加していきたいと思います。
GitHubでdotfilesで検索すれば、諸先輩方が作っているdotfilesを見られるので、参考にしてみるのもいいかもしれません。

そういえばmacOSは次に出るCatalinaから標準shellがzshになるみたいですね。
zshも便利そうで気になっているので、そのうち使ってみたいと思います。



株式会社ウイングドアでは、Ruby on RailsやPHPを活用したwebサービス、webサイト制作を中心に、
スマホアプリや業務系システムなど様々なシステム開発を承っています。

関連記事

Linux: .bashrcと.bash_profileの違いを今度こそ理解する

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

wingdoor

株式会社ウイングドアは福岡のシステム開発会社です。Ruby on RailsやPHPを活用したwebサービス、webサイト制作を中心に、 スマホアプリや業務系システムなど様々なシステム開発を承っています。 中途採用を絶賛募集しています! https://wingdoor.co.jp/

wingdoorの書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ