【Ruby3.x】IO::reopen()メソッドの使い方
reopenメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
reopenメソッドは、IOクラスのインスタンス、すなわちIOオブジェクトの内容を再設定し、別のファイルやIOストリームに関連付けを変更するメソッドです。このメソッドを使用することで、既存のIOオブジェクトを一度破棄して新しく生成し直すことなく、同じオブジェクトを効率的に再利用することが可能になります。
reopenメソッドの主な使い方は二通りあります。一つ目は、引数に既存の別のIOオブジェクトを渡す方法です。この場合、現在のIOオブジェクトは、引数として指定されたIOオブジェクトと同じファイルやストリームを参照するように変更されます。これにより、両方のIOオブジェクトが同じ入出力先を共有する状態になります。二つ目は、引数にファイルパスと、そのファイルを開くためのモード(読み込み、書き込みなどを指定する文字列)を渡す方法です。この場合、現在のIOオブジェクトは指定されたパスのファイルを、与えられたモードで開き直し、その新しいファイルに関連付けられます。このとき、元のIOオブジェクトが参照していたファイルは閉じられ、新しいファイルディスクリプタが割り当てられます。モード文字列を省略した場合は、元のIOオブジェクトが持っていたモードが使用されます。
このメソッドは、特にRubyプログラムの標準入力($stdin)、標準出力($stdout)、標準エラー出力($stderr)といったグローバルなIOストリームを、一時的に別のファイルにリダイレクトする際によく利用されます。例えば、プログラムの実行結果をコンソールではなくログファイルに出力したい場合などに非常に有効です。ただし、既存のIOオブジェクトの関連付けが変更されるため、元の状態に戻したい場合は、変更前のIOオブジェクトの情報をあらかじめ保存しておくなどの対応が必要となります。
構文(syntax)
1STDERR.reopen('error.log', 'w')
引数(parameters)
path, mode_str = "r+"
- path: string: 再オープンするファイルパスまたはIOオブジェクト
- mode_str = "r+": string: ファイルを開くモードを指定する文字列(デフォルトは読み書きモード)
戻り値(return)
self
IO クラスの reopen メソッドは、実行されたIOオブジェクト自身を返します。