Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nuxt.jsとExpressでWebサービスを作ってみた
Search
dala00
April 25, 2019
Programming
0
1.7k
Nuxt.jsとExpressでWebサービスを作ってみた
dala00
April 25, 2019
Tweet
Share
More Decks by dala00
See All by dala00
Freelance Talk Session Kansai
dala00
0
47
A-FrameでWebVR
dala00
1
190
Laravelでサービスを作った時にやったこと
dala00
1
790
Laravel + Vue.jsでサービスを作成&運営してみて
dala00
1
530
何でも書ける技術者向けコミュニティCrieit - 制作物天下一武道会
dala00
0
64
Other Decks in Programming
See All in Programming
TokyoR116_BeginnersSession1_環境構築
kotatyamtema
0
110
GAEログのコスト削減
mot_techtalk
0
120
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
1.8k
Unity Android XR入門
sakutama_11
0
150
Amazon Bedrock Multi Agentsを試してきた
tm2
1
280
Rails アプリ地図考 Flush Cut
makicamel
1
110
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
45
16k
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
9
3.4k
ペアーズでの、Langfuseを中心とした評価ドリブンなリリースサイクルのご紹介
fukubaka0825
2
310
Formの複雑さに立ち向かう
bmthd
1
810
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
120
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Bash Introduction
62gerente
610
210k
Thoughts on Productivity
jonyablonski
69
4.5k
Docker and Python
trallard
44
3.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
For a Future-Friendly Web
brad_frost
176
9.5k
A Tale of Four Properties
chriscoyier
158
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Transcript
Nuxt.jsと Expressで サービスを作ってみた
自己紹介 Twitter: dala00 個人で色々とサービスを作っている(去年は5つ+ α) PHPメインだけどNode.js、Elixir、Firebase等何でも使ってリリースしたりする
作ってみた構成例 • Laravel + Vue.js (JS) • Elixir + Phoenix
(JS) • Laravel + Vue.js (TS) • Nuxt.js + Express (TS) ← 今回はこれの話 • Nuxt.js + Firebase (TS) 今回は主に個人で開発するサービスの話
作ったもの 100の質問メーカー 質問を作ったり回答したりできるサービス • Nuxt.js • Express • Buefy
None
アプリケーションの初期化 • nuxt-community/starter-template • nuxt-community/express-template • create-nuxt-app
create-nuxt-appがとても良かった • サーバーアプリケーションを選択できる( Express等) • UIフレームワークを選択できる( Buefy等) • axiosモジュールを使うか等 •
テストライブラリを入れるかなど( Jest等) • Lintをどうするか • 最初からnodemonでwatchしてくれてる GitHubのIssueではTypeScriptの話も出てるので期待(?)
なぜNuxt.js+Express? MySQL使いたかった。 元々FirebaseのFirestoreで開発していたが…… • RDBに慣れているのでどうしてもデータを正規化したくなってしまう • 今後色々集計なども作りたいのでクエリが弱いのがいつも不安 • セキュリティをしっかりしたり Functionsで書く
→ サーバーサイド自分で書くのと結局同じことをしているような気になってきた • 個人サービスなので無料枠がどうしても気になる • モデルにTypeScriptが使いたい 結局自分でサーバー側も書くことに
両方Node.jsでやってみてどうだったか 快適でもあり面倒でもあり …。
両方Node.jsにすると良いところ
セッションの連携が簡単 両方Node.jsである場合の一番の強み?
サーバー一つで可能 (ここでいうサーバーはインスタンスのことではなく サービスとして起動しておくサーバーアプリケーションのこと) 巨大なアプリケーションならそもそもフロントとサーバーを 別にしたほうが良いかもしれないが、 個人で作る小規模なレベルならシンプルで楽
interfaceとか使い回せる サーバー側でモデルをJSONに変換するときの型定義と、 Nuxt.js上で利用する場合の型定義を同じ interfaceで使いませる (モデル自体はちょっとつらい)
辛かったところ
ひたすらハマる 色々なパッケージの組み合わせで構築するので、新しいものを使ったり、新しい組み合わせが発生す るとその度ハマる • セッションをMySQLにするだけでハマる • 下手に開発中ts-nodeを使ったりしたので本番ビルドだけエラーが出たりする • ローカルの本番ビルド&実行は動くのに本番サーバーでは動かない •
TypeORMだけパスがずれて動かない • テストだけ動かない とにかく何でも入って最初から動く Laravelがめちゃくちゃ恋しくなった
ビルドが必要 Google Compute Engineの一番貧弱なメモリ0.6GBのサーバー • メモリが足りなくてビルドできない → スワップ設定 • 200秒くらいかかる → その間負荷が高すぎてサービスも止まる ユーザーが増えたりしてちゃんとしたい場合は
CIでデプロイ等必要
両方Node.jsでなくても良いかも Nuxt.js+他の言語のサーバーアプリケーションでも良さそう • 同じにするメリットはあるけど大変なとこもある • 慣れてるサーバーサイドのフレームワークを使ったほうが安心感がある • CIでデプロイするなら何でも良いと思うけど、小規模であれば Laravelとかだったら手動でpullするだけデプロイ終わったり
サーバーどうするか
現在色々候補はある なるべく無料でサーバーサイドレンダリングや DBの利用もしたい • Heroku(DBの容量が不安) • Google App Engine(スペックが不安) •
Now(DBがない。Now2だとNuxt.js動かないかも) ◦ nuxt/now-builderでた! • Google Compute Engine(何でもできるけど管理が面倒) • Google Cloud Run(試したいけど無料だとスペックは GAEと同等 まだベータなので合うリージョンがなかった)
結局Compute Engineに • ずっと無料枠 • メモリ低いけどGAEとかよりは高い • 最悪DBも同居させれば完全にほぼ無料
その他Nuxt.js上でやったこと
prefetch Nuxt.js2.4から。リンク先の先読み。 忘れていたが、貧弱なサーバーだと負荷が怖いので無効化したい • <n-link to="/about" no-prefetch> で無効化可能 • nuxt.config.jsのrouter.prefetchLinksでグローバルに設定
@nuxtjs/dotenv 必要な環境変数だけ指定も可能
解析や広告 直接配置できないのでmodulesに設定して利用 • @nuxtjs/google-tag-manager • @nuxtjs/google-analytics • @nuxtjs/google-adsense
まとめ • Nuxt.jsはとにかく色々揃ってて簡単にできるのでおすすめ • Vue.jsのみからNuxt.jsに変えるのは面倒なので作る前に考えた方が良い • 本番へのデプロイ方法も予め考えておいた方が良い • サーバーサイドは規模や用途、継続性など、色々な要素を元に考えて選定 •
全部Node.jsたいへんだけど楽しいのは楽しい