はじめに

今回は初学者を対象に、Rubyでファイルを開いて読み込む/書き込む方法、ディレクトリの扱いなどを説明します。

open でファイルを開く

最もシンプルな使い方はKernel#openメソッドでファイルを開くことです。openはFileクラスのインスタンスを返します。

FileはIOクラスを祖先に持ち、ファイル操作は基本的にIOクラスのインスタンスメソッドを使って行います。またEnumerableモジュールもインクルードされているため、each, map, reduceなどが利用可能です。以下に実例を見ていきます。

行ごとの処理を行うにはIO#each_lineを使うのが簡単です(IO#eachも同じ機能を持つ別名メソッドです)。

openしたファイルは、必ずcloseする必要があります。

また、openにブロックを渡す方法もあります。こうすればファイルオブジェクトはブロック終了時にcloseされるため、close忘れがありません。

ファイルに書き込む

ファイルへの書き込みは、オープンしたFileインスタンスに対してIO#putsメソッドを使って行います。

エラーが発生してしまいました。「IOError: not opened for writing」と言われている通り、openするときに書き込み可能な形式で開いてやる必要があるのです。これを「モード」と言い、おおまかに以下のような種類があります(module function Kernel.#openより)。

  • r
    • ファイルを読み込みモードでオープンします。デフォルトはこのモードになっているため、先程は書き込みが失敗していました。
  • w
    • ファイルを書き込みモードでオープンします。オープン時にファイルがすでに存在していれば その内容を空にします。
  • a
    • ファイルを書き込みモードでオープンします。出力は常にファイルの末尾に追加されます。
  • r+
    • 読み書き両用モード。ファイルの読み書き位置は先頭にセットされます。
  • w+
    • 読み書き両用モード。ファイルの読み書き位置は先頭にセットされ、オープン時にファイルがすでに存在していればその内容を空にします。
  • a+
    • 読み書き両用モード。書き込みは常にファイル末尾に行われます。

それでは、先ほどのファイルを末尾に追加するa+モードで開いて、内容を追加してみます。

次のページではディレクトリを扱う方法や、その他のよく利用するメソッドなどを紹介します。