anyenvで開発環境がスッキリした

記事タイトルとURLをコピーする

こんにちは、技術1課の千葉です。

わたしたちサーバーワークスは「作らないSIer」と称して、アプリケーション開発をできるだけ避けつつもお客様の要望は出来るだけ満たす、という新しいチャレンジを行っています。

実際は何も作りません。ってことではなく、本当に必要なものだけを丁寧に作り品質を維持しつづけると言った考えになります。
「作らないSIer」の詳細については『作らないSIerの代表がDevLOVE代表と対談した話』の記事をご覧ください。

例えば、 AWS IoT から取得したセンサーデータを Kinesis Firehose で受けて AWS Lambda で、ちょっと複雑な計算処理をさせて Redshift に格納する。なんてケースでは開発をお手伝させて頂きます。

私事ですが、今月で技術1課に異動して1年が経ちました。
ありがたいことに、お手伝いさせて頂くプロジェクト数が順調に増えており、プロジェクト毎に利用する言語 / バージョンもバラバラで Ruby は rbenv, Python は pyenv を使って、プロジェクト毎に利用する言語のバージョンを管理していました。
今回は新たに node.js を使うことになったので『 ndenv を入れるんだな、zshrc が増えてウンザリ』と思っていたところにみつけたのが、今回ご紹介させていただく anyenv です。コレすごいんです!

# anyenv ができること

ざっくり説明すると↓こちらの言語の **env をまとめて管理することが可能になります。
これまでは、その都度リポジトリからcloneして、zshrc を編集して。ってインストール作業が必要でしたが、これからはコマンドひとつで利用できるようになります。

$ anyenv install -l
Available **envs:
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  ndenv
  nenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv

# anyenv のつかいかた

インストールもとってもカンタンです。(他の **env とほとんど一緒)

$ 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

使い方は **env のインストール以降は、これまでどおりの手順と一緒です。
以下の例では pyenv をインストールして AWS Lambda の開発用に Python 2.7.11 の実行環境を準備しています。

# pyenv のインストール
$ anyenv install pyenv
/tmp/pyenv.20170308025250.16889 ~/Developments/example
Cloning https://github.com/yyuu/pyenv.git...
  {中略}
Install pyenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.


# シェルの再起動
$ exec $SHELL -l


# Python 2.7.11 のインストール
$ pyenv install 2.7.11
Downloading Python-2.7.11.tar.xz...
-> https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz
Installing Python-2.7.11...
Installed Python-2.7.11 to /home/xxxxx/.anyenv/envs/pyenv/versions/2.7.11


# 利用するバージョンの設定
$ pyenv local 2.7.11


# バージョンの確認
$ python --version
Python 2.7.11

また、 pyenv-virtualenv といったプラグインをインストールするディレクトリは /home/xxxxx/.anyenv/envs/pyenv/plugins のように、これまでと階層が変わることにもご注意ください。
以下の例では、pyenv-virtualenv をインストールしています。

# pyenv-virtualenv のインストール
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.anyenv/envs/pyenv/plugins/pyenv-virtualenv
Cloning into '/home/xxxxx/.anyenv/envs/pyenv/plugins/pyenv-virtualenv'...
remote: Counting objects: 1871, done.
  {中略}
Resolving deltas: 100% (1279/1279), done.
Checking connectivity... done.


# 仮想環境の作成
$ pyenv virtualenv 2.7.11 example-prj
New python executable in /home/xxxxx/.anyenv/envs/pyenv/versions/2.7.11/envs/example-prj/bin/python2.7
Also creating executable in /home/xxxxx/.anyenv/envs/pyenv/versions/2.7.11/envs/example-prj/bin/python
  {中略}
Requirement already satisfied (use --upgrade to upgrade): appdirs>=1.4.0 in /home/xxxxx/.anyenv/envs/pyenv/versions/2.7.11/envs/example-prj/lib/python2.7/site-packages (from setuptools)
Requirement already satisfied (use --upgrade to upgrade): pyparsing in /home/xxxxx/.anyenv/envs/pyenv/versions/2.7.11/envs/example-prj/lib/python2.7/site-packages (from packaging>=16.8->setuptools)


# 利用するバージョンの設定
$ pyenv local example-prj


# バージョンの確認
$ pyenv versions
  system
  2.7.11
  2.7.11/envs/example-prj
* example-prj (set by /home/xxxxx/Developments/example/.python-version)

# まとめ

ひとつの開発プロジェクトに、じっくりと腰を据えていた頃には必要ありませんが、わたしのように複数案件の開発を並行しているような状況であればとっても便利になると思います。

# 各言語のバージョンを確認
$ anyenv versions
ndenv:
* v6.10.0
pyenv:
  system (set by /home/xxxxx/.anyenv/envs/pyenv/version)
  2.7.11
  2.7.11/envs/example-prj
  3.6.0
* example-prj
rbenv:
* system (set by /home/xxxxx/.anyenv/envs/rbenv/version)
  2.3.3
  2.4.0

以上、もっと早く気付ければよかったな。と思ったのでブログにしてみました。