Web アプリケーション
ブラウザを通じて利用するアプリケーション。インストール不要で幅広い端末で動く
Web アプリケーションとは
Web アプリケーションは、Web ブラウザを通じて利用するアプリケーションだ。専用ソフトを端末にインストールせず、URL にアクセスするだけで使える。ネット通販、SNS、オンラインの業務システムなど、日常的に使う多くのサービスが Web アプリにあたる。インストール不要で、OS を問わず幅広い端末から使える手軽さが特徴になる。
基本構造
| 要素 | 役割 |
|---|---|
| フロントエンド | ブラウザ上の画面・操作 |
| バックエンド | サーバー側の処理・ロジック |
| データベース | データの保存 |
| API | フロントとバックの連携 |
利用者の操作がフロントエンドで受け取られ、API を通じてバックエンドが処理し、必要なデータをデータベースとやり取りする、という流れで動く。
Web サイトとの違い
Web アプリは利用者の操作に応じて処理を行い、その結果を保存する。ログイン、検索、購入、データの編集のように、送った内容が次に見る画面を変える。読むだけの Web サイトとの違いはここにある。
ただし「動的か静的か」で線を引こうとすると現実に合わない。あらかじめ生成した HTML を配るだけの構成でも、画面の JavaScript が別の API を呼べば申し込みや投稿は成立する。逆に、サーバー側で毎回 HTML を組み立てていても、誰が見ても同じ内容なら読み物にすぎない。分かれ目は配信方式ではなく、利用者ごとに結果が変わる処理と、その結果として残る状態を持つかどうかだ。
ログイン状態が保たれる仕組み
Web アプリで最初につまずきやすいのが、ログインが続く理由だ。HTTP はステートレスな設計で、各リクエストは単独で意味が解釈でき、同じ接続で届いた 2 つのリクエストが同じ利用者のものだとサーバーが仮定してはならない、とまで規定されている。何もしなければ、画面を移った瞬間に相手は誰でもなくなる。
そこを埋めるのが Cookie だ。サーバーは Set-Cookie ヘッダーで識別子を渡し、ブラウザは以降のリクエストで Cookie ヘッダーとして送り返す。この往復によって、ほぼステートレスな HTTP の上に「セッション」という状態が乗る。サーバー側はその識別子に紐づけて、誰がログイン中で、カートに何が入っているかを保持する。
落とし穴は、その状態の置き場所にある。HTTP がステートレスであることを前提に、リクエストは複数のサーバーへ自由に振り分けられる。状態をアプリのメモリに置くと、台数を増やした瞬間に振り分け先が変わってログアウトが起きる。共有のデータストアに置くか、JWT のように署名付きトークンとして利用者側に持たせるか、どちらかを最初に決めておく必要がある。
開発で意識すべきこと
Web アプリは不特定多数がネット越しに利用するため、手元で動くソフトとは詰まる場所が違う。同時アクセスで先に尽きるのは多くの場合 CPU ではなくデータベースへの接続数で、上限に達すると全員が待たされる。表示が遅い原因も、画面 1 枚のために問い合わせを何十回も繰り返している、という形で現れることが多い。
セキュリティで効くのは網羅的な心構えより、置き場所の決め方だ。入力の扱いは受け取った時点でなく表示する時点の処理で決まる。権限の確認は画面でボタンを隠すだけでは足りず、リクエストを受けたサーバー側で毎回やり直す。ブラウザに送ったコードと値は利用者から見えるので、鍵や他人のデータをそこへ載せない。この 3 つを外すと、公開されている入口の数だけ穴が開く。
学習には関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
関連する記事
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版は初版と何が違うか - 買い直し判断ガイド
通称「徳丸本」こと体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 (2018 年) と初版 (2011 年) の違いを出版社公表の改訂内容から整理。章の削除 / 新設 / 追加点の一覧と、初版所有者が買い直すべきかの判断基準を解説します。
技術書の読む順番戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。
Web 開発本ガイド - フロントエンドからバックエンドまで
Web 開発の全体像を学べる技術書の選び方と学習マップを紹介。フレームワーク本の賞味期限問題と公式ドキュメントとの使い分けも解説します。