Submit Search
Upload
Rake
•
1 like
•
1,193 views
Tomoya Kawanishi
Follow
about Rakefile, Rake of Ruby build tool
Read less
Read more
Technology
Report
Share
Report
Share
1 of 23
Download now
Download to read offline
Recommended
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
RedmineとGitとスクラム
RedmineとGitとスクラム
Takashi Okamoto
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
ota42y
10分でわかるOpenAPI V3
10分でわかるOpenAPI V3
Kazuchika Sekiya
React-konvaで絵を描いてみる話
React-konvaで絵を描いてみる話
iPride Co., Ltd.
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
Recommended
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
RedmineとGitとスクラム
RedmineとGitとスクラム
Takashi Okamoto
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
ota42y
10分でわかるOpenAPI V3
10分でわかるOpenAPI V3
Kazuchika Sekiya
React-konvaで絵を描いてみる話
React-konvaで絵を描いてみる話
iPride Co., Ltd.
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
VirtualTech Japan Inc./Begi.net Inc.
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
KeioOyama
Dockerを支える技術
Dockerを支える技術
Etsuji Nakai
すごい配列楽しく学ぼう
すごい配列楽しく学ぼう
xenophobia__
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
リーダブルコード
リーダブルコード
Keita Otsuka
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Yuta Ohashi
Docker超入門
Docker超入門
VirtualTech Japan Inc.
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
例外設計における大罪
例外設計における大罪
Takuto Wada
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Takuya Kawabe
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Takahiko Ito
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
llvm入門
llvm入門
MITSUNARI Shigeo
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
The Shift Left Path and OWASP
The Shift Left Path and OWASP
Riotaro OKADA
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
More Related Content
What's hot
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
VirtualTech Japan Inc./Begi.net Inc.
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
KeioOyama
Dockerを支える技術
Dockerを支える技術
Etsuji Nakai
すごい配列楽しく学ぼう
すごい配列楽しく学ぼう
xenophobia__
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
リーダブルコード
リーダブルコード
Keita Otsuka
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Yuta Ohashi
Docker超入門
Docker超入門
VirtualTech Japan Inc.
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
例外設計における大罪
例外設計における大罪
Takuto Wada
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Takuya Kawabe
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Takahiko Ito
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
llvm入門
llvm入門
MITSUNARI Shigeo
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
The Shift Left Path and OWASP
The Shift Left Path and OWASP
Riotaro OKADA
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
What's hot
(20)
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
ゼロトラスト・アーキテクチャを無料で(やれるだけ)実現する
Dockerを支える技術
Dockerを支える技術
すごい配列楽しく学ぼう
すごい配列楽しく学ぼう
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
リーダブルコード
リーダブルコード
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Docker超入門
Docker超入門
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
例外設計における大罪
例外設計における大罪
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
llvm入門
llvm入門
関数プログラミング入門
関数プログラミング入門
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
The Shift Left Path and OWASP
The Shift Left Path and OWASP
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
Similar to Rake
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
Kiwamu Okabe
メタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成
krdlab
Rails Controller Fundamentals
Rails Controller Fundamentals
Takashi SAKAGUCHI
Sass(SCSS)について
Sass(SCSS)について
Kazufumi Miyamoto
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
Koji SHIMADA
Rでreproducible research
Rでreproducible research
Shintaro Fukushima
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo
yayamamo @ DBCLS Kashiwanoha
20110820 metaprogramming
20110820 metaprogramming
Masanori Kado
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
koki_h
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
Sass/Compass講習会
Sass/Compass講習会
Beeworks
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
Tomoya Kawanishi
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
Toshihiro Nakamura
基本の WordPress コーディング規約 / WordCamp Tokyo 2016 LT
基本の WordPress コーディング規約 / WordCamp Tokyo 2016 LT
Akira Tachibana
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Toru Yamaguchi
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
Makoto Ohnami
Similar to Rake
(20)
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
メタメタプログラミングRuby
メタメタプログラミングRuby
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成
Rails Controller Fundamentals
Rails Controller Fundamentals
Sass(SCSS)について
Sass(SCSS)について
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
Rでreproducible research
Rでreproducible research
Railsの開発環境作るぞ
Railsの開発環境作るぞ
第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo
20110820 metaprogramming
20110820 metaprogramming
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
いまさら聞けないRake入門
いまさら聞けないRake入門
Sass/Compass講習会
Sass/Compass講習会
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
基本の WordPress コーディング規約 / WordCamp Tokyo 2016 LT
基本の WordPress コーディング規約 / WordCamp Tokyo 2016 LT
Customization of DBIC::Schema::Loader
Customization of DBIC::Schema::Loader
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
More from Tomoya Kawanishi
英単語の覚え方
英単語の覚え方
Tomoya Kawanishi
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
Tomoya Kawanishi
エンジニア転職のノウハウ
エンジニア転職のノウハウ
Tomoya Kawanishi
Ruby の文字列について
Ruby の文字列について
Tomoya Kawanishi
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
Tomoya Kawanishi
Ruby初心者からよく質問されること
Ruby初心者からよく質問されること
Tomoya Kawanishi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
Ruby の正規表現について
Ruby の正規表現について
Tomoya Kawanishi
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Tomoya Kawanishi
Ruby のワンライナーについて
Ruby のワンライナーについて
Tomoya Kawanishi
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
Tomoya Kawanishi
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
Tomoya Kawanishi
HTTPと Webクローリングについて
HTTPと Webクローリングについて
Tomoya Kawanishi
Active record query interface
Active record query interface
Tomoya Kawanishi
Active Support のコア拡張機能について
Active Support のコア拡張機能について
Tomoya Kawanishi
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Tomoya Kawanishi
RubyのDir、File、IO について
RubyのDir、File、IO について
Tomoya Kawanishi
Thread の利用事例紹介
Thread の利用事例紹介
Tomoya Kawanishi
Ruby の String のメソッドについて
Ruby の String のメソッドについて
Tomoya Kawanishi
RubyGems と Bundler について
RubyGems と Bundler について
Tomoya Kawanishi
More from Tomoya Kawanishi
(20)
英単語の覚え方
英単語の覚え方
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
エンジニア転職のノウハウ
エンジニア転職のノウハウ
Ruby の文字列について
Ruby の文字列について
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
Ruby初心者からよく質問されること
Ruby初心者からよく質問されること
RubyGems と Bundler について
RubyGems と Bundler について
Ruby の正規表現について
Ruby の正規表現について
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Ruby のワンライナーについて
Ruby のワンライナーについて
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
HTTPと Webクローリングについて
HTTPと Webクローリングについて
Active record query interface
Active record query interface
Active Support のコア拡張機能について
Active Support のコア拡張機能について
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
RubyのDir、File、IO について
RubyのDir、File、IO について
Thread の利用事例紹介
Thread の利用事例紹介
Ruby の String のメソッドについて
Ruby の String のメソッドについて
RubyGems と Bundler について
RubyGems と Bundler について
Rake
1.
Rakeについて 2018/12/12 大手町.rb #12
2.
大手町.rb #12 「Rakeについて」 1自己紹介 Tomoya
Kawanishi a.k.a. @cuzic エネチェンジ株式会社 チーフエンジニア 電力会社、ガス会社を切り替えるなら、エネチェンジ経由で! 一般家庭も!法人も! Ruby関西の中の人 発表者として登壇くださる方、あとで声かけください。 大手町.rb の中の人 毎月 大手町.rb の開催を予定 東京駅、各線大手町駅から直結! Ruby の初級者がメインターゲット
3.
大手町.rb #12 「Rakeについて」 Disclaimer 大手町.rb
は祝!12回! 人数がとても増えてきました! 大手町.rb は(比較的)初級者向けの勉強会 とはいえ、初級者向けのままだと、ネタ切れしちゃう 同じネタをリピートするか、レベルアップするか。 大手町.rb はレベルアップしていく方向! 今のオーディエンスを大切にしていく! 2
4.
大手町.rb #12 「Rakeについて」 今日のテーマ Rake
について Ruby on Rails でも標準的に使われている とはいえ、時間をとって学ぶことがあまりない というのも事実 ドキュメントを熟読すればいいのですが、 なかなか上から読むのは大変です。 今日は一緒に学んでいきましょう 3
5.
大手町.rb #12 「Rakeについて」 ビルドツールの主な使い方 ビルド 定義されたルールに従った処理(コンパイルなど) ex)
*.c を *.o にコンパイル 依存関係の処理があるときに便利 ex) hello.c と hello.h のどちらかが更新されていた場合 コンパイルを実行し、 hello.o を再作成 一部を書き換えたときに、必要な作業のみを実施可能 ex) hello.c だけが変更がある場合は、hello.o を再作成 タスク 事前に登録した任意の作業を実施 Rails での例 データベース処理(マイグレートなど) テスト キャッシュやログなどのクリア ドキュメント生成など 4
6.
大手町.rb #12 「Rakeについて」 5ビルドツールいろいろ 歴史的に数多くのビルドツールが存在 Make
: 伝統的なビルドツール 単語のリストや展開などの概念がカオス Ant : Java で多く使われる あの XML をAntエディターなしで作る気にはならない Maven :ビルドを含めたプロジェクト管理ツール Java向け。Antよりはいいけど、XMLが、ね。。。 Gradle : Ant や Maven の考え方を引き継いだビルドツール。 Groovy を使った内部 DSL Rake : Ruby DSL として書かれたビルドツール なんでもでき、読みやすく、書きやすい。 Grunt : JavaScript 向けのビルドツール。 JSON を使って設定を書いて実行する。 Gulp : JavaScript 向けのビルドツール。pipe を使って タスクを順番に処理する。
7.
大手町.rb #12 「Rakeについて」 Q.
Rake クイズ 次の 2つの実行結果の違いを説明せよ 6 > cat build.rb system <<SCRIPT ./hello ./world SCRIPT > ruby build.rb (ヒント) ・ Kernel#system は 任意のコマンドを実行するための組み込みメソッド。 ・ 複数行書かれれば、1行ずつ順に実行される ・ Rakefile では、引数なしで実行すると、 ① カレントディレクトリの Rakefile を探し、 ② その中の :default タスクを実行する ・ Rakefile では task タスク名 do 処理内容 end でタスクを定義できる ・ sh は任意のコマンドを実行する Rake が提供するメソッド > cat Rakefile task :default do sh "./hello" sh "./world" end > rake
8.
大手町.rb #12 「Rakeについて」 A.
Rakeクイズ 解答 (1) 表示内容の違い (2)失敗時に abort するかの違い 7 > ruby build.rb hello world > rake (in /home/~ ) ./hello hello ./world world > cat ./hello puts "hello"; exit 1 > ruby build.rb hello world 1行目のexit code が ゼロ以外でも 2行目が実行される > rake (in /home/~ ) ./hello hello rake aborted! Command failed with ~~ 1行目のexit code が ゼロ以外の場合は、 abort し、以降は実行されない 実行ディレクトリを表示 ./hello : 1行目のコマンド hello : 1行目の実行結果 ./world : 2行目のコマンド world : 2行目の実行結果
9.
大手町.rb #12 「Rakeについて」 A.
Rakeクイズ 解説 (1) 表示内容の違い Rake を利用すると、豊富なデバッグメッセージを利用できます。 実行したコマンド内容が逐次確認できて便利です。なお、 とすると、実行コマンドの表示を抑止できます。 (2)実行可否の違い Rake の sh は、失敗時に自動的にエラーメッセージを表示して スクリプトの処理が異常終了し、それ以降の処理を実行しません。 この動作は、多くのバッチ処理で期待される動作です。 シェルスクリプトや system コマンドなどでは本来しなければ ならなかった異常終了させることを忘れ、困った結果になったりします。 しかしながら、Rake の sh を使えば異常終了を忘れることはありません。 8 > rake –q > rake –sまたは
10.
大手町.rb #12 「Rakeについて」 デフォルトと、タスク task
: 新しい Rake タスクを定義できる task の中で default を指定することで、引数なしで 実行したときのデフォルト動作を指定できる ruby : Rake の中で Ruby コマンドを実行できる 9 task default: %w[test] task :test do ruby "test/unittest.rb" end > rake > rake test # 上と同じ動作になる Rakefile
11.
大手町.rb #12 「Rakeについて」 Rake
のコマンドライン 10 $ rake --help -C, --classic-namespace トップレベルに Task, FileTask を定義します。 過去との互換性のためのオプションです。 -D, --describe [PATTERN] パターンにマッチしたタスクの詳細を表示して終了します。 パターンは省略可能です。 -n, --dry-run アクションを実行せずにタスクを実行します。 -e, --execute CODE Ruby のコードを実行して終了します。 -p, --execute-print CODE Ruby のコードを実行して結果を表示して終了します。 -E, --execute-continue CODE Ruby のコードを実行してから、タスクを実行します。 -I, --libdir LIBDIR ロードパスに LIBDIR を含めます。 -P, --prereqs タスクの依存関係を表示して終了します。 -q, --quiet 標準出力にログメッセージを表示しません。 -f, --rakefile [FILE] FILE を Rakefile として使用します。 -R, --rakelibdir RAKELIBDIR RAKELIBDIR にある *.rake ファイルを自動的にインポートします。 --rakelib デフォルトは rakelib です。 -r, --require MODULE Rakefile を実行する前に MODULE を require します。 --rules ルールの解決を追跡します。 -N, --no-search, --nosearch 親ディレクトリの Rakefile を検索しません。 -s, --silent --quiet に似ていますが、ディレクトリも表示しません。 -g, --system システム全体の Rakefile を使用します。('~/.rake/*.rake') -G, --no-system, --nosystem システム全体の Rakefile を使用しません。 -T, --tasks [PATTERN] パターンにマッチしたタスクの短い説明を表示して終了します。 パターンは省略可能です。 -t, --trace 全てのバックトレースを表示します。 -v, --verbose 標準出力にログメッセージを表示します (デフォルト)。 -V, --version このプログラムのバージョンを表示します。 -h, -H, --help このメッセージを表示します。
12.
大手町.rb #12 「Rakeについて」 依存関係の定義と
file タスク file: ファイルを生成するためのタスクを定義する 依存関係があってもなくてもいい 依存関係があれば、ハッシュ形式で記述する タスクのブロック引数 下記の t は Rake::Task クラスのオブジェクト t.name は生成しようとしているファイル t.sources は依存関係のあるファイルの配列 11 postcode_csv = Rails.root + "lib/assets/KEN_ALL_ROME.csv" file postcode_csv do # 依存関係なし sh "aws s3 cp s3://なんとかかんとか/KEN_ALL_ROME.csv #{postcode_csv}" end postcode_dbm = Rails.root + "lib/assets/postcode.dbm" file postcode_dbm => postcode_csv do |t| # postcode_dbm は postcode_csv に依存。 postcode_csv がなければ自動的に取得。 ruby "lib/postcode_csv2dbm.rb #{t.sources.first} #{t.name}" end Rakefile
13.
大手町.rb #12 「Rakeについて」 rule
: 一定のルールでファイルを変換 rule "ターゲットの拡張子" => "依存ファイルの拡張子" 拡張子で、やりたいビルド内容が決まる場合にベンリ Rake は Ruby でできることはなんでもできる def … end で定義したメソッドを呼び出すこともできる t.source は最初の依存ファイル 12 def sassc(target, source) environment = Enechange::Application.assets context = environment.context_class.new( environment: environment, name: '', filename: '', metadata: {} ) options = {context: context, environment: environment} engine = Sass::Engine.for_file(source, sprockets: options) IO.write(target, engine.render) end rule '.css' => ['.scss'] do |t| # rule sassc t.name, t.source end
14.
大手町.rb #12 「Rakeについて」 rule
の上級編 rule の target 側は正規表現を指定することもできる 正規表現にマッチする場合にそのルールが適用される rule の sources で Proc を指定することもできる target のファイル名から複雑なロジックで、 依存するファイル名を導出できる 13 CSS_DIR = "css" SASS_DIR = "scss" def css_to_scss Proc.new do |filename| filename.sub(/^#{CSS_DIR}/, SASS_DIR).sub(/¥.css$/, '.scss') end end rule %r{^#{CSS_DIR}/.*¥.css$} => css_to_scss do |t| sassc t.name, t.source end
15.
大手町.rb #12 「Rakeについて」 rule
の上級編(おまけ) rule の sources のところでは、 Proc オブジェクトだけでなく Method オブジェクトを 指定することもできる method メソッドを使うことで、より簡潔に書ける 14 CSS_DIR = "css" SASS_DIR = "scss" def css_to_scss(filename) filename.sub(/^#{CSS_DIR}/, SASS_DIR).sub(/¥.css$/, '.scss') end rule %r{^#{CSS_DIR}/.*¥.css$} => method(:css_to_scss) do |t| sassc t.name, t.source end
16.
大手町.rb #12 「Rakeについて」 ディレクトリタスクなど ディレクトリタスクを使うと、ディレクトリの作成を明示不要 ディレクトリを必要とするタスクについては、依存タスクに記載しておく ない場合は作成するし、すでにある場合は何もしない 依存関係にディレクトリタスクを含めることで、 ないときはディレクトリを作成する処理が簡潔に書ける 15 CSS_DIR
= "css" SASS_DIR = "scss" directory SASS_DIR rule %r{^#{CSS_DIR}/.*¥.css$} => [css_to_scss, SASS_DIR] do |t| sassc t.name, t.source end
17.
大手町.rb #12 「Rakeについて」 クリーニング 作成したファイルを一度削除したいことはままある 依存関係が複雑で、更新日時だけではうまく解決できないとき 不要な一時ファイルを削除したいとき 疲れてきて、コーヒー休憩する口実が欲しいとき require
‘rake/clean’ で clean (一時ファイル用)と clobber (すべてのファイル用)の2つのタスクを利用可能 16 require 'rake/clean' # clean で消すものに加え coverage と specdoc を削除 CLOBBER.include 'coverage', 'specdoc' # pkg と tmp を削除 CLEAN.include 'pkg', 'tmp'
18.
大手町.rb #12 「Rakeについて」 namespace、FileList、
invoke Rake のタスクを分類したいときはnamespace を使う タスクに “-” を含めることもできる(例: :"create-all") FileList はファイル名(文字列)の配列のように扱える Rake::Task[タスク名].invoke でRake タスクを実行できる 依存関係を含めて実行する Rake::Task[タスク名].execute だと、依存関係を無視して実行 17 namespace :css do task :"create-all" do FileList["#{CSS_DIR}/**/*.css"].each do |filename| Rake::Task[filename].invoke end end end > rake css:create-all
19.
大手町.rb #12 「Rakeについて」 Rake
で引数 環境変数を使う方法 タスク引数を使う方法 18 task :rails_env do puts "RAILS_ENV=#{ENV["RAILS_ENV"]}" end > rake rails_env RAILS_ENV=development task :show_args, ['arg1', 'arg2'] do |task, args| p task #=> <Rake::Task show_args => (snip)> p args end > rake show_args[hoge,huga] <Rake::Task show_args => []> #<Rake::TaskArguments arg1: hoge, arg2: huga>
20.
大手町.rb #12 「Rakeについて」 Rake
の 注意点 ブロックには do ~ end を使う Ruby の文法上の制限で { } が期待どおり動作しない 19 下記の回避方法はあるが、DSL 的でないため、通常は do ~ end を使うことが好まれる > cat Rakefile task :default {|t| puts “Hello, World!” } > rake (in ~) rake aborted! ~: syntax error, unexpected '{', expecting $end (See full trace by running task with --trace) > cat Rakefile task(:default) {|t| puts “Hello, World!” }
21.
大手町.rb #12 「Rakeについて」 発展的な話題 下記は興味があるなら自分で調べてみましょう multitask 複数のタスクを並列実行する rake/gempackagetask Gem
のパッケージを作成するためのタスク rake/packagetask tar.gz, zip などのパッケージを作成するためのタスク rake/rdoctask rdoc のドキュメンテーションを作成するタスク rake/testtask ユニットテストを実行するタスクを作成する 20
22.
大手町.rb #12 「Rakeについて」 まとめ Rake
を使うと、エラー処理を記述不要で楽 sh を使えば、エラー時の処理停止が自動的に行われる 定義されたルールから依存関係を自動解決可能 コンパイル、テキスト処理、他多数のコマンドに応用可能 複雑なタスクも記述可能 依存ファイルの推定ロジックのカスタマイズ タスク処理中での別のタスクの呼び出し 任意の Ruby スクリプトも記述可能 ファイル名を動的に取得可能 標準的なRake タスクも require により用意可能 クリーニング 21
23.
ご清聴ありがとう ございました
Download now