Rubyのシステム開発では、新規ファイルの作成や既存ファイルの読み込みといったファイル関連の処理は頻繁に利用されます。
本記事では、Rubyでのファイル操作の基本となるFile.openを利用したファイルの読み込み・書き込み処理についてご紹介していきます。
目次
File.openメソッドとは
Fileクラスから提供されているopenメソッドで、Rubyでファイルを開いたり・作成したりする際に呼び出す処理です。
読み込みや書き込み時にもファイルを開く必要があるため、ファイル関連処理の起点とも言えます。
基本構文
File.openメソッドは下記のように記述します。
インスタンス = File.open(ファイルパス, 読み書きモード)
ファイルパス以外はオプションでの指定となります。
サンプル
同階層に格納された「sample.txt」というファイルを読み込みモードで開き、インスタンス「file」に格納したい場合には下記のように記述します。
file = File.open("sample.txt", "r")
読み書きモードについて
File.openメソッドを使用する際、第2引数に下記の6つのオプションを指定することが出来ます。
読み書きモードの指定はオプションとなっており、何も指定しなかった場合にはデフォルト値として「r」、つまり読み込みモードとなります。
- r: 読み込み
- r+: 読み書き 書き込み時はファイル文頭から上書き
- w: 新規書き込み
- w+: 読み書き 書き込み時は既存の内容を削除して新規作成
- a: 追記書き込み
- a+: 読み書き 書き込み時はファイル末尾に追記
File.openでファイルを新規作成したい場合には、「r」と「r+」の指定はエラーとなるため注意が必要です。
ファイルの読み込みを行う方法
ファイルの読み込み処理を行いたい場合には、読み書きモードの「r」「r+」「w+」「a+」が利用可能です。
基本構文
ファイルの読み込みにはreadメソッドを利用します。
インスタンス名 = File.open(ファイルパス, 読み書きモード) インスタンス名.read インスタンス名.close
処理成功サンプル
「sample.txt」ファイルを読み込みモードで開き、ファイル全体を読み込んでコンソールに出力するサンプルです。
file = File.open("sample.txt", "r") puts(file.read) file.close
実行結果
$ruby sample.rb テスト
sample.txtには「テスト」と入力し保存した状態でサンプルコードを実行しています。
処理失敗サンプル
では「w」や「a」を読み書きモードに指定してファイルを開いた場合にはどうなるのか検証してみましょう。
file = File.open("sample.txt", "w") puts(file.read) file.close
実行結果
$ruby sample.rb Traceback (most recent call last): 1: from sample.rb:3:in `' sample.rb:3:in `read': not opened for reading (IOError)
読み取り用のモードでファイルが開かれていないということで、エラーが発生していることをご確認頂けます。
ファイルの書き込みを行う方法
ファイルの書き込みを行いたい場合には、「w」「w+」「r+」「a」「a+」が利用可能です。
「w+」と「a+」に関しては「w」と「a」に加えて読み込みも出来るというだけなので「w」「a」「r+」の3つに絞って解説していきます。
基本構文
ファイルの書き込みを行うにはwriteメソッドを利用します。
インスタンス名 = File.open(ファイルパス, 読み書きモード) インスタンス名.write("書き込む値") インスタンス名.close
ファイルの内容を新規で作成したい場合「w」モード
読み込みモードのサンプルで利用した「テスト」と記載された「sample.txt」ファイルに「w」モードで書き込み処理を実施してみたいと思います。
file = File.open("sample.txt", "w") file.write("書き込み") file.close
sample.txtのファイルを開いてみると下記のように内容が書き換わっています。
書き込み
ファイルに追記したい場合「a」モード
同じファイルに「a」モードで「追記しました」という文言を書き込んでみたいと思います。
file = File.open("sample.txt", "a") file.write("追記しました") file.close
ファイルを開いて中身を確認してみると指定した値で追記されていることがわかります。
書き込み追記しました
ファイルの先頭から上書きしたい場合「r+」モード
同様に「r+」モードで「上書き」という文言を書き込んでみたいと思います。
file = File.open("sample.txt", "r+") file.write("上書き") file.close
ファイルを開くと下記のような内容に変わっています。
上書きみ追記しました
このように「r+」の場合には、ファイル先頭から指定した値の分だけ上書きされ、残りの内容はそのまま維持される特徴があります。
putsメソッドを使用した書き込み
Rubyではファイルの書き込みを行う際、「puts」メソッドを利用することも出来ます。
「write」メソッドでは末尾に改行コードが設定されないのに対し、「puts」メソッドでは末尾に改行コードが付与される特徴があります。
file = File.open("sample.txt", "w") file.puts("1行目") file.puts("2行目") file.puts("3行目") file.close
実行結果
1行目 2行目 3行目
RubyのFile.openメソッドでブロック記述を利用する
ここまでで、基本的なFile.openメソッドの利用方法については確認出来ましたが、ブロック記述という方法を利用することも可能です。
ブロック記述の利点として、closeメソッドを呼び出さなくてもファイルを閉じる操作が実施されるため、実務ではブロック記述がよく利用されます。
基本構文
File.open(ファイルパス, 読み書きモード) do | インスタンス名 | ファイル操作処理 end
ブロックは引数のまとまりを表し、「do~end」の間に記述された処理内容が対象となります。
サンプル
例えば直前の「puts」メソッドを使用した書き込み処理をブロック記述に書き換えると下記のようになります。
File.open("sample.txt", "w") do | file | file.puts("1行目") file.puts("2行目") file.puts("3行目") end
closeメソッドを記述していませんが、endを抜けた時点で自動的にファイルを閉じる処理が実行されます。
さいごに: File.openを利用してRubyでのファイル操作に挑戦してみよう
本記事では、Rubyでのファイル操作で利用されるFile.openメソッドの使い方についてご紹介してきました。
ファイルの読み込み・書き込み問わず、File.openからファイル操作は始まるため、必ず抑えておかなければいけない知識の1つです。
自分の実現したい処理に適した読み書きモードを選択し、適切なファイル操作が実現出来るように学習していきましょう。
第3引数として、ファイル作成時に権限を設定することも可能ですが、本記事内では基本的な内容に絞るため説明を割愛させて頂いています。