Symfonyコンソールコマンド完全入門!プログレスバー表示でバッチ処理がわかる
生徒
「Symfonyのコンソールコマンドって、実行すると何をしているのか全然わからなくて不安です…」
先生
「コマンドは文字だけなので、今どこまで処理が進んでいるか見えにくいですよね。」
生徒
「はい。処理が止まっているのか、動いているのかも分からないです。」
先生
「Symfonyには、処理の進み具合を棒グラフのように表示できるプログレスバー機能がありますよ。」
生徒
「えっ、そんな便利なものがあるんですか?」
先生
「あります。今回は、パソコン初心者でもわかるように、最初から丁寧に説明しますね。」
1. Symfonyのコンソールコマンドとは?
Symfonyのコンソールコマンドとは、キーボードで文字を入力して実行するプログラムのことです。マウスを使わず、黒い画面(ターミナル・コマンドプロンプト)に命令を書いて処理を動かします。バッチ処理とは、たくさんの作業をまとめて自動で実行する処理のことで、夜中にデータを整理したり、大量のデータを登録するときによく使われます。
例えるなら、洗濯機に「洗い・すすぎ・脱水」をまとめてお願いするようなものです。一つずつ手で操作しなくても、自動で最後まで動いてくれます。
2. プログレスバーとは何か?
プログレスバーとは、処理がどこまで進んでいるかを視覚的に表示する棒グラフのようなものです。ダウンロード中に「50%」と表示される画面を見たことはありませんか?あれと同じ役割です。
Symfonyのコンソールコマンドでプログレスバーを表示すると、「今は全体の何%まで終わったか」「まだ時間がかかるのか」が一目でわかるようになります。初心者ほど、この表示があるだけで安心して待つことができます。
3. Symfonyでプログレスバーを使う準備
Symfonyでは、最初からProgressBarという便利な道具が用意されています。これは「進み具合を表示する専用クラス」です。クラスとは、便利な機能が詰まった箱のようなものだと思ってください。
まずは、Symfonyのコンソールコマンドの基本形を見てみましょう。
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class SampleCommand extends Command
{
protected static $defaultName = 'app:sample';
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('コマンドが実行されました');
return Command::SUCCESS;
}
}
この状態では、文字が表示されるだけで、進捗はわかりません。
4. プログレスバーを表示する基本的な書き方
ここからプログレスバーを追加します。ProgressBarは、Symfonyの「Helper」という便利機能の一つです。Helperは「お手伝いさん」だと思うと理解しやすいです。
use Symfony\Component\Console\Helper\ProgressBar;
$progressBar = new ProgressBar($output, 10);
$progressBar->start();
for ($i = 0; $i < 10; $i++) {
sleep(1);
$progressBar->advance();
}
$progressBar->finish();
10は「全部で10回処理がありますよ」という意味です。advance()は「1つ進める」という命令です。sleep(1)は、わざと1秒止めて、動いている様子を見せるために入れています。
5. 実行するとどう見えるのか
実際にコマンドを実行すると、画面には次のような表示が出ます。
10/10 [============================] 100%
このように棒が右へ伸びていき、最後に100%になります。これだけで「ちゃんと処理が進んでいる」と安心できます。
6. 配列データを処理しながらプログレスバーを動かす
実際のバッチ処理では、配列(データのまとまり)を一つずつ処理することが多いです。配列とは、番号付きの箱が並んでいるイメージです。
$dataList = ['りんご', 'みかん', 'ばなな', 'ぶどう'];
$progressBar = new ProgressBar($output, count($dataList));
$progressBar->start();
foreach ($dataList as $data) {
sleep(1);
$progressBar->advance();
}
$progressBar->finish();
count()は「箱が何個あるか数える」命令です。データの数に合わせて、自動でプログレスバーが調整されます。
7. メッセージを表示しながら進捗を見る
プログレスバーと一緒に「今何をしているか」を表示すると、さらに親切になります。
$progressBar = new ProgressBar($output, 3);
$progressBar->start();
$output->writeln('データ取得中');
$progressBar->advance();
$output->writeln('データ保存中');
$progressBar->advance();
$output->writeln('完了処理中');
$progressBar->advance();
$progressBar->finish();
これにより、作業内容と進捗が同時に確認できます。
8. プログレスバーを使うメリット
Symfonyのコンソールコマンドでプログレスバーを表示することで、処理の見える化ができます。特に初心者は「止まっているのか不安になる」ことが多いため、プログレスバーは心強い味方です。
長いバッチ処理、大量データ処理、定期実行のコマンドなど、さまざまな場面で活躍します。Symfony標準機能なので、特別な設定も不要で安全に使えます。