pythonで始めるwebアプリケーション開発

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

Upload: takahiro-kubo

Post on 16-Apr-2017

1.778 views

Category:

Software


1 download

TRANSCRIPT

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

Web Application Tutorial

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

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

Agenda

● Webアプリケーションとは○ Webアプリケーションのメリット・デメリット○ 多様化する機能と開発手法

● Webアプリケーションの基本的な構成○ MVCの罠○ MVCの再考

● セキュリティ● PythonでのWebアプリケーション開発

○ 開発演習

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

Webアプリケーションとは

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

Server

Webアプリケーションとは

Webアプリケーションは、ネットワーク(インターネット)経由で利用するアプリケーションです。

● HTTPという通信方式を使って、クライアント(ブラウザ)とサーバー間でデータのやり取りを行います

● クライアント側の画面はHTMLという記述方式で実装します● サーバー側は、いろいろなプログラミング言語で実装することができます

User Side Application Side

HTTPリクエスト

HTTPレスポンス

Client

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

Webアプリケーションのメリット・デメリット

● ブラウザがあれば使える○ OS等に依存しない(クロスプラットフォーム)○ インストール作業が不要○ インターネットに接続可能な全ユーザーに公開が可能

● 情報の更新が容易○ プログラムの更新を容易に反映できる○ コンテンツの更新も容易に可能

● ネットワークにつながっていないと無力○ (HTML5のapplication cacheで部分的には対応可能)

● ブラウザごとに異なる仕様への対応○ 特にIE8以下(見捨てない場合、1.5倍以上の負担増は覚悟したほうがいい)

● 攻撃されるリスク○ 誰でもアクセスできるので、攻撃にさらされるリスクも増える

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

多様化する機能と開発手法

Webアプリケーションの機能や開発手法は、未だ黎明期かと思えるくらい年々色々なものが登場します。

その意味では、最も進化の激しい分野のうちの一つと言えると思います。

機能 開発手法

とにかく変化のスピードが激しい。

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

Webアプリケーションの基本的な構成

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

Webアプリケーションの基本的な構成

Webアプリケーションの構築に当たっては、MVCという構成が良く使われます(この構成は、Webアプリケーションに限らずモバイルなども含めGUIアプリケーションの開発でよく採用される設計手法です)。

具体的には、アプリケーションの各機能を画面描画(View)、データ処理(Model)、それらの繋ぎ(Controller)、という3つの役割に分類します。

これで各機能の独立性が高まり、テストなどが行いやすくなります。

View

User Side

Application Side

Controller

Model Data store

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

MVCの罠

そうか!すべての処理はMかVかCのどれかになるんだ!

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

MVCの罠

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

MVCの罠

● データベースにアクセスするための共通処理○ Model?

● 複数のMを組み合わせるような処理○ Model?それともController側で組み合わせる?

● 複数のCで共通して使う処理(ログイン済みか否かの判定など)○ ベースとなるControllerを作って継承する?

MVCはアプリケーションにおけるミニマムな役割を定義したにすぎません。

必要に応じ追加の「役割」を考え、定義する必要があります。

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

MVCの再考

※以下は一つの考え方で、必ずしも常に正しいとは限りません。

Model->Entity・Process・Serviceに分ける

● Entity: データベースへのI/Fとなる部分○ いわゆるCRUD処理を行うための機能と、データの項目定義を提供する

● Process: 処理の中核となる、いわゆるビジネスロジック○ 複数のEntityを組み合わせた処理の制御などを行う。本来の意味でのModelとい

う名前を付けるのもあり。● Service: 汎用的な共通処理

○ データベースアクセスやフォーマット変換など、ビジネスロジックに関与しない汎用的な共通処理。

○ (Processも含めてすべてサービスとみなす見方もある)

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

MVCの再考

※以下は一つの考え方で、必ずしも常に正しいとは限りません。

Controller: クライアントから、サーバー側の処理を呼び出すためのAPIとして定義

● 実装をなるべく薄くし、Model等に委譲する● クライアント側が利用しやすい単位で機能を公開するイメージ

ControllerをテストするにはHTTPリクエストを飛ばす必要があるので、面倒+テスト実行時にリソースを食う場合がある。そのため、処理はなるべく後ろ側に委譲し、独立してテストできるようにしておくのがよい。

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

セキュリティ

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

Webアプリケーションにおけるセキュリティ

Webアプリケーションは、インターネットに公開されている分攻撃されるリスクも高いです。

そのため、セキュリティは万全を期しておく必要があります。

Server本体(OS etc)の脆弱性

Webサーバーの脆弱性プロトコルの脆弱性

Webアプリケーションの脆弱性

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

Webアプリケーションにおけるセキュリティ

脆弱性のあるアプリケーションは、利用してもらっているユーザーを危険にさらすだけでなく、他アプリケーションへの攻撃の土台として使われるなど、多くの被害をもたらします。

一旦被害を出すと社会的な責任の失墜にもつながり、実際の被害以上に大きな影響が発生することもあります。

セキュアなWebアプリケーションの開発については、IPAがガイドを出しているので、目を通しておくこと。

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

Webアプリケーションにおけるセキュリティ

脆弱性は日々発見され、攻撃手法もまた日々進化しています。

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

PythonでのWebアプリケーション開発

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

PythonでのWebアプリケーション開発

今回はPythonを利用したWebアプリケーションの開発を行います。

Webアプリケーションを一から開発するのは大変なので、多くの場合開発をサポートするフレームワークを利用します。

軽量 しっかり その他

他と異なり、Node.jsのようなNon blockingサーバー

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

PythonでのWebアプリケーション開発

今回はDjangoを使用します。

● Python製のフルスタックフレームワークで、これ一つでページの表示、DBアクセスなどの機能が全部入りになっている(そのためあちこちからモジュールを取ってこなくてよい)

● MVCが意識された構成となっており、自然とMVCの構成を学べる● メジャーなフレームワークであり、経験しておくことが損にならない● 各種クラウドプラットフォーム(GAE/Heroku etc)へデプロイすることが容易

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

開発演習

Djangoを利用し、日報管理用のアプリケーションを作成してください。

今までいろんなシステムで日報を書かされて、時にはなんだこのxxはと思ったかもしれません。

今度は、自分の手で理想とする日報システムを作成しましょう。

日報管理用のアプリケーションの開発

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

開発演習

・ユーザー管理機能(Login/Logout)

・日報一覧の表示(検索機能含む)

・日報の登録・編集・削除

一覧はログインできるユーザー全員が参照可能。

ただし、登録・編集・削除できるのは自分の分のみ。

Basic Extra

・コメント機能

・リッチテキスト/Markdown書式対応

・カレンダー表示

コメント機能は優先で実装すること。

それ以外は、思いついた追加機能はどんどん入れてOK。

来年度の新人に使ってもらうかも?

なお、テストコードをきちんと書き、セキュリティに留意すること

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

Have a good web application!