最近新しく入った会社での仕事は、「個人用に割り当てられたEC2インスタンス」上に開発環境があります。
「EC2上でもローカルで慣れ親しんだfishシェル環境で開発をしたいぞ!!!」と思い、EC2内でfish環境を構築した備忘録です。
色々方法はあると思いますが、自分が慣れているHomebrewを使ったfishの導入方法をまとめました。
**そもそもfishってどんなヤツなん?使ったらどんないいことあるん?**ってのは、他の記事にたくさんまとまっているので、そちらを参考にしてください!
fish shellが結構良かった話 - Qiita
全訳!fishシェル普及計画
ログインShellをfishにして作業効率を改善する
サーバー環境
- EC2インスタンス
- Amazon Linux2
- t2.micro
手順
git, rbenv, Rubyのインストール
参考: EC2(Amazon Linux2)へRubyのインストールするよ2020 - Qiita
gitのインストール
最初はgitすらない状態からスタートです。
$ sudo yum install git -y
rbenvのインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv -v
// rbenvのバージョンが表示されればインストール正常にインストール完了
ruby-buildのインストール
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ sudo ./install.sh
$ rbenv install -l
// インストール可能なRubyのバージョン一覧が表示されればruby-buildのインストールは成功
Rubyのインストール
$ sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel
$ rbenv install 2.7.2 //めっちゃ時間かかりますので気長に待ちます
$ rbenv global 2.7.2
$ ruby -v
Homebrewのインストール と ユーザーのパスワード設定
fishをインストールするためのパッケージマネージャーHomebrewをインストールしようとすると、ユーザー(ここではec2-user)のパスワード入力を求められます。初期設定ではパスワードの設定をしていないので、まずはec2-userのパスワードを設定してあげます。
rootユーザーへ切り替え
パスワードの変更はrootユーザーのみ許されているので、まずはec2-userからrootユーザーに切り替えます。
$ sudo su -
ターミナルのプロンプト(左側に表示されているこういう↓やつ)が

[ec2-user@ip-xxx-xx-xx-xxx ~]$ から
[root@ip-xxx-xx-xx-xxx ~]# に切り替わったと思います。
パスワード設定
では、ec2-userのパスワードを設定します。
$ passwd ec2-user
Changing password for user ec2-user.
New password: //設定したいパスワードを入力します
$ passwd ec2-userを叩くと、Changing password for user ec2-user.というメッセージとともにNew password:を聞かれます。設定したいパスワードを入力しましょう。
次にRetype new password:と聞かれるので、もう一度入力して完了。
$ passwd ec2-user
Changing password for user ec2-user.
New password: //設定したいパスワードを入力します
Retype new password: //確認の為再度入力します
passwd: all authentication tokens updated successfully. //これでパスワードの設定完了です
忘れないように、ec2-userへ切り替えます。
$ sudo su - ec2-user
$ source ~/.bash_profile //ユーザーを切り替えたので、再度.bash_profileを読み込んであげます
Homebrewをインストール
ではHomebrewをインストールします。パスワードを聞かれたら先ほど設定したパスワードを入力します。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
インストールしたら、PATHを通してあげます。
$ echo 'export PATH=/home/linuxbrew/.linuxbrew/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ brew -v
バージョンが表示されたら、インストール成功&PATHが通っているということです。
fishのインストール
ではいよいよ、Homebrewを使ってfishをインストールします。
$ brew install fish
インストール後は、fishコマンドが使えるようになります。
$ fish -v
fish, version 3.2.1
ログインシェルにfishを設定するため、/etc/shellsにパスを追加します。
まずは、fishがある場所(フルパス)を確認
$ which fish
/home/linuxbrew/.linuxbrew/bin/fish //このフルパスをあとで追記する
/etc/shellsを編集します
$ sudo vi /etc/shells
・
・
・
/bin/tcsh
/bin/csh
/home/linuxbrew/.linuxbrew/bin/fish //この1行を追加
デフォルトログインシェルを切り替えるchshコマンドが使えるように、util-linux-userをインストールします。
【AWS】EC2でchshのシェル変更できない問題解決【zsh】
$ sudo yum install util-linux-user -y
デフォルトログインシェルをfishに変えてあげます。またパスワードを聞かれるので、入力します。
$ chsh -s /home/linuxbrew/.linuxbrew/bin/fish
一度$ exitでsshを抜けて再度sshログインしてみて、
$ echo $SHELL
/home/linuxbrew/.linuxbrew/bin/fish //fishに変わっている
$ echo $SHELLした結果が/home/linuxbrew/.linuxbrew/bin/fishに変わっていたら成功です。(プロンプトが変わっているので見た目でも違いが分かると思います!)
(補足)VSCodeのRemote SSHが使えない!?
ちなみにですが、僕は今回fishを導入したEC2上にプロジェクトのソースコードがあり、VSCodeのRemote SSH機能を使ってVSCode上でソースの編集を行っているのですが、なんとデフォルトシェルをfishにした状態ではRemote SSHで接続できないことがわかりました。
VSCode の Remote - SSH 機能を使って EC2 上で開発する
VSCode Remote SSH接続できない
なので、僕はデフォルトログインシェルはbashのままで、sshログイン後に
$ fish
を叩いてfishに切り替えています。この辺は各々の作業環境に合わせて良き方を選んでください。
(番外編)ちょっとだけカスタマイズして良い感じにする
ここまででfishのインストールが完了したので記事としてはもう終わりでも良いのですが、せっかくなので少しだけカスタマイズしてさらに使いやすくしちゃいます!
テーマを設定する
fishermanのインストール
まずは、fishermanというfish用のパッケージマネージャーをインストールします。
$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher
$ fisher -v //バージョンが表示されたらインストール成功です
oh-my-fish/theme-bobthefishをインストール
いろんな記事でオススメされていたので僕も導入してみた oh-my-fish/theme-bobthefish というテーマを入れましょう!
$ fisher install oh-my-fish/theme-bobthefish
※ちなみに、パッケージ追加用のinstallコマンドは、fisherのバージョンが古いやつだとaddだった時代もあるので、エラーが出た場合はaddで試してみてください。fish関連の記事を調べてヒットするのはaddコマンドを紹介したものが多いです。
oh-my-fish/theme-bobthefishのインストールが完了しましたが、多くのテーマではPower fontsというフォントを入れないと文字化けしてしまうので、入れてあげます。
$ git clone https://github.com/powerline/fonts.git --depth=1
$ cd fonts
$ ./install.sh
ターミナルのアプリがiterm2だったら、Preferences > Profiles > Text > Change Fontから、好きなフォントを選んでください。
プラグインを入れる
僕もfish使い始めてまだ数ヶ月で全然使いこなせているわけではありませんが、オススメプラグインを2つほど紹介します。
jethrokuan/z
$ fisher install jethrokuan/z
華麗にディレクトリ移動してくれるプラグインです。すべてのディレクトリへ直接移動することができます。
以下は~から$ z foli を叩いて、 /Applications/MAMP/htdocs/folicolleに移動してくれています。

fish shellが結構良かった話によると、
原理としてはコマンドの履歴のパスから指定された相対パスに部分一致するパスを検索しているそう。行ったことあるディレクトリにしか行けないです。
foliでfolicolleディレクトリに行ってくれてかなり助かります。
jethrokuan/fzf
fzfはctl + rを使ったコマンドの履歴絞り込みができるツールです。こいつはマジで使えます。
$ brew install fzf
$ fisher install jethrokuan/fzf
また、~/.config/fish/config.fishというファイルを作って、下記の設定を追加します。
$ vi ~/.config/fish/config.fish
↓この2行を追加
set -U FZF_LEGACY_KEYBINDINGS 0
set -U FZF_REVERSE_ISEARCH_OPTS "--height=100%"
FZF_LEGACY_KEYBINDINGSはfishの過去バージョンとコンフリクトが発生していたため、新しいキーバインドを使用するのに必要です。
FZF_REVERSE_ISEARCH_OPTSは履歴のフィルタリング時に入力欄をフルスクリーンで表示するための–heightオプションを設定しています。
これで、ctl + rで快適にコマンド履歴を検索できるようになり、素敵なターミナルライフを送れることでしょう!!!
もし、
↓この2行を追加
set -U FZF_LEGACY_KEYBINDINGS 0
set -U FZF_REVERSE_ISEARCH_OPTS "--reverse --height=100%" //--reverseオプション追加
とした場合は、ctr + rで履歴検索モードに入ったとき一番上にコマンド入力欄が出現し、履歴が上から順に並びます。これはお好みで。
参考
git, rbenv, Ruby, Homebrewインストール
rootユーザーへの切り替えやパスワード変更など Linuxコマンド系
- 【 passwd 】コマンド――パスワードを変更する - @IT
- 【su】Linuxでユーザーを切り替えるコマンド - UX MILK
- 【 su 】コマンド――スーパーユーザー(rootユーザー)の権限でシェルを実行する - @IT
- 【AWS】EC2でchshのシェル変更できない問題解決【zsh】

