Nuxt.jsとGraphQLから見えたWeb開発の未来Takanori Oki @BCU30 2018/04/21
View Slide
自己紹介- Takanori Oki (@takanorip)- 株式会社スマートドライブ- フロントエンドエンジニア (Nuxt.js、React、Polymer、ウェブ制作全般)- Polymer Japan 翻訳チーム- 技術書典4でウェブフォントの本頒布します
今日は4月に新しくリリースしたサービス開発の話をします
※コードはほとんど出てきません…
SmartDrive Cars-「安全運転がドライバーに還元される社会の実現を目指す」-カーリース+コネクテッドカー-ポイント還元、走行データの可視化、安全運転診断
技術構成-Nuxt.js- Ruby on Rails-GraphQL ( フロントエンドはNuxtのapollo-module )- Heroku
開発体制- フロントエンドエンジニア(1人)- サーバーサイドエンジニア(1人)- デザイナー(1人)- UIデザイナー・ディレクター(1人)- マークアップエンジニア(外注:1人)
状況- SPAで作りたい- リリース日は決まっていて変更できなそう- 度重なる仕様変更(外部協力会社の関係により)- FIXされないデザイン- マークアップは外部の方にお願いする- 実装期間は2ヶ月弱
圧倒的リソース不足!!
Nuxt.js
ユニバーサル Vue.js アプリケーション
Nuxt.jsvue-routervue-meta vuexvue-server-rendererVue2
メリット
圧倒的な開発スピード
- 環境構築が爆速- めんどくさい設定全部やってくれる- HTMLやCSSをそのまま使える!- デザイナーや外部エンジニアと協業しやすい- ディレクトリ構成とかある程度決まっているので悩む部分が少ない- nuxt-communityを中心としたエコシステム
コアな部分(設計や機能開発)に集中できる
注意
Nuxt.jsはブラックボックスなので中でどんなことをやっているのか知っておくことが大事
GraphQL
GraphQL-クライアントからサーバーへのリクエストを送信するためのクエリー言語-クライアント/サーバアプリケーションのデータモデルの機能と要件を説明-エンドポイントは1つ-型システムを提供してくれる
今回導入を決めた理由- フロントエンドとサーバーサイドの開発を分離したい- デザインがなかなか決まらない- サーバーのモデリングだけFIX- ルーティングやUIに左右されずにサーバーサイドの開発がしたい- (完全に分離はできないけど、ある程度疎結合にできる)
今回導入を決めた理由- それなりの変更に耐えられる実装がしたい- 仕様が局所的にFIXされていくので全体の見通しがたたない- (僕は実装していないので詳細不明…)- (サーバーサイドの人曰く)導入コストは2日くらい
メリット- 必要なデータを1回のリクエストで取得できるようになる- リクエストするクエリを変えれば様々なデータに1回のリクエストで アクセスできる- 不必要なデータは取得しないので、サーバーから返ってくるデータが シンプルになる- 欲しいデータが変わったらフロント側でクエリを変更すればOK
メリット- サーバーサイドフィルタリングができる(特殊な実装が必要)- フロントエンドでフィルタリングしなくて良いので、バグが減る
メリット- Store(のサーバーサイドのデータを結合する部分)がいらない- そもそもエンドポイントが1つなのでデータを結合する必要がない- 複雑なレーヤーを排除して、データとUIを直結させることが可能
REST APIの場合APIAPIAPIView Store複数のAPIから取得したデータを StoreでまとめてViewで表示している
GraphQLの場合APIViewStoreAPIが1つなので、Storeでまとめる必要がない
REST vs GrapgQL ?
REST & GrapgQL
それぞに得意、不得意があるので状況によって使い分ける
フロントエンド開発の未来?
-Nuxt.jsのようなフレームワークの登場で、 フロントエンド開発の敷居が下がり、 誰でもそれなりに動くものはすぐに 作れるようになりそう
-開発者はよりコアな部分で価値を発揮できる- 設計、機能開発、アニメーション、パフォーマンス、etc…- 今まではVue.jsやReactでアプリケーション作れるだけで 価値があったけど、これからはそうはいかないかも?
-ライブラリの中まで理解できる人はやっぱり強い- 今までもそうだったけど、これからもそう
-GraphQLの登場により、データとUIがより ダイレクトに結びつくような設計が可能になる- StoreとかViewModelとかの複雑なレイヤーを排除して、 本質的な開発をUIとデータを直結合して行うことができる
-フロントエンドエンジニアもGraphQLの実装に ついて理解する必要がある- フロントからデータを取得するときにクエリを書かないといけない- サーバーサイドフィルタリングなどの機能もサーバーの実装によるので、どういう機能が使えるのかを把握して提案する必要- やること増えていくかも…?
まとめ- フロントエンド開発はより便利で効率的になっていってる!- 面倒な部分が少なくなり、より本質的な部分に集中できる- 幅を広げることも大事だけど、得意なことをつくるのが大事かも
おわりご清聴ありがとうございました!(フォント:コーポレートロゴ)