21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最強の環境切り替えツール2015

Posted at

最強の環境切り替えツール2015

様々な事情から、同一のマシンに複数の環境が混在することはよくある。Rubyを使っていてもあるプロジェクトは2.1系だが、あるプロジェクトは1.8系じゃないと動かないみたいなパターンだ。また、プロジェクトごとに環境変数を設定したり、書式設定をしたりすることもある。そういった環境の混在をうまくさばくためのツールを導入しよう。

  • direnv
  • anyenv
  • editorconfig

異論・反論・ほかに導入すべきツールなどがあれば是非ともコメントしてほしい。

direnv

direnv はディレクトリ単位で環境変数を切り替えることができる。よく使われる用途としてはパスワードを安全に保持する、言語の環境を整えるなどである。

インストール

Macでのインストールならば簡単だ。

$ brew install direnv

ソースからインストールする場合にはGolangが必要になる。

git clone https://github.com/direnv/direnv
cd direnv
make install

実行バイナリをインストールするだけではインストールは完了しない。direnvは仕組み上シェルのcdコマンドを乗っ取る形なので、シェル上でインストールするためのコマンドを実行する必要がある

eval "$(direnv hook bash)"

bash の場合は、上記コマンドを ~/.bashrc に記述する。ほかにもtcsh, zsh, fish などにも対応している。詳細は公式を見てほしい。

gitで無視したい

direnv では設定ファイル .envrc を各ディレクトリに作成するため、gitには.envrcを無視するように設定したい。

vi `git config --get core.excludesfile`

このファイルに.envrcを追加するといいだろう。

使い方

$ cd ~/hoge
$ echo 'export PASSWORD="password"' > .envrc
$ direnv allow .

こうしておけば、~/hoge のディレクトリに移動した場合のみ、環境変数にPASSWORDが設定される。もちろんPATH環境変数をいじることも可能だ。

秘密情報を環境変数で受け渡しすること

たとえばウェブアプリを作ったりする場合、DBの接続情報などを設定ファイル(と、称したDSL, ソース, YAML, JSON, ini)などを置くケースは多い。ただ、これには問題があってVCSで管理下におくべきかどうか、ファイルが混ざる危険、インストールが面倒になったりなどの問題がある。

そこで設定情報は環境変数に切り離そう。direnvを使わずに環境変数を設定する方法もあるし、PaaSなどでは秘密情報を環境変数に設定できるものもよくある。

あるいはちょっとしたスクリプトを書くときに、ついついスクリプトに直接パスワードを書いてしまう人はいないだろうか?パスワードを環境変数に分離する癖をつけておけば事故の可能性は減る。

anyenv

direnvが汎用的な環境切り替えツールだとしたら、anyenvは言語の環境切り替えに特化したツールだ。anyenv自体には言語の切り替え能力はなく、実際に切り替えをする個別のツールを管理するためのツールなのだ。

$ anyenv install ndenv
$ ndenv install v4.0.0
$ ndenv global v4.0.0

最初のanyenv install ndenvで、Nodeを切り替えできるndenvをインストールする。次のndenv install v4.0.0でnode 4.0.0をインストールし、ndenv global v4.0.0でグローバルで使うNodeを4.0.0に設定する。

direnvでも言語の切り替えはやろうと思えばできるが多少面倒だしできることはanyenvの方が多いのでdirenvを使ってる人でもanyenvがおすすめだ。

公式などを確認してほしいが、R言語, Crystal, Erlang, Elixir, Haskell, D言語, Java, Lua, Node, PHP, Perl, Python, Ruby, Go, Scala(sbt/scala) などに対応している。

インストール

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ git clone https://github.com/znz/anyenv-git.git $(anyenv root)/plugins/anyenv-git

your_profileは、bashユーザーならbash_profileなどと読み替えてほしい。

EditorConfig

プロジェクトでインデントについてもめることはないだろうか?EditorConfigを使えば、たとえばプロジェクトごとにインデントなどのルールを統一することができる。

EditorConfigは、.editorconfigという設定ファイルの書式とファイルの扱いに関する規定(プロトコル)と、各種エディタの実装の二つによって成り立っている。よくある使われ方は~/.editorconfigに全体的な設定を記述しておき、個別のプロジェクトごとに.editorconfigを設定するパターンだ。

インストール

EditorConfig対応のエディタを使うか、プラグインなどを導入すればいい。公式にアクセスすると、たとえばIntelliJ IDEA ならばプラグインを入れるまでもなく対応しているとわかるし、SublimeTextならばプラグインが存在していることがわかる。

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?