SlideShare a Scribd company logo
サーバサイドなおじさんが
SPAを趣味で初めて作ってみて
わかった n のこと(仮)
2015/07/11
関西Ruby会議06
無量井 健(@muryoimpl)
https://www.flickr.com/photos/bongonian/8534960933/
ここに提供
自己紹介
• 無量井 健(むりょうい けん)
• 永和システムマネジメント 10ヶ月目
• Ruby関西, 関西Ruby会議04・05 etc
• :white_large_square: 改め :b::b::a:
サーバサイドなおじさんが
SPAを趣味で初めて作って始めてみて
わかった n のこと(仮)
ハマった n のこと
2015/07/11
関西Ruby会議06
無量井 健(@muryoimpl)
https://www.flickr.com/photos/bongonian/8534960933/
使った技術要素(server)
Rails4.2
rails-api
jwt google-api-client
active_model_serializers
puma
hamlit
foreman
bootstrap-sass
poltergeist
使った技術要素(client)
React
react-router
webpack
jsUri
reqwest
cjsx
underscore
react-draggable
https://www.flickr.com/photos/thomasletholsen/8719637939/
盛大にハマったり
わかったりしたこと
n 個を紹介します
1
とあるRubyistに
電車の中で
SPAという単語を
使うとモヒカンが現れて
炎上しますよ
((((;゚Д゚))))
https://www.flickr.com/photos/alvarez-tostado/363243449/
SPAという単語は
用法・要領を守って
使いましょう
2
使った技術要素(client)
React
react-router
webpack
jsUri
reqwest
puma
cjsx
underscore
使った技術要素 React
• sprockets との共生を選択した(時間なくて)
• npm install react ̶save-dev => package.json
• webpack で結合した js を//=require で固める
• loaders(coffeescriptの慣れでcjsx使用)
• webpack.config.js 書くだけでいけそう(安易)
• 実際foreman 実行だけで済むので楽だった
使った技術要素 webpack
• 理由はreact-jade用のloaderがすでに
あったから
• でも、開発開始当時、依存関係で入る
react のバージョンが古かったので、
react-jadeは今回お見送り🙏
{
"name": "kpton",
̶̶̶̶ 中略 ̶̶̶
},
"dependencies": {
"cjsx-loader": "^2.0.1",
"coffee-loader": "^0.7.2",
"coffee-script": "^1.9.2",
"jsuri": "^1.3.1",
"jsx-loader": "^0.13.2",
"node-libs-browser": "^0.5.0",
"react": "^0.13.3",
"react-hot-loader": "^1.2.7",
"react-router": "^0.13.3",
"reqwest": "^1.1.6",
"underscore": "^1.8.3",
"webpack": "^1.9.7"
}
}
package.json
var webpack = require('webpack');
var path = require('path');
var assetsPath = path.join(__dirname, 'app', 'assets', 'client');
module.exports = {
// the base path which will be used to resolve entry points
context: __dirname,
// the main entry point for our application's frontend js
entry: {
main: [
'webpack/hot/only-dev-server',
path.join(assetsPath, 'main.cjsx')
]
},
output: {
path: path.join(__dirname, 'app', 'assets', 'javascripts'), // for Rails Assets Pipeline
filename: "[name]-bundle.js"
},
̶̶̶̶̶̶- 中略 ̶̶̶-̶̶̶̶̶
resolve: {
extensions: ['', '.js', '.jsx', 'cjsx', '.coffee']
},
module: {
loaders: [
{test: /.jsx$/, loaders: ['jsx-loader', 'react-hot']},
{test: /.coffee$/, loaders: ['coffee']},
{test: /.cjsx$/, loaders: ['coffee', 'cjsx']},
webpack.config.js
entry point なファイルを
指定する
上が配置場所
下が固めた後のファイル名
loaderの対象とする拡張子
どの拡張子にどのloaderを
割り当てるか
entry point な js
React = require 'react'
Router = require 'react-router'
routes = require './config/routes.cjsx'
Router.run routes, Router.HistoryLocation,
(Handler) ->
React.render(<Handler/>, document.body)
app/assets/client/main.js
ここでRailsのお決まり
!!!
%html{lang: :ja}
%head
%meta…
̶̶ 中略 ̶̶
%title KPT
= javascript_include_tag client'
%body
app/views/layouts/application.html.haml
ここに main.js 等React
使った js を固めている
全く動かない❗
https://www.flickr.com/photos/alvarez-tostado/363243449/
どうも main.jsの
手前に対象のDOMが
ないと
動かないらしい…
https://www.flickr.com/photos/alvarez-tostado/363243449/
サンプルどおりの位置に配置する
!!!
%html{lang: :ja}
%head
%meta…
̶̶ 中略 ̶̶
%title KPT
%body
= javascript_include_tag client'
app/views/layouts/application.html.haml
ここに配置すると問題なく
動いた
http://facebook.github.io/react/docs/tutorial.html
Reactのサンプル
http://facebook.github.io/react/docs/tutorial.html
Reactのサンプル
位置関係、大事であった…
3
使った技術要素(server)
Rails4
rails-api
jwt google-api-client
active_model_serializers
puma
hamlit
foreman
bootstrap-sass
poltergeist
使った技術要素 poltergeist
• acceptance test を turnip でやろう
• 折角なので、wercker で CI してみよう
• thecaddy/node-ruby の boxを使っ
てみる
• ローカルで動いたし、おっしゃ push…
謎のエラーを吐く
Capybara::Poltergeist::JavascriptError:
One or more errors were raised in the Javascript code on the page. If
you don't care about these errors, you can ignore them by setting js_errors:
false in your Poltergeist configuration (see documentation for details).
TypeError: 'undefined' is not a function (
evaluating 'ReactElementValidator.createElement.bind(
null,
type
)')
TypeError: 'undefined' is not a function (
evaluating 'ReactElementValidator.createElement.bind(
null,
type
)')
ちょっと調べてみると
poltergeist 1.x系
の問題らしい
https://www.flickr.com/photos/alvarez-tostado/363243449/
https://www.flickr.com/photos/alvarez-tostado/363243449/
• https://github.com/teampoltergeist/poltergeist/
issues/292
• 確かにローカルのphantomjsは 2.0.0 だった
• phantomjs2.0に対応していない環境もある
• facebook/react がpolyfillを用意しているらしい
• https://github.com/facebook/react/issues/
945#issuecomment-39694748
phantomjs 1.9系は
bind に対応していない
ただ今認証周りの
スタブが2回目実行時
に無反応になる問題に
直面中
(原因調査中)https://www.flickr.com/photos/alvarez-tostado/363243449/
4
使った技術要素(server)
Rails4
rails-api
jwt google-api-client
active_model_serializers
puma
hamlit
foreman
bootstrap-sass
poltergeist
痛恨のコピペミス…
# 当初 rails-api を使っていなかったが導入してみた。
# API 用の親クラスを作成しようとした
class ApiController < ActionController::API
# コピペをミスってActionController::APIに…
include ActionController::Serialization
end
痛恨のコピペミス…
class BoardsController < ApiController
# client 側の js からの request があったので
# 子クラスで render json を呼び出す
def index
render json: @current_user.boards
end
end
痛恨のコピペミス…
SystemStackError (stack level too deep):
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
app/controllers/api_controller.rb:8:in `current_user'
̶̶̶̶̶̶ これが 228 行続く…… ̶̶̶̶̶̶̶
マシンのメモリ8G
食いきって
カーソルが挙動不審
になりました💦
https://www.flickr.com/photos/alvarez-tostado/363243449/
OOM killer 発動!
で
finish👼
https://www.flickr.com/photos/alvarez-tostado/363243449/
5
使った技術要素(client)
React
react-router
webpack
jsUri
reqwest
puma
cjsx
underscore
React 使ってみた所感
• getInitialState, componentWillMount,
componentDidMount などの役割は名前から

イメージつきやすい感じする。FWレベル。
• render 内に、最上位のタグが1つしか書けないのが私は
意外にひっかかった。component != partial
• やはり view とロジックは分けて書きたくなるのと、html
の閉じタグを書きたくないでござる… react-jadeは開発

始めたときに対応している react が古くて諦めた。今は?
top level は1つのみ
React = require react
module.exports = React.createClass
render: ->
(
<div className= nav >
<p>あいうえおっすおっす</p>
</div>
<form className= inline-form >
</form>
)
top level は1つのみ
React = require react
module.exports = React.createClass
render: ->
(
<div className= nav >
<p>あいうえおっすおっす</p>
</div>
<form className= inline-form >
</form>
)
先に書かれているtop level のtagが
render されない…
partial とは違う…
あと
わかりにくい
エラー・警告が
多い(気がする…)
ReactMount:
Root element has been
removed from its original
container. New container:
null が大量に並ぶ
react consoleみると、
同じ要素が2つできてる…
https://github.com/rackt/react-router/issues/600#issuecomment-73364948
同じだ❗
https://www.flickr.com/photos/alvarez-tostado/363243449/
※平日 深夜4時の出来事である…
https://github.com/rackt/react-router/issues/600#issuecomment-74795259
https://www.flickr.com/photos/alvarez-tostado/363243449/
Reactがrender
する前の関数で
transitionすると
発生するみたい😱
https://www.flickr.com/photos/alvarez-tostado/363243449/
transitionTo
辞めると
確かに黙った😷
https://www.flickr.com/photos/thomasletholsen/8719637939/
まとめ
https://www.flickr.com/photos/thomasletholsen/8719637939/
まとめ
• n番煎じでした。
• ハマってみないと穴の深さはわからない
• まだ抜け出せてない穴がある
• 涙の数だけ強くなれるよ…
https://www.flickr.com/photos/thomasletholsen/8719637939/
無駄にハマらずに楽しく
開発できる人が増えると
いいなぁ
Enjoy
Programming!

More Related Content

What's hot

忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門
Toshiaki Maki
 
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1Makoto Haruyama
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
AdvancedTechNight
 
大江戸Ruby会議
大江戸Ruby会議大江戸Ruby会議
大江戸Ruby会議
Yuki Akamatsu
 
15分でできるSQLインジェクション
15分でできるSQLインジェクション15分でできるSQLインジェクション
15分でできるSQLインジェクション
よしだ あつし
 
Comapre adoniswithlaravel
Comapre adoniswithlaravelComapre adoniswithlaravel
Comapre adoniswithlaravel
Mitsuru Hashimoto
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
Ken Muryoi
 
Scc2014 :jQueryの仕組みを完璧に理解する
Scc2014 :jQueryの仕組みを完璧に理解するScc2014 :jQueryの仕組みを完璧に理解する
Scc2014 :jQueryの仕組みを完璧に理解するJun Futakawa
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
Aya Ebata
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
Yuki Ishikawa
 
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことJavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
 
20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなしivoryworks .
 
いまさらサブクエリ
いまさらサブクエリいまさらサブクエリ
いまさらサブクエリ
Yuya Taki
 
Javaから見たRubyの世界
Javaから見たRubyの世界Javaから見たRubyの世界
Javaから見たRubyの世界Takafumi Yoshida
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
しくみ製作所
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
Kazuhiro Serizawa
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
Kohei Kadowaki
 

What's hot (20)

忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門
 
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
大江戸Ruby会議
大江戸Ruby会議大江戸Ruby会議
大江戸Ruby会議
 
15分でできるSQLインジェクション
15分でできるSQLインジェクション15分でできるSQLインジェクション
15分でできるSQLインジェクション
 
Comapre adoniswithlaravel
Comapre adoniswithlaravelComapre adoniswithlaravel
Comapre adoniswithlaravel
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
Scc2014 :jQueryの仕組みを完璧に理解する
Scc2014 :jQueryの仕組みを完璧に理解するScc2014 :jQueryの仕組みを完璧に理解する
Scc2014 :jQueryの仕組みを完璧に理解する
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなことJavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
 
20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし20101009 gunma.web#2 スタパさんをつくるはなし
20101009 gunma.web#2 スタパさんをつくるはなし
 
いまさらサブクエリ
いまさらサブクエリいまさらサブクエリ
いまさらサブクエリ
 
Javaから見たRubyの世界
Javaから見たRubyの世界Javaから見たRubyの世界
Javaから見たRubyの世界
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
 
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
 

Viewers also liked

Serverless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指すServerless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指す
Masayuki Kato
 
Riot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tipsRiot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tips
Keisuke Imai
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話
Hiroyuki Hara
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
Keisuke Imai
 
NodeJSでCLI開発を楽しくするライブラリの紹介
NodeJSでCLI開発を楽しくするライブラリの紹介NodeJSでCLI開発を楽しくするライブラリの紹介
NodeJSでCLI開発を楽しくするライブラリの紹介
Ryo Iinuma
 
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSとAngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
Ryo Iinuma
 
自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた
Yuusuke Takeuchi
 
SPAを実現するために必要な通信技術
SPAを実現するために必要な通信技術SPAを実現するために必要な通信技術
SPAを実現するために必要な通信技術
Yusuke Naka
 
Riot.js と戦った話 (8月26日 oRo LT 会)
Riot.js と戦った話 (8月26日 oRo LT 会)Riot.js と戦った話 (8月26日 oRo LT 会)
Riot.js と戦った話 (8月26日 oRo LT 会)
kata shin
 
Riot: ver.3 での変更点と、周辺ツールたち
Riot: ver.3 での変更点と、周辺ツールたちRiot: ver.3 での変更点と、周辺ツールたち
Riot: ver.3 での変更点と、周辺ツールたち
Tsutomu Kawamura
 
React Facebook JavaScript Library
React Facebook JavaScript LibraryReact Facebook JavaScript Library
React Facebook JavaScript Library
Takami Kazuya
 
Riot.jsとフォームのデータバインディング
Riot.jsとフォームのデータバインディングRiot.jsとフォームのデータバインディング
Riot.jsとフォームのデータバインディング
Keisuke Imai
 
大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
Takumi Ohashi
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
 
Rails5とAPIモードについての解説
Rails5とAPIモードについての解説Rails5とAPIモードについての解説
Rails5とAPIモードについての解説
Fumiya Sakai
 
まだ DOM 操作で消耗してるの?
まだ DOM 操作で消耗してるの?まだ DOM 操作で消耗してるの?
まだ DOM 操作で消耗してるの?
Yuki Ishikawa
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
 
Babelで先取り次世代javascript
Babelで先取り次世代javascriptBabelで先取り次世代javascript
Babelで先取り次世代javascript
Tsuyoshi Maeda
 

Viewers also liked (20)

Serverless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指すServerless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指す
 
Riot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tipsRiot.jsと仲良くなるための僕的tips
Riot.jsと仲良くなるための僕的tips
 
Riotでサーバレスにした話
Riotでサーバレスにした話Riotでサーバレスにした話
Riotでサーバレスにした話
 
Riot.jsに触れてみた話
Riot.jsに触れてみた話Riot.jsに触れてみた話
Riot.jsに触れてみた話
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
 
NodeJSでCLI開発を楽しくするライブラリの紹介
NodeJSでCLI開発を楽しくするライブラリの紹介NodeJSでCLI開発を楽しくするライブラリの紹介
NodeJSでCLI開発を楽しくするライブラリの紹介
 
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSとAngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
 
自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた
 
SPAを実現するために必要な通信技術
SPAを実現するために必要な通信技術SPAを実現するために必要な通信技術
SPAを実現するために必要な通信技術
 
Riot.js と戦った話 (8月26日 oRo LT 会)
Riot.js と戦った話 (8月26日 oRo LT 会)Riot.js と戦った話 (8月26日 oRo LT 会)
Riot.js と戦った話 (8月26日 oRo LT 会)
 
Riot: ver.3 での変更点と、周辺ツールたち
Riot: ver.3 での変更点と、周辺ツールたちRiot: ver.3 での変更点と、周辺ツールたち
Riot: ver.3 での変更点と、周辺ツールたち
 
React Facebook JavaScript Library
React Facebook JavaScript LibraryReact Facebook JavaScript Library
React Facebook JavaScript Library
 
Riot.jsとフォームのデータバインディング
Riot.jsとフォームのデータバインディングRiot.jsとフォームのデータバインディング
Riot.jsとフォームのデータバインディング
 
大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち大規模プロダクト Webpack やっていく気持ち
大規模プロダクト Webpack やっていく気持ち
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
Rails5とAPIモードについての解説
Rails5とAPIモードについての解説Rails5とAPIモードについての解説
Rails5とAPIモードについての解説
 
まだ DOM 操作で消耗してるの?
まだ DOM 操作で消耗してるの?まだ DOM 操作で消耗してるの?
まだ DOM 操作で消耗してるの?
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
 
Babelで先取り次世代javascript
Babelで先取り次世代javascriptBabelで先取り次世代javascript
Babelで先取り次世代javascript
 

Similar to サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)

私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
よしだ あつし
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
Masato Noguchi
 
アジャイルサムライ読書会@札幌道場 のこと
アジャイルサムライ読書会@札幌道場 のことアジャイルサムライ読書会@札幌道場 のこと
アジャイルサムライ読書会@札幌道場 のこと
irasally omuko
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-Jun Saeki
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Hiroshi Shibamura
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
Yoshiharu Hashimoto
 
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
 
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープじっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
Kazuhiro Serizawa
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks
Yuuki Namikawa
 
Java + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetupJava + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetup
Toshiaki Maki
 
A look back on my Rails porftolio
A look back on my Rails porftolioA look back on my Rails porftolio
A look back on my Rails porftolio
ssuser9a4523
 
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
Yoh Nakamura
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
Tokuhiro Matsuno
 
青本勉強会2章
青本勉強会2章青本勉強会2章
青本勉強会2章
Keiichirou Miyamoto
 
毎日gemをアップグレードする生活
毎日gemをアップグレードする生活毎日gemをアップグレードする生活
毎日gemをアップグレードする生活
sinsoku listy
 
kamatte(かまって)
kamatte(かまって)kamatte(かまって)
kamatte(かまって)
Shinnosuke HORIGUCHI
 
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
 

Similar to サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮) (20)

私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
 
Haikara
HaikaraHaikara
Haikara
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
アジャイルサムライ読書会@札幌道場 のこと
アジャイルサムライ読書会@札幌道場 のことアジャイルサムライ読書会@札幌道場 のこと
アジャイルサムライ読書会@札幌道場 のこと
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
 
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
 
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープじっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
 
3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks3分でわかる(気になれる) AWS OpsWorks
3分でわかる(気になれる) AWS OpsWorks
 
Java + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetupJava + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetup
 
A look back on my Rails porftolio
A look back on my Rails porftolioA look back on my Rails porftolio
A look back on my Rails porftolio
 
Klabの梅雨対策
Klabの梅雨対策Klabの梅雨対策
Klabの梅雨対策
 
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3プロジェクトを成功させるための期待マネジメント_中村洋_A-3
プロジェクトを成功させるための期待マネジメント_中村洋_A-3
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
青本勉強会2章
青本勉強会2章青本勉強会2章
青本勉強会2章
 
毎日gemをアップグレードする生活
毎日gemをアップグレードする生活毎日gemをアップグレードする生活
毎日gemをアップグレードする生活
 
kamatte(かまって)
kamatte(かまって)kamatte(かまって)
kamatte(かまって)
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
 

More from Ken Muryoi

buoys gem の紹介
buoys gem の紹介buoys gem の紹介
buoys gem の紹介
Ken Muryoi
 
約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと
Ken Muryoi
 
Default scopeの被害報告
Default scopeの被害報告Default scopeの被害報告
Default scopeの被害報告
Ken Muryoi
 
地域コミュニティのススメ
地域コミュニティのススメ地域コミュニティのススメ
地域コミュニティのススメ
Ken Muryoi
 
自分を変えた一冊
自分を変えた一冊自分を変えた一冊
自分を変えた一冊
Ken Muryoi
 
Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?
Ken Muryoi
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)
Ken Muryoi
 
Railsアプリのモジュールはどこに置くべきか問題 (公開版)
Railsアプリのモジュールはどこに置くべきか問題 (公開版)Railsアプリのモジュールはどこに置くべきか問題 (公開版)
Railsアプリのモジュールはどこに置くべきか問題 (公開版)
Ken Muryoi
 
るびま10周年の告知
るびま10周年の告知るびま10周年の告知
るびま10周年の告知
Ken Muryoi
 
関西Ruby会議方面から来ました
関西Ruby会議方面から来ました関西Ruby会議方面から来ました
関西Ruby会議方面から来ました
Ken Muryoi
 
地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!
Ken Muryoi
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
Ken Muryoi
 

More from Ken Muryoi (12)

buoys gem の紹介
buoys gem の紹介buoys gem の紹介
buoys gem の紹介
 
約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと約一年、XP2nd 読書会に参加して感じたこと
約一年、XP2nd 読書会に参加して感じたこと
 
Default scopeの被害報告
Default scopeの被害報告Default scopeの被害報告
Default scopeの被害報告
 
地域コミュニティのススメ
地域コミュニティのススメ地域コミュニティのススメ
地域コミュニティのススメ
 
自分を変えた一冊
自分を変えた一冊自分を変えた一冊
自分を変えた一冊
 
Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?Rubyコミュニティをアピールしませんか?
Rubyコミュニティをアピールしませんか?
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)
 
Railsアプリのモジュールはどこに置くべきか問題 (公開版)
Railsアプリのモジュールはどこに置くべきか問題 (公開版)Railsアプリのモジュールはどこに置くべきか問題 (公開版)
Railsアプリのモジュールはどこに置くべきか問題 (公開版)
 
るびま10周年の告知
るびま10周年の告知るびま10周年の告知
るびま10周年の告知
 
関西Ruby会議方面から来ました
関西Ruby会議方面から来ました関西Ruby会議方面から来ました
関西Ruby会議方面から来ました
 
地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!地域Ruby会議にいこうぜ!
地域Ruby会議にいこうぜ!
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
 

サーバサイドなおじさんがSPAを趣味で初めて作ってみてわかった n のこと(仮)