1. サーバーサイド作成
まずはいつもの感じでディレクトリを作ってbundle init
しましょう。
mkdir sample-app
cd sample-app
bundle init
Gemfile
は以下のように。
source "https://rubygems.org"
ruby '2.3.3'
gem 'sinatra', '~> 1.4'
gem 'sinatra-contrib'
gem 'slim'
vendor/bundle
にインストールします。
bundle install --path=vendor/bundle
忘れずに.gitignore
に/vendor
を追加。
/vendor
準備が整ったので早速アプリを作っていきましょう。
といっても以下のファイルを置くだけ。
require 'sinatra'
require 'sinatra/reloader'
require 'rabl'
get '/' do
slim :app
end
doctype html
html
head
title sample app
script[type="text/javascript" src="bundle.js" charset="utf-8"]
body
h1 HELLO!
#app
p[v-text="massege"]
bundle.js
はこのあと作成するファイルです。
この時点でbundle exec ruby app.rb
してhttp://localhost:4567/ を開けばHELLO!
と表示されるはずです。
2. フロントサイド作成
今回はyarnを使います。
以下のものをインストール。
yarn init
yarn add webpack vue coffee-script coffee-loader
webpackのversion 4以降を使う場合は別途webpack-cli
も必要です(Thank you @tamano)。
yarn add webpack-cli
webpack.config.js
を作成しましょう。
module.exports = {
entry: './frontend/main.js',
output: {
path: 'public',
filename: 'bundle.js'
},
module: {
loaders: [
{ test: /\.coffee$/, loader: "coffee-loader" }
]
},
resolve: {
extenstions: ['', '.js', '.json', '.html'],
alias: {
'vue$': 'vue/dist/vue.common.js'
}
}
};
だいたいこんなことが書いてあります。
-
entry
とoutput
:./frontend/main.js
を./public/bundle.js
にビルド -
loaders
:.coffee
ファイルはcoffee-loader
を使ってコンパイル -
extenstions
:require
(後述)するときにこの拡張子は省略できるよ -
alias
: vueを使うときのおまじない。詳しくは公式参照。
./frontend/main.js
を作っていきましょう。
require('./app.coffee')
main.jsというのがビルドしたときのエンドポイントになるので、ここに必要なファイルをどんどんrequire
していきます。
今回はapp.coffee
というのを作ります。
Vue = require('vue')
window.app = new Vue
el: '#app'
data:
message: "hello vue!"
以下のコマンドでビルドします。
webpack
これでpublic/bundle.js
ができているはずです。
ここでhttp://localhost:4567/ を開けばhello vue
と表示されるはずです。
忘れずに.gitignore
に/node_modules
と/public
を追加します。
/public
はgitに入れるケースも有るのですが、今回はgitで管理しないことにします。
/vendor
/node_modules
/public
ここらでコミットを
git add .
git commit -m "Initial commit"
3. Herokuにアップ!
herokuにappを作成しましょう。
作成部分は省略します。
ここからが一番言いたかったこと
Heroku上でwebpackを実行するためにbuildpackにnodejsを追加しましょう。
heroku buildpacks:clear
heroku buildpacks:set heroku/nodejs
heroku buildpacks:add heroku/ruby --index 2
--index 2
はnodejsのあとでrubyをビルドするよってことです(なくてもいいかもしれません)。
package.json
に下記を追加しましよう。
"scripts": {
"heroku-postbuild": "webpack -p"
}
あとはpushするだけ。
git push heroku master
お疲れ様でした!