こんにちは。
Web エンジニアの Hayato Yamashita です。
昨今、Docker が大きな盛り上がりを見せており、ネイティブな開発環境を整える機会が少なくなってきました。
少なくなってきましたが、まだあります。
そんな Docker を使わない/使えない場合に備えて、ネイティブでマルチな開発環境を楽に整えるため、fish shell と anyenv の導入方法について紹介します。
本記事のポイント
fish shell で anyenv を使うにあたって、公式サイトに書いてある導入方法は bash や zsh 向けになっています。
そのため、一部書き方が異なっていて詰まってしまう可能性があります。
本記事では、そうしたところで詰まらないよう動作確認した上でのコマンド、設定内容を記載していますので、参考にしてください。
fish shell とは
bash や zsh に並ぶ、コマンドラインシェルを扱うためのツールです。
個人的な感想ですが、以前は bash を使っていたところ、コマンドラインシェルを使う頻度が上がってくるにつれ、辛く感じるようになってきました。
最低限のことができる bash ではあるのですが、高機能にしたければ、しっかりカスタマイズしないといけません。
しかし、カスタマイズしすぎると環境が汚れていく感じがしましたし、あとみんな高機能なコマンドラインシェルを使っているのに「俺だけ bash か……」という感覚が辛かったです。笑
移行先として代表的なのは zsh ですが、高機能ではあるものの、細く大量の設定が必要そうで、なかなか手が出ませんでした。
そこで手を出したのが fish shell です。
非常に簡単な設定のみで高機能なコマンドラインシェルの恩恵を受けられるので、とても便利でした。
anyenv とは
rbenv を代表とする、*env をまとめて扱うための env です。
ゲシュタルト崩壊しそうですね。
各プログラミング言語のバージョン管理をする *env は大変便利なのですが、1つの言語に対して複数のツールが用意されていることがあり、どれを使うか迷うことがあります。
具体的には、以下のような感じです。
- Node.js のためのバージョン管理ツールは ndenv や nodenv などがある
- PHP のためのバージョン管理ツールは phpbrew や phpenv などがある
- Ruby のためのバージョン管理ツールは rvm や rbenv などがある
*env だったり *vm だったり *brew だったりするので、どの言語がどの suffix で管理していたのか忘れてしまうことがありそうです。
また、複数案件を掛け持ちする場合、言語ごとに *env を導入するので、環境が煩雑になりがちです。
そこで便利なのが anyenv。
上記のような言語のバージョン管理ツールを *env で統一し、それらのバージョン管理をするためのツールになっています。
2018年10月現在、anyenv では以下の *env ツールが扱えます。
Available **envs: Renv crenv denv erlenv exenv goenv hsenv jenv luaenv ndenv nenv nodenv phpenv plenv pyenv rbenv sbtenv scalaenv swiftenv
fish shell の導入
前提条件
- macOS High Sierra 10.13.6
- Homebrew をインストール済み
インストール
以下のコマンドで簡単にインストールできます。
楽ですね。
brew install fish
インストール先の確認
インストール後、fish shell のインストール先を確認します。
この後、fish shell を扱えるよう /etc/shells
に対して追記するために必要な情報です。
Homebrew でインストールしたので、大体は /usr/local/bin/fish
のはずです。
which fish
/etc/shells
に追記
fish shell を扱えるように、以下のコマンドを実行し、先ほど取得した fish shell の実行ファイル PATH を追記します。
パスワードを聞かれると思いますので、管理者ユーザのパスワードを入力してください。
sudo -e /etc/shells
デフォルトのコマンドラインシェルに設定
デフォルトのコマンドラインシェルを fish shell に変更するため、以下のコマンドを実行します。
ここでもパスワードを聞かれると思いますので、管理者ユーザのパスワードを入力してください。
chsh -s /usr/local/bin/fish
以下のようなメッセージが出てきたら、無事に fish shell を扱えるようになります。
Changing shell for hayato-yamashita.
fish shell のカスタマイズ方法などは公式サイトなどをご覧ください。
本記事では、続いて anyenv の導入に移ります。
anyenv の導入
前提条件
- macOS High Sierra 10.13.6
- git をインストール済み
インストール
以下のコマンドで簡単にインストールできます。
こちらも楽ですね。
git clone https://github.com/riywo/anyenv ~/.anyenv
anyenv の PATH を通す
次に anyenv の PATH を通すため、以下のコマンドを実行して、fish shell の config に追記してください。
fish shell の config の場所が違うようであれば、適宜読み替えてくださいね。
echo 'set -x PATH $HOME/.anyenv/bin $PATH' >> .config/fish/config.fish exec fish -l
anyenv のサイトに書いてあるコマンドとは違うので、注意してください。
fish shell 向けのコマンドに変えてあります。
各 *env のインストール
ここでは nodenv, phpenv, rbenv をインストールします。
Node.js を扱うための *env は複数ありますが、ここでは開発が活発な nodenv を対象とします。
nenv や ndenv ですと、fish shell と相性が悪く、うまく動作しない可能性がありますので、ご注意ください。
インストールは、anyenv の install コマンドを使います。
anyenv install nodenv anyenv install phpenv anyenv install rbenv
profile に設定を追記
各 *env のインストールが終わったので、それらを扱えるようにしましょう。
以下のコマンドを実行して、fish shell の config に追記をします。
echo 'eval (anyenv init - | source)' >> .config/fish/config.fish exec fish -l
ここも anyenv のサイトに書いてあるコマンドとは違うので、注意してください。
fish shell 向けのコマンドに変えてあります。
インストール後の確認
以下のコマンドを実行して、インストールおよび設定反映ができたか確認しましょう。
anyenv versions
実行結果として、以下のようにインストールした各 *env の名前が表示されたら大丈夫です。
nodenv: * system (set by ~/.anyenv/envs/nodenv/version) phpenv: * system (set by ~/.anyenv/envs/phpenv/version) rbenv: * system (set by ~/.anyenv/envs/rbenv/version)
お疲れ様でした。
これで anyenv を通して各 *env を扱えるようになりました。
あとは、各 *env で好きな言語のバージョンをインストールし、使用していただければと思います。
おわりに
以上で、fish shell と anyenv の導入は完了です。
Docker も楽ですが、使えなくてもこんな感じで開発環境の下準備ができるので楽ですね。
本記事の内容が、お役に立てれば幸いです。