Rakeはどう便利なのか勉強中
Rakeを使う利点てなんだ?という疑問
現在Rakeの使い方を勉強中なんですが、いまいち便利さが実感できません。
いや、大規模なプロジェクトなら依存関係とか簡単に整理できるの便利なんだろうなーとは思うんですが、やっぱり手元で便利さを実感したい。
と言うわけで、Rubyで書いたファイル生成スクリプトと、同様の機能を持ったRakefileを作って比較してみました。
ファイル生成スクリプト
今回作ったのは、testfile.txtというファイルを生成するスクリプトです。 また、依存関係を作るために、ディレクトリ作成と別ファイルからの読み込みを行なっています。
FileTree
-Rakefile
-Testdir
-testfile.txt
-additional.txt
makefile.rb (Rubyスクリプト)
#frozen_string_literal: true
require 'fileutils'
TESTDIR = "Testdir"
MAIN_FILE = "testfile.txt"
SUB_FILE = "additional.txt"
MAIN_FILE_PATH = "./#{TESTDIR}/#{MAIN_FILE}"
SUB_FILE_PATH = "./#{TESTDIR}/#{SUB_FILE}"
if !Dir::exist?(TESTDIR)
Dir.mkdir(TESTDIR, 0755)
end
if !File::exist?(SUB_FILE_PATH)
File.open(SUB_FILE_PATH, "w") do |file|
file.puts "This is an additional text."
end
end
File.open(MAIN_FILE_PATH, "w") do |file|
file.puts "Make file test.\n", File.read(SUB_FILE_PATH)
end
すでにTestdir
ディレクトリやadditional.txt
が存在する場合にエラーにならないよう、exist?
メソッドで確認してから作成していますが、確かにこれはめんどくさい。
何より、この記述だと「testfile.txt
を作るためにはTestdir
ディレクトリとadditional.txt
が必要である」と言う依存関係がわかりづらいです。
Rakefile
#frozen_string_literal: true
TESTDIR = "./Testdir"
MAIN_FILE = "testfile.txt"
SUB_FILE = "additional.txt"
MAIN_FILE_PATH = "#{TESTDIR}/#{MAIN_FILE}"
SUB_FILE_PATH = "#{TESTDIR}/#{SUB_FILE}"
task :default => MAIN_FILE_PATH
desc "Make main_file"
file MAIN_FILE_PATH => SUB_FILE_PATH do
File.open(MAIN_FILE_PATH, "w") do |file|
file.puts "Make file test.\n", File.read(SUB_FILE_PATH)
end
end
desc "Make sub_file"
file SUB_FILE_PATH => TESTDIR do
File.open(SUB_FILE_PATH, "w") do |file|
file.puts "This is an additional text."
end
end
desc "Make a new directory"
directory TESTDIR
Rakeの場合、まず依存関係がわかりやすいですね。
また、わざわざ条件分岐しなくても自動で事前タスクを確認してよしなにやってくれるのは楽。
あと、最大の目的であるtestfile.txt
の生成が一番先頭にくるのもわかりやすいと思いました。
まとめ:便利なのはわかったが・・・
確かにRake使った方がわかりやすいなーと思ったんですが、今回の記述だと、なんやかんやでRakefileの方が長くなってしまったという・・・。
まあそれは書き方の問題な気がします。DRYな書き方を意識したつもりだったんですが、下手に定数使わない方がわかりやすいのかも。
今回みたいな単純な例ではなく、もっと多くの依存関係が絡んだプロジェクトだったら、いちいちif文書いてらんないでしょうし、Rake使った方が楽できそうだと言うことが理解できました。
今後いい事例に出会ったら、また記事にしたいと思います。