4
Most read
5
Most read
8
Most read
Web Application Tutorial
Pythonで始めるWebアプリケーション開発
Agenda
● Webアプリケーションとは
○ Webアプリケーションのメリット・デメリット
○ 多様化する機能と開発手法
● Webアプリケーションの基本的な構成
○ MVCの罠
○ MVCの再考
● セキュリティ
● PythonでのWebアプリケーション開発
○ 開発演習
Webアプリケーションとは
Server
Webアプリケーションとは
Webアプリケーションは、ネットワーク(インターネット)経由で利用するアプリケーションです。
● HTTPという通信方式を使って、クライアント(ブラウザ)とサーバー間でデータのやり取り
を行います
● クライアント側の画面はHTMLという記述方式で実装します
● サーバー側は、いろいろなプログラミング言語で実装することができます
User Side Application Side
HTTPリクエスト
HTTPレスポンス
Client
Webアプリケーションのメリット・デメリット
● ブラウザがあれば使える
○ OS等に依存しない(クロスプラットフォーム)
○ インストール作業が不要
○ インターネットに接続可能な全ユーザーに公開が可能
● 情報の更新が容易
○ プログラムの更新を容易に反映できる
○ コンテンツの更新も容易に可能
● ネットワークにつながっていないと無力
○ (HTML5のapplication cacheで部分的には対応可能)
● ブラウザごとに異なる仕様への対応
○ 特にIE8以下(見捨てない場合、1.5倍以上の負担増は覚悟したほうがいい)
● 攻撃されるリスク
○ 誰でもアクセスできるので、攻撃にさらされるリスクも増える
多様化する機能と開発手法
Webアプリケーションの機能や開発手法は、未だ黎明期かと思えるくらい年々色々なものが
登場します。
その意味では、最も進化の激しい分野のうちの一つと言えると思います。
機能 開発手法
とにかく変化のスピードが激し
い。
Webアプリケーションの基本的な構成
Webアプリケーションの基本的な構成
Webアプリケーションの構築に当たっては、MVCという構成が良く使われます(この構成は、
Webアプリケーションに限らずモバイルなども含めGUIアプリケーションの開発でよく採用さ
れる設計手法です)。
具体的には、アプリケーションの各機能を画面描画(View)、データ処理(Model)、それらの繋
ぎ(Controller)、という3つの役割に分類します。
これで各機能の独立性が高まり、テストなどが行いやすくなります。
View
User Side
Application Side
Controller
Model Data store
MVCの罠
そうか!すべての処理はMかVかCのどれかになるんだ!
MVCの罠
MVCの罠
● データベースにアクセスするための共通処理
○ Model?
● 複数のMを組み合わせるような処理
○ Model?それともController側で組み合わせる?
● 複数のCで共通して使う処理(ログイン済みか否かの判定など)
○ ベースとなるControllerを作って継承する?
MVCはアプリケーションにおけるミニマムな役割を定義したにすぎません。
必要に応じ追加の「役割」を考え、定義する必要があります。
MVCの再考
※以下は一つの考え方で、必ずしも常に正しいとは限りません。
Model->Entity・Process・Serviceに分ける
● Entity: データベースへのI/Fとなる部分
○ いわゆるCRUD処理を行うための機能と、データの項目定義を提供する
● Process: 処理の中核となる、いわゆるビジネスロジック
○ 複数のEntityを組み合わせた処理の制御などを行う。本来の意味でのModelとい
う名前を付けるのもあり。
● Service: 汎用的な共通処理
○ データベースアクセスやフォーマット変換など、ビジネスロジックに関与しない汎用
的な共通処理。
○ (Processも含めてすべてサービスとみなす見方もある)
MVCの再考
※以下は一つの考え方で、必ずしも常に正しいとは限りません。
Controller: クライアントから、サーバー側の処理を呼び出すためのAPIとして定義
● 実装をなるべく薄くし、Model等に委譲する
● クライアント側が利用しやすい単位で機能を公開するイメージ
ControllerをテストするにはHTTPリクエストを飛ばす必要があるので、面倒+テスト実行
時にリソースを食う場合がある。
そのため、処理はなるべく後ろ側に委譲し、独立してテストできるようにしておくのがよ
い。
セキュリティ
Webアプリケーションにおけるセキュリティ
Webアプリケーションは、インターネットに公開されている分攻撃されるリスクも高いです。
そのため、セキュリティは万全を期しておく必要があります。
Server本体(OS etc)の脆弱性
Webサーバーの脆弱性
プロトコルの脆弱性
Webアプリケーションの脆弱性
Webアプリケーションにおけるセキュリティ
脆弱性のあるアプリケーションは、利用してもらっているユーザーを危険にさらすだけでな
く、他アプリケーションへの攻撃の土台として使われるなど、多くの被害をもたらします。
一旦被害を出すと社会的な責任の失墜にもつながり、実際の被害以上に大きな影響が発
生することもあります。
セキュアなWebアプリケーションの開発については、IPAがガイドを出しているので、目を通し
ておくこと。
Webアプリケーションにおけるセキュリティ
脆弱性は日々発見され、攻撃手法もまた日々進化しています。
PythonでのWebアプリケーション開発
PythonでのWebアプリケーション開発
今回はPythonを利用したWebアプリケーションの開発を行います。
Webアプリケーションを一から開発するのは大変なので、多くの場合開発をサポートするフ
レームワークを利用します。
軽量 しっかり その他
他と異なり、Node.jsのよう
なNon blockingサーバー
PythonでのWebアプリケーション開発
今回はDjangoを使用します。
● Python製のフルスタックフレームワークで、これ一つでページの表示、DBアクセスなど
の機能が全部入りになっている(そのためあちこちからモジュールを取ってこなくてよい)
● MVCが意識された構成となっており、自然とMVCの構成を学べる
● メジャーなフレームワークであり、経験しておくことが損にならない
● 各種クラウドプラットフォーム(GAE/Heroku etc)へデプロイすることが容易
開発演習
Djangoを利用し、日報管理用のアプリケーションを作成してください。
今までいろんなシステムで日報を書かされて、時にはなんだこのxxはと思ったかもしれませ
ん。
今度は、自分の手で理想とする日報システムを作成しましょう。
日報管理用のアプリケーションの開発
開発演習
・ユーザー管理機能(Login/Logout)
・日報一覧の表示(検索機能含む)
・日報の登録・編集・削除
一覧はログインできるユーザー全員が参照
可能。
ただし、登録・編集・削除できるのは自分の
分のみ。
Basic Extra
・コメント機能
・リッチテキスト/Markdown書式対応
・カレンダー表示
コメント機能は優先で実装すること。
それ以外は、思いついた追加機能はどんど
ん入れてOK。
来年度の新人に使ってもらうかも?
なお、テストコードをきちんと書き、セキュリティに留意すること
Have a good web application!
解答例

Pythonで始めるWebアプリケーション開発