direnvを使う
最近なぜかdirenvが流行っているようでよく耳にする。direnvは今どき注目されるようでもないような気がするが、非常に便利なツールだ。
Pythonにpyenvやvirtualenvwrapper、Rubyにrbenv、PHPにphpenvの様に「*env」を別々に使っている方、それが不便で全てを統合したラッパ「anyenv」を使っている方がもしdirenvを知らない時のために記事にしておく。
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (19件) を見る
direnvは簡単に言うと、「ディレクトリに環境を割り当てるツール」で、「環境を割り当てる」とは単純にディレクトリによって環境変数を切り替えるツールになる。
例えば特定のディレクトリにcdすると、そのディレクトリに設定されている環境変数を自動的に読み込む。その環境にPythonやRuby、PHPの環境を指定したり設定を指定しておくことで、そのディレクトリ配下では自動的にその設定が適応されるというものになる。
例えば、virtualenvを使っていると切り替え忘れで悩むことがあるが、自動的に切り替えるようにしておけばこのミスがなくなる。
よって、バージョン以外にも環境変数で操作できるものであればdirenvで全て調整できるものになる。例えば、プログラムから環境変数を読み込むようにしておき、ディレクトリの環境変数にアカウント情報を設定しておけば、ディレクトリに応じて自動的にアカウントが変更される。
これは素晴らしい。
direnvのインストール
direnvはUbuntuのパッケージには含まれていないので自分でビルドする必要がある。ビルド後のファイルは単一になるのでインストールは簡単だ。
まず、direnvはgoで書かれているので、go関連のパッケージをインストールしておく必要がある(以下はUbuntu14.04での作業)。
% sudo apt-get install golang
そして、これでビルドの準備が整ったのでソースのダウンロードとビルド。
% git clone https://github.com/zimbatm/direnv.git % cd direnv % sudo make install
これで完了。goなのでビルド時間も非常に短く素晴らしい。goいいよ。go。
direnvを使う設定
direnvは上に書いたように「ディレクトリに移動したら環境変数を切り変える」と言う超魔術的な手法を利用しているので、シェルにその超魔術を設定しておく必要がある。単純に言えばコマンドが実行されるとディレクトリの移動かチェックするためにフックするというものだ。
使い方
環境変数を変更したいディレクトリ内で以下のコマンドを実行する。
direnv edit .
これでシェルに設定しているエディタが立ち上がるので、このディレクトリで変更、追加する環境変数を書いておく(もちろんdirenvを使って、ディレクトリに応じてエディタを変更することもできる。すばらしい。)。編集した設定は「.envrc」として保存される。
export PATH=$PWD/bin:$PATH
こんな感じで環境変数を追加できる。
そして、例えばvirtualenvを使うにはこうする。これはマニュアルを読んだ使い方ではなく自分で勝手にやってることなので正しくないかもしれない。詳しくはマニュアルを参照されたし。
% mkdir .direnv % virtualenv .direnv/virtualenv --python /usr/bin/python3.4
これで好きな環境を作っておく。そしてこのvirtualenvを自動的に使うように設定する。
% cat .envrc
use_python() {
echo "Python $1"
}
use python 3.4
layout python
これで自動的に設定されるようになる。
% cd .. direnv: unloading % python --version Python 2.7.6 % cd foo direnv: loading .envrc direnv: using python 3.4 Python 3.4 direnv: export +VIRTUAL_ENV ~PATH % python --version Python 3.4.0
これは渋い。正しいやり方を知ってる方がいれば教えて下さい。
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (127件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (19件) を見る
- 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/05/28
- メディア: 大型本
- 購入: 33人 クリック: 791回
- この商品を含むブログ (91件) を見る
- 作者: ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2012/03/26
- メディア: 単行本
- 購入: 6人 クリック: 765回
- この商品を含むブログ (27件) を見る