目次

はじめに

本書の対象読者
本書の構成
ライブラリーのバージョン
免責事項

第1章 Nuxt.js & Firebase という技術選定

1.1 アーキテクチャ設計に影響を与える要素
1.2 Nuxt.js
1.3 Firebase
1.4 まとめ

第2章 コンポーネント設計

2.1 コンポーネント設計のためのプログラミング原則
2.2 コンポーネントの分割
2.3 ビジネスロジックの記述
2.4 コンポーネントの状態管理
2.5 まとめ

第3章 サーバーサイドレンダリング

3.1 設定ファイルの作成
3.2 Google Cloud Platformの環境準備
3.3 GitHub Actionsの設定
3.4 発展編: アクセス制限

第4章 ユーザー認証機能

4.1 認証状態管理の要件と設計
4.2 実装
4.3 利用例

はじめに

 Nuxt.jsとFirebaseはどちらも、高品質なWebアプリケーションを簡単に作れる技術として、注目されています。

 Nuxt.jsは、Vue.jsをベースとしたフロントエンドフレームワークです。リリースから2年以上が経過し、数々のアップデートを経て、フレームワークとして成熟を迎えつつあります。Vue3.0からの注目機能であるComposition APIの登場によって、Vue.jsの弱点であったTypeScriptとの相性が劇的に改善されました。今後こうした変化がNuxt.jsにもほぼ間違いなく取り込まれ、ますますフレームワークとしての人気が高まると予想されます。

 Firebaseは、モバイルアプリ向けのバックエンドサービスとして登場し、その後Webアプリ向けの機能を次々とリリースしてきました。現在では、高機能なWebアプリケーションを配信できるプラットフォームとして、利用が広まっています。Webアプリケーションの開発に必要な機能が一通り揃っていることに加え、使い勝手の良いJavaScript SDKが提供されているからです。

 実際に使ってみた方はご存知かと思いますが、Nuxt.jsやFirebaseを使うと、非常に短時間でWebアプリケーションを公開できてしまいます。インターネット上のメディアなどでは、こうした手軽さやリリースまでのスピード感が称賛されることもあります。しかしいっぽうで、こうして短期間で作られたプロダクトの保守性が問題となっている現場も少なくありません。

 本書は、そういった悲劇が繰り返される状況の打開を目的に、一度立ち止まってNuxt.jsとFirebaseを効果的に組み合わせる方法について考えてみることを提案するものです。スピードに傾倒するのではなく、中長期的なプロダクト運用を見越して、メンテナビリティの高いコードを書くために必要な知識を習得するきっかけとなれたら幸いです。

本書の対象読者

 これからNuxt.jsとFirebaseを使おうと思っている人や、Nuxt.jsとFirebaseをすでに使っているものの設計にいまいち自信を持てない人に、本書をおすすめします。本書は、特定の問題に対する回答よりも、普遍的に役立つ考え方にフォーカスしています。Nuxt.jsとFirebaseを組み合わせてWebアプリケーションを開発する際に直面する、さまざまな課題に対して、応用の効くノウハウを詰め込んでいます。

 また、業務でチームを率いる立場か、個人かにかかわらず、Webアプリケーション開発の技術選定に携わる人であれば、本書の内容が役に立つはずです。Nuxt.jsとFirebaseでどんなことができるのかを見ていただき、ご自身のプロダクト開発の参考としていただければ幸いです。

本書の構成

 本書は次のように構成されています。

 ・第1章では、Nuxt.jsとFirebaseの特性について解説します。

 ・第2章では、Firebaseの利用を踏まえたVueコンポーネント設計について解説します。Nuxt.jsとFirebaseを組み合わせることで起こるコンポーネント設計への影響を考慮しながら、Composition APIを活用して、疎結合なコンポーネントを実現します。

 ・第3章と第4章は実装編になります。Nuxt.jsの目玉でありながら難易度が高く、敬遠されがちなサーバーサイドレンダリングと、 ほとんどのアプリケーションで必要となるであろうユーザー認証の作り方について、それぞれのベストプラクティスを紹介します。

ライブラリーのバージョン

 本書を執筆するにあたり、技術的な検証に利用した主要なライブラリーのバージョンは、次のとおりです。

 ・Firebase JavaScript SDK: 7.22.1

 ・Nuxt.js: 2.14.6

 ・Nuxt Composition API: 0.13.0

免責事項

 本書に記載されている内容は個人の知見に基づくものであり、所属する組織の見解ではありません。また、情報の正確性を保証するものではありません。いかなる結果に関しても責任を負いかねます。みなさまの判断でご利用ください。

第1章 Nuxt.js & Firebase という技術選定

 個人でゼロからWebアプリケーションを開発したことがある方は、利用する技術スタックの選択に頭を悩ませた経験があるのではないでしょうか。このとき、「興味があって、挑戦してみたい」とか「得意な技術でパフォーマンスが出しやすい」といった理由で、プログラミング言語やフレームワークを選んだとします。開発の目的にもよりますが、その選択の良し悪しが取り返しのつかない問題に発展することは、ほとんどないでしょう。

 いっぽうで、ある程度の規模の大きなアプリケーションをチームで開発する場合は、複雑な事情が絡んできます。アーキテクチャ上の問題点がアプリケーション開発の序盤で明らかになることは稀であり、開発を進めていくことで初めて、問題の源泉がアーキテクチャにあると気づくことが少なくありません。Webアプリケーションの開発プロジェクトでは、開発の手戻りによる工数増加、開発効率の低下によるスケジュール遅延、開発体験の悪化によるメンバーのモチベーション低下などの問題が起きます。また、リリース後も、品質の悪化による不具合の発生ならびに運用負荷の増加など、さまざまな形でコストとして跳ね返ってきます。


 普段はあまり意識しないかもしれませんが、アプリケーション開発作業は、多くの選択肢であふれています。プログラミング言語に始まり、フレームワーク、ライブラリー、ミドルウェア、インフラ構成、モジュールの分割、実装方式など、有名なものからそうでないものまで、それぞれ無数の選択肢があります。さらにそれらの組み合わせまで考え始めると、同じ要件を満たすアプリケーションでも、無限といってもいい実現方法が考えられます。

 アーキテクチャ設計とは、このように何も決まっていない状況で、設計や実装の前提となるルールを決める作業です。アーキテクチャの定義は人によってさまざまですが、ここでは、アプリケーションを開発する際に守るべきルールやポリシーを指すものとします。

 適切に設計されたアーキテクチャは、開発チームにとっては、いい意味での制約となります。アーキテクチャ設計の大きな目標は、実装方式に適切な制約を設けることで、アプリケーション開発を取り巻くカオスを最小化すること。そして、将来における技術的負債の発生を抑え、アプリケーションの品質とチームの生産性を、ともに高い水準で維持することです。

 この章では、Nuxt.jsやFirebaseがどのような特性を持っていて、どのようなプロジェクトでの利用に向いているのかを解説します。

試し読みはここまでです。
この続きは、製品版でお楽しみください。