PostgreSQLクライアント pgcli のインストール（Windows対応）※改修待ち

**利用上の注意があります！**
[こちら](http://qiita.com/laqiiz/items/64524a41c4f8dde30ed5#20150625-2230-%E8%BF%BD%E8%A8%98%E5%88%B6%E7%B4%84)を確認した上でインストールお願いします。

# はじめに

pgcliについてやMac/Linuxへのインストール方法は下記の参考サイトを参照下さい。

* [pgcli – 入力補完/ハイライトが便利なPostgreSQLクライアント - MOONGIFT](http://www.moongift.jp/2015/01/pgcli-%E5%85%A5%E5%8A%9B%E8%A3%9C%E5%AE%8C%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88%E3%81%8C%E4%BE%BF%E5%88%A9%E3%81%AApostgresql%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88/)

* [便利ツール(1)PostgreSQLの便利ツールpgcli を試してみた - CLARA ONLINE TECHBLOG](http://techblog.clara.jp/2015/02/postgresql-tool-pgcli/)

* [pgcli - 本家サイト](http://pgcli.com/features)


pgcli の Windows7 環境へのインストール情報は本家サイトを見ても見当たらず、手こずる要素があったたので共有します。
（どうやら、**開発者がWindows機を持っていないため(!)**、Windowsのインストール手順をメンテナンス出来ないようです…）

# きっかけ

PostgreSQLの**GUI**クライアントツールは```pgAdmin```や```PSqlEdit```という有名なツールがあるようですが、**CLI**ツールの方は良さそうなのが見当たらなかったので、```pgcli```を選択しました。

> pgAdmin: PostgreSQL administration and management tools
> http://www.pgadmin.org/

> PSqlEdit - PostgreSQL用SQLエディタ&実行環境
> http://www.hi-ho.ne.jp/a_ogawa/psqledit/


Windows環境へのインストール手順は前述の通り本家サイトに記載がなかったのですが、```pgcli```はPythonの標準モジュールで作成されているためおそらく動くとのこと。
というわけでチャレンジしてみました。

# 手順

以下のissueを参考に。
> how to use pgcli on win7
> https://github.com/dbcli/pgcli/issues/108

## Python3.4.2をインストール

以下からCドライブ直下にPython3.4.2をダウンロード＆インストールします。
https://www.python.org/downloads/release/python-342/

インストール後、pythonのパスを通しておきます。

```bat:環境変数
変数名：PYTHON_HOME
変数値：C:\Python34

変数名：Path
変数値:～;%PYTHON_HOME%
```

パスが通っていることの確認します。

```bat:Pythonインストール確認
C:\>python -V
Python 3.4.3
```

## get-pip.pyをダウンロード

以下の```.py```ファイルをCドライブ直下に配備します。
https://bootstrap.pypa.io/get-pip.py

先ほどDLしてきた```get-pip.py```を実行します。

```bat:get-pipの実行
# 実行
C:\>python C:\get-pip.py

# 実行ログ
Downloading pip-7.0.3-py2.py3-none-any.whl (1.1MB)
    100% |################################| 1.1MB 332kB/s
Collecting wheel
  Downloading wheel-0.24.0-py2.py3-none-any.whl (63kB)
    100% |################################| 65kB 630kB/s
Installing collected packages: pip, wheel
  Found existing installation: pip 6.0.8
    Uninstalling pip-6.0.8:
      Successfully uninstalled pip-6.0.8
Successfully installed pip-7.0.3 wheel-0.24.0
```

## win-psycopg

そのままpipだとWindows7環境ではエラーになったので、```win-psycopg```をインストールします。
この```win-psycopg```とはPythonのpostgresqlインターフェースのことらしいです。

下記のサイトから```psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe```をダウンロード＆インストールします。
> win-psycopg is a Windows port of the psycopg python-postgresql database interface
http://www.stickpeople.com/projects/python/win-psycopg/


## pipでpgcliをインストール

準備完了です。```pip```経由で```pgcli```をインストールします。
バージョンは現時点で最新の0.17.0です。

```bat:pgcliのインストール
# インストール実行
C:\Python34\Scripts\pip install pgcli

# 実行ログ
ollecting pgcli
 Using cached pgcli-0.17.0.tar.gz
ollecting click>=3.2 (from pgcli)
 Using cached click-4.0-py2.py3-none-any.whl
ollecting Pygments>=2.0 (from pgcli)
 Using cached Pygments-2.0.2-py3-none-any.whl
ollecting prompt-toolkit==0.37 (from pgcli)
 Using cached prompt_toolkit-0.37-py3-none-any.whl
equirement already satisfied (use --upgrade to upgrade): psycopg2>=2.5.4 in c:\python34\lib\site-packages (from pgcli)
ollecting sqlparse==0.1.14 (from pgcli)
 Downloading sqlparse-0.1.14.tar.gz (55kB)
   100% |################################| 57kB 282kB/s
ollecting wcwidth (from prompt-toolkit==0.37->pgcli)
 Downloading wcwidth-0.1.4-py2.py3-none-any.whl
ollecting six>=1.8.0 (from prompt-toolkit==0.37->pgcli)
 Downloading six-1.9.0-py2.py3-none-any.whl
uilding wheels for collected packages: pgcli, sqlparse
 Running setup.py bdist_wheel for pgcli
 Stored in directory: C:\Users\mano\AppData\Local\pip\Cache\wheels\d1\14\ca\e5e274158967905fd83a60b7f351551869cede6c2710829de9
 Running setup.py bdist_wheel for sqlparse
 Stored in directory: C:\Users\mano\AppData\Local\pip\Cache\wheels\6c\36\6c\857636f3565e75277d8ca9e8456ca1e2ce6dfa8387a69d9a0c
uccessfully built pgcli sqlparse
nstalling collected packages: click, Pygments, wcwidth, six, prompt-toolkit, sqlparse, pgcli
uccessfully installed Pygments-2.0.2 click-4.0 pgcli-0.17.0 prompt-toolkit-0.37 six-1.9.0 sqlparse-0.1.14 wcwidth-0.1.4
```

# pgcliの実行

```bat:立ち上げ
# -h ホスト名
# -p ポート番号
# -U ユーザ名 データベース名
C:\>Python34\Scripts\pgcli -h 127.0.0.1 -p 5432 -U xxx xxx

# 実行ログ
Version: 0.17.0
Chat: https://gitter.im/dbcli/pgcli
Mail: https://groups.google.com/forum/#!forum/pgcli
Home: http://pgcli.com
gis>
```

# 感触

本当にちゃんとWindowsでも動くか心配しましたが、Windowsでも補完やサジェストが上手く動きます！！
タブ選択も問題ないです。
そして予想以上サクサク動いてくれるためストレス無く仕事に集中できます！

■Select句補完
![select補完.png](https://qiita-image-store.s3.amazonaws.com/0/6463/9cad299a-794d-2896-f0fd-b8a0014b144c.png)

■FROM句補完（テーブルサジェスト）
![aaaa.png](https://qiita-image-store.s3.amazonaws.com/0/6463/1c21d8bc-4193-63bb-6328-a9ac604e923b.png)

■where句のカラム名補完
![where句補完.png](https://qiita-image-store.s3.amazonaws.com/0/6463/cd53005d-6b82-ce7f-95f9-9dde4c82603a.png)


# 使い勝手向上策

pgcliコマンドを一々叩くのも面倒なのでバッチファイル化すると幸せになれます。
環境情報を覚えておく必要もなくなります。

```bat:pgcli_run.bat
rem pgcliを起動
call C:\Python34\Scripts\pgcli -h 127.0.0.1 -p 5432 -U ${username} ${dbname}

pause
exit
```

# （2015/06/25 22:30 追記）制約

以下のIssuesが上がってました‥。
Windowsでも全角入力でクラッシュする危険性があります。

> non-ascii character make pgcli crash #171
> https://github.com/dbcli/pgcli/issues/171

以下のコマンドで最新版の```pgcli```を取得するとクラッシュ自体は防ぐことが出来るようになりました。
ただし、未だに全角入力が出来ません。
上記のIssuesの対応待ちです。

```
C:\Python34\Scripts\pip install -U -e git+ssh://git@github.com/dbcli/pgcli.git#egg=pgcli
```

ちなみに原因は```pgcli```本体の不具合ではなく```pgcli```が利用している```prompt-tools```というモジュールが起因らしいです。
その```prmpt-tools```がWindows対応が弱いらしく、回避するには```cmder```を使うと良いよと本家サイトに記載してましたが、```pgcli```は```cmder```だと起動すらしませんでした・・・。
解決までWatchを続けたいと思います。


# まとめ

Windows環境でもMac/Linux環境の評判通りハイライトも綺麗に表示してくれますし補完も強力です！
皆さんもぜひWindows環境にインストールしてみてください！