【Ruby3.x】trap()関数の使い方
trap関数の使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
trap関数は、実行中のRubyプログラムがコンピュータのオペレーティングシステム(OS)から受け取る「シグナル」と呼ばれる特別な通知や命令に対して、特定の動作を割り当てるために利用する関数です。シグナルとは、例えばユーザーがプログラムの実行を中断させるためにCtrl+Cキーを押したときに発生する「割り込みシグナル」や、プログラムを終了させる「終了シグナル」のように、OSがプログラムに送るイベントメッセージのことです。
この関数を使用すると、プログラムが特定のシグナルを受け取った際に、あらかじめ定義しておいた処理(コード)を実行させることができます。これにより、予期せぬプログラムの終了を防ぎ、例えば作業中のデータを自動的に保存したり、開いているファイルやネットワーク接続を安全に閉じたりするなど、プログラムが終了する前に必要な後片付けを確実に行うことが可能になります。
trap関数は、どのシグナルに対応するかを第一引数で指定し、そのシグナルが送られてきたときに実行したい処理を第二引数にコードブロックとして渡して設定します。また、以前に設定されていたシグナルハンドラを戻り値として返します。これにより、プログラムの安定性を高め、より堅牢なアプリケーションを開発できるようになります。
構文(syntax)
1trap("INT") do 2 # シグナルを受け取ったときに実行される処理をここに記述します。 3 # 例: Ctrl+C (SIGINT) が押された場合 4 puts "シグナルを受信しました。プログラムを終了します。" 5 exit 6end 7 8# プログラムがすぐに終了しないように待機します。 9# 例: ユーザーがシグナルを送るまで待機 10sleep
引数(parameters)
signal, cmd = "DEFAULT"
- signal: 捕捉したいシグナル名を文字列で指定します。
- cmd = "DEFAULT": シグナル受信時に実行するコマンドまたはブロックを指定します。指定しない場合はデフォルトの動作になります。
戻り値(return)
Procまたはnil
引数として渡されたシグナルハンドラを登録し、そのシグナルハンドラが登録される前の以前のシグナルハンドラを返します。もしシグナルハンドラが登録されていなかった場合はnilを返します。