2009-01-01

Rake と環境設定がだいぶ分かってきた

年末からやってたドットファイル一本化の流れ。ダラダラっとメモ。

環境判別あれこれ

.emacs

実際には書き換えの際に .emacs.el という名前にしちゃったんだけど、それはともかく。

(when (fboundp 'XXX-mode)
  ())
(cond (window-system
  ())
(when (eq window-system 'mac)
  ())
(when (eq window-system 'w32)
  ())
(if (> emacs-major-version 21)
    (progn
      ()))

なんかこんなの使ってます。

.zshrc

uname くらいしか思いつかないけど、そんなもんなんでしょうか。

  • Linux
  • FreeBSD
  • Darwin

あとはコマンドの実行をそのまま評価したり。

Rake の定義

task 定義

  • file
  • dir
  • task

「何かの処理で何かのファイルを生成する」のでなければ task を使う。

メソッド定義

task の定義時に必要なメソッドは当然 task 定義より前に定義されていなければならないが、実行時に必要なメソッドは task 定義のあとに書いておくことができる。

def method_A
end

if ( method_A )
  task task_A do
    method_B
  end
end

def method_B
end

つまりこういうこと。

Rake の呼び出し

task 呼び出し

task の中から他の task を呼び出すことはたぶんできない。依存 task として定義することはできる。

ということは task は何かの戻り値をもとに処理を決定するように書くのではなく、何かの処理が完了している場合にこの処理が実行可能という形で組み立てていく必要がある。

メソッド呼び出し

task の中からメソッドの呼び出しは普通にできる。

ただし task も namespace も Ruby 的には Global というか main のメソッドであり、その中のブロックも main に属している。例えばメソッドを何らかの module や class の中に用意した場合、task のスコープと合わないので変数の受け渡し、定数の参照で食い違いが発生する。(恐らく Capistrano は set メソッドでこの問題を解決している。まだそこまで読み込んでないけど。)

ここ注意。

オプションを取らずにタスクを取る

基本的に Rakefile で扱えるのは task のみで、Ruby スクリプトへオプションを与えるという形は考えない方がよさげ。

仮に似ているけどちょっと違う task というものが増えそうなら task 定義そのものを動的に行えるようにすればよい。task はメソッドとは違うので、特に難しいことはない。例えば

[ ..  ].each { |e|
  desc "desc_#{e}"
  task "task_#{e}" do
    ..
  end
}

てな形。

デフォルトでタスク一覧を出力

Rake は default を定義しておかないと怒られるが、default でいきなり仕事が始まっちゃうのはちょっとなぁと思ったので、-T 相当の動きをしてくれるようにしてみた。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm