SlideShare a Scribd company logo
1 of 30
Download to read offline
RailsのRailから
解放される始めの一歩
@joe_re
twitter: @joe_re

github: @joe-re
- 名前: じょー
- freeeという会社で働いています
- つい最近までクラウド会計やってました
- 今はクラウド給与やってます
職業: gulp職人
すみません、僕はできません
この話のjs部分
Sprocketsを使い続けるの
つらい!
Sprocketsがやってくれること
とは
• CoffeeScript、Sassのコンパイル
• uglify
• minify
• fingerprintの付与
• 依存関係の定義(requireディレクティブの提供)
• などなど
Sprocketsを捨てたい理由
• フロントエンドのビルドツールの進化
• 基本的にgem化されていないと使えない(フロントエンドの進
化に追いつけない)
• フロント側までRailsにロックインされてしまうのが気持ち悪
い
• bowerが廃れた今、package.jsonに定義したnpmを直接
importして使いたい欲求がある
Sprocketsを捨てる2つの道
Railsのassets pipelineを一切
使わない!の道
• gulp等のビルドツールを使い、concat、
minify、uglify、fingerprint付与などの
Sprocketsさんがやっている仕事を全部奪う
• 成果物はPublic配下に出力する
• まさしく理想の世界!
Railsのassets pipelineを一切
使わない!の壁
• fingerprintの解決が難しい
• フロント側で単純に付与しただけでは、Rails
の asset_pathヘルパーが一切効かなくなる
• 一気にやらないといけない作業の量やばすぎ
フロント側の成果物をapp/assets
に吐き出す!の道
• concat、uglify、minify、fingerprintなどの処
理は従来通りSprocketsにお任せ!
• まだフロントで解決できないものは、とりあ
えずapp/assets配下にそのままコピーしてお
けば何とかなるので、徐々に作業可能
フロント側の成果物をapp/assets
に吐き出す!の壁
• 結局Sprocketsから脱却できてない
• 常にSprocketsとの良好な関係を

意識し続けなければプロダクトが死ぬ
僕らはapp/assetsに成果物を
出力する道を選択した
ゆるい方針
• xxx-railsなGemは使わない
• 新しく書くコードはes2015で書けるようにし
よう
• npmでライブラリ管理しよう(goodbye
bower)
そこでgulpによるフロントエン
ドのビルドプロセスを導入
JavaScriptのビルド
Sprocketsのrequire
この順番を絶守!!!
Sprocketsのrequire
ちくしょう、Webpackだ!!
なんでBrowserifyじゃないの?
• 弊社のアプリケーションは複数のエントリー
ポイントがある
• Browserifyは開発時のwatchにおいて変更の
あったファイルのインクリメンタルビルドを
エントリーポイントごとに行う仕組みを構築
するのが大変
Webpackならwatchオプショ
ンにtrueを渡すだけ!!
https://webpack.github.io/docs/tutorials/getting-
started/#watch-mode
得たもの
• ライブラリはnpmで管理(これまで使っていた
bower(bower-rails)とはオサラバ!)
• Babelによるトランスパイル(ES2015)
• CoffeeScriptのトランスパイル
• ES6-modules、CommonJSによる依存解決
さぁこれからはテストを

書いていくぞ!
React + Fluxの導入!
Reduxは使わないぞ
facebook/utilの
Reduce Storeだ!
おわり

More Related Content

What's hot

サーバを運用する時代は終わった
サーバを運用する時代は終わったサーバを運用する時代は終わった
サーバを運用する時代は終わったYuki Ishikawa
 
Ruby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステムRuby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステムTomoya Kawanishi
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築Hirata Tomoko
 
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュKenji Mori
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~Ryunosuke SATO
 
20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなしivoryworks .
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
Rails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるRails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるHirata Tomoko
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Takuya Mukohira
 
第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情Kazuhiro Serizawa
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うことKazuhiro Serizawa
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらいyoku0825
 
Ruby on Rails でつくるアタシ好みの愛され Web サービス
Ruby on Rails でつくるアタシ好みの愛され Web サービスRuby on Rails でつくるアタシ好みの愛され Web サービス
Ruby on Rails でつくるアタシ好みの愛され Web サービスYoji Shidara
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 

What's hot (20)

片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
すこやかRails
すこやかRailsすこやかRails
すこやかRails
 
サーバを運用する時代は終わった
サーバを運用する時代は終わったサーバを運用する時代は終わった
サーバを運用する時代は終わった
 
Ruby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステムRuby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステム
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築
 
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
 
RSpecしぐさ
RSpecしぐさRSpecしぐさ
RSpecしぐさ
 
20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
Rails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるRails+Markdownでなにかつくる
Rails+Markdownでなにかつくる
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらい
 
Ruby on Rails でつくるアタシ好みの愛され Web サービス
Ruby on Rails でつくるアタシ好みの愛され Web サービスRuby on Rails でつくるアタシ好みの愛され Web サービス
Ruby on Rails でつくるアタシ好みの愛され Web サービス
 
OpenShift のある生活
OpenShift のある生活OpenShift のある生活
OpenShift のある生活
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 

Viewers also liked

ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法Yoshifumi Kawai
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Yoshifumi Kawai
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...Yoshifumi Kawai
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityYoshifumi Kawai
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaRoslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaYuta Matsumura
 

Viewers also liked (7)

ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaRoslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
 

Similar to RailsのRailから解放される始めの一歩

Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう豊明 尾古
 
Rails6にいつ上げるか?
Rails6にいつ上げるか?Rails6にいつ上げるか?
Rails6にいつ上げるか?sinsoku listy
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例Naoto Koshikawa
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development についてよしだ あつし
 
僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのかTomohiro Noguchi
 
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)Ken Muryoi
 
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootTsuyoshi Yamamoto
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話nekogeruge_987
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう健太 田上
 
BootstrapとRailsで、 高速にWebサイトを作ってみた
BootstrapとRailsで、 高速にWebサイトを作ってみたBootstrapとRailsで、 高速にWebサイトを作ってみた
BootstrapとRailsで、 高速にWebサイトを作ってみたBeMarble
 
KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた豊明 尾古
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersTakeshi Arabiki
 
Rails環境に最適なVue.js構成を探る
 Rails環境に最適なVue.js構成を探る Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る虎の穴 開発室
 
ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706拓 小林
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails Kohei Ito
 

Similar to RailsのRailから解放される始めの一歩 (20)

Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Rails6にいつ上げるか?
Rails6にいつ上げるか?Rails6にいつ上げるか?
Rails6にいつ上げるか?
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか
 
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)
 
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
 
Bpstudy26
Bpstudy26Bpstudy26
Bpstudy26
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
 
BootstrapとRailsで、 高速にWebサイトを作ってみた
BootstrapとRailsで、 高速にWebサイトを作ってみたBootstrapとRailsで、 高速にWebサイトを作ってみた
BootstrapとRailsで、 高速にWebサイトを作ってみた
 
KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
Rails環境に最適なVue.js構成を探る
 Rails環境に最適なVue.js構成を探る Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る
 
ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706
 
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
 

RailsのRailから解放される始めの一歩