Nuxt.js + TypeScript = Great!
by
Kenta Suzuki
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
ありがとうございました!