시작하기
Laravel Prompts는 커맨드라인 애플리케이션에 아름답고 사용하기 쉬운 대화형 폼을 추가하기 위한 PHP 패키지입니다. 플레이스홀더 텍스트나 검증 등 브라우저의 폼에 가까운 경험을 제공합니다. Artisan 명령 코드 내에서 직접 호출할 수 있으므로, 사용자에 대한 문의를 단순하고 직관적으로 기술할 수 있습니다.Laravel Prompts는 macOS, Linux, Windows(WSL)를 지원합니다.
미대응 환경에서는 자동으로 폴백 동작으로 전환됩니다.
설치
Laravel Prompts는 Laravel 본체에 포함되어 있으므로 추가 설치는 불필요합니다. 다른 PHP 프로젝트에서 사용하고 싶은 경우 Composer로 설치합니다.기본적인 프롬프트 함수
text — 텍스트 입력
text()로 사용자에게 문자열 입력을 요구합니다.
required를 지정하면 입력을 필수로 만들 수 있습니다. 검증 메시지도 변경 가능합니다.
validate 클로저로 추가 검증을 수행할 수 있습니다. 에러 메시지를 반환하거나, 합격 시에 null을 반환합니다.
textarea — 여러 줄 텍스트 입력
textarea()로 여러 줄 입력을 받습니다.
number — 숫자 입력
number()로 숫자를 받습니다. 위아래 화살표 키로 값을 증감시킬 수 있습니다.
password — 비밀번호 입력
password()는 텍스트 입력과 마찬가지지만, 입력 내용이 화면에 표시되지 않습니다.
confirm — Yes/No 확인
confirm()으로 사용자에게 양자택일 확인을 요구합니다. true 또는 false를 반환합니다.
select — 선택 리스트
select()로 사용자에게 목록에서 하나를 고르게 합니다.
scroll로 스크롤 전에 표시할 선택지 수를 변경할 수 있습니다(기본값 5개).
multiselect — 다중 선택
multiselect()로 여러 선택지를 동시에 고르게 합니다.
required를 지정하면 최소 하나의 선택을 필수로 만들 수 있습니다.
suggest — 자동완성 지원 입력
suggest()는 후보를 제시하면서 자유 입력도 받습니다.
search — 동적 검색
search()는 입력할 때마다 후보 리스트를 갱신합니다. 클로저가 반환하는 배열이 후보가 됩니다.
multisearch — 동적 다중 선택
multisearch()는 동적 검색으로 다중 선택이 가능합니다.
pause — 일시 정지
pause()로 사용자에게 Enter 키의 누름을 재촉해 처리를 일시 정지시킬 수 있습니다.
autocomplete — 인라인 보완
autocomplete()는 고스트 텍스트로 후보를 표시하는 인라인 보완 함수입니다. suggest()와 달리, 사용자가 입력할 때마다 일치하는 후보가 고스트 텍스트로 표시되고, Tab 키 또는 오른쪽 화살표 키로 보완을 확정할 수 있습니다.
검증
모든 프롬프트 함수는validate 인수로 검증을 설정할 수 있습니다.
null을 반환하면 검증 성공입니다.
Laravel의 검증 규칙을 배열 형식으로 사용할 수도 있습니다.
transform 인수를 사용합니다.
폼
form()을 사용하면 여러 프롬프트를 하나로 묶어, 완료 전에 통째로 취소할 수 있습니다.
정보 출력
텍스트 메시지를 스타일 첨부로 출력하는 함수가 준비되어 있습니다.콜아웃
callout()은 라벨과 콘텐츠를 테두리로 감싸서 표시합니다. 배포 요약, 에러 상세, 상태 갱신 등, 중요한 정보를 두드러지게 하는 데 적합합니다.
type 인수에 'warning' 또는 'error'를 지정하면 비주얼 스타일을 변경할 수 있습니다.
info 인수로 푸터 행을 추가할 수 있습니다. ID나 타임스탬프 등의 메타데이터 표시에 편리합니다.
리치 콘텐츠
문자열 대신 배열을 전달하면 구조화된 리치 콜아웃을 만들 수 있습니다.Element 클래스에는 헤딩·불릿 리스트·번호 리스트·키-값 리스트·링크를 만드는 팩토리 메서드가 있습니다.
Element::keyValueList로 라벨 첨부 데이터를 표시할 수 있습니다.
Element::link는 OSC 8에 대응한 터미널에서 클릭 가능한 하이퍼링크를 생성합니다. URL만, 또는 URL과 커스텀 라벨을 전달할 수 있습니다.
테이블 표시
table()로 데이터를 테이블 형식으로 표시할 수 있습니다.
스핀(로딩 표시)
spin()은 클로저의 실행 중에 로딩 인디케이터를 표시합니다.
진행 바
progress()로 반복 처리의 진행을 시각적으로 표시할 수 있습니다.
태스크
task()는 콜백 실행 중에 스피너와 스크롤 가능한 라이브 출력 영역을 표시합니다. 의존 관계 설치나 배포 스크립트 등 오랜 시간 실행되는 프로세스를 감싸는 데 최적이며, 무엇이 일어나고 있는지 실시간으로 확인할 수 있습니다.
Logger 인스턴스를 받아서, 로그 행이나 상태 메시지를 실시간으로 표시할 수 있습니다.
로그 행 출력
line 메서드로 스크롤 출력 영역에 한 행씩 로그를 씁니다.
상태 메시지
success·warning·error를 사용하면, 스크롤 로그 영역의 상부에 고정된 하이라이트 첨부 메시지를 표시할 수 있습니다.
라벨 업데이트
label 메서드로 실행 중에 태스크의 라벨을 업데이트할 수 있습니다. subLabel 메서드는 라벨 아래에 옅게 표시되는 서브 라벨을 설정합니다. 빈 문자열을 전달하면 서브 라벨을 지울 수 있습니다. subLabel 인수로 초기 서브 라벨을 지정할 수도 있습니다.
텍스트 스트리밍
AI가 생성하는 응답처럼 단계적으로 출력이 생성되는 처리에서는,partial 메서드로 텍스트를 하나씩 스트리밍할 수 있습니다. 스트림이 완료되면 commitPartial을 호출해 확정합니다.
출력 상한과 서머리 유지
기본적으로 최대 10행의 스크롤 출력을 표시합니다.limit 인수로 커스터마이즈할 수 있습니다. 태스크 완료 후에도 상태 메시지를 화면에 남기고 싶은 경우에는 keepSummary: true를 전달합니다.
스트림
stream()은 텍스트를 단계적으로 터미널에 표시합니다. AI가 생성하는 콘텐츠나 청크로 도착하는 데이터의 표시에 최적입니다.
append 메서드는 페이드 인 이펙트로 텍스트를 스트림에 추가합니다. 모든 콘텐츠를 스트리밍하고 나면 close를 호출해 출력을 확정하고 커서를 복원합니다.
터미널 조작
터미널 타이틀 설정
터미널 클리어
터미널의 고려 사항
터미널 폭: 라벨·선택지·검증 메시지가 터미널의 열수를 넘는 경우 자동으로 잘립니다. 80열의 터미널을 상정하는 경우 최대 74문자를 기준으로 해 주세요. 터미널의 높이:scroll 인수를 받는 프롬프트에서는, 검증 메시지용 스페이스를 포함해 터미널의 높이에 들어가도록 자동으로 값이 조정됩니다.
폴백
미대응 환경(Windows non-WSL 등)에서는 자동으로 폴백합니다. 기본적으로 Laravel의$this->ask()나 $this->choice() 등의 내장 메서드가 대신 사용됩니다.
테스트
Laravel Prompts는 Pest나 PHPUnit의 테스트와 연계할 수 있습니다.관련 페이지
Artisan 콘솔
Artisan 명령 내에서 Prompts를 활용