こんにちは、技術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
以上、もっと早く気付ければよかったな。と思ったのでブログにしてみました。