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
0
300
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
610
Lazy Enumeration
drbrain
0
110
Lessons in Mentorship
drbrain
1
190
Open Source Maintenance — Ruby on Ales 2014
drbrain
1
99
Open Source Maintenance — RailsClub Moscow
drbrain
1
150
drbdump
drbrain
2
470
Other Decks in Programming
See All in Programming
Signal-Based Data FetchingWith the New httpResource
manfredsteyer
PRO
0
160
AI時代の開発者評価について
ayumuu
0
100
技術選定を未来に繋いで活用していく
sakito
3
100
Vibe Codingをせずに Clineを使っている
watany
17
6.1k
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
6k
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
320
国漢文混用体からHolloまで
minhee
1
170
[NG India] Event-Based State Management with NgRx SignalStore
markostanimirovic
1
110
S3静的ホスティング+Next.js静的エクスポート で格安webアプリ構築
iharuoru
0
220
Defying Front-End Inertia: Inertia.js on Rails
skryukov
0
460
SEAL - Dive into the sea of search engines - Symfony Live Berlin 2025
alexanderschranz
1
130
Develop Faster With FrankenPHP
dunglas
2
3.2k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
BBQ
matthewcrist
88
9.6k
A better future with KSS
kneath
239
17k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Designing Experiences People Love
moore
141
24k
We Have a Design System, Now What?
morganepeng
52
7.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
650
The Invisible Side of Design
smashingmag
299
50k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Embracing the Ebb and Flow
colly
85
4.6k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
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