Nuxt.js + TypeScript = Great!
by
Kenta Suzuki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Nuxt.js + TypeScript = いいぞ #Roppongi.js 2017/3/20 @suusan2go
Slide 2
Slide 2 text
自己紹介 ● Kenta Suzuki / @suusan2go ● M3,inc / Software Engineer ● 経験値で言うとこんな感じ ○ Ruby > JavaScript > Kotlin(ServerSide) > Golang ● どちらかと言えばサーバーサイドエンジニアです! ● 最近のお気に入り映画は「バーフバリ 王の凱旋」です
Slide 3
Slide 3 text
いまの私の現場の紹介 ● 大体10年前くらいに作られたらしいレガシーなJava(& 独自FW)システム のリニューアル ● バックエンドはSpring Boot + Kotlinに書き換え ● フロントエンドは分離してNuxt.jsにした
Slide 4
Slide 4 text
どれくらいレガシーかというと
Slide 5
Slide 5 text
_人人人人人人人人人人人人人人_ > Internet Explorer 6.0以上 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ ※今回のリニューアルで見直されます
Slide 6
Slide 6 text
リニューアルで使っている技術 Kotlin + Spring Boot API サーバ REST APIでやりとり Nuxt.js + TypeScript SPA ※もともとはgRPC + grpc-gatewayだったりした 本番運用まで行かなかった gRPCの知見をまとめておく
Slide 7
Slide 7 text
なぜNuxt.jsなのか? ● Nuxt.js とはユニバーサルな Vue.js アプリケーションを構築するためのフ レームワーク(公式より抜粋)長らくRCでしたが、1月に1.0が出ました。 ● SSRだけでなく、Vue-Router / Vuex / Vue-Metaなど Vue.js関連ライブラ リとのインテグレーションからビルドまでまるっと面倒みてくれる(= レール を提供してくれる) ● SSRは必須でなかったが、フロントに精通した人間が多くない中でSPA作 る上でのレールが欲しかった
Slide 8
Slide 8 text
なぜTypeScriptなのか? Kotlin + Spring Boot API サーバ Spring Foxで実装から Swagger Definition作成 Swagger Codegenで TSのAPIクライアントを自動生成
Slide 9
Slide 9 text
なぜTypeScriptなのか? ● TypeScript のAPIクライアントがSwagger Codegenが自動で型付きで生 成できる ● Nuxt.jsで高速にVueコンポーネントを開発しつつ、バックエンドとの接続部 分はTypeScriptでエディタ補完の恩恵を受けて作っていきたい。 ● 開発中にAPIが大きく変わっても、フロントエンドで確実に追従できるように したい。
Slide 10
Slide 10 text
今日話すこと ● Nuxt.js + TypeScirptでの開発の仕方 ● Nuxt.js については、沢山紹介記事が出てるのでググってください
Slide 11
Slide 11 text
Nuxt.js + TypeScriptの始め方
Slide 12
Slide 12 text
Nuxt.jsでTypeScriptコードをビルドする ● Nuxt.jsはデフォルトではTypeScriptに対応していませんが、Modulesとい う機構を使って、カスタムローダーが追加できるようになっています https://ja.nuxtjs.org/guide/modules ● この機構を使って、typescript-loaderを追加します
Slide 13
Slide 13 text
● modules/typescript.tsに←を追加 ● devDependenciesに以下を追加 ○ typescript ○ ts-loader ● nuxt.config.jsにmodulesを追加
Slide 14
Slide 14 text
参考になるコード ● Nuxt.jsのリポジトリ配下に examplse/typescript があり、こちら が1番活発にメンテナンスされています。 ● 以下もよいですが、微妙にバージョンが古くて動かなかったりす るので公式examples配下を参考にするのがおすすめです https://github.com/nuxt-community/typescript-template
Slide 15
Slide 15 text
Nuxt.js + TypeScript + eslint ● TypeScriptなのでtslintだよねーと思っていた時期が私にもありました ● eslint-plugin-vue が公式から提供されているので、TypeScriptなんです が、eslintを使った方がよさげです。 ● typescript-eslint-parserでTypeScriptにeslintがかけられます ● この辺りはjoe_reさんのブログにかなり詳しく書かれてて参考にさせていた だきました。 Vue + TypeScriptなプロジェクトにESLintを導入する
Slide 16
Slide 16 text
eslintrc.jsonはこんな感じ
Slide 17
Slide 17 text
Nuxt.js + TypeScriptでの コンポーネント開発
Slide 18
Slide 18 text
TypeScriptでのコンポーネント開発 ● メンバーの学習コストを考えて、シンタックスが大きく違うクラススタイル の APIは使っていない ● Vue2.5からTypeScirptサポートが強化されたので、通常のオブジェクトリ テラル構文でも殆ど問題なさそう ● ただし、Nuxt対応のためにいくつか型の定義を拡張してあげる必要があ る
Slide 19
Slide 19 text
Nuxt.jsが拡張するコンポーネントのプロパティに対応する ● NuxtはVueのコンポーネントのオプションを色々と拡張しているので、その ままだとコンパイルが通らない ○ layout, middleware, fetch, asyncData, key,watchQuery… ● 型の定義を追加してあげないと、コンパイルが通らない
Slide 20
Slide 20 text
● Contextは以下のページに詳細が記 載されています。 https://nuxtjs.org/api/context ※Storeはスペースの関係でAnyにしちゃいまし たが、型定義推奨です ● 自分が使ってないだけでまだ何かあ るかも?
Slide 21
Slide 21 text
process.client / process.server ● サーバーサイド(SSR)かブラウザ上かを判定するメソッド ● 1.0RCまであった以下のAPIは1.0releaseでdeprecatedに ○ context.isServer、context.isClient ● クライアント / サーバーの判定はどこでもできるようになったが、このままだ とビルドが通らないので型の拡張が必要
Slide 22
Slide 22 text
色々自分で書いてしまったけど、公式で提供されていないのだろうか? 1.0がリリースされたときmediumでこんなアナウンスがあったのだけれど・・・・ 知ってる人いたら教えてください :bow: https://medium.com/@nuxt_js/nuxt-js-1-0-is-out-bab1af459972 @nuxtjs/typescriptは・・・?
Slide 23
Slide 23 text
Nuxt.js + TypeScriptの開発はこ んな感じ
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
APIのパラメータが間違っていると教えてくれる
Slide 26
Slide 26 text
レスポンスに補完が効くようになる
Slide 27
Slide 27 text
まとめ ● Nuxt.js の TypeScript対応は簡単! ● API部分がTypeScriptになっていると、開発中に頻繁にAPIが変わっても コンパイルが通れば問題なく動く状態になった ○ 事実、API部分をgRPC => REST に書き換えたときもコンパイルを通 すだけで問題なく動いた ● まずはAPI部分からでも、Nuxt.js + TypeScript = いいぞ!
Slide 28
Slide 28 text
ありがとうございました!