Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】readline_add_history()関数の使い方

readline_add_history関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

readline_add_history関数は、PHPのreadline拡張モジュールに属し、コマンドラインインターフェース(CLI)アプリケーションにおいて、ユーザーが入力した文字列を履歴リストに追加するために使用される関数です。この関数を使うことで、開発者はインタラクティブなスクリプトをより便利に作成できます。具体的には、引数として指定された文字列を、readline関数が管理するコマンド履歴に追加します。一度履歴に追加された文字列は、その後の入力時にユーザーがキーボードの上下矢印キーなどを使って簡単に呼び出し、再利用できるようになります。これは、シェルスクリプトや対話型コンソールアプリケーションなどでよく見られる機能であり、ユーザーの操作性を大きく向上させます。例えば、PHPで作成されたカスタムCLIツールで、過去に実行したコマンドを再度入力する手間を省きたい場合にこの関数が役立ちます。この機能を利用するには、PHPがreadline拡張モジュールを有効にしてコンパイルされている必要があります。戻り値は通常、履歴への追加が成功した場合にtrueを返します。

構文(syntax)

1readline_add_history("string to add to history");

引数(parameters)

string $prompt

  • string $prompt: ユーザーに表示するプロンプト文字列

戻り値(return)

bool

指定された文字列を readline の履歴に追加できた場合は true を、追加できなかった場合は false を返します。

サンプルコード

PHP readline 履歴を追加する

1<?php
2
3/**
4 * readline_add_history 関数のサンプルコードです。
5 *
6 * この関数は、PHPのreadline拡張機能が提供するもので、
7 * インタラクティブなコマンドラインアプリケーションにおいて、
8 * ユーザーが入力したコマンドを履歴に追加するために使用されます。
9 * これにより、後でユーザーが矢印キーなどを利用して過去の入力を簡単に呼び出すことができるようになります。
10 *
11 * システムエンジニアを目指す初心者の方へ:
12 * このコードを実行するには、PHPにreadline拡張機能がインストールされ、有効になっている必要があります。
13 * 通常、php.ini ファイルで `extension=readline` の行がコメントアウトされていないことを確認してください。
14 */
15
16// readline 拡張機能が有効になっているかを確認します。
17// 無効な場合、このスクリプトは動作しません。
18if (!extension_loaded('readline')) {
19    echo "エラー: PHPのreadline拡張機能が有効になっていません。" . PHP_EOL;
20    echo "このスクリプトを実行するには、php.iniで 'extension=readline' を有効にしてください。" . PHP_EOL;
21    exit(1);
22}
23
24echo "readline_add_history関数の動作を確認します。" . PHP_EOL;
25echo "何かコマンドを入力してください。'exit' と入力すると終了します。" . PHP_EOL;
26
27while (true) {
28    // readline() 関数を使用してユーザーからの入力を受け取ります。
29    // 引数は、コマンドラインに表示されるプロンプト文字列です。
30    $input = readline("コマンド入力> ");
31
32    // 入力された文字列が空でなければ、履歴に追加します。
33    // readline_add_history() は、指定された文字列を現在のセッションの入力履歴に追加します。
34    // これにより、後続の readline() 呼び出しで、ユーザーが上下の矢印キーを使ってこの入力を再利用できるようになります。
35    if ($input !== '') {
36        readline_add_history($input);
37    }
38
39    echo "入力された内容: " . $input . PHP_EOL;
40
41    // 'exit' が入力されたらループを終了します。
42    if (strtolower($input) === 'exit') {
43        echo "アプリケーションを終了します。" . PHP_EOL;
44        break;
45    }
46}
47
48// 補足: readline_add_history で追加された履歴は、
49// デフォルトでは現在のセッションの間だけ有効です。
50// 履歴を永続化するには、readline_write_history() や readline_read_history()
51// 関数を使用する必要がありますが、このサンプルでは割愛します。
52

PHPのreadline_add_history関数は、インタラクティブなコマンドラインアプリケーションにおいて、ユーザーが入力したコマンドや文字列を履歴に追加するために使用される機能です。この関数は、PHPのreadline拡張機能の一部として提供されており、ユーザーエクスペリエンスを向上させる目的があります。

具体的には、readline()関数を使ってユーザーから入力を受け取った後、その入力内容をreadline_add_history()関数の引数として渡すことで、現在のセッションの入力履歴にその文字列が記録されます。一度履歴に追加された文字列は、その後のreadline()による入力時に、ユーザーが上矢印キーなどを使って簡単に以前の入力を呼び出し、再利用できるようになります。これにより、同じコマンドを何度も入力する手間が省け、作業効率が高まります。

引数にはstring $promptとありますが、これは履歴に追加したい文字列そのものを指定します。戻り値はbool型で、履歴への追加が成功した場合はtrueを、失敗した場合はfalseを返します。この機能を利用するには、PHPにreadline拡張機能がインストールされ、php.iniファイルで有効になっている必要があります。サンプルコードでは、ユーザーが入力した文字列を都度履歴に追加し、「exit」と入力されるまで処理を続ける様子を確認できます。

このサンプルコードは、PHPのreadline拡張機能が有効になっている環境でのみ動作します。php.iniextension=readlineの設定がコメントアウトされていないか必ず確認し、有効にしてください。本関数は、コマンドラインでユーザーと対話するスクリプト向けであり、ウェブアプリケーションでは利用されません。readline_add_historyで追加された入力履歴は、現在のスクリプト実行セッションの間だけ有効です。スクリプトが終了すると履歴は消去されるため、履歴をファイルなどに保存して次回も利用したい場合は、readline_write_historyなどの別の関数を併用する必要があります。引数には履歴に追加したい文字列を指定し、成功するとtrueが返されますが、通常は戻り値を直接処理する必要は少ないです。

PHP readline_add_historyで入力履歴を追加する

1<?php
2
3// readline拡張機能がロードされているか確認します。
4// この拡張機能がないと、readline関連の関数は動作せず、スクリプトはエラーで終了します。
5if (!extension_loaded('readline')) {
6    echo "エラー: 'readline' 拡張機能が有効になっていません。\n";
7    echo "php.ini ファイルで 'extension=readline' を有効にするか、\n";
8    echo "PHPをreadlineサポート付きで適切にコンパイルしてください。\n";
9    exit(1);
10}
11
12echo "PHPインタラクティブシェル風のサンプルを開始します。\n";
13echo "何かコマンドを入力し、Enterキーを押してください。\n";
14echo "終了するには 'exit' と入力してください。\n\n";
15
16// コマンド入力と履歴管理のループ
17while (true) {
18    // ユーザーに表示するプロンプト文字列を定義します。
19    $displayPrompt = 'php_shell > ';
20    
21    // readline関数を使用してユーザーからの入力を受け取ります。
22    // この関数は、入力履歴の参照(上下矢印キー)や編集機能を提供します。
23    $userInput = readline($displayPrompt);
24
25    // readline関数は、ユーザーがCtrl+Dを押してEOF(ファイル終端)を送信した場合にfalseを返します。
26    // この場合、ループを終了してシェルを閉じます。
27    if ($userInput === false) {
28        echo "入力が中断されました (Ctrl+D)。シェルを終了します。\n";
29        break;
30    }
31
32    // ユーザーが入力した文字列が空ではない場合、それを履歴に追加します。
33    // readline_add_history関数は、引数で渡された文字列をreadlineの履歴リストに追加します。
34    // これにより、以降のreadline()呼び出し時に、この入力が履歴として利用可能になります。
35    //
36    // プログラミング言語リファレンス情報では「引数: string $prompt」とありますが、
37    // ここで渡すのは、履歴として記録したい「ユーザーが入力した実際の文字列」です。
38    // (通常、$promptはreadline()に渡す表示用文字列を指しますが、ここでは履歴に追加する内容を意味すると解釈します。)
39    if ($userInput !== '') {
40        readline_add_history($userInput);
41    }
42
43    // ユーザーが 'exit' と入力した場合(大文字小文字を区別しない)、ループを終了します。
44    if (strtolower($userInput) === 'exit') {
45        echo "シェルを終了します。\n";
46        break;
47    } elseif ($userInput !== '') {
48        // 実際のコマンド処理は行わず、入力されたコマンドを表示するのみです。
49        echo "入力されたコマンド: " . $userInput . "\n";
50    }
51}
52
53// オプション: 履歴をファイルに保存したり、プログラム終了時に履歴をクリアしたりすることもできますが、
54// このシンプルな初心者向けサンプルでは割愛します。
55// readline_write_history('/tmp/php_command_history.txt');
56// readline_clear_history();
57
58?>

このサンプルコードは、PHPでインタラクティブなコマンドラインツールを作成する際に、ユーザーの入力履歴を管理する方法をreadline_add_history関数を通じて示しています。

この機能を利用するには、まずPHPにreadline拡張機能がロードされている必要があります。readline_add_history関数は、ユーザーが入力した文字列をコマンド履歴に追加するために使用されます。これにより、後続のreadline()関数による入力処理で、ユーザーは上下矢印キーを使って過去に入力したコマンドを簡単に呼び出せるようになります。

引数string $promptには、履歴として記録したい具体的なユーザー入力文字列を渡します。リファレンス上の引数名と異なり、ここでは表示用のプロンプトではなく、履歴に残したい内容そのものを渡す点に注意してください。戻り値はbool型で、履歴への追加が成功した場合はtrue、失敗した場合はfalseを返しますが、通常は成功します。

サンプルコードでは、ユーザーが入力したコマンドを履歴に追加しつつ、入力された内容を表示し、「exit」と入力されるまでループを続ける簡易シェルを模倣しています。この関数は、コマンドラインツールのユーザビリティ向上に貢献します。

このサンプルコードは、PHPのreadline拡張機能が有効になっている環境でのみ動作します。拡張機能がロードされていない場合、エラーとなり実行できませんので、php.iniextension=readlineを有効にするか、PHPをreadlineサポート付きでコンパイルしてください。

readline_add_history関数には、ユーザーが入力した「実際の文字列」を渡すのが正しい使い方です。リファレンスの引数名$promptは、表示用のプロンプトではなく、履歴として記録したい内容を意味すると理解してください。空の入力は履歴に追加しないことで、履歴の質を保てます。これらの関数は、インタラクティブなコマンドラインツールやシェルをPHPで構築する際に、入力履歴機能を提供するために利用されます。

関連コンテンツ

関連IT用語