SlideShare a Scribd company logo
1 of 72
Download to read offline
静的サイトどこにする?
@ogawatti
tottoruby #37 online
⾃⼰紹介
Ruby on Railsからは遠のきました
またJavaScript(Vue.js)の世界へ?
結局Rubyネタを話すことのないまま
痛⾵実績解除しました
1ヶ⽉以上たっても炎症残ったまま...
某静的サイトのパフォーマンス改善してました
今⽇はこれに関連した話をします
2
リモートワークに際して買ったものたち
せっかくtottorubyもリモート開催なので
mono ¥
Apple Magic Trackpad2 14,800
Vinpok Taptek (Keyboard) 14,500
HP 27f 4K Display 35,000
Okamura Shift (Chair) 77,330
Dyson pure hot+coollink HP03 '17 42,900
3
静的サイトを配信するのはどこがいいのか?
4
静的サイト
Nuxt.js で nuxt generate した静的サイト
dist ディレクトリをデプロイ
今回はサンプルとして画像ファイル1枚貼ってあるだけ
Nuxt.js使った意味は特にないです、たまたま⼿元にあっただけ
5
6
https://github.com/ogawatti/nuxt-sample
7
⽐較対象
1. Netlify
2. Google Firebase
3. AWS S3
4. AWS Amplify
8
Netlify
9
10
Netlify
静的コンテンツのホスティングサービス
公開簡単
CDN、独⾃ドメイン、SSL対応
無料(※⽉100Gまでの通信量と300分までのBuild)
Functions, Identity, Form, etc
11
Netlify Setting (New site from Git)
12
Netlify Setting (Create a new site)
13
Netlify Setting (Deploy)
14
Netlify First Deploy
15
Netlify Setting (Site Name)
16
https://watti-nuxt-sample.netlify.app/
17
Netlify Settings (Deploy previews)
18
Netlify Deploy (Github Pull Request)
19
Netlify Deployes (CD)
20
Netlify まとめ
シンプル・簡単
サイト・CD構築数分
PR作成・更新をPreview環境へデプロイ可
basic認証をかけたりもできます
privateでも当然問題なし
CDN無料
名前も⼀応付けられる
21
Google Firebase
22
23
Firebase Setting (Create Project)
24
Firebase Setting (Create Project)
25
Firebase Setting (Create Project)
26
Firebase Project
27
Firebase tools install & setting
$ npm install firebase-tools
$ firebase login
$ firebase init
Hosting を選択
Use an existing project でWebで作成したプロジェクトを選択
公開するディレクトリを dist に変更
SPAは No を選択
dist/index.html の上書きは No を選択
28
Firebase deploy
$ firebase deploy
=== Deploying to 'sample-image-8901e'...
i deploying hosting
i hosting[sample-image-8901e]: beginning deploy...
i hosting[sample-image-8901e]: found 201 files in dist
✔ hosting[sample-image-8901e]: file upload complete
i hosting[sample-image-8901e]: finalizing version...
✔ hosting[sample-image-8901e]: version finalized
i hosting[sample-image-8901e]: releasing new version...
✔ hosting[sample-image-8901e]: release complete
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/sample-image-8901e/overview
Hosting URL: https://sample-image-8901e.web.app
29
https://sample-image-8901e.web.app
30
Firebase まとめ
こちらも簡単
サイト・デプロイ数分
CDはGithub Actionsとか
CDN無料
31
AWS S3
32
33
AWS S3 Setting
$ aws s3api create-bucket 
--acl public-read 
--bucket watti-nuxt-sample 
--region ap-northeast-1 
--create-bucket-configuration LocationConstraint=ap-northeast-1
$ aws s3api put-bucket-policy 
--bucket watti-nuxt-sample 
--policy file://bucket-policy.json
$ aws s3 sync ./dist s3://watti-nuxt-sample
$ aws s3 website s3://watti-nuxt-sample --index-document index.html
http://watti-nuxt-sample.s3-website-ap-northeast-
1.amazonaws.com/
34
S3 まとめ
よくあるやつ
ドキュメントが溢れているので困らない
AWSの他のサービス使う場合は良いかも?
CDNはCloudFront
CDはGithub Actionsとか
35
AWS Amplify
36
37
AWS Amplify deploy setting
38
AWS Amplify deploy setting
39
AWS Amplify deploy setting
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- npm run generate
artifacts:
baseDirectory: /dist/
files:
- '**/*'
cache:
paths:
- node_modules/**/* 40
AWS Amplify deploy setting
41
Amplify app
42
https://master.d29jonr543ipnj.amplifyapp.com/
43
Amplify
Netlifyと同じくらいの⼿軽さ
サイト構築・CD
カスタムドメインはR53連携
プレビュー機能もある
CDN無料(CloudFront?)
44
サービス⽐較
45
サービス⽐較- 機能
Service
Github
連携 CDN その他
Netlify ◯ △ Functions, Identity, Form, etc
Google
Firebase
× ◯ Authentication, DB, Storage,
Functions, Machine Learning
AWS S3 × × AWS各サービス連携
AWS
Amplify
◯ ◯ Backendサービス構築
46
サービス⽐較- 速度
Service CDN Edge IMG DL
Netlify ⾃動 Singapore 10~15s
Google Firebase ⾃動(Google CDN?) Tokyo? 1.0~2.0s
AWS S3 ⼿動(CloudFront) Tokyo 1.0~1.5s
AWS Amplify ⾃動(CloudFront?) (〃) 0.8~1.2s
※ watti⾃宅環境: 29Mbps
※ Is there a list of where Netlify's CDN pops are located?
47
サービス⽐較- 料⾦
Service 料⾦
Netlify 無料(通信量・ビルド制限あり)
Google Firebase 無料(通信量・ストレージ制限あり)
AWS S3 有料(通信量・ストレージ)
AWS Amplify 有料(通信量・ビルド・ストレージ・デプロイ)
AWSは無料利⽤枠あり(1年)
48
所感
静的サイトだけならGoogle Firebaseで良さそう
速度のこと気にしなくて良いならNetlifyの⼿軽さはあり
本番運⽤を考えると有料プランになるので料⾦よりは機能性?
機能性を重視するならAWS?
他の機能の連携を考えて選ぶのが良さそう
49
参考
Netlify へデプロイするには?
File-based configuration(Netlify)
Nuxt.jsで作成したWebサイトをFirebaseでホスティングする
AWS CLIを使って、Amazon S3で静的ウェブサイトをホスティング
したい
AWS CLI Command Reference
Firebase Hosting
Cloud CDN ロケーション
50
おまけ
51
Functions
52
Netlify Functions
53
Netlify Functions
AWS Lambdaを簡単に構築して叩けるよ
125,000 リクエストor 実⾏時間100h まで無料
Deploy AWS Lambda functions without configuring API
gateways, coordinating deployments, or setting up an AWS
account.
“
“
54
Netlify Functions Init
$ npm i netlify-lambda
$ code netlify.toml
### netlify.toml (追記)
[build]
functions = "dist/api"
$ mkdir api
$ code api/hello.js
55
api/hello.js
exports.handler = function(event, context, callback) {
callback(null, {
statusCode: 200,
body: JSON.stringify({
message: 'Hello, world!'
})
});
};
リクエスト情報はevent, ユーザー情報とかはcontext
イベントをトリガーとすることもできそう(deploy, test, identity)
https://docs.netlify.com/functions/build-with-javascript/#format
56
package.json
すでに dev , build はあるので別名で追加。
{
...
"scripts": {
...
"serve": "netlify-lambda serve api",
"build-api": "netlify-lambda build api"
},
...
}
57
Netlify Functions Local Serve
$ npm run serve
netlify-lambda: Starting server
...
Built at: 2020/09/23 22:27:33
Asset Size Chunks Chunk Names
hello.js 1.06 KiB 0 [emitted] hello
Entrypoint hello = hello.js
[0] ./hello.js 169 bytes {0} [built]
Lambda server is listening on 9000
$ curl -s http://localhost:9000/.netlify/functions/hello | jq '.'
{
"message": "Hello, world!"
} 58
Netlify Functions Setting & Deploy
Netlify > watti-nuxt-sample > settings > Build & deploy > build を
npm run generate && npm run build-api に変更。
masterへpushしてdeploy。
11:43:44 PM: ┌────────────────────────────────────────────────────────────┐
11:43:44 PM: │ 2. onPostBuild command from @netlify/plugin-functions-core │
11:43:44 PM: └────────────────────────────────────────────────────────────┘
11:43:44 PM:
11:43:44 PM: Packaging Functions from dist/api directory:
11:43:44 PM: - hello.js
11:43:44 PM:
11:43:44 PM: (@netlify/plugin-functions-core onPostBuild completed in 79ms)
11:43:44 PM:
59
60
Netlify Function Endpoint
ホストは静的サイトと、パスはローカルと同じ。
$ curl -s https://watti-nuxt-sample.netlify.app/.netlify/functions/hello | jq '.'
{
"message": "Hello, world!"
}
61
Firebase Functions
62
Firebase Functions
Cloud Functions for Firebase
Serverless Fremwork
JavaScript / TypeScrit
Admin SDKを利⽤してFirebaseの機能を利⽤できる
63
Firebase Functions Init
firebase-tools はインストール済みなので以下のみ実施。
$ npm install firebase-functions
$ firebase init functions
今回は javascript を選択, ESLint は No を選択
今依存パッケージをインストールするかを聞かれるので Yes
$ ls functions/
index.js node_modules package-lock.json package.json
64
functions/index.js
下4⾏だけアンコメント。
const functions = require('firebase-functions');
// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions
exports.helloWorld = functions.https.onRequest((request, response) => {
functions.logger.info("Hello logs!", {structuredData: true});
response.send("Hello from Firebase!");
});
65
Firebase Functions Local Serve
$ firebase emulators:start
$ curl -s http://localhost:5001/sample-image-4c899/us-central1/helloWorld
Hello from Firebase!
66
67
Firebase Function Deploy
$ firebase deploy --only functions
=== Deploying to 'sample-image-4c899'...
i deploying functions
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
⚠ functions: missing required API cloudbuild.googleapis.com. Enabling now...
✔ functions: required API cloudfunctions.googleapis.com is enabled
Error: HTTP Error: 400, Billing account for project '224982070776' is not found.
Billing must be enabled for activation of service(s) 'cloudbuild.googleapis.com,containerregistry.googleapis.com' to proceed.
従量課⾦プランにしろと⾔われたのでここまで...。
本来ならURLが発⾏されるらしいです。
Function URL (helloWorld): https://us-central1-foobar-d0c13.cloudfunctions.net/helloWorld
68
AWS Lambda
69
AWS Lambda (紹介不要?)
Serverless Framework
$ sls invoke local -f hello
$ sls deploy --stage prod --profile prod
AWS SAM
$ sam local invoke
$ sam deploy
ruby使える!
70
参考
Netlify Functins
File-based configuration
Configure and deploy Functions
Firebase Functions
はじめに: 最初の関数の記述、テスト、デプロイ
71
おわり

More Related Content

What's hot

Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
Kazuyuki Mori
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
 

What's hot (20)

Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Dockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんかDockerの改修を一緒にやりませんか
Dockerの改修を一緒にやりませんか
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Docker入門
Docker入門Docker入門
Docker入門
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Using LXC on Production
Using LXC on ProductionUsing LXC on Production
Using LXC on Production
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing Dockerfiles
 
清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~清貧Docker ~個人がDockerを使う理由~
清貧Docker ~個人がDockerを使う理由~
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 

Similar to 静的サイトどこにする?

Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
外道 父
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
Dai Utsui
 

Similar to 静的サイトどこにする? (20)

Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
近頃のDockerネットワーク
近頃のDockerネットワーク近頃のDockerネットワーク
近頃のDockerネットワーク
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
 

静的サイトどこにする?