# 銀行アプリを作ろう パート1: WebアプリでのHTMLテンプレートとルート設定 1969年、アポロ11号の誘導コンピュータが月への航行を行った際、システム全体を再起動することなく異なるプログラム間を切り替える必要がありました。現代のWebアプリケーションも同様に動作します。すべてを最初からリロードすることなく、表示内容を変更することで、ユーザーが期待するスムーズで応答性の高い体験を提供します。 従来のウェブサイトが各操作ごとにページ全体をリロードするのに対し、現代のWebアプリは必要な部分だけを更新します。このアプローチは、ミッションコントロールが異なるディスプレイを切り替えながら常に通信を維持する方法に似ており、私たちが期待する流れるような体験を生み出します。 以下がその劇的な違いを示しています: | 従来のマルチページアプリ | 現代のシングルページアプリ | |----------------------------|-------------------------| | **ナビゲーション** | 各画面でページ全体をリロード | コンテンツを瞬時に切り替え | | **パフォーマンス** | HTML全体のダウンロードで遅い | 部分的な更新で高速 | | **ユーザー体験** | ページのちらつきが目立つ | スムーズでアプリのような遷移 | | **データ共有** | ページ間での共有が困難 | 状態管理が容易 | | **開発** | 複数のHTMLファイルを管理 | 動的テンプレートを持つ単一HTML | **進化の理解:** - **従来のアプリ**はナビゲーションごとにサーバーリクエストが必要 - **現代のSPA**は一度ロードし、JavaScriptを使って動的にコンテンツを更新 - **ユーザーの期待**は瞬時でシームレスな操作を好む - **パフォーマンスの利点**は帯域幅の削減と応答速度の向上 このレッスンでは、複数の画面がシームレスに流れる銀行アプリを構築します。科学者が異なる実験のために再構成可能なモジュール式の機器を使用するように、必要に応じて表示できる再利用可能なコンポーネントとしてHTMLテンプレートを使用します。 HTMLテンプレート(異なる画面の再利用可能な設計図)、JavaScriptルーティング(画面を切り替えるシステム)、ブラウザの履歴API(戻るボタンが期待通りに動作するようにする)を使用します。これらはReact、Vue、Angularなどのフレームワークで使用される基本的な技術と同じです。 最終的には、プロフェッショナルなシングルページアプリケーションの原則を示す銀行アプリが完成します。 ## レクチャー前のクイズ [レクチャー前のクイズ](https://ff-quizzes.netlify.app/web/quiz/41) ### 必要なもの 銀行アプリをテストするためにローカルWebサーバーが必要です。心配しないでください、簡単です!まだセットアップしていない場合は、[Node.js](https://nodejs.org)をインストールし、プロジェクトフォルダで`npx lite-server`を実行してください。この便利なコマンドでローカルサーバーが起動し、ブラウザでアプリが自動的に開きます。 ### 準備 コンピュータ上で`bank`という名前のフォルダを作成し、その中に`index.html`という名前のファイルを作成してください。以下のHTML [ボイラープレート](https://en.wikipedia.org/wiki/Boilerplate_code)から始めます: ```html Bank App ``` **このボイラープレートが提供するもの:** - **HTML5ドキュメント構造**を適切なDOCTYPE宣言で確立 - **文字エンコーディング**をUTF-8に設定し、国際的なテキストをサポート - **レスポンシブデザイン**をモバイル対応のためのviewportメタタグで有効化 - **ブラウザタブに表示される説明的なタイトル**を設定 - **アプリケーションを構築するためのクリーンなボディセクション**を作成 > 📁 **プロジェクト構造のプレビュー** > > **このレッスンの終わりまでに、プロジェクトには以下が含まれます:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **ファイルの役割:** > - **index.html**: すべてのテンプレートを含み、アプリの構造を提供 > - **app.js**: ルーティング、ナビゲーション、テンプレート管理を担当 > - **テンプレート**: ログイン、ダッシュボード、その他の画面のUIを定義 --- ## HTMLテンプレート テンプレートはWeb開発における基本的な問題を解決します。1440年代にグーテンベルクが活版印刷を発明した際、ページ全体を彫るのではなく、再利用可能な文字ブロックを作成し、それを必要に応じて配置することに気づきました。HTMLテンプレートも同じ原理で動作します。各画面のために個別のHTMLファイルを作成する代わりに、再利用可能な構造を定義し、必要に応じて表示します。 テンプレートはアプリの異なる部分の設計図のようなものです。建築家が1つの設計図を作成し、同じ部屋を何度も描き直すのではなくそれを何度も使用するように、テンプレートを一度作成し、必要に応じてインスタンス化します。ブラウザはこれらのテンプレートをJavaScriptがアクティブ化するまで非表示にします。 Webページに複数の画面を作成したい場合、1つの解決策は表示したい画面ごとに1つのHTMLファイルを作成することです。しかし、この方法にはいくつかの不便があります: - 画面を切り替える際にHTML全体をリロードする必要があり、これが遅くなる原因となります。 - 異なる画面間でデータを共有するのが難しいです。 別のアプローチとして、1つのHTMLファイルだけを使用し、複数の[HTMLテンプレート](https://developer.mozilla.org/docs/Web/HTML/Element/template)を`