ZEALS TECH BLOG

チャットボットでネットにおもてなし革命を起こす、チャットコマース『Zeals』を開発する株式会社ZEALSのテックブログです。技術やエンジニア文化について情報を発信します。

【初心者向け】fish shellの入れ方と、rbenvではまっている話

f:id:zeals-engineer:20190411141958p:plain

こんにちは!
インターンから新卒で入社した、サーバサイドエンジニアのkanacchiです。

突然ですが、新卒や新たな環境で働くことになったエンジニアの皆さん。
社用PCが供給されてまずはじめに行うことありますよね。

そう、環境構築です。

かく言う僕も先日環境構築を行ったわけですが、その際新たにfishshellを使うことにしたので、今回はfish shellの紹介とハマったポイントなどを残していければと思います。

※注)所々でsudo対応を連発したところ、ことあるごとにpermission errorが出るようになってしまいました。(現に今もsudoで臨時対応してます、、)
この記事を見ている人は安易にsudoを連発せず、コマンドが通らない場合はきちんと原因を解決してから進んだほうが後々楽になると思います(自戒の念を込めて)

fishのinstallにあたって、大まかにはこちらの記事を参考にさせてもらいました。

dev.classmethod.jp

fishって何?

"friendly interactive shell"の略でshellの1つです。
fishのいいところは沢山ありますが、僕がおすすめしたい点は3つです。

①ターミナルがかっこいい

無駄のない、シンプルなターミナルがデフォルトです。

~ >

そして僕のターミナルはこんな感じで、左にrubyのバージョンを表示させてます。

スクリーンショット 2019-04-09 21.26.51.png

ディレクトリを移動するとこう表示されます。
緑の部分は現在のブランチです。

スクリーンショット 2019-04-09 21.27.10.png

そしてそのテーマ設定などをブラウザで扱えます。

$ fish_config

スクリーンショット 2019-04-09 21.16.58.png

② 構文エラーがわかりやすい

無効なコマンドと有効なコマンドをわかりやすく表示してくれます。

無効なコマンド

スクリーンショット 2019-04-09 21.14.53.png

有効なコマンド

スクリーンショット 2019-04-09 21.15.05.png

③コマンドの補完機能が優れている

一度打ったコマンドを学習し、コマンドを補完してくれます。
(右側にグレーで表示されます)

スクリーンショット 2019-04-09 22.15.39.png

fishをインストール

それではまず、fishをインストールしていきます。
Homebrewを使ってfishをインストールしましょう。

$ brew install fish

インストール後はfishコマンドが使えるようになります。

$ fish -v
fish, version 3.0.2

次にデフォルトshellをfishするために、shellファイルを編集します。

$ sudo vi /etc/shells
.
.
.
/bin/zsh
/usr/local/bin/fish ← この一行を追加します。

そしてfishをデフォルトshellに変更します。

$ chsh -s /usr/local/bin/fish

fishermanというfish用のパッケージマネージャーをインストールします。
これはrbenvのパス設定をするためのものです。

$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher

fishermanをインストールすることで、 fisherコマンドが使えるようになります。

$ fisher -v

テーマ設定

次にテーマ設定をします。

まずtheme-bobthefishをインストールしましょう。
theme-bobthefishはoh-my-fishというパッケージマネージャー用のテーマです。

(※参考にした記事では fisher install となっていますが、version3以降はinstall → add にコマンドが変更されました。)

$ fisher add oh-my-fish/theme-bobthefish

多くのテーマはデフォルトで入っているのフォントで対応できないのでpowerlineをインストールします。

$ git clone https://github.com/powerline/fonts.git --depth=1

$ cd fonts

$ ./install.sh

設定 → フォント → 「Powerline」とついたフォントの中から、好きなものを選択してください。

f:id:zeals-engineer:20190410094255p:plain

プラグインをインストール

僕のおすすめのプラグインはfisher zコマンドです。

$ z (フォルダ名)

で一発でそのフォルダに移動します。
インストールも簡単です。

$ fisher add z

こちらの記事で、おすすめプラグインをまとめてくれています。

futurismo.biz

fishでrbenvを使えるようにする

(※Ruby/Rails使う人向けです。)

fishはconfigファイルの場所がbash,zshと異なります。
pathの通し方は調べてみると色々出てくるのですが、僕が参考にしたのはこちらの記事です。

tech-1natsu.hatenablog.com

最初に rbenvをインストールします。

$ brew install rbenv
$ brew install rbenv ruby-build

次にrbenv pathを通します。
fish.confingを置くディレクトリまで移動します。

$ cd ~/.config/fish/

fish.configがあればそこに、なければ作成してpathを記述します。

$ touch fish.config

$ vi fish.config

以下を記述します。

# rbenv
set -x PATH $HOME/.rbenv/bin $PATH
status --is-interactive; and source (rbenv init -|psub)
.
.
.

sourceコマンドで読み込みます。

$ source ~/.fish.profile

あとは、通常のrbenvのフローと同じです。
(ZEALSでは現在ruby 2.4.1を使っています。)

$ rbenv install 2.4.1
$ rbenv local 2.4.1
$ gem install bundler

実は、ここでなぜかpermissionエラーがでてしまいました。

ERROR: While executing gem ... (Errno::EACCES)
Permission denied @ rb_sysopen - ....

sudo使いまくった

(※ここから先は直接fishと関係ありません)

エラーの対応として、

$ sudo gem install bundler

を使うとエラーが出ず通ったのですが、以降はコマンドを使う際にほとんどpermission errorが出るようになってしまいました。

原因はroot userで無理やり gem install bundlerを行ったことだと考え、./.rbenv/versions配下になるファイルの権限を全て変更してもうまくいきません...
結局半日ぐらいかけても解決策が見つからなかったので、渋々sudoを使い続けることになりました。

感想

fishは見た目もすごくイケてて機能も便利なので入れてよかったとは思っています。

しかし、bach, zshとは設定の仕方が少し違うので、社内ドキュメントで共有されたコマンドなども自分だけ設定方法が違うことがあります。
初心者エンジニアがfishを入れる際には、その点を注意した方が良いと感じました。

(※途中から発生したrbenvの問題は、解決したらまたテックブログに記事を書かせていただきます...!!)