28
28

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 で自分のマシンのセットアップを省力化する

Posted at

Rake とは「Ruby で書かれた Make っぽいもの」でだいたい合っている。

単にタスクに必要な処理をまとめておいて呼ぶ、くらいの使い方でも便利ではあるけれど、Make をリスペクトして用意されたファイルタスクなどを絡めるともっとおもしろいことができる、という話。

ファイルタスク

リファレンス・マニュアルなどに詳しい説明があるが、簡単に表現すると「あるファイルを作るためのタスク」である。

典型例でいうと実行バイナリの生成など。必要なヘッダにリンクしつつ適切なパラメータとソースファイルをコンパイラに渡す、といったことをファイルタスクが責任をもって定義する。

タスクの事前条件

タスクには、それが必要とする事前条件を定義することができる。

たとえばコンパイルを実行するタスクならば、必要なファイルや準備を定義したタスクを事前条件に指定しておくことで、必要であれば事前にそれらを実行する。

これがけっこう賢くて、たとえば事前条件にファイルを指定しておいて、かつそのファイルに対してファイルタスクを定義しておくと、ファイルが存在しないときにそのファイルタスクが実行される。

開発ツールを Homebrew でインストールする

OS X におけるパッケージ管理ソフトウェアとして Homebrew を使っている。

Git や Z shell (zsh) は日常的に使う開発ツールで、新しいマシンをセットアップする際には、まず入れる。

Git と Z shell, この2つくらいならシェルスクリプトに brew install zsh git とか書いておくくらいで事済むが、たとえば wget も入れたいとか、hub も入れたいとか、日常的に使うツールはだんだん多くなってきたりする。

Homebrew と Rake

最近の Homebrew は $HOMEBREW_ROOT/opt/$formula から $HOMEBREW_ROOT/Cellar/$formula/$latest_version への symlink を張るようになっている。

つまり $HOMEBREW_ROOT/opt/$formula に対するファイルタスクを定義しておくと自動化がしやすそう。

HOMEBREW_ROOT = '/usr/local'

namespace :homebrew do
  file File.join(HOMEBREW_ROOT, 'opt', 'zsh') do
    sh 'brew', 'install', 'zsh'
  end

  namespace :zsh do
    desc 'Install zsh with Homebrew'
    task :install => [File.join(HOMEBREW_ROOT, 'opt', 'zsh')
  end
end

これで rake homebrew:zsh:install を実行すると、Z shell がインストールされていない場合のみ brew install zsh を実行しようとする。

発展

  • Ruby のインストール
    • ~/.rbenv/versions/$version が存在しなければ

などもできる。

https://github.com/aereal/dotfiles/blob/master/Rakefile にもっといろいろ書いてある。

おわり

標準ライブラリはいろいろおもしろいライブラリがある。

28
28
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
28
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?