Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Introduction to Rake
Search
Eric Hodel
May 25, 2016
Programming
410
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
710
Lazy Enumeration
drbrain
0
150
Lessons in Mentorship
drbrain
1
270
Open Source Maintenance — Ruby on Ales 2014
drbrain
1
150
Open Source Maintenance — RailsClub Moscow
drbrain
1
190
drbdump
drbrain
2
570
Other Decks in Programming
See All in Programming
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.6k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
420
iOSDC2026登壇資料.pdf
riofujimon
0
200
Workers Cache を知る
syumai
0
320
APNsからLive Activityを開始する話
yumnumm
0
110
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.3k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
270
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
360
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
830
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
4
4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Agile that works and the tools we love
rasmusluckow
331
22k
Navigating Weather and Climate Data
rabernat
0
540
Designing for Performance
lara
611
70k
Building Applications with DynamoDB
mza
96
7.2k
GraphQLとの向き合い方2022年版
quramy
50
15k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Skip the Path - Find Your Career Trail
mkilby
1
240
Building AI with AI
inesmontani
PRO
1
1.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
520
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
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