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
Eric Hodel
May 25, 2016
Programming
400
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Rake
How to write basic rake applications
Eric Hodel
May 25, 2016
More Decks by Eric Hodel
See All by Eric Hodel
Building maintainable command-line tools with MRuby
drbrain
0
700
Lazy Enumeration
drbrain
0
140
Lessons in Mentorship
drbrain
1
260
Open Source Maintenance — Ruby on Ales 2014
drbrain
1
150
Open Source Maintenance — RailsClub Moscow
drbrain
1
180
drbdump
drbrain
2
560
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
210
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
370
What's New in Android 2026
veronikapj
0
250
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
760
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.5k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.5k
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
「人を評価する AI」の設計と実装
ryoyanara
0
180
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
530
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
390
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Are puppies a ranking factor?
jonoalderson
1
3.8k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
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