流行りのpipenvをPyCharmで使う

# はじめに
最近pipenvを用いた環境構築系の記事が増えてますね。
少し調べてみたところ、PyCharmでのサポートも開始しているとのこと。
私はPyCharmもpipenvも使ったことがないのですが、せっかくなのでpipenvとPyCharmにデビューしてみたいと思います。

# 流れ

1. pipenvのインストール
2. PyCharmのインストール
3. PipenvとPyCharmの連携確認

# 環境
- MacOS High Sierra 10.13.6

# pipenvのインストール
以下の記事が詳しいです。
https://qiita.com/Aruneko/items/796d7eeb61e1f36ae4a0
今回はDockerやGitは対象外として必要な箇所だけ抜粋させていただきます。

まず、pythonの仮想環境を管理するpyenvのインストールが必要です。
今後の拡張性の観点から、今回はanyenvを利用します。


```
$ git clone https://github.com/riywo/anyenv ~/.anyenv
```
利用しているbashやshの設定ファイルに以下を記載し、端末を再起動してください。

```
export PATH="$HOME/.anyenv/bin:$PATH
eval "$(anyenv init -)"
```
端末を再起動したら、pyenvをインストールします。

```
$ anyenv install pyenv
```

ようやく本題のpipenvをインストールします。

```
$ brew install pipenv
```

簡単ですね。
インストールが終わったら、以下のコマンドを利用している端末の設定ファイルに記載します。

```
export PATH="$HOME/.local/bin:$PATH
export PIPENV_VENV_IN_PROJECT=1
```

はい、以上でpipenvのインストールは完了です。

# PyCharmのインストール

公式ホームページからデータをダウンロードします。
https://www.jetbrains.com/pycharm/download/#section=mac

有料版と無料版がありますが、今回は無料版をダウンロードします。(画面右下)

![スクリーンショット 2018-08-20 12.12.12.png](https://qiita-image-store.s3.amazonaws.com/0/213194/bcb3c859-41f1-95e2-8c16-3b8004295ced.png)

インストールを開始すると、　色々聞かれると思いますがよしなに選択してください。

# pipenvとPyCharmの連携確認

最後に、PyCharmでpipenvが有効になっているかを確認しましょう。

PyCharmでpipenvを有効にする方法はいくつかあるのですが、今回は
「pipenvで管理されている既存のプロジェクトをPyCharmで開く」という方法を選択します。

まず、pipenvで管理されたプロジェクトを作成し、pythonをインストールしてみましょう。
(pythonのバージョンはなんでも良いです。)

```
$ mkdir pipenvProject
$ cd pipenvProject
$ pipenv install --python 3.6.3
```
ディレクトリを見てみると、以下のファイルが作成されていることがわかります。
PyCharmとpipenvを連携するためにはこれらのファイルが必要です。

```
$ ls
Pipfile  Pipfile.lock
```

では、PyCharm側でプロジェクトを開いて見ましょう。
<img width="460" alt="スクリーンショット 2018-08-20 12.25.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/213194/d9c2c336-1e52-933a-30e1-9b54d113a351.png">

今回は既存のディレクトリをPyCharmで開く方法を選んでいるため、Openを選択します。
（Create New Projectにてpipenvを有効化することも可能です。)

では、先ほど作成したディレクトリを開きましょう。
<img width="894" alt="スクリーンショット 2018-08-20 12.32.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/213194/4ed24b20-1794-9658-1729-37a817217a43.png">

はい、こんな感じになっていますでしょうか。PipfileとPipfile.lockがあればOKです。

ではしっかり連携されているのかを確認していきます。

まずはPipfileの中身を確認します。python以外に何もインストールしていないので、ほとんど空っぽですね。

```
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.6"
```

では、PyCharm上でこんなファイルを作って見てください。(中身に意味はほとんどありません。)


```
from flask import Flask


def main():
    print('Hello PyCharm')


if __name__ == "__main__":

    main()

```

すると最初の一文に対してこのような警告が出現するので、一番上のinstall package flaskを選択します。
<img width="689" alt="スクリーンショット 2018-08-20 12.43.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/213194/55cbdd80-3e45-30af-8a51-c016825d5881.png">

少し待つと、赤い警告が消えて黄色い警告に変わるかと思います。この状態で再度Pipfileを見て見ます。

```
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "*"

[dev-packages]

[requires]
python_version = "3.6"
```

するとパッケージにflaskが追加されていることがわかります。


このように、PyCharm側でインストールしたパッケージがPiplockに反映されていれば連携は成功です。

なお、今回はPyCharm側でパッケージをインストールしましたが、
実際にはPiplockに様々なパッケージが記載されている場合がほとんどだと思います。
そのような場合でもPiplockを読み取って必要なパッケージをインストールし、実行してくれるようです。

# 終わりに

pipenvとPyCharmの連携手順を紹介しました。

正直pipenvもPyCharmもしっかり使うのが初めてだったので、
「pyenvだけの時と比べてすごく開発がやりやすくなった」とか
「○○が改善されたけど××が逆に微妙になった」
といった今までとの比較といった観点ではどうなのかは不明です。

しかしpipenvのようなパッケージ管理の手法は別言語でもメジャーですし、
公式も推しているとのことなので学んでおいて損はないかもしれません。

皆さんもpipenv&PyCharm、使って見てはいかがでしょうか。

現場からは以上です。