質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

851閲覧

Rakeを実行する際に、作成するディレクトリ名を指定したい

y-doi

総合スコア322

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2018/02/03 14:02

Rakeコマンドでディレクトリを作成したいので調べたところ、
こちらのサイトによるとdirecotryメソッドを使って、Rakefileに

directory "var/hoge"

を書けば、$rake var/hogeでvar/hoge のディレクトリが作成できることはわかりました。

ただそれだとRakefileにあらかじめ書いてあるディレクトリ(今回だとvar/hoge)しか作成できません。

rakeを実行する際にディレクトリを指定して作成することはできますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。
directory を使うのでしたら、以下のように ENVを参照するrakeファイルを作って、
タスクの実行時に渡す方法もあります。

$ cat lib/tasks/tera111891.rake

ruby

1directory ENV['TEMP_DIR'] 2 3namespace :tera111891 do 4 task :run => ENV['TEMP_DIR'] 5end

$ ls -la /tmp/abc123

ls: /tmp/abc123: No such file or directory
$ rake TEMP_DIR=/tmp/abc123 tera111891:run
mkdir -p /tmp/abc123
$ ls -la /tmp/abc123
total 0
drwxr-xr-x 2 ykt68 wheel 64 2 4 00:15 .
drwxrwxrwt 20 root wheel 640 2 4 00:15 ..
$

以上参考になれば幸いです。


追記

上記の rake ファイルだと、rake -vT でエラーになってしまうので、以下のように修正しました。

ruby

1TEMP_DIR = ENV['TEMP_DIR'] || '/tmp/abc123' 2 3directory TEMP_DIR 4 5namespace :tera111891 do 6 task :run => TEMP_DIR do |task| 7 p task.name # => "tera111891:run" 8 end 9end

投稿2018/02/03 15:20

編集2018/02/03 17:47
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y-doi

2018/02/03 17:29

回答ありがとうございます。 この方法だとdirectoryを使うので、タスク名がディレクトリ名になっているんですね。 タスクの依存関係に使えるのでいいですね。 質問なんですが、タスクに引数を渡す方法だと、タスクの依存関係に使えないですか?
jun68ykt

2018/02/03 17:53

追記に修正したソースを載せたとおり、タスク名 は、task.name で取得できますが これは、ディレクトリ名ではなく、 "tera111891:run" という文字列になります。 > タスクに引数を渡す方法 だと、do |task, args| の args に入ってくるので、 依存関係に使うのは難しいかもしれません。 少なくとも、私はタスクに渡した引数をそのように使ったことがなく、ぱっと思いつかないです。 (調べたら方法があって、できるのかもしれませんが。。。)
y-doi

2018/02/03 18:54 編集

追記していただきありがとうございます。 http://www.ownway.info/Ruby/rake/arguments によるとタスクに引数を渡す方法のデメリットは、 * 直接実行されるタスクしか引数を受け取れない。 - 依存関係により起動されるタスクが引数を受け取れない。 - 例えば default タスクによって起動されるタスクは引数を受け取れない。 と書いてました。 タスクに引数を渡す方法では依存関係を使えないようですね。 なので jun68yktさんが教えて下さった、ENVの方法をつかってみようと思います。 ありがとうございました。
jun68ykt

2018/02/04 00:31

解決されたようで、よかったです!
guest

0

タスクに引数を渡す方法でできました。
Rakefileに

task :make, 'date' do |t, arg| sh "mkdir -p #{arg['date']}" end

を書いて、
$rake 'make[var/hoge]'を実行することで同じようにできます。

投稿2018/02/03 15:05

y-doi

総合スコア322

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問