docker-composeコマンド実行時にTLSParameterErrorになった場合の対応

`docker-compose ps` 実行時に`TLSParameterError`エラーが発生し、解決をするために調べた内容のまとめです。

# エラー内容
`docker-compose ps` 実行時に下記のエラーが発生しました。

```zsh
Traceback (most recent call last):
  File "docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 71, in main
  File "compose/cli/main.py", line 124, in perform_command
  File "compose/cli/command.py", line 39, in project_from_options
  File "compose/cli/docker_client.py", line 84, in tls_config_from_options
  File "site-packages/docker/tls.py", line 81, in __init__
docker.errors.TLSParameterError: Path to a certificate and key files must be provided through the client_config param. TLS configurations should map the Docker CLI client configurations. See https://docs.docker.com/engine/articles/https/ for API details.
[99424] Failed to execute script docker-compose
```

# 対応
エラーで検索をしたところ、下記のgithub issueが見つかりました。

[docker-compose $(docker-machine config default) up Fails.](https://github.com/docker/compose/issues/3534)

> Try docker-compose $(docker-machine config default | xargs ) ps

とのことでしたので、実行したところ動くようになりました。

```zsh
$ docker-compose $(docker-machine config default | xargs ) ps
ERROR: TLS configuration is invalid - make sure your DOCKER_TLS_VERIFY and DOCKER_CERT_PATH are set correctly.
You might need to run `eval "$(docker-machine env default)"`

$ eval "$(docker-machine env default)"

$ docker-compose $(docker-machine config default | xargs ) ps
         Name                       Command              State                Ports            
-----------------------------------------------------------------------------------------------
mysql                    docker-entrypoint.sh --inn      Up       0.0.0.0:3306->3306/tcp,      
                         ...                                      33060/tcp                    
php-fpm                  docker-php-entrypoint php-fpm   Up       9000/tcp                     
(一部省略)
```

その後 `docker-compose ps` で動くようになりました。

```zsh
$ docker-compose ps
         Name                       Command              State                Ports            
-----------------------------------------------------------------------------------------------
mysql                    docker-entrypoint.sh --inn      Up       0.0.0.0:3306->3306/tcp,      
                         ...                                      33060/tcp                    
php-fpm                  docker-php-entrypoint php-fpm   Up       9000/tcp                     
```

## evalコマンドとは？
そもそも実行したevalコマンドがわからなかったのですが、文字列をコマンドとして実行するためのコマンドだそうです。
[【 eval 】コマンド――文字列を評価、連結して実行する](https://www.atmarkit.co.jp/ait/articles/1712/22/news019.html)

> evalコマンドが威力を発揮する場面は2つあります。1つはあるコマンドが出力した文字列自体をコマンドとして実行すること、もう1つは（入れ子になった）変数を評価することです。

```zsh
# コマンドとして実行されない
$ 'time'
# コマンドとして実行される
$ eval 'time'
shell  0.21s user 0.15s system 0% cpu 12:14.77 total
children  1.31s user 1.73s system 0% cpu 12:14.77 total
```

つまり、先ほど実行した `eval "$(docker-machine env default)"` に関しては
`docker-machine env default` の出力文字列をコマンドとして実行していると認識すれば良さそうです。

## docker-machine env default
こちらの出力について確認をしました。

```zsh
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)
```

環境変数として上記の値が設定されていなかったため、今回のエラーになったようです。