SlideShare a Scribd company logo
1 of 24
Download to read offline
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!
解答例

More Related Content

What's hot

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 

What's hot (20)

ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
 
初心者向けWebinar AWS上でのネットワーク構築
初心者向けWebinar AWS上でのネットワーク構築初心者向けWebinar AWS上でのネットワーク構築
初心者向けWebinar AWS上でのネットワーク構築
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS
 
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう  2019年10月31日 放送[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう  2019年10月31日 放送
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
 
kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発
 
JJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みJJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組み
 
マルチAIエージェントと最近の取り組み Multi AI agent and Some recent research topics
マルチAIエージェントと最近の取り組み Multi AI agent and Some recent research topicsマルチAIエージェントと最近の取り組み Multi AI agent and Some recent research topics
マルチAIエージェントと最近の取り組み Multi AI agent and Some recent research topics
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
 
Pokémon GOとGCP
Pokémon GOとGCPPokémon GOとGCP
Pokémon GOとGCP
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出
Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出
Google Cloud ベストプラクティス:Google BigQuery 編 - 02 : データ処理 / クエリ / データ抽出
 
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data PipelineAWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
 

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

HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Akira Inoue
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
Akira Inoue
 
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
Akira Inoue
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
Akira Inoue
 
Web study
Web studyWeb study
Web study
chibita
 
【17-D-6】.NETアセンブリの宿命
【17-D-6】.NETアセンブリの宿命【17-D-6】.NETアセンブリの宿命
【17-D-6】.NETアセンブリの宿命
Developers Summit
 

Similar to Pythonで始めるWebアプリケーション開発 (20)

Web Intents入門
Web Intents入門Web Intents入門
Web Intents入門
 
20021007
2002100720021007
20021007
 
HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解HTML5 クロスプラットフォームアプリ開発の現実解
HTML5 クロスプラットフォームアプリ開発の現実解
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
 
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
最新 .NET テクノロジと次世代型アプリ開発 2013 : DE-011, MSC 2013
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
 
Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~
 
Web study
Web studyWeb study
Web study
 
[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践
[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践
[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
 
【17-D-6】.NETアセンブリの宿命
【17-D-6】.NETアセンブリの宿命【17-D-6】.NETアセンブリの宿命
【17-D-6】.NETアセンブリの宿命
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
 
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-newSolution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 

More from Takahiro Kubo

More from Takahiro Kubo (20)

自然言語処理による企業の気候変動対策分析
自然言語処理による企業の気候変動対策分析自然言語処理による企業の気候変動対策分析
自然言語処理による企業の気候変動対策分析
 
国際会計基準(IFRS)適用企業の財務評価方法
国際会計基準(IFRS)適用企業の財務評価方法国際会計基準(IFRS)適用企業の財務評価方法
国際会計基準(IFRS)適用企業の財務評価方法
 
自然言語処理で新型コロナウィルスに立ち向かう
自然言語処理で新型コロナウィルスに立ち向かう自然言語処理で新型コロナウィルスに立ち向かう
自然言語処理で新型コロナウィルスに立ち向かう
 
財務・非財務一体型の企業分析に向けて
財務・非財務一体型の企業分析に向けて財務・非財務一体型の企業分析に向けて
財務・非財務一体型の企業分析に向けて
 
自然言語処理で読み解く金融文書
自然言語処理で読み解く金融文書自然言語処理で読み解く金融文書
自然言語処理で読み解く金融文書
 
arXivTimes Review: 2019年前半で印象に残った論文を振り返る
arXivTimes Review: 2019年前半で印象に残った論文を振り返るarXivTimes Review: 2019年前半で印象に残った論文を振り返る
arXivTimes Review: 2019年前半で印象に残った論文を振り返る
 
ESG評価を支える自然言語処理基盤の構築
ESG評価を支える自然言語処理基盤の構築ESG評価を支える自然言語処理基盤の構築
ESG評価を支える自然言語処理基盤の構築
 
Expressing Visual Relationships via Language: 自然言語による画像編集を目指して
Expressing Visual Relationships via Language: 自然言語による画像編集を目指してExpressing Visual Relationships via Language: 自然言語による画像編集を目指して
Expressing Visual Relationships via Language: 自然言語による画像編集を目指して
 
Reinforcement Learning Inside Business
Reinforcement Learning Inside BusinessReinforcement Learning Inside Business
Reinforcement Learning Inside Business
 
あるべきESG投資の評価に向けた、自然言語処理の活用
あるべきESG投資の評価に向けた、自然言語処理の活用あるべきESG投資の評価に向けた、自然言語処理の活用
あるべきESG投資の評価に向けた、自然言語処理の活用
 
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
 
Curiosity may drives your output routine.
Curiosity may drives  your output routine.Curiosity may drives  your output routine.
Curiosity may drives your output routine.
 
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留するモデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
 
EMNLP2018 Overview
EMNLP2018 OverviewEMNLP2018 Overview
EMNLP2018 Overview
 
2018年12月4日までに『呪術廻戦』を読む理由
2018年12月4日までに『呪術廻戦』を読む理由2018年12月4日までに『呪術廻戦』を読む理由
2018年12月4日までに『呪術廻戦』を読む理由
 
Graph Attention Network
Graph Attention NetworkGraph Attention Network
Graph Attention Network
 
ACL2018の歩き方
 ACL2018の歩き方 ACL2018の歩き方
ACL2018の歩き方
 
機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018機械学習で泣かないためのコード設計 2018
機械学習で泣かないためのコード設計 2018
 
TISにおける、研究開発の方針とメソッド 2018
TISにおける、研究開発の方針とメソッド 2018TISにおける、研究開発の方針とメソッド 2018
TISにおける、研究開発の方針とメソッド 2018
 
感情の出どころを探る、一歩進んだ感情解析
感情の出どころを探る、一歩進んだ感情解析感情の出どころを探る、一歩進んだ感情解析
感情の出どころを探る、一歩進んだ感情解析
 

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