Help us understand the problem. What is going on with this article?

Rake で自分のマシンのセットアップを省力化する

More than 5 years have passed since last update.

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 にもっといろいろ書いてある。

おわり

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

hatena-corp
「知る」「つながる」「表現する」で新しい体験を提供し、人の生活を豊かにする
https://hatenacorp.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした