🐬

Docker Composeをcli管理ツールとして利用すると便利かも!

2023/08/24に公開

プロジェクトに必要な、いい感じのcliツールを探してると、たまーにこんな悩みがありませんか?

ケース1
(^o^) < このcliツール便利そうなのだ、プロジェクトに導入するのだ
(^o^) < このツール実行するためにjavaが必要なのだ?うちのプロジェクトjavascriptしか使ってないのにいちいちjava入れるのだるいのだ・・・
(^o^) < でもまぁ・・・
(^o^) < javaもjavascriptの名前ほとんど一緒だしそんな苦労しないのだ!
(^o^)...

(^o^).......

\(^o^)/

ケース2
(^o^) < このcliツール便利そうなのだ、プロジェクトに導入するのだ
(^o^) < このツールbrewでしか配られてないのだ?
(^o^) < でも社員はみんなmacで開発してないから関係ないのだ!いれるのだ!
( ̄个 ̄) < うちもうmac買う金ねぇから次新しく社員入ったらwindows pcね
(🔰^o^🔰) < 先輩!このツールaptじゃ入らねぇっす!
(^o^)...

(^o^).......

\(^o^)/


まぁ、ぶっちゃけdocker使えば解決する話です。何かしらのスクリプトファイルの中で docker run すればいい感じに動くようになります。

ただ、それだけだといちいちdocker runのコマンドラインオプションの中でvolumeのつなぎ込みのオプションだったりネットワークの接続情報だったりを書かないといけません。なので、簡単なcomposeファイルを一個おいて、ここでdocker imageの管理をしてみるとラッパースクリプトに書く内容が激減して管理しやすくなるんじゃね?と思いました。

で、サンプルリポジトリ作ってみました!

https://github.com/u-yas/compose-for-script-example

中のファイルを覗いてみましょう

---
version: "3.7"
services:
  # hadolint not distributed apt😢
  hadolint:
    image: hadolint/hadolint:latest-alpine
  # openapi-generator-cli needs Java😢
  openapi-generator:
    image: openapitools/openapi-generator-cli:latest
    volumes:
      - .:/local
    working_dir: /local
  # curl can connect to compose.yml echo server😆
  curl:
    image: curlimages/curl:latest
    tty: true
    networks:
      - my_server
networks:
  my_server:
    external: true

こういったcliツールをcomposeファイルに一括で管理すればdependabotやrenovateでも簡単にバージョン管理ができるし、volumeなどの連携もまとめて管理できます。

あとは簡単なラッパースクリプトを書くだけです

#!/bin/bash

SCRIPT_DIR=$(
  cd $(dirname $0)
  pwd
)

# root dir
cd "$SCRIPT_DIR/.." || exit 1

docker compose -f compose-tool.yml run --rm -it openapi-generator "$@"

docker runで書こうとするとこのコマンドの中で色々オプションを書きまくらないと行けないので大変なんですよね。compose経由で実行するので最低限だけですみます

./tools/openapi-generator generate -i petstore.yml -g python -o generated

docker compose、色んなところで例に挙げられてるのが開発サーバ一式を立ち上げるのにしか使われてなかったので、cliツールの管理としてもつかえるんじゃね?という紹介でした!みなさんもdocker composeでcliツールの管理をしてみてください!

余談

dockerだとやだ!という人向けのおすすめのcli管理ツールとして僕の最近のイチオシはaquaというツールがあります。これが結構便利なので、こいつを導入するのも非常におすすめです!

https://aquaproj.github.io/

作者のzenn記事
https://zenn.dev/shunsuke_suzuki/articles/what-is-aqua

Discussion