docker-composeユーザのためのVimプラグイン

ども、ゴリラです。
**docker-composeユーザのためのVimプラグイン**を作ったのでそのプラグインの紹介です。
このプラグインを使えば、vimを終了することなくdocker-composeを使用することができます。とても便利。

ぜひ入れて試してみて下さい。

# はじめに
以前、**docker.vim**というVimプラグインを作って、[Docker Meetup Tokyo](https://dockerjp.connpass.com/)や[ゴリラ.vim](https://gorillavim.connpass.com/)で発表してきました。
<a href="https://github.com/skanehira/docker.vim"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/skanehira/docker.vim.png" width="460px"></a>

その中でdocker-compose版もほしいという声を頂いたので、
2日くらいでパーッと作ってみました。

レポジトリはこちらです。
<a href="https://github.com/skanehira/docker-compose.vim"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/skanehira/docker-compose.vim.png" width="460px"></a>

# どんな感じ？
こんな感じです。
![](https://imgur.com/8svyqMN.gif)

# できること
docker-composeをラップしたコマンド`DockerCompose {args}`を用意したので、基本docker-composeでできることはすべてできます。
Twitter上で業務でdocker-composeを使用している方たちからヒアリングしたよく使う機能は実装しました。それが次になります。
引数は対応していないのですが、サクッと使うときは便利です。

| vim command                  | docker-compose command                     |
|------------------------------|--------------------------------------------|
| :DockerCompose {args}        | docker-compose {args}                      |
| :DockerComposeList {file}    | docker-compose -f {file} ps                |
| :DockerComposeLogs {file}    | docker-compose -f {file} logs              |
| :DockerComposeUp {file}      | docker-compose -f {file} up                |
| :DockerComposeDown {file}    | docker-compose -f {file} down              |
| :DockerComposeDownAll {file} | docker-compose -f {file} down --rmi all -v |
| :DockerComposeStart {file}   | docker-compose -f {file} start             |
| :DockerComposeStop {file}    | docker-compose -f {file} stop              |
| :DockerComposeRestart {file} | docker-compose -f {file} restart           |
| :DockerComposeBuild {file}   | docker-compose -f {file} build             |
| :DockerComposePull {file}    | docker-compose -f {file} pull              |
| :DockerComposeConfig {file}  | docker-compose -f {file} config            |


一点注意ですが、`DockerComposeDownAll`はコンテナ、イメージ、ネットワークに加え、ボリュームも削除します。
完全にリソースが不要になったときに使用すると便利です。

ちなみに`DockerComposeList` は専用のインターフェイスを用意していて、実行すると次にようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66178/805b9b7e-3bf3-5996-2f11-8cc48650cc3d.png)

このウィンドウでの操作は次にようになります。

| key | operation          |
|-----|--------------------|
| u   | start contaienr    |
| d   | stop contaienr     |
| j   | next contaienr     |
| k   | previous contaienr |
| q   | close window       |

コンテナを個別で起動したいときに`u`、停止したいときに`d`を使用します。

# docker.vimとの差別化
`docker.vim`は単体のコンテナ、イメージの管理に特化したプラグインになります。
機能はとても豊富で、次のことができます。

### images
- image list(udpate every 5 second)
- delete image
- pull image
- search image
- open DockerHub in browser
- push an image
- tag an image
- build an image
- save an image to tarball

### containers
- container list(udpate every 5 second)
- start/stop/restart/kill container
- delete container
- attach container
- run container(like docker run {container})
- monitoring container logs and CPU/MEM
- copy file/folders between containers and local filesystem

`docker.vim`のデモはこちらです。
![](https://camo.githubusercontent.com/e6fd5ac2f6c31822b0c4379154999760dd2f6dec/68747470733a2f2f696d6775722e636f6d2f3568314675664c2e676966)

`docker-compose`はコンテナへのアタッチできるサブコマンド`exec`がありますが、こちらは`docker-compose.vim`には実装していません。
なぜなら`docker.vim`にはその機能があり、そちらを使用すれば解決するからです。

`docker-compose.vim`は複数のコンテナを管理するためのプラグインという位置づけで、
個別のコンテナの管理や操作は`docker.vim`のが優れているので、そちらを使用したほうが良いでしょう。

# `docker-compose.vim`の今後
とりあえずがーっと作ったので、もう少しよくあるユースケースの情報を収集して、便利そうなら機能を追加する予定です。
この記事を読んで、これができたら便利そう、などの意見があればぜひコメント頂ければと思います。

# 最後に
`docker.vim`と`docker-compose.vim`を使えば、
Vimでコンテナを使った開発がさらに楽になるので、ぜひとも両方を入れてみて下さい。

そして良いなと思ったらGitHubのスターを押して頂けると励みます。
お礼にバナナあげるかもしれません。