NuxtMeetUp#9 オールスターズ に参加しました!(前編)

Nuxt.js
NuxtMeetUp
Nuxt.js
Nuxt.js
Vue.js
Vue.js

2019-08-27 21:00

8月26日(月) に 株式会社メルカリ 東京支社オフィス で開催された NuxtMeetUp#9 オールスターズ に行ってきました。

#nuxtmeetup

Nuxt.js が v2.9 になり、Nuxt TypeScript が切り出され TypeScript 対応が本格的になってきましたね!

それに伴って今回の NuxtMeetUp は実質 TypeScript MeetUpの様相でした。

それでは、NuxtMeetUp#9 に参加した際にとっていたメモをまとめます。

ちょっと長くなりそうなので、前後編に分けます。こちらは前編です。 詳しく見たい方はそれぞれの登壇者のスライドをご覧ください(リンクを載せています)

会場提供者LT:メルペイフロントエンドエンジニアの仕事

スライドのアップはありませんでした。

登壇者: @_sskyu 株式会社メルペイ

メルペイでは、toB、toCともに Nuxt.js TypeScriptで作られている。

開発環境

Deploy

以下のFlowを組んである

  1. git push

  2. CI、CDでESLint、UnitTest

  3. レビュー

  4. CIでbuild

  5. CIでdeploy

コメント

今関わっているプロダクトでこういった Flow を組んでいきたいと思っていはいるけど、環境構築が苦手な私には重い腰が上がらず…

Sentry とかは利用し始めていて、かなり有用だと思っているので、うまく活用していきたい。


飲食提供者LT

スライドのアップはありませんでした。

登壇者: @kotamats 株式会社ROXX

赤坂に引っ越した!

プロダクト

どちらも Nuxt.js / Laravel で作られている

SSRはせず、generate での運用

ROXX にした理由

  • もはや SCOUTER というサービスやってない

  • ROX (最高にイケているというスラング rocksの略) + X (サービス プロダクト メンバー)

コメント

いつも NuxtMeetUp 開催ありがとうございます!

エンジニアブログも大変助かっています!


Docker multi stage build on Nuxt.js Application

登壇者: @potato4d LINE株式会社

UIT Meetup も参加お待ちしております!

LINE アプリの右側の Menu にあるアプリは、 ほぼ Web View、Nuxt.js のSSRアプリケーションでできている

フロントエンドの Docker 運用

皆さんは Dockerhaどう運用していますか?

  • 開発環境だけ

  • 本番環境だけ

  • 開発環境、本番環境どちらも

開発環境、本番環境どちらも Docker 管理すると、カオスになりがち

  • 設定ファイルが大量に

  • 一つのファイルにまとめようとして出来上がる謎の shell

そんなときは Multi stage build が便利!

Docker multi stage build

  • Docker 17.05(2年前) に追加

  • 1つの Dockerfile 内に複数のイメージを生成するように記述できる

    • From as で命名して分割できる

    • compose で target 指定できる

  • 生成したイメージ間でデータ共有ができる

    • COPY で別のイメージの成果物だけコピーして利用できる

  • ビルドと実行を分割しイメージサイズを削減できる

    • devDeps を弾くことで ESLint や Jest 等を消すことができる

  • Nuxt.js のような、開発・本番環境で挙動が違うものでも便利

サンプル

フロントエンドのDocker

フロントエンド開発で Docker 使うとトランスパイルが必要な SPA 環境ではファイル I/Oが重い

フロントエンドの Docker 化はよく考えよう

コメント

今関わっているプロダクトでは Docker で Nuxt.js の開発しているので、やはり結構I/Oがきつくて重たくなる

Nuxt.js TypeScript で作っている方は完全にサーバと分割してフロントは Docker 使わずに開発してるから快適


Nuxt.js と TypeScript のベストプラクティス

登壇者: @yuit1552 株式会社サイバーエージェント

Nuxt.js + TypeScript でのAPI 利用

サードパーティクッキーだったり、クロスオリジン制約だったり、別ドメインのAPIを叩くのが面倒になってきている

API を用意する手段として

  • @nuxt/proxy で バックエンドのAPIを Proxy する

  • nginx 等で API サーバーに Proxy する

  • express等で API 作る

  • ServerSideMiddleware

用途としては

  • クロスオリジン制約回避

  • http-only にしたクッキーを扱いたい

  • API を一本にまとめたい

  • フロント仕様でレスポンスを加工したい

BFF: Backends For Frontends APIで作ろう!

手段1:create-nuxt-app で express server を選ぶ

import 使われてないし、 Nuxt.js v2.0.0 だし… 色々と足りないとかその他問題も多発する…

やめよう!

手段2:serverMiddleware を使う

server-static か カスタムミドルウェア

nuxt.config.js に API やミドルウェアのパスを書くのはなんか微妙…

ということでカスタムミドルウェアを使う

express のミドルウェアがサポートされているので express の router で実装

@nuxt/typescript を使って、ベストプラクティスっぽい API が作れた

ts-node で tsconfig の paths を使う

Nuxt.js 2.9 + TypeScript のserverMiddelewareで tsconfigのpathsを使えるようにする

tsconfig-paths を使って package.json の script を以下のように書き換えれば tsconfig-paths が使えます!

"scripts": { "dev": "node -r tsconfig-paths/register ./node_modules/@nuxt/typescript-runtime/bin/nuxt-ts.js", "build": "node -r tsconfig-paths/register ./node_modules/@nuxt/typescript-runtime/bin/nuxt-ts.js build", "generate": "node -r tsconfig-paths/register ./node_modules/@nuxt/typescript-runtime/bin/nuxt-ts.js generate", "start": "node -r tsconfig-paths/register ./node_modules/@nuxt/typescript-runtime/bin/nuxt-ts.js start" },

でも起動コマンドが美しくないので

→ @nuxt/typescript-runtime に PRしてみたそうです!が、CoreCLI フックがサポートされるまで保留になりました

コメント

私は ROXX さんと同じように、 Nuxt.js / Laravel が多いので、API は Laravel に任せっきり。

以前はフルスタックで サーバーもフロントも書いてたけど、最近はフロントがメインになってきて、ちょっとずつだけど知見が溜まってきていると思う(思いたい


Nuxt.jsとテストコード

登壇者: @keita_kn_web 株式会社エス・エム・エス

テストコードを書く目的

  • 検証作業の工数を削減する

  • バグを減らす

  • リファクタリングを容易にする

Nuxt.js の主なテスト

  • Component

    • Snapshot

    • Storybook

  • VueX

    • getter

    • mutation

    • action

  • E2E

Snapshotテスト

  • Snaoshot ファイルをバージョン管理に含める

  • UI の変更があった場合、テストが失敗するが、意図する結果なら Snapshotを更新しておく

    • jest --updateSnapshot で更新される

Storybook と組み合わせることで、UI ドキュメントとテストコードが連動し、わかりやすい

Component の設計・テストで意識すること

  • コンポーネントの責務は小さく

  • ロジックは Vuexに

  • ユニットテストなので単一を意識

  • 単純な Component は テストを省いても良い

VueX のテストは、最低限 action をテストする

E2Eテスト

実装コストはそれほどではないが、外部要因(デザインなど)で壊れることが多いため、メンテナンスコストが高い

主要機能で、複雑なシナリオの正常系だけでもいいので実装する

TestCafe

E2Eテストフレームワーク

  • ブラウザ指定可能

  • TypeScriptSupport

  • WebDriveいらない

ブラウザでアクセスするようにテストコードを書いていく

  1. 対象の URL にアクセス

  2. ブラウザ上の操作を記述

  3. DOM構造を調べて意図した形になっているか確認

E2Eテスト用に data-test="signin" のようなカスタムデータ属性を付与しておくと良い

→ class や id は、デザイン等の css の変更で容易に変わってしまうから

テストコードのサンプル

コメント

私も最近 TestCafe を利用して E2Eテストを書いています。

ログイン、ログアウト周りや、よく行う操作で複雑そうなものはできるだけ書いていきたいですね。

Storybook も atoms、molecules あたりはしっかり書いているのですが、テストと連動させたりができていないので、対応していきたい。


まとめ

NuxtMeetUp 9 まとめ前編はここまでです!

私も Nuxt.js v2.9 が来てすぐにバージョンアップし、TypeScript の移行もスッキリできて Nuxt.js に感謝感謝という気持ち。

まだまだ TypeScript は初心者なので、しっかりと恩恵を受ける形で書いていきたい。

Deploy 周りでも全然やれていない所あるし、必要なところを見極めて色々手を付けていきたい。