1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ホーム以外でホームの Rake タスクを実行

Last updated at Posted at 2019-05-27

ホームディレクトリーに Rakefile を置いて,いろいろな作業ができるようにしている,とする。

別のディレクトリーにいるときに,そのタスクを実行するにはどうするか,というのがこの記事のテーマ。

-f オプションで指定

rake コマンドには,Rake ファイルを指定する -f オプションがあるので,

rake -f ~/Rakefile foo

のようにすればいい。
でもちょっと打つのが面倒じゃない? もう少し簡略化できないの?

-f オプションにはディレクトリーを渡すことはできないが,ワイルドカードは使えるので,

rake -f ~/* foo

と書けばよいようだ。

おまけ

Windows の場合

Windows では ~ がホームディレクトリーを表してはくれないので,この手は使えない。残念。
これなんか,rake コマンド側で対処してくれたらいいのにねー。
もちろん Windows では ~ という名前のディレクトリーを作ることができてしまうので,原理的には曖昧性が生じるわけだけど,「-f オプションの ~ はホーム」ってルールにしちゃってもいいんじゃない?

Rake ファイルのファイル名

Rake ファイルのファイル名は

  • Rakefile
  • Rakefile.rb

のどっちでもいいし,大文字・小文字も気にしなくていい。

Rake タスク中のパスの扱い方

Rake ファイルの場所がカレントディレクトリーと一致しているとは限らない,ということは常に頭に入れておきたい。

-f を使わなくても不一致は起こりうる。
カレントディレクトリーに Rake ファイルが存在しない場合,ディレクトリー階層を上にたどって Rake ファイルを探すからだ。

となると,Rake ファイル中で,たとえば

require "./my_library"

みたいな記述をしてしまってはダメ,ということになる。
この . はカレントディレクトリーを表しているからね。
Rake ファイルと同じ場所にある my_library.rb を読み込ませたいなら

require_relative "my_library"

とすればいい。

また,ファイルの読み書きなどでも

IO.read("foo.txt")

みたいなことはやめて,__dir__ メソッドを使って Rake ファイルの置かれたディレクトリーのパスを取得し,そこからの相対パスでファイルを指定するようにしたい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?