# 銀行アプリを作成する Part 1: WebアプリでのHTMLテンプレートとルート ```mermaid journey title Your Banking App Development Journey section SPA Fundamentals Understand single-page apps: 3: Student Learn template concepts: 4: Student Master DOM manipulation: 4: Student section Routing Systems Implement client-side routing: 4: Student Handle browser history: 5: Student Create navigation systems: 5: Student section Professional Patterns Build modular architecture: 5: Student Apply best practices: 5: Student Create user experiences: 5: Student ``` 1969年、アポロ11号の誘導コンピュータが月への航行を行った際、システム全体を再起動することなく異なるプログラム間を切り替える必要がありました。現代のウェブアプリケーションも同様に動作します。すべてを最初からリロードすることなく、表示内容を変更することで、スムーズで応答性の高いユーザー体験を提供します。 従来のウェブサイトが各操作ごとにページ全体をリロードするのに対し、現代のウェブアプリは必要な部分だけを更新します。このアプローチは、ミッションコントロールが異なるディスプレイを切り替えながら常に通信を維持する方法に似ており、私たちが期待する流れるような体験を生み出します。 以下がその劇的な違いを生むポイントです: | 従来のマルチページアプリ | 現代のシングルページアプリ | |----------------------------|-------------------------| | **ナビゲーション** | 各画面でページ全体をリロード | コンテンツの即時切り替え | | **パフォーマンス** | HTML全体のダウンロードで遅い | 部分的な更新で高速 | | **ユーザー体験** | ページのちらつきが目立つ | スムーズでアプリのような遷移 | | **データ共有** | ページ間での共有が困難 | 状態管理が容易 | | **開発** | 複数のHTMLファイルを管理 | 動的テンプレートを持つ単一HTML | **進化の理解:** - **従来のアプリ**はナビゲーションごとにサーバーリクエストが必要 - **現代のSPA**は一度ロードし、JavaScriptを使って動的にコンテンツを更新 - **ユーザーの期待**は、瞬時でシームレスな操作を好む - **パフォーマンスの利点**は、帯域幅の削減と応答速度の向上 このレッスンでは、複数の画面がシームレスに連携する銀行アプリを作成します。科学者が異なる実験のために再構成可能なモジュール式の機器を使用するように、必要に応じて表示できる再利用可能なコンポーネントとしてHTMLテンプレートを使用します。 HTMLテンプレート(異なる画面の再利用可能な設計図)、JavaScriptルーティング(画面を切り替えるシステム)、ブラウザの履歴API(戻るボタンが期待通りに動作するようにする)を使用します。これらはReact、Vue、Angularなどのフレームワークで使用される基本的な技術と同じです。 最終的には、プロフェッショナルなシングルページアプリケーションの原則を示す銀行アプリが完成します。 ```mermaid mindmap root((Single-Page Applications)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience Fast Navigation Smooth Transitions Consistent State Modern Interactions Performance Reduced Server Requests Faster Page Transitions Efficient Resource Usage Better Responsiveness ``` ## レクチャー前のクイズ [レクチャー前のクイズ](https://ff-quizzes.netlify.app/web/quiz/41) ### 必要なもの 銀行アプリをテストするためにローカルウェブサーバーが必要です。心配しないでください、意外と簡単です!まだセットアップしていない場合は、[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に設定し、国際的なテキストをサポート - **レスポンシブデザイン**をモバイル互換性のためにビューポートメタタグで有効化 - **ブラウザタブに表示される説明的なタイトル**を設定 - **アプリケーションを構築するためのクリーンなボディセクション**を作成 > 📁 **プロジェクト構造のプレビュー** > > **このレッスンの終わりまでに、プロジェクトには以下が含まれます:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **ファイルの役割:** > - **index.html**: すべてのテンプレートを含み、アプリの構造を提供 > - **app.js**: ルーティング、ナビゲーション、テンプレート管理を処理 > - **テンプレート**: ログイン、ダッシュボード、その他の画面のUIを定義 --- ## HTMLテンプレート テンプレートはウェブ開発における基本的な問題を解決します。1440年代にグーテンベルクが活版印刷を発明した際、彼はページ全体を彫る代わりに再利用可能な文字ブロックを作成し、必要に応じて配置できることに気付きました。HTMLテンプレートも同じ原理で動作します。各画面ごとに別々のHTMLファイルを作成する代わりに、再利用可能な構造を定義し、必要に応じて表示します。 ```mermaid flowchart TD A["📋 Template Definition"] --> B["💬 Hidden in DOM"] B --> C["🔍 JavaScript Finds Template"] C --> D["📋 Clone Template Content"] D --> E["🔗 Attach to Visible DOM"] E --> F["👁️ User Sees Content"] G["Login Template"] --> A H["Dashboard Template"] --> A I["Future Templates"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` テンプレートはアプリの異なる部分の設計図のようなものです。建築家が一つの設計図を作成し、同じ部屋を何度も描き直すのではなくそれを何度も使用するように、テンプレートを一度作成し、必要に応じてインスタンス化します。ブラウザはこれらのテンプレートをJavaScriptがアクティブ化するまで非表示にします。 ウェブページに複数の画面を作成したい場合、一つの解決策は表示したい画面ごとに一つのHTMLファイルを作成することです。しかし、この方法にはいくつかの不便があります: - 画面を切り替えるたびにHTML全体をリロードする必要があり、これが遅くなる原因となります。 - 異なる画面間でデータを共有するのが難しいです。 別のアプローチとして、一つのHTMLファイルだけを使用し、`