SlideShare a Scribd company logo
1 of 34
Download to read offline
Webpacker 3 on Docker
2017.09.11 Gotanda.rb
by  @__syumai 
Profile
名前: しゅーまい
Twitter: @__syumai (アンダーバー二個です)
所属: Ducklings inc.
3年前くらいからVRやってる会社です
やってる事: Webまわりの開発(Rails, Vue.js, たまにThree.js など)
HUG WEDDING
結婚式の360°VR動画撮影サービス
今年春から本格的に展開開始
サンプル
本題
Webpacker 3 on Docker
目次
導入編
1. 目的
2. なぜDockerを使うのか?
3. Webpacker導入時の課題
実践編
4. Railsプロジェクトを作成、Webpacker 3を導入
5. Docker周りを整備する
6. Webpackerのインストール
7. yarn.lockが更新されるようにする
8. webpack‑dev‑serverを使えるようにする
総括
9. まとめ
導入編
1. 目的
2. なぜDockerを使うのか?
3. Webpacker導入時の課題
目的
Docker上でWebpacker 3での開発を滞りなく行えるようにする
※...docker‑composeを使います
サンプル
こちらにあります
なぜDockerを使うのか?
開発環境の構築が楽
新規メンバーのやる作業が docker-compose build だけ
本番と環境が揃う
デプロイ時の安心感が大きい
Webpacker導入時の課題
1. 新規packageの追加時にyarn.lockが更新されない
2. webpack‑dev‑serverが扱いづらい
Webpacker導入時の課題
新規packageの追加時にyarn.lockが更新されない
 docker-compose run hoge --entrypoint='yarn add
huga' とやっても、元のイメージは更新されない
結局イメージのリビルドが必要なので、直接package.jsonに書き足
す
 docker-compose build 中の実行内容は、外部に露出しない
(yarn.lockが書き出されない)
Webpacker導入時の課題
webpack‑dev‑serverが扱いづらい
インストールしたnpmパッケージはDockerイメージ内にあるの
で、そこから起動しないといけない
docker‑composeの起動コマンドに含むと、webpack‑dev‑server
単体での再起動が出来なくなる
Rails側・ブラウザ側からバンドル後のJSが見える必要がある(ここ
がややこしい)
実践編
4. Railsプロジェクトを作成、Webpacker 3を導入
5. Docker周りを整備する
6. Webpackerのインストール
7. yarn.lockが更新されるようにする
8. webpack‑dev‑serverを使えるようにする
Railsプロジェクトを作成、Webpacker 3を導入
rails new
# Dockerを使うので、bundle installをスキップ
rails new webpacker-sample --skip-bundle
GemfileにWebpackerを追加
gem 'webpacker', '~> 3'
注意
公式リポジトリに記載の方法を使うと、GemfileにWebpackerのバ
ージョンが明記されない
こちらで入れた場合は、どのバージョンが落ちてくるかわからない
ので注意(今やったら、最新の3.0.1が落ちてきました)
rails new webpacker-sample --webpack
Docker周りを整備する
設定ファイル
docker‑compose.yml
Dockerfile
こちらにあります
起動を確認する
docker-compose build
docker-compose up
webpackerのインストール
docker‑composeコマンドを通して実行
servicesで名前をrailsに、entrypointをrailsにしているので普段の
感じでRailsコマンドが使えます
docker-compose run --rm rails webpacker:install
# お好みのものがあれば
docker-compose run --rm rails webpacker:install:react
docker-compose run --rm rails webpacker:install:vue
yarn.lockが更新されるようにする
Dockerイメージビルド時にnpmパッケージのインストールを行う
COPY package.json yarn.lock $APP_HOME
RUN yarn install
これだけだと、生成されたyarn.lockがイメージ内に閉じ込められる
Dockerfileの書き方によっては、既存のlockファイルで上書きされ
てしまうこともある
ビルドのたびにパッケージのバージョンが変わる可能性がある…。
生成されたlockファイルを退避する
RUN cp *.lock /tmp
COPY . $APP_HOME
RUN cp /tmp/*.lock .
退避したlockファイルを読み出す
buildスクリプトを別で作る
ビルド後のイメージからlockファイルを取り出します
ついでにGemfile.lockも吐き出すようにしました
参考サイト=> Using Yarn with Docker ‑ Hacker Noon
#!/bin/sh
if docker-compose build; then
docker run --rm --entrypoint cat webpackerdockerexample_rails
if ! diff -q yarn.lock /tmp/yarn.lock > /dev/null 2>&1;
echo "We have a new yarn.lock"
cp /tmp/yarn.lock yarn.lock
fi
docker run --rm --entrypoint cat webpackerdockerexample_rails
if ! diff -q Gemfile.lock /tmp/Gemfile.lock > /dev/null 2>&1
echo "We have a new Gemfile.lock"
cp /tmp/Gemfile.lock Gemfile.lock
fi
fi
yarn.lockが更新されるようにする
解決!
その他の対応策
volumeをマウントした状態で、実行中のコンテナに入って普通に
yarn addすれば、新しくなったpackage.jsonとyarn.lock出てくる
よね、と指摘を受けました。確かに…。
イメージ内にパッケージを含めたい場合は、いずれにせよビルドの
必要があるので、状況に合わせて使い分けると良さそう
(インストール無しでyarn add出来たら幸せ…。方法あるかな?)
webpack‑dev‑serverを使えるようにする
Webpackerインストール後にRailsを起動すると…
めっちゃエラーが出る
webpack‑dev‑serverの設定に起因しているので要修正
Puma caught this error: Cannot assign requested address
- connect(2) for [::1]:3035 (Errno::EADDRNOTAVAIL)
/usr/local/lib/ruby/2.4.0/socket.rb:1198:in `__connect_nonblock
/usr/local/lib/ruby/2.4.0/socket.rb:1198:in `connect_nonblock'
/usr/local/lib/ruby/2.4.0/socket.rb:56:in `connect_internal
/usr/local/lib/ruby/2.4.0/socket.rb:137:in `connect'
/usr/local/lib/ruby/2.4.0/socket.rb:627:in `block in tcp'
/usr/local/lib/ruby/2.4.0/socket.rb:227:in `each'
/usr/local/lib/ruby/2.4.0/socket.rb:227:in `foreach'
/usr/local/lib/ruby/2.4.0/socket.rb:617:in `tcp'
/usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server
/usr/local/bundle/gems/webpacker-3.0.1/lib/webpacker/dev_server
dev‑server立ち上げの方針
大きく分けて2つ
1. Railsの立ち上げと一緒に動かす
Railsコンテナのentrypointに含める
または、webpack‑dev‑server用のコンテナを立ち上げる
2. Railsと別で立ち上げられるようにする(今回はこっち)
docker‑composeを通して起動できるようなスクリプトを書く
Railsと別で立ち上げられるようにする
やる事
Railsコンテナにwebpack‑dev‑server用のポート(3035)を開ける
設定ファイルからホストをlocalhostに書き換える(Railsから見える
ようになります)
これをやらないと、Webpacker 3で入っ
たWebpacker::DevServerProxyに引っかかる
起動コマンドに --listen-host 0.0.0.0 オプションを付ける(コ
ンテナ外から見えるようになります)
内容は、リポジトリ直下の webpack-dev-server スクリプト
を参照ください
(Railsコンテナのentrypointに含めてしまえば、上記の作業は不要です)
結果
こちらにあります
まとめ
運用始まったら便利だし、楽
激しく仕様が変わるので、バージョンアップはつらい…。

More Related Content

What's hot

NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
 
aws上でcloud foundryを構築してみた
aws上でcloud foundryを構築してみたaws上でcloud foundryを構築してみた
aws上でcloud foundryを構築してみた
kokuboyuichi
 
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
Yuki KAN
 
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
Yuki KAN
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
Sea Mountain
 

What's hot (20)

簡単!自動バックアップ設定でWordPressを安心運用
簡単!自動バックアップ設定でWordPressを安心運用簡単!自動バックアップ設定でWordPressを安心運用
簡単!自動バックアップ設定でWordPressを安心運用
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方はじめての Cloud Foundry: .NET アプリケーションのはじめ方
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
 
Rancher Meetup Tokyo#3 Storageについて
Rancher Meetup Tokyo#3 StorageについてRancher Meetup Tokyo#3 Storageについて
Rancher Meetup Tokyo#3 Storageについて
 
OWASP Nagoya_WordPress_Handson_1
OWASP Nagoya_WordPress_Handson_1OWASP Nagoya_WordPress_Handson_1
OWASP Nagoya_WordPress_Handson_1
 
Gwabc2015
Gwabc2015Gwabc2015
Gwabc2015
 
Jsug spring bootコードリーディング 接触篇 a contact
Jsug spring bootコードリーディング 接触篇 a contactJsug spring bootコードリーディング 接触篇 a contact
Jsug spring bootコードリーディング 接触篇 a contact
 
aws上でcloud foundryを構築してみた
aws上でcloud foundryを構築してみたaws上でcloud foundryを構築してみた
aws上でcloud foundryを構築してみた
 
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
 
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
2015/04/25 妖怪は見た!実録Azure事件簿アプリケーション編 / Global Azure Boot Camp
 
Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理
 
WPSCanによるWordPressの脆弱性スキャン
WPSCanによるWordPressの脆弱性スキャンWPSCanによるWordPressの脆弱性スキャン
WPSCanによるWordPressの脆弱性スキャン
 
20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみた20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみた
 
クラウド実践入門 クラウドを使ってみよう
クラウド実践入門 クラウドを使ってみようクラウド実践入門 クラウドを使ってみよう
クラウド実践入門 クラウドを使ってみよう
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
BOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud FoundryBOSH-lite で 1VM Cloud Foundry
BOSH-lite で 1VM Cloud Foundry
 
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
 
Tips for passing AZ-103 once
Tips for passing AZ-103 onceTips for passing AZ-103 once
Tips for passing AZ-103 once
 

Similar to Webpacker 3 on Docker

Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
 

Similar to Webpacker 3 on Docker (20)

CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
 
AKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab ContentsAKS (k8s) Hands on Lab Contents
AKS (k8s) Hands on Lab Contents
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Webアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオンWebアプリケーション開発者のためのDockerハンズオン
Webアプリケーション開発者のためのDockerハンズオン
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
 
AlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetesAlibabaCloudではじめるKubernetes
AlibabaCloudではじめるKubernetes
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519Webアプリケーション開発者のためのDockerハンズオン20210519
Webアプリケーション開発者のためのDockerハンズオン20210519
 
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 
20140605_じどうかの窓口_CloudBees_Jenkins
20140605_じどうかの窓口_CloudBees_Jenkins20140605_じどうかの窓口_CloudBees_Jenkins
20140605_じどうかの窓口_CloudBees_Jenkins
 
React VR ことはじめ
React VR ことはじめReact VR ことはじめ
React VR ことはじめ
 

Webpacker 3 on Docker