ファイルの検査関数を集めたモジュールである。

存在の有無、ファイル名がディレクトリか否か、ファイルのサイズ、そして属性を検証するためのメソッドがぎっしりと詰まったモジュールなのである。

001 | if FileTest.exist?("test.dat") then
002 |     if FileTest.size("test.dat") == 0 then
003 |         puts "test.datは存在しますが、空っぽです"
004 |     else
005 |         puts "test.datは存在し、かつ中身が詰まっています"
006 |     end
007 | else
008 |     puts "test.datは存在しません"
009 | end

と、いきなりサンプルコードが出てきたけれども、実際の使用方法はこのようになる。当然、モジュールをincludeすれば、 わざわざFileTest.をつけなくても使用することが可能である。

001 | include FileTest #FileTestのMix-in
002 | 
003 | if exist?("test.dat") then
004 |     if size("test.dat") == 0 then
005 |         puts "test.datは存在しますが、空っぽです"
006 |     else
007 |         puts "test.datは存在し、かつ中身が詰まっています"
008 |     end
009 | else
010 |     puts "test.datは存在しません"
011 | end

このまま、さらっと説明を終わりにしてもよいわけだが、もしこれをお読みの貴方が生粋のドサー(DOSer)またはウインドウザー(Windowser)であって、かつ勉強熱心にもRubyリファレンスマニュアルをご覧になった場合、このFileTestの説明書きに、理解不能な記述があったのではなかろうか。

例えば、以下のような記述である。

FileTest.executable?(filename) filename が実効ユーザ/グループ ID で実行できる時、真を返します。
FileTest.owned?(filename) filename が自分のものである時に真を返します。
FileTest.writable?(filename) filename が書き込み可である時、真を返します。

Rubyの生まれ故郷はUNIX(に準ずる環境)である。最近ではWindowsもUNIXの真似をして、ひとつのコンピューターを複数のユーザーが使用するという概念が取り入れられてきたわけだが、UNIXオペレーティングシステムでは、昔から『ユーザー』という概念が取り入れられており、例え同一ハードウェア上にあっても、他人や、他のグループの持ち物であるファイルをアクセスするさいに、様々な制約があるのだ。

読み取ることはできても書き込みができないとか、読み書きできても実行できないなどを細かく指定することができるのである。これを『ファイル属性』と呼んでいる。

UNIXは、誕生のそのときから、マルチタスク、マルチユーザーOSであったから、セキュリティーという面で、この考え方は必須であったのだ。もし、そういったガードをかけることができなければ、自分が作成したファイルが、翌日にはすっかり破壊されているということになるわけである。

『技術者を見たらクラッカーと思え』というのがUNIXの設計哲学なのだから(冗談だ)。

というわけで、Rubyでは、FileTestモジュールに、ファイルの属性を詳しく調べるメソッドが準備されているというわけなのだ。
といっても、Windows環境でも仕えるファイル属性検査メソッドは存在する。

まず次のコードを入力して、適当な名前で任意のフォルダに保存して欲しい。

001 | include FileTest #FileTestのMix-in
002 | 
003 | if writable?("test.dat") then
004 |     puts "test.datは書き込みできます"
005 | else
006 |     puts "test.datは書き込み禁止です"
007 | end

そして、保存したフォルダにtest.datというファイルを作成し(中身は空で可)、ファイル属性を読み取り専用にしてもらいたいのだ。ファイルを読み取り専用にする方法はご存知だと思うけれども、念のために解説しておくと、エクスプローラー上でファイル名を右クリックするとポップアップメニューが現れる。メニューの一番下の『プロパティ』をクリックすると、ファイルプロパティダイアログがぽこんと表示されるので、その下のほうにある『属性』の『読み取り専用』というチェックボックスをONにし、OKボタンで閉じるのである。

その後、前出のコードを実行すると、『test.datは書き込み禁止です』とコンソールに表示されるのだ。

めでたしめでたし。

最終更新:2009年03月12日 19:35