Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyでファイルの書き込みを行いたい場合、writメソッドを利用することが可能です。

本記事では、ファイル操作の中でも書き込み処理に焦点を当て、サンプルコードを掲載しながら解説していきたいと思います。

Fileクラスのwriteメソッドとは


RubyのFileクラスにはwriteメソッドが用意されており、ファイルへの書き込み処理を実施したい場合に利用します。

クラスメソッドとして利用する方法と、インスタンスメソッドとして利用する方法の2種類の方法が選択出来ます。

クラスメソッドでの利用法

Fileクラスから直接writeメソッドを利用する場合、下記のように記述出来ます。

File.write(ファイルパス, 書き込む内容)

「sample.txt」というファイルに「テスト」と書き込む場合は下記のように記述します。

File.write("sample.txt", "テスト")

インスタンスメソッドでの利用法

インスタンスを生成してwriteメソッドを利用する場合、まずFile.openメソッドでファイルを開き、読み書きモードを設定した上で使用します。

インスタンス名 = File.open(ファイルパス, 読み書きモード)
インスタンス名.write(書き込む内容)
インスタンス名.close

クラスメソッドのサンプルをインスタンス生成での利用法に書き換えると、下記のようになります。

file = File.open("sample.txt", "w")
file.write("テスト")
file.close

「file」という名前のインスタンスを作成し、writeメソッドを呼び出した上で引数に書き込む内容を指定します。

クラスメソッドでFile.writeを使ってみよう


単純にファイルに何かを記述したいだけであれば、インスタンスを生成しないFile.writeメソッドで手っ取り早く実装出来てしまいます。

モードを指定した書き込み処理

上記サンプルで通常の書き込み処理に関しては紹介しているので、今回は追記の方法を確認してみましょう。

インスタンスを生成した書き込みを行う際、指定した読み書きモードの「a」にあたる追記処理がクラスメソッドのwriteメソッドでも実は利用することが出来ます。

File.write("sample.txt", "追記します", mode: "a")

実行結果

テスト追記します

第3引数としてmodeに「a」 を指定することで、追記モードとしてファイルに書き込みを行うことが可能です。

配列を定義してファイルに書き込む

1度に複数の文字列をファイルに書き込みたい場合には、下記のような記述も可能です。

今回は結果を分かりやすくするため、書き込みモード(mode: “w”)に切り替えた上で実行してみましょう。

File.write("sample.txt", ["a", "b", "c"].join("\n"), mode: "w")

実行結果

a
b
c

サンプルでは、配列で定義した文字列をjoinメソッドにより1つの文字列のまとまりとした上で、ファイルへの書き込みを実施しています。

ポテパンダの一言メモ

joinメソッドでは引数に区切り文字を設定することが可能で、サンプルでは改行文字(“\n”)を設定しているため出力されたデータが要素毎に改行されています。

インスタンスメソッドでwriteメソッドを使ってみよう


ではインスタンスメソッドでwriteメソッドを使用する方法についても確認しておきましょう。

インスタンスを生成してファイルの書き込みを行う場合、ファイルを開く際に読み書きモードを指定する必要があります。

書き込みモード(w, w+)

まず書き込みモードでファイルを開いた場合、ファイルが存在する場合は全ての内容が削除されて指定した内容が書き込まれます。

ファイルが存在しない場合には、新規ファイルとして作成された上で指定した内容が書き込まれます。

サンプル

上記で利用している「sample.txt」ファイルに書き込み処理を実施してみましょう。

file = File.open("sample.txt", "w")
file.write("サンプル1")
file.write("サンプル2")
file.close

実行結果

サンプル1サンプル2

このようにwriteメソッドでは書き込み処理を連続して行った場合、改行は実施されませんので注意が必要です。

ポテパンダの一言メモ

w+を指定した場合には読み込み処理も実施出来ます。

追記モード(a, a+)

追記モードでファイルを開いた場合、ファイルが存在する場合は、ファイル末尾から指定した内容を追記する形で書き込みが実施されます。

ファイルが存在しない場合には、上述した「w」と同じく、新規ファイルとして作成された上で指定した内容が書き込まれます。

サンプル

同じ「sample.txt」ファイルに今度は追記モードで書き込み処理を実施してみます。

file = File.open("sample.txt", "a")
file.write("サンプル3")
file.write("サンプル4")
file.close

実行結果

サンプル1サンプル2サンプル3サンプル4
ポテパンダの一言メモ

a+を指定した場合には、w+同様に読み込み処理も実施出来ます。

上書きモード(r+)

上書きモードでファイルを開いた場合、ファイルが存在する場合はデフォルトで、ファイル先頭から上書きする形で書き込みが実施されます。

オプションで開始位置を指定することも可能です。

ファイルが存在しない場合には、エラーとなってしまうため注意が必要です。

開始位置を指定しないサンプル

「sample.txt」に上書きモードで書き込み処理を実施してみます。

file = File.open("sample.txt", "r+")
file.write("サンプル5")
file.close

実行結果

サンプル5サンプル2サンプル3サンプル4

ファイル先頭から上書きされたため、「ファイル1」と記述されていた内容が「ファイル5」に書き換わっています。

開始位置を指定したサンプル

続いて開始位置を指定して任意の位置から上書きしてみます。

開始位置を変更するには「seek」メソッドを利用することが可能で、第1引数にバイト数、第2引数に基準の位置を指定します。

基準位置の指定方法
  • IO::SEEK_SET(ファイルの先頭から)
  • IO::SEEK_CUR(カーソルの位置から)
  • IO::SEEK_END(ファイル末尾から)

マルチバイトである日本語の場合、サンプルが分かりにくくなるためファイルの内容を下記のように変更しておきます。

sample1sample2

今回は「sample1」の記述を「sample3」に書き換えてみましょう。

file = File.open("sample.txt", "r+")
file.seek(6, IO::SEEK_SET)
file.write("3")
file.close

実行結果

sample3sample2

第1引数に「6」と指定したことで、7バイト目から上書きが実行されるため、結果的に「sample1」が「sample3」に修正されています。

さいごに: Rubyファイル操作の基本 Fileクラスのwriteメソッドを使ってみよう!


本記事では、Rubyでのファイル操作処理に欠かせないFileクラスから提供されるwriteメソッドの使い方についてご紹介してきました。

今回ご紹介した内容は基本的な部分であり、クラスメソッド・インスタンスメソッドどちらを利用するかは実装するプログラムにより異なります。

数多くのサンプルプログラムに触れて、各メソッドがどういった場面で利用されているのか意識してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。