Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Rake
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Eric Hodel
May 25, 2016
Programming
0
350
Introduction to Rake
How to write basic rake applications
Eric Hodel
May 25, 2016
Tweet
Share
More Decks by Eric Hodel
See All by Eric Hodel
Building maintainable command-line tools with MRuby
drbrain
0
660
Lazy Enumeration
drbrain
0
120
Lessons in Mentorship
drbrain
1
230
Open Source Maintenance — Ruby on Ales 2014
drbrain
1
130
Open Source Maintenance — RailsClub Moscow
drbrain
1
170
drbdump
drbrain
2
510
Other Decks in Programming
See All in Programming
Vibe codingでおすすめの言語と開発手法
uyuki234
0
200
2026年 エンジニアリング自己学習法
yumechi
0
110
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
610
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
660
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
930
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
500
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
810
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
520
Grafana:建立系統全知視角的捷徑
blueswen
0
310
CSC307 Lecture 06
javiergs
PRO
0
670
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
150
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
150
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
130
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
83
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
290
Game over? The fight for quality and originality in the time of robots
wayneb77
1
89
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
From π to Pie charts
rasagy
0
120
Visualization
eitanlees
150
16k
Transcript
Introduc)on to Rake Eric Hodel – @drbrain
What is Rake? • Build automa)on tool • Dependency-oriented
Jim Weirich
Other “rake”s • make family • Java: ant, maven •
Clojure: leiningen • Scala: sbt • Python: A-P-P
Rake Basics
Rake Task task "test" do # test actions # …
end
Dependencies task "test" => ["compile"] do # test actions #
… end
Dependencies task test: "compile" do # test actions # …
end
Special Tasks MRUBY_DOWNLOAD = "tmp/mruby-1.2.0.tgz" directory "tmp" file MRUBY_DOWNLOAD =>
"tmp" do sh "curl", "-o", MRUBY_DOWNLOAD, … end
Namespacing namespace "test" do task "unit" # test:unit task "functional"
# test:functional end namespace "db" do task "create" # db:create end
Namespacing namespace "test" do task "unit" task "functional" end task
"test" => [ "test:unit", "test:functional" ]
Documenta)on desc "Run the tests" task "test" do # …
end
Default Task task "default" do puts "this task runs by
default" end
Default Task $ rake this task runs by default $
Programming with Rake
task "default" => "test" task "test" => [MRUBY_EXE, "tmp"] file
MRUBY_EXE => MRUBY_DOWNLOAD directory "tmp" file MRUBY_DOWNLOAD => "tmp"
Unordered is OK task "default" => "test" task "test" =>
MRUBY_EXE task "test" => MRUBY_EXE task "default" => "test" SAME
Dependencies default test MRUBY_EXE MRUBY_ DOWNLOAD tmp
Running rake $ rake # runs default task $ rake
test # runs test task $ rake test default # runs both $ rake -t # traces execution $ rake -t test # traces test task $ rake -T # show descriptions
Invoke & Execute Invoke checks dependencies Execute runs ac)ons (ac)ons
run only once)
$ rake -t ** Invoke default (first_time) ** Invoke test
(first_time) ** Invoke tmp/mruby-1.2.0/bin/mruby (first_time) ** Invoke tmp/mruby-1.2.0.tgz (first_time) ** Invoke tmp (first_time) ** Execute tmp mkdir -p tmp ** Execute tmp/mruby-1.2.0.tgz ** Execute tmp/mruby-1.2.0/bin/mruby mkdir -p tmp/mruby-1.2.0/bin/mruby ** Invoke tmp (not_needed) ** Execute test ** Execute default default test MRUBY_EXE MRUBY_ DOWNLOAD tmp
Rake Library
Shell commands cd MRUBY_DIR do end sh "curl", "-o", MRUBY_DOWNLOAD,
… ruby "my_script.rb" mv "a.txt", "b.txt" rm_rf "tmp"
Execu)on directory task "current_directory" do puts "rake's current directory is
#{Dir.pwd}" end
Execu)on directory $ rake current_directory rake's current directory is ~/tmp/rake-example
$ cd lib $ rake current_directory (in ~/tmp/rake-example) rake's current directory is ~/tmp/rake-example
FileList markdown_files = FileList["*.md"] # => ["ch1.md, "ch2.md", …] html_files
= markdown_files.ext "html" # => ["ch1.html, "ch2.html", …]
import (require) import "tasks/build.rake" import "tasks/test.rake"
Best Prac)ces
One Thing per Task file MRUBY_EXE => MRUBY_DOWNLOAD do #
1. unpack MRUBY_DOWNLOAD # 2. build mruby end
One Thing per Task MRUBY_DIR = "tmp/mruby-1.2.0" directory MRUBY_DIR =>
MRUBY_DOWNLOAD do # unpack MRUBY_DOWNLOAD end file MRUBY_EXE => MRUBY_DIR do # build mruby end
Make Aliases MRUBY_EXE = "tmp/mruby-1.2.0/bin/mruby" task "test" => MRUBY_EXE file
MRUBY_EXE => MRUBY_DIR
Make Aliases MRUBY_EXE = "tmp/mruby-1.2.0/bin/mruby" task "test" => "mruby" task
"mruby" => MRUBY_EXE file MRUBY_EXE => MRUBY_DIR
Document desc "Run tests" task "default" => "test" desc "Run
tests" task "test" => "mruby" desc "Build mruby" task "mruby" => MRUBY_EXE
Document $ rake -T rake default # Run tests rake
mruby # Build mruby rake test # Run tests
Organize namespace related tasks make separate .rake files import those
files
Organize $ grep rake Rakefile rakefiles = FileList['tasks/*.rake'] import(*rakefiles) $
find . -iname "*rake*" ./Rakefile ./tasks/test.rake
Advanced Rake
Re-declare tasks task "test" => "mruby" task "test" do #
run tests end tests = FileList["test/*.rb"] task "test" => tests
rake/clean require 'rake/clean' # remove temporary files CLEAN << "*.o"
<< "*.class" # rake clean # remove generated files CLOBBER << "*.so" << "*.jar" # rake clobber
rule Generates output Turns file X into file Y
rule rule ".html" => ".md" do |t| sh "md2html", t.source,
t.name end task "default" => html_files # md2html ch1.md ch1.html # md2html ch2.md ch1.html BACKWARD
Advanced import file "some.rake" => "do_this_first" import "some.rake"
Task Arguments task "name", [:first, :last] do |t, args| args.with_defaults
first: "Jamie", last: "Smith" puts "First name is #{args[:first]}" puts "Last name is #{args[:last]}" end
Task Arguments $ rake name First name is Jamie Last
name is Smith $ rake name[Eric,Hodel] First name is Eric Last name is Hodel
Task Arguments $ rake name[Eric, Hodel] rake aborted! Don't know
how to build task 'name[Eric,' (see --tasks)
h`ps:/ /github.com/ruby/rake