SlideShare a Scribd company logo
1 of 38
Download to read offline
1
これから始める
SpringのWebアプリケーション
2017/11/24
日本Springユーザ会
土岐 孝平
自己紹介
• 土岐 孝平
• Springを使用したシステム開発の支援
• JavaやSpringの研修の講師
• 書籍の執筆
2
[改訂新版]Spring入門
はじめに
• 発表の趣旨
– Springを使ったことがない人が、Springを使用したWebア
プリケーションのイメージを掴み、独学するとっかかりを得
る
• 想定する前提知識
– 新人研修などで、Javaを使って簡単なWebアプリケーショ
ンを作ったことがある
3
アジェンダ
• Webアプリケーションの設計
• Springの役割
• サンプルプログラム
• Spring Bootで動かす
4
Webアプリケーションとは?
• (大雑把にいうと)ブラウザで操作するアプリケーション
– Amazon、インターネットバンキング...
– ブラウザとサーバがHTTPで通信
– 業務的なデータはデータベースに保存
– HTMLで画面を表示
5
ブラウザ
サーバ
Webアプリ データベース
例)商品データ、
注文データ
<html>
・・・
</html>
HTTP通信
SQL
取得データ、
保存結果
リクエスト
レスポンス
Webアプリケーションの設計~MVC
• MVCパターン
– 画面周りのプログラムの設計の考え方
– Model:業務的なロジック・データ
– View:画面(HTMLデータの生成)
– Controller:リクエストからレスポンスまでの流れを制御
6
ブラウザ データベース
Controller
View
Model
①リクエスト ②業務ロジック呼出
③View呼出
④業務データを参照
⑤レスポンス(HTML)
Webアプリケーションの設計~レイヤー
• レイヤー(層)
– プログラムを層として分割する考え方
• 上位の層のプログラムが下位の層のプログラムに依存する(使用する)
– Webアプリの一般的な層
• プレゼンテーション層:画面周りの処理
• サービス層:業務ロジック
• データアクセス層:データアクセス(SQL実行)の処理
7
プレゼンテーション層
サービス層
データアクセス層
Controller
Service
(業務ロジック)
Dao
(データアクセス)
ブラウザ
View
Entity
(業務データ)
データベース
依存の方向
Modelに該当
処理の流れ
8
ブラウザ データベース
アジェンダ
• Webアプリケーションの設計
• Springの役割
• サンプルプログラム
• Spring Bootで動かす
9
JavaのWebアプリ
• Javaが標準で用意するAPI
– Servlet、JDBC、・・・
• プログラムや設定ファイルの記述が冗長で面倒
10
ブラウザ データベース
サーバ(Tomcatなど)
Servlet JDBC
Webアプリ
SpringのWebアプリ
• Java標準のAPIをラップして、より簡単にWebアプリ
を作るための仕組みを提供
11
ブラウザ データベース
サーバ(Tomcatなど)
Servlet
Spring
JDBC
Webアプリ
Springの役割(1/2)
• 面倒で冗長な部分をSpringがやってくれる
– データベース周り
• リソースの取得・解放、トランザクション制御、例外処
理...
– 画面周り
• リクエストとControllerの紐付、入力チェック...
– その他
• 認証・認可、キャッシュ、トレースログ...
12
開発者は、
業務的な部分に注力できる
• サーバの起動と同時に、(リクエストを受付けるために)必要なオブジェクト
を生成し、オブジェクト同士を紐づけてくれる(依存するオブジェクトをフィ
ールドに代入してくれる<Dependency Injection>)
– 通常は、Controller・Service・Daoを生成し、紐づけてもらう
• Springが生成したオブジェクトは、DIコンテナで管理され、さまざまな機能
を付加できる
DIコンテナ
Springの役割(2/2)
13
Controller Service Dao データベースブラウザ
AOPを使って処理を挟み
こむ
処理を付加することがで
きる (トランザクション制
御、トレースログ...)
DIコンテナで管理されて
るオブジェクトを「Bean」と
呼ぶ
アジェンダ
• Webアプリケーションの設計
• Springの役割
• サンプルプログラム
• Spring Bootで動かす
14
サンプルプログラム
• 題材
– 書籍の一覧をブラウザで表示
15
book(書籍)
id(ID)
title(タイトル)
auther(著者)
publish_date(発売日)
price(値段)
【データベースのテーブル】
登場するプログラム
16
≪Controller≫
BookController
≪Service≫
BookService
≪Dao≫
BookDao
≪View≫ ※
bookList.html
≪Entity≫
Book
※テンプレートエンジンは
Thymeleafを使用
ブラウザ データ
ベース
処理の流れ
17
ブラウザ データベース
≪Entity≫Book
18
※残りのGetter、Setterは省略しています
≪Dao≫BookDao
19
ステレオタイプアノテーション
(Beanの登録を指示するアノテーション)
インジェクションを指示するアノテーション
DBアクセスを簡易に行えるBean
(Springが提供)をインジェクション
【補足】今どきのインジェクション
20
コンストラクタインジェクション。
バージョン4.3からは、
@Autowiredを省略可能
フィールドをfinalにすることで、
コンストラクタ呼出し後に、
中身を変更できないようにする
≪Service≫BookService
21
ステレオタイプアノテーション
トランザクション制御の指示
Daoをインジェクション
≪Controller≫BookController
22
Serviceをインジェクション
ステレオタイプアノテーション
「books」という名前で
検索結果を格納
≪View≫bookList.html
23
※Thymeleafのテンプレートファイル
処理の流れ
24
ブラウザ データベース
アジェンダ
• Webアプリケーションの設計
• Springの役割
• サンプルプログラム
• Spring Bootで動かす
25
動かすために必要なこと
• サーバのインストール
– Tomcatなどのサーバをインストール
• 裏方のBeanの設定
– トランザクションマネージャ、データソース、
JdbcTemplate、etc...
26
手軽に動かすことができない
Spring Bootの紹介
• Springをより便利にするプロダクト
• 主な特徴
– サーバのインストールをしなくてもWebアプリを起動でき
る(Tomcatが内蔵されている)
– 裏方のBeanの設定を自動で行ってくれる
• 「オートコンフィグレーション」と呼ぶ
27
手軽に動かすことができる
Spring Bootを利用するために必要なこと
• ライブラリのダウンロード
– Maven※の設定ファイル(pom.xml)で「spring-boot-starter-xxx」のア
ーティファクトをいくつか指定
– 必要なライブラリがまとめてダウンロードされる
• mainメソッドを持つクラスを作成
– @SpringBootApplicationを付ける
• オートコンフィグレーションを有効にするなどの意味合いを持った
アノテーション
• mainメソッドを作ってSpringApplicationクラスのrun
メソッドを呼出す
– 引数で@SpringBootApplicationを付けたクラスを指定
28
※依存する(使用する)ライブラリを管理できるツール。 アーティファクトという単位でライブラリが管理されている。
pom.xml
29
※少し簡略化しています
各種アーティファクトの
バージョンなどが
定義されている
データアクセス周りの
様々なアーティファクトが
定義されている
画面周りの
様々なアーティファクトが
定義されている
mainメソッドを持つクラス
30
オートコンフィグレーションを
有効にするなどの意味を持つ
runメソッドを実行
mainメソッドを実行すれば、
Tomat&DIコンテナが起動して、
必要なBeanが生成・関連づけられて、
Webアプリが利用可能になる
ソースの雛形をダウンロードできる
• SPRING INITIALIZR
– pom.xmlとmainのクラスを生成してくれるサイト
31
データベースについて(1/2)
• 手軽に開発する際は、組込データベースが便利
– データベースのインストールが不要
– 「H2」という製品が有名
• Spring BootでWebアプリを起動するとH2の管理画面が自動で使える
– https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-
sql.html#boot-features-sql-h2-console
32
【URL】http://localhost:8080/h2-console
【DBのURL】jdbc:h2:mem:testdb
【ユーザ】sa
【パスワード】(空白)
データベースについて(2/2)
• DDLや初期データのスクリプト
– クラスパスのルートに、「schema.sql」「data.sql」という名前でスクリ
プトを配置すると、Webアプリ起動時に自動で実行される。
33
【schema.sql】
【data.sql】
デモ
34
さいごに
• このあとのハンズオンに参加しましょう
– Hello Worldレベルのハンズオンなので、本セッションが難しかったという方も
心配ありません。
• 自宅で試してみましょう
– 本セッションのサンプルプログラム
• https://goo.gl/S9Hmy3
• ダウンロードして解凍後、EclipseなどのIDEでMavenプロジェクトとして
インポート
– あとはプロジェクト内の「ReadMe.txt」を参照
• 基本をきちんと勉強しましょう
– SlideShare「今さら聞けないDIとSpring」
• https://www.slideshare.net/KouheiToki/dispring
– 書籍
• [改訂新版]Spring入門(技術評論社)
• Spring徹底入門(翔泳社)
35
36
ご清聴ありがとうございました
その他リソース
• Spring Bootのオートコンフィグレーションの説明
– https://docs.spring.io/spring-
boot/docs/current/reference/htmlsingle/#using-boot-
auto-configuration
• Thymeleafのマニュアル
– http://www.thymeleaf.org/doc/tutorials/2.1/usingthyme
leaf.html
37
38
ライセンスについて
• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生
作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

More Related Content

What's hot

試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
土岐 孝平
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
Satoshi Kubo
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 

What's hot (20)

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
 
Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門Junitを使ったjavaのテスト入門
Junitを使ったjavaのテスト入門
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門今さら聞けない人のためのCI/CD超入門
今さら聞けない人のためのCI/CD超入門
 
Spring と TDD
Spring と TDDSpring と TDD
Spring と TDD
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用SpringBootにおけるテンプレートエンジンの活用
SpringBootにおけるテンプレートエンジンの活用
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 

Similar to これから始めるSpringのwebアプリケーション

「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 

Similar to これから始めるSpringのwebアプリケーション (20)

SpringBootの研修本で学んだこと
SpringBootの研修本で学んだことSpringBootの研修本で学んだこと
SpringBootの研修本で学んだこと
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
 
エッセンシャルCore springハンズオン
エッセンシャルCore springハンズオンエッセンシャルCore springハンズオン
エッセンシャルCore springハンズオン
 
知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー知ってるようで知らないWeb基礎セミナー
知ってるようで知らないWeb基礎セミナー
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
 
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方
 
軽量フレームワークNancy
軽量フレームワークNancy軽量フレームワークNancy
軽量フレームワークNancy
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
 
ruby、sinatraで作るfacebookアプリ
ruby、sinatraで作るfacebookアプリruby、sinatraで作るfacebookアプリ
ruby、sinatraで作るfacebookアプリ
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
Challenge PWA!! WordCamp Tokyo 2018
Challenge PWA!!  WordCamp Tokyo 2018Challenge PWA!!  WordCamp Tokyo 2018
Challenge PWA!! WordCamp Tokyo 2018
 
第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編
 
勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfkSpring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
 
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 

More from 土岐 孝平

Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
 

More from 土岐 孝平 (8)

What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
SpringベースのCloud Native Application
SpringベースのCloud Native ApplicationSpringベースのCloud Native Application
SpringベースのCloud Native Application
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
Microserviceの今どきのインフラを探る
Microserviceの今どきのインフラを探るMicroserviceの今どきのインフラを探る
Microserviceの今どきのインフラを探る
 
OpenID Connect入門
OpenID Connect入門OpenID Connect入門
OpenID Connect入門
 
業務システムとマイクロサービス
業務システムとマイクロサービス業務システムとマイクロサービス
業務システムとマイクロサービス
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
vFabricを触ろう
vFabricを触ろうvFabricを触ろう
vFabricを触ろう
 

これから始めるSpringのwebアプリケーション