LoginSignup
1
1

More than 3 years have passed since last update.

【PHP】 Composer コマンドで tty を Docker につなげて開発したい(TTY as Interactive Shell/対話式シェルで tty)

Last updated at Posted at 2020-07-07

$ composer dev と打ったら PHP の Docker コンテナを起動して PHP を触りたい。

つまり composerscripts 設定で、コンテナにソースコードをマウントしてコンテナ内で開発・デバッグできる状態。
しかし、Interactive shell と表示され終了してしまう。Docker に限らず、他の対話式のシェル・スクリプトでも同じ。

「composer ユーザーコマンド 対話式 実行 tty interactive shell」でググってもドンピシャの Qiita 記事が出てこなかったので、自分のググラビリティとして。

TL; DR

[コマンド] < /dev/ttytty をコマンドとつなげる。

その際、Composer\\Config::disableProcessTimeout も設定しないと、composer制限で 300 秒で接続が切れてしまう

TS; DR

以下は3つのユーザー・コマンドを composer に設定している例です。ポイントは 3 つ目の dev の項目。

composer.json
{
    ...
    "scripts" :{
        "test": [
            "./vendor/bin/phpunit --configuration=./config/phpunit.xml"
        ],
        "compile": [
            "./vendor/bin/box compile --config=./config/box.json"
        ],
        "dev": [
            "Composer\\Config::disableProcessTimeout",
            "docker run --rm --entrypoint='/bin/bash' --workdir='/app' -v $(pwd):/app php:7-cli-alpine < /dev/tty"
        ]
    }
}

composer test コマンドで PHPUnit を使ってユニット・テストをローカルで実行。composer compile コマンドで Box3 を使って ./bin ディレクトリ設置用の Phar アーカイブの作成。そして composer dev コマンドで Docker の PHP7 コンテナを起動して対話式(bash シェル)で触れるようにしている例です。

この時、composer dev のメリットは、任意の PHP バージョンで Docker 上で実行できるので、Travis CI で回す前の簡易テストに便利です。

composer のユーザー・コマンド経由でターミナルの tty(入出力)を Docker に繋げるのがうまく行かなかったのですが、< /dev/tty によりターミナルの tty がコンテナに繋がるようになり、SSH した時のような操作感があるので便利です。

🐒   注意点
ターミナルの種類(macOS のターミナルなど)によってコンテナから exit すると tty 接続が壊れてターミナルを立ち上げ直さないといけない時があります。これは composer が使っている依存パッケージの symfonyconsole の仕様です。しかし、VSCode のターミナルからだと exit した以降でもローカルに戻ってきます(VSCode を立ち上げ直さなくても大丈夫です)。これは VSCode 側が、戻ってきたらターミナルを初期化をするからです。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1