시작하며
laravel/multiplex는, 여러 명령을 동시에 실행하기 위한 터미널 UI(TUI)입니다. Laravel 13의 php artisan dev에서 이용되고 있으며, PHP 개발 서버, 큐 워커, 로그 감시, Vite 등, 로컬 개발에 필요한 프로세스를 하나의 터미널에서 관리할 수 있습니다.
탭마다 프로세스의 출력을 표시할 수 있어, 출력의 검색과 스크롤에도 대응합니다. 종료 시에는 각 프로세스의 출력이 통상의 터미널의 스크롤백에 되돌아오기 때문에, TUI를 종료한 후에도 로그를 확인할 수 있습니다.
인스톨과 직접 실행
Laravel 애플리케이션에서는php artisan dev가 필요한 설정을 실시하기 때문에, 통상은 Multiplex를 직접 인스톨할 필요는 없습니다. 단독으로 사용하는 경우는, Node.js 22.13 이상을 준비해 npm으로 인스톨합니다.
label,command 형식으로 전달합니다.
TUI와 인라인 모드
표준 입력과 표준 출력이 TTY의 경우는 탭 형식의 TUI가 기동합니다.s로 스트림 표시로 전환, /로 출력을 검색, r로 선택 중의 프로세스를 재시작할 수 있습니다. q로 종료합니다.
TTY가 없는 CI나 파이프 처리에서는, 인라인 모드로 자동적으로 전환됩니다. 각 행에 프로세스의 라벨이 붙어, 출력이 도착한 순서로 표시됩니다. 명시적으로 인라인 모드를 사용하는 경우는 -i를 지정합니다.
--json을 사용합니다.
자동 재시작과 종료 처리
크래시한 프로세스는 1초 기다린 뒤 최대 5회까지 자동적으로 재시작됩니다. 기동으로부터 1초 이내에 종료된 프로세스는, 실행 파일의 부족이나 포트 경합 등, 처음부터 기동할 수 없을 가능성이 있기 때문에 재시도되지 않습니다. 빌드나 마이그레이션과 같은 한 번만 실행하는 명령에서는--no-restart를 지정합니다.
주의점
자식 프로세스에는 표준 입력이 전달되지 않습니다. 그 때문에,php artisan tinker나 마이그레이션의 확인 프롬프트 등, 입력을 요구하는 명령은 Multiplex에서 실행할 수 없습니다. 대화적인 명령은 별도의 터미널에서 실행해 주세요.
Multiplex의 프로그램 API도 제공되어 있지만, 명령은 sh -c로 실행됩니다. 설정 파일이나 리퀘스트 등, 신뢰할 수 없는 값을 명령 문자열에 삽입하지 말아 주세요.