プログラム開発でFileの読み込み・書き込み処理は、どんな言語でも頻出処理の1つとして挙げられます。
本記事では、RubyでのFile読み書きの方法について、初心者の方にも理解してもらいやすいようサンプルコードを掲載しながらご紹介していきます。
目次
Rubyではファイル操作にFileクラスを利用する
Rubyでファイル操作を行う際、Fileクラスを利用して実装を進めることになります。
ファイル関連でどういった処理がよく利用されるのか、まずは洗い出してみましょう。
- ファイル作成: new, open
- ファイルを開く: open
- ファイルの読み込み: read
- ファイルの書き込み: puts, write
- ファイルを閉じる: close
読み書きモード
後ほどご紹介しますがファイルを開く際、読み書きモードを指定する下記のオプションを設定することが可能です。
- r: 読み込み
- r+: 読み書き 書き込み時はファイル文頭から上書き
- w: 新規書き込み
- w+: 読み書き 書き込み時は既存の内容を削除して新規作成
- a: 追記書き込み
- a+: 読み書き 書き込み時はファイル末尾に追記
File(ファイル)の作成
ファイルを新規で作成する場合、「new」と「open」2つのメソッドが利用出来ます。
読み書きモードのオプションには「w」と「a」を利用することが可能です。
基本構文
記述方法に関しては下記の通りです。
File.new(ファイルパス, 読み書きモード) File.open(ファイルパス, 読み書きモード)
第1引数にファイルパス、第2引数に読み書きモードを指定します。
新規ファイル作成サンプル
ではまず「new」「open」それぞれに「w」「a」のモードを指定して実行してみましょう。
file1 = File.new('sample1.txt', 'w') file2 = File.open('sample2.txt', 'w') file3 = File.new('sample3.txt', 'a') file4 = File.open('sample4.txt', 'a')
実行結果
$ls sample.rb $ruby sample.rb $ls sample.rb sample1.txt sample2.txt sample3.txt sample4.txt
指定したファイルがそれぞれ作成されています。
File(ファイル)を開く
ファイルを開く場合には、「open」メソッドが利用出来ます。
読み書きモードは上述した6つ全てのオプションが利用可能です。
基本構文
ファイル作成時と同じ記述方法でファイルを開くことが可能です。
パスにファイルが存在する場合には既存ファイルを開き、パスにファイルが存在しない場合には新規作成となります。
File.open(ファイルパス, 読み書きモード)
実際のサンプルは読み込み・書き込み処理と一緒に確認していきます。
newメソッドでも基本的に同じようにファイルを開くことが出来ますが、名前の通りopenメソッドを使う方法が一般的です。
また、openメソッドではブロック処理を記述出来る点でも少し異なります。
File(ファイル)の書き込み
ファイルを作成・開いた状態で書き込み処理を行っていきましょう。
書き込み処理には、「puts」と「write」メソッドが利用出来ます。
基本構文
それぞれのメソッドで書き込み処理を行うには下記のように記述します。
インスタンス名.puts(書き込む内容) インスタンス名.write(書き込む内容)
「puts」と「write」の違いは、「puts」を利用した場合には末尾が改行されるのに対し、「write」では改行されません。
書き込みモードサンプル
では実際に書き込み処理のサンプルで確認していきたいと思います。
file1 = File.open('sample1.txt', 'w') file1.puts("putsメソッドで出力1") file1.puts("putsメソッドで出力2") file1.write("writeメソッドで出力1") file1.write("writeメソッドで出力2")
ファイルを開いて確認してみると下記の内容で作成されています。
putsメソッドで出力1 putsメソッドで出力2 writeメソッドで出力1writeメソッドで出力2
putsメソッドで書き込みを行った場合は末尾が改行されており、writeメソッドでは改行されていないことをご確認頂けます。
追記モードサンプル
次は上記サンプルで作成したファイルに追記モードで書き込み処理を実施してみたいと思います。
file1 = File.open('sample1.txt', 'a') file1.puts("putsメソッドで追記") file1.write("writeメソッドで追記")
ファイルを開いてみると下記のように追記されています。
putsメソッドで出力1 putsメソッドで出力2 writeメソッドで出力1writeメソッドで出力2putsメソッドで追記 writeメソッドで追記
前回のサンプルで最後に書き込み処理を実施したのがwriteメソッドだったので、今回putsメソッドで書き込みをした1行目は改行されずに追記されています。
ファイル文頭から上書きするサンプル
もう1つの書き込みオプションである「r+」に関しても、サンプルファイルに上書きして動作確認しておきましょう。
file1 = File.open('sample1.txt', 'r+') file1.puts("putsメソッドで上書き") file1.write("writeメソッドで上書き")
ファイルを開いてみると下記の結果となります。
putsメソッドで上書き writeメソッドで上書きeメソッドで出力1writeメソッドで出力2putsメソッドで追記 writeメソッドで追記
注意してもらいたいのは「r+」の場合、ファイル先頭に「追記」するのではなく「上書き」するという処理の違いです。
File(ファイル)の読み込み
開いたファイルを読み込むためには「read」が利用出来ます。
基本構文
Fileクラスのインスタンスにreadメソッドを指定することでファイルの内容を全て読み込むことが可能です。
また、引数に数値を入力することでバイト数を指定して読み込むことも出来ます。
インスタンス名.read(バイト数)
バイト数の指定はオプションです。
サンプル
バイト数の指定有りと指定なしでファイルを読み込み、コンソールに出力するサンプルです。
readメソッドでファイル全体を読み込みコンソール出力するサンプル
まず「sample1.txt」のファイル全体を読み込んでみます。
file1 = File.open('sample1.txt', 'r') puts(file1.read)
出力結果
$ruby sample.rb 1行目 2行目 3行目3行目の続き 4行目 5行目
ファイルを開く際、読み書きモードで「w」や「a」を指定している場合にはreadメソッドがエラーとなってしまいますのでご注意ください。
readメソッドに読み込むバイト数を指定するサンプル
file1 = File.open('sample1.txt', 'r') puts(file1.read(20))
実行結果
$ruby sample.rb 1行目 2行目 3行
このようにファイルの量が膨大な場合など、指定したデータ分だけファイルを読み込むことも可能です。
File(ファイル)を閉じる
開いたファイルは閉じる際には「close」メソッドが利用出来ます。
ここまでのサンプルではあえてcloseメソッドを記述してきませんでしたが、基本的にファイルを開く・閉じるの処理はセットで利用するものと覚えておきましょう。
基本構文
インスタンス名.close
サンプル
ファイルを新規で作成し、1行だけ入力しファイルを閉じるというシンプルな処理です。
file1 = File.new('sample1.txt', 'w') file1.write('test') file1.close
さいごに: RubyのFile(ファイル)操作は必ず抑えておくべき頻出処理
本記事では、Rubyのファイル操作の方法について最低限押さえておきたい基本の内容をご紹介してきました。
Fileクラスには今回ご紹介した以外にも様々なメソッドが用意されており、実務ではより複雑なコードが必要になるケースも少なくありません。
まずは基本をしっかりと理解した上で、少しずつ応用的に使いこなせるよう学習していきましょう。
第2引数に「w+」「a+」を指定した場合も同様の結果となります。
「r」や「r+」を指定した場合には、エラーとなることも合わせて覚えておきましょう。