フリーエンジニアの長瀬です。みなさんはFileutilsを使っていますか?Fileutilsのライブラリーを使えばUnix/Linuxコマンドがrubyスクリプトから利用できるようになります。使いこなせればより動的にファイルをコピーしたり、削除したりとプログラミングで自動化できる幅が広がります。mvでファイルを移動するといった応用的な内容についても解説していきます。まとめUnix/LinuxコマンドとはFileUtilsのライブラリはUnix/Linuxコマンドをrubyから使えるようにするために作成されています。そもそもこのライブラリを使いこなすためには最低限Unix/Linuxコマンドの知識が必要です。Unix/Linuxコマンドど聞いてピンとこない人はまずUnix/Linuxコマンドに関する以下の記事を一読することをおすすめします。ある程度インプットが済んでからこの先を読み進めてください。cp_r)cp、cp_rとはcp(copy)は、ファイルをコピーします。recursively)は、フォルダの配下のすべてのサブフォルダとファイルをコピーします。Fileutilsでcp、cp_rを実行するrubyのFileUtilsでファイルやフォルダをコピーするメソッドは、UNIX/Linuxのコマンドラインで使用するコマンドと全く同じです。srcのフォルダをdstのフォルダへコピーする。rは再帰的(Recursive)にフォルダをたどるという意味。UNIX/LinuxのコマンドラインでFileUtilsと同等のことを行うには、以下のようにコマンドを実行します。/path/to/backup/RubyのFileUtilsメソッドを使ってファイルやフォルダを操作する実際のコードは、以下のようになります。FileUtilsのメソッドはすべて対応するUNIX/Linuxコマンドと同等のファイル操作を行います。rm(remove)は、ファイルを削除します。force)は、ファイルを削除します。読み取り専用のファイルがあった場合でも警告せず強制的に削除します。recursively)は、フォルダの配下のすべてのサブフォルダとファイルを削除します。読み取り専用のファイルがあった場合は削除せず警告します。force)は、フォルダの配下のすべてのサブフォルダとファイルを削除します。読み取り専用のファイルがあった場合でも警告せず強制的に削除します。rm_rfは実行して読み取り専用のファイルがあった場合でも何の警告も出さずに強制的に削除するため注意が必要です。実行するrubyのFileUtilsでファイルやフォルダを削除するメソッドは、UNIX/Linuxのコマンドラインで使用するコマンドと全く同じです。targetのファイルを削除する。読み取り専用のファイルは削除できない。targetのファイルを削除する。読み取り専用のファイルも強制的(Force)に削除する。targetのフォルダを削除する。読み取り専用のファイルやフォルダは削除できない。rは再帰的(Recursive)にフォルダをたどるという意味。targetのフォルダを削除する。読み取り専用のファイルも強制的(Force)に削除する。UNIX/LinuxのコマンドラインでFileUtilsと同等のことを行うには、以下のようにコマンドを実行します。./app_v0.9.10RubyのFileUtilsメソッドを使ってファイルやフォルダを操作する実際のコードは、以下のようになります。FileUtilsのメソッドはすべて対応するUNIX/Linuxコマンドと同等のファイル操作を行います。フォルダを配下のサブフォルダやファイル丸ごと強制的に削除するFileUtils.rm_rf("./app_v0.9.10")その他Fileutilsの便利なコマンドtouchでファイルを更新する方法FileUtilsのtouchメソッドは、もともとUNIX/Linuxのコマンドラインのtouchコマンドが由来です。ファイルのタイム・スタンプを変更する:ITprotouchコマンドは、以下のことをファイルに対して行います。引数に指定したファイルが存在しない場合は、新規に空のファイルを作成する引数に指定したファイルが存在する場合は、そのファイルの更新日付を現在の日時にする実際にコードを見てみましょう。app_log_fileを新規作成するか存在すれば更新日付を最新にFileUtils.touch("app_log_file")以上のコードのように、引数に指定したファイルが新規作成されるか、その更新日付が最新になります。cmpでファイルを比較する方法FileUtilsのcmpメソッドも、もともとはUNIX/Linuxのコマンドラインのcmpコマンドが由来です。@ITcmpメソッドは、引数に指定した2つのファイルの内容を比較し、一致していればtrue、一致していない場合はfalseを返します。false以上のコードのように、引数に指定した2つのファイルの内容が一致するかどうかを確認できます。exists?でファイルの存在を確認する方法FileUtilsには、ファイルやフォルダが存在するかどうか確認するメソッドは存在しません。そこで、別途、FileTest.exists?メソッドにて代用します。FileTest.exists?メソッドは引数に指定したファイルやフォルダが存在する場合trueを返し、存在しない場合falseを返します。存在していればtrue、そうでなければfalse以上のコードのように、引数に指定したファイルやフォルダが存在するかどうかを確認できます。pwdで現在のディレクトリを確認する現在のディレクトリを確認するにはそのままUnix/Linuxコマンドのpwdが使えます。FileUtils.pwdそれぞれの環境での作業ディレクトリの絶対パスが出力されます。mvでファイルを移動するファイルを移動させるにはそのままUnix/Linuxコマンドのmvが使えます。mvはmoveの略で、第一引数には移動したいファイル、第二引数には移動先を指定します。sample.rbというファイルをothersというディレクトリに移動するには以下のようにします。'Fileutils'FileUtils.mv('sample.rb','others')まとめいかがでしたでしょうか?この記事では、rubyのFileutilsの使い方を解説しました。Unix/Linuxコマンドを使えるようになることで、rubyの中だけでより多くの処理ができますね。基本Unix/LinuxコマンドでできることはFileutilsから利用できるので、興味があるかたはこれを機にFileuitlsを極めてみてはいかがでょうか?もしFileutilsについて忘れてしまったらこの記事を確認してくださいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。長瀬来Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど言語が好きで、英語や中国、ドイツ語を勉強しました。将来的には海外で生活したいです。Rails5やCocos2dxの勉強を主にしています。ライターとしてはできるだけ初心者にわかりやすい文章になるように心がけています。趣味は語学、読書です。