Symfonyコンソールコマンド完全入門!対話的入力(質問)を初心者でもやさしく理解
生徒
「Symfonyって聞いたことはあるんですが、黒い画面で何か入力するって本当ですか?」
先生
「はい。Symfonyには“コンソールコマンド”という、キーボードで指示を出す仕組みがあります。」
生徒
「途中で質問されて、答えを入力することもできるんですか?」
先生
「できます。今日はSymfonyのコンソールコマンドで対話的に質問する方法を、最初から説明します。」
1. Symfonyのコンソールコマンドとは?
Symfony(シンフォニー)のコンソールコマンドとは、パソコンの画面に文字だけが表示される「コマンドライン」や「ターミナル」と呼ばれる画面で動かすプログラムです。マウスを使わず、キーボードで文字を入力して操作します。
例えるなら、スマホのタップ操作ではなく、電話の自動音声案内で番号を押して進むようなイメージです。Symfonyでは、この仕組みを使ってバッチ処理(決まった作業を自動でまとめて実行する処理)を作れます。
Web画面がなくても動くため、データ整理、定期処理、管理作業によく使われます。
2. 対話的入力(質問)とは何か?
対話的入力とは、プログラムが人に質問をして、その答えを受け取る仕組みです。レジで「袋はいりますか?」と聞かれて「はい」「いいえ」と答える流れに似ています。
Symfonyのコンソールコマンドでは、実行中に質問文を表示し、ユーザーがキーボードで文字を入力できます。これにより、毎回同じ内容を書かなくても、その場で必要な情報を入力できます。
初心者の方でも、画面に出る質問に答えるだけなので安心です。
3. Symfonyコマンドの基本構造
まずは、Symfonyのコンソールコマンドがどんな形をしているかを見てみましょう。これは一番シンプルな例です。
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class HelloCommand extends Command
{
protected static $defaultName = 'app:hello';
protected function execute(InputInterface $input, OutputInterface $output): int
{
$output->writeln('こんにちは、Symfony!');
return Command::SUCCESS;
}
}
executeメソッドの中に、実行したい処理を書きます。writelnは「画面に文字を表示する」という意味です。
4. 質問を表示して入力を受け取る方法
ここからが本題です。SymfonyではQuestionクラスを使うことで、質問を表示できます。難しそうな名前ですが、「質問用の道具箱」くらいに考えてください。
use Symfony\Component\Console\Question\Question;
$helper = $this->getHelper('question');
$question = new Question('あなたの名前を入力してください:');
$name = $helper->ask($input, $output, $question);
$output->writeln('こんにちは、'.$name.'さん');
このコードを書くと、画面に質問が出て、入力した文字が$nameに入ります。まるで会話しているような動きになります。
5. 初期値付きの質問をする
質問には初期値(何も入力しなかった場合の答え)を設定できます。これは、アンケートで「特に変更がなければこのまま」という状態に似ています。
$question = new Question('年齢を入力してください(未入力は20):', 20);
$age = $helper->ask($input, $output, $question);
$output->writeln('年齢は'.$age.'歳ですね');
何も入力せずにEnterキーを押すと、自動的に「20」が使われます。
6. はい・いいえで答える質問
次は、確認用の質問です。これは「はい」か「いいえ」で答える形式です。
use Symfony\Component\Console\Question\ConfirmationQuestion;
$question = new ConfirmationQuestion('本当に実行しますか? (y/n) ', false);
$result = $helper->ask($input, $output, $question);
if ($result) {
$output->writeln('実行しました');
} else {
$output->writeln('中止しました');
}
操作ミスを防ぐために、バッチ処理ではとてもよく使われます。
7. 選択肢から選ばせる質問
Symfonyでは、複数の選択肢から選ばせることもできます。メニュー画面のようなイメージです。
use Symfony\Component\Console\Question\ChoiceQuestion;
$question = new ChoiceQuestion(
'処理を選んでください',
['登録', '更新', '削除'],
0
);
$choice = $helper->ask($input, $output, $question);
$output->writeln('選択したのは:'.$choice);
数字で選べるので、キーボード操作に慣れていない方でも使いやすいです。
8. バッチ処理で対話的入力を使う理由
Symfonyのバッチ処理で対話的入力を使う最大の理由は、安全で柔軟な操作ができることです。毎回コードを書き直さなくても、実行時に内容を変えられます。
また、確認メッセージを入れることで、間違った削除や更新を防げます。初心者の方ほど、質問付きのコマンドを作ることで安心して作業できます。
Symfonyのコンソールコマンドと対話的入力は、難しそうに見えて、実はとても人にやさしい仕組みなのです。