pythonで始めるwebアプリケーション開発
TRANSCRIPT
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!