SlideShare a Scribd company logo
1 of 81
Download to read offline
Spring Bootで
チャットツールを作りながら
Webの仕組みを理解しよう!
Java女子部
presents
2016.5.21
#jjug_ccc #ccc_m3
本日のメンバー
#jjug_ccc #ccc_m3
■ちか
Java歴7年くらい。
金融系のSIer
■ゆう
最近Javaを始めたばかりの
初心者。
エンジニア歴は2年ちょい。
講師講師
#jjug_ccc #ccc_m3
■えりこ
WebアプリケーションSE
エンジニア8年生。
■あや
ラーメン二郎が好きな
エンジニア2年生。
チューター
#jjug_ccc #ccc_m3
■とぅん
Java暦半年ぐらいのエンジニ
ア4年生。品質管理とか
やってます。
■よこな
JJUG司会兼チューター。
エンジニア4年生。
チューター
#jjug_ccc #ccc_m3
ワークショップの概要説明
#jjug_ccc #ccc_m3
チャットツールの制作を通じて
Webの仕組みを理解する!
今回の目標本日の目標
#jjug_ccc #ccc_m3
・基礎的な概念説明
(Webの仕組み、Spring Bootについて)
・ハンズオン導入・WebSocketについて
・ハンズオン
・まとめ
全体の流れ
#jjug_ccc #ccc_m3
Webの仕組みについて
#jjug_ccc #ccc_m3
情報をやりとりする通信網のこと。
この通信網によって
世界中とやりとり
することができる。
そもそもインターネットとは?
#jjug_ccc #ccc_m3
クライアントが情報を要求すると、
サーバから情報が返ってくる。
クライアント サーバ
リクエスト
レスポンス
通信方法について
#jjug_ccc #ccc_m3
Spring Bootについて
#jjug_ccc #ccc_m3
Java Spring
Java JavaEE
Ruby Rails
Python Django
言語を扱いやすく
パッケージングしたもの = フレームワーク
Springって何?
#jjug_ccc #ccc_m3
Spring BootJava Spring
Java JavaEE
Ruby Rails
Python Django
フレームワーク(コンポーネントの集合)を
さらに使いやすくしたフレームワーク
じゃあ、Spring Bootって何?
#jjug_ccc #ccc_m3
・アノテーション
・DIコンテナ
・AOP
 
アノテーションでクラス・メソッド・変数に目印を
つけてフレームワークに解釈させる
⇒ 設定ファイルの代わりになる
class Chat
@RestController
Spring Bootの特徴
#jjug_ccc #ccc_m3
class Chat
アノテーション名 記載場所 説明
@SpringBootAppli
cation
Mainクラス パッケージ内のクラスと設定を自
動的に読み込む
@RestController クラス WebAPI用のコントローラー
@Configuration クラス 設定クラス
ソースコードでSpringの設定を実
装できる
@RequestMapping クラス
メソッド
URLに紐づけて、アクセスできるよ
うに設定する
@Autowired メソッド
フィールド
実装クラスを自動的にインジェク
ションする(DIする)
基本のアノテーション(Spring)
#jjug_ccc #ccc_m3
ハンズオン 1章
-文字列を返すWebアプリケーションを
作ってみよう!-
リポジトリ
https://github.com/java-women/ChatToolForBeginners/
プロジェクト
 chat-exercise  ハンズオン作業用
 chat-tutorial  完成形
環境構築手順 
https://git.io/vro1X
事前準備 1章
ブラウザ
アマゾンのリクエストページ
これから作るもの 1章
①リクエストを送信
③レスポンスを受信
②リクエストを受け取り
ごにょごにょ処理する
商品の詳細ページ
ブラウザ
http://localhost:8080/javajo
Hello World!
これから作るもの 1章
①リクエストを送信
③レスポンスを受信
②リクエストを受け取り
ごにょごにょ処理する
ここを
作るよ
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,
args);
}
}
javajo > App.java 1章
Spring Bootの起動クラスを確認する
HelloControllerクラスにもアノテーションを
付与します。
@RestController
public class HelloController {
  }
1章javajo.controller > HelloController.java 1章
・helloメソッドを作成します。
・helloメソッドにアノテーションを付与します。
String hello() {
return "Hello World!";
}
@RequestMapping(value = "/javajo")
String hello() {
return "Hello World!";
}
javajo.controller > HelloController.java 1章
アプリケーションを起動して、
http://localhost:8080/javajo/
にアクセスしてみよう!
1章javajo.controller > HelloController.java 1章
Eclipse
IntelliJApp.javaを
右クリック>run
maven>bootrun
起動方法
下記画面が表示されれば、成功!
1章Hello World動作確認 1章
ブラウザ
サーバ
@RestController
public class HelloController
{
@RequestMapping(value
= "/javajo")
String hello() {
return "Hello World!";
}
}
http://localhost:8080
/javajo
Hello World!
解説 1章
WebSocketについて
#jjug_ccc #ccc_m3
WebSocket
聞いたことある人?
サーバ・クライアント間で接続が確立された
ら、双方向通信(サーバからもクライアントから
もデータの送信)が行える技術仕様
WebSocketとは?
#jjug_ccc #ccc_m3
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
こんばんはこんばんは
こんばんは
WebSocket(双方向通信)
Client A
#jjug_ccc #ccc_m3
こんにちは
ClientB
こんばんはこんばんは
こんばんは
※1度接続が確立されればデータがリアルタイム
で送受信可能!
※同じサーバに接続しているユーザはデータを共
有する
ハンズオン2章
-チャットを作ってみよう!-
#jjug_ccc #ccc_m3
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
チャットツールの作成内容 2章
Controller
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
ChatForm
@EnableWebSocketMessageBroker
/topic/messages
<dependencies>
・・・・・省略・・・・・
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket
</artifactId>
</dependency>
・・・・・省略・・・・・
</dependencies>
2章pom.xml の内容を確認する 2章
<dependencies>
・・・・・省略・・・・・
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket
</artifactId>
</dependency>
・・・・・省略・・・・・
</dependencies>
pom.xml の内容を確認する
pom.xml
35行目あたり
WebSocketを利用
するのに必要!!
2章
javajo.form > ChatForm.java 2章
public class ChatForm {
・・・・・省略・・・・・
}
public class ChatForm {
private String name;
private String message;
・・・・・省略・・・・・
}
javajo.form > ChatForm.java 2章
クライアントから
受け取った値を格納する
フィールドを作成
public class ChatForm {
・・・・・省略・・・・・
/**
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
**/
}
javajo.form > ChatForm.java 2章
フィールドにアクセスする
getter/setterを作成します
public class ChatForm {
・・・・・省略・・・・・
/**
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
**/
}
javajo.form > ChatForm.java 2章
すでに実装済みなので、
コメントアウトを外す
だけでOK
public class ChatForm {
・・・・・省略・・・・・
public String getName() {
return name;
}
・・・・・省略・・・・・
public void setMessage(String message) {
this.message = message;
}
}
javajo.form > ChatForm.java 2章
すでに実装済みなので、
コメントアウトを外す
だけでOK
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
public class StompConfig {
}
javajo.config > StompConfig.java 2章
クライアントからの
メッセージを処理する
クラスを作成します
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
メッセージを処理する
抽象クラスを継承
@Configuration
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
設定ファイルを表す
アノテーションを付与
@Configuration
@EnableWebSocketMessageBroke
public class StompConfig extends
AbstractWebSocketMessageBrokerConfigurer {
}
javajo.config > StompConfig.java 2章
WebSocketを扱うのに
必要なアノテーションを
付与
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints
(StompEndpointRegistry registry) {
registry.addEndpoint("endpoint");
}
}
javajo.config > StompConfig.java 2章
エンドポイントの
登録メソッドを作成
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
@EnableWebSocketMessageBroker
/topic/messages
ここを
作るよ ChatForm
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定ここを
作るよ
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
ChatForm
@EnableWebSocketMessageBroker
/topic/messages
ここを
作るよ
public class ChatController {
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
チャットのコントロー
ラークラスを作成します
@RestController
public class ChatController {
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
コントローラーの
アノテーションを付与
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
メッセージを受け付ける
MessageMappingを付与
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
@SendTo(value = "/topic/messages")
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller > ChatController.java 2章
処理結果を送信する宛先
SendToを付与
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(Stomp.js) 2章
resources/static/js/Stomp.js
提供されているライブラリを使用
詳しくは、
http://jmesnil.net/stomp-websocket/doc/
クライアント側のメッセージ制御は
JavaScriptライブラリを利用する
クライアント側(javajo.js) 2章
ChatStomp.prototype.connect = function ()
{
var socket = new WebSocket('ws://' +
location.host + '/endpoint');
・・・・・省略・・・・・
}; 23行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints
(StompEndpointRegistry registry) {
registry.addEndpoint("endpoint");
}
}
javajo.config > StompConfig.java 2章
エンドポイントの
登録メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.onConnected = function
(frame) {
console.log('Connected: ' + frame);
this.stompClient.subscribe('/topic/messages',this.
onSubscribeGreeting.bind(this));
 this.setConnected(true);
};
34行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.sendName =
function () {
・・・・・省略・・・・・
this.stompClient.send("/app/message", {},
   JSON.stringify(json_message));
};
73行目
public class StompConfig extends AbstractWebSocketMessageBrokerConfigurer {
・・・・・省略(registerStompEndpointsの直後)・・・・・
@Override
public void configureMessageBroker(MessageBrokerRegistry
registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}
javajo.config > StompConfig.java 2章
メッセージブローカーの
設定メソッドを作成
@RestController
public class ChatController {
@MessageMapping(value = "/message" )
ChatForm greet(ChatForm chatForm) {
return chatForm;
}
}
javajo.controller >ChatController.java 2章
メッセージを受け付ける
MessageMappingを付与
チャットツールの作成内容 2章
ChatController
@MessageMapping("/message")
@SendTo(value= "/topic/messages")
MessageBroker
/message
/app/message
@EnableWebSocketMessageBroker
/topic/messages
ChatForm
チャットツールの作成内容 2章
①WebSocketへの接続要求
⑥WebSocketコネクション切断
④メッセージ送信
⑤メッセージ受信
②WebSocketコネクション確立
③メッセージ受信時の挙動設定
ここだよ
チャットツールの作成内容 2章
ここだよ
クライアント側(javajo.js) 2章
ChatStomp.prototype.disconnect =
function () {
if (this.stompClient) {
this.stompClient.disconnect();
this.stompClient = null;
}
this.setConnected(false);
};
88行〜94行目
ハンズオンはここまで!
実際に動かしてみよう!
#jjug_ccc #ccc_m3
1. chat-exerciseのプロジェクトを実行!
2. http://localhost:8080/chat
にアクセス!
ローカルで動かしてみようローカルで動かしてみよう
3. ユーザ名を入力してConnectボタンクリック!
 
4.メッセージを入力してSendボタン
をクリック!
#jjug_ccc #ccc_m3
まとめ
#jjug_ccc #ccc_m3
・「Hello World」を出力するアプリケーションを
Spring Bootで作りました
・チャットを作りながらWebSocketについて学
びました
まとめ
#jjug_ccc #ccc_m3
お疲れ様でした
ありがとうございました
【講師】
ゆう・ちか
【チューター】
えりこ・あや・とぅん・よこな
#jjug_ccc #ccc_m3

More Related Content

What's hot

ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)NTT DATA Technology & Innovation
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCYuichi Hasegawa
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 

What's hot (20)

ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 

Viewers also liked

Java女子部勉強会参加した感想
Java女子部勉強会参加した感想Java女子部勉強会参加した感想
Java女子部勉強会参加した感想Java女子部
 
JavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE UpdateJavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE UpdateYuichi Sakuraba
 
Rancher LT Talk 20170126
Rancher LT Talk 20170126Rancher LT Talk 20170126
Rancher LT Talk 20170126Tetsurou Yano
 
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015Hikari Fukasawa
 
サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話Yuki Takahashi
 
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージHBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージLINE Corporation
 
Java女子部について
Java女子部についてJava女子部について
Java女子部についてJava女子部
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Takakiyo Tanaka
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話Shohei Okada
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjugYuji Kubota
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 

Viewers also liked (20)

Java女子部勉強会参加した感想
Java女子部勉強会参加した感想Java女子部勉強会参加した感想
Java女子部勉強会参加した感想
 
JavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE UpdateJavaOne 2015 - Java SE Update
JavaOne 2015 - Java SE Update
 
Rancher LT Talk 20170126
Rancher LT Talk 20170126Rancher LT Talk 20170126
Rancher LT Talk 20170126
 
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
 
サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話サーバサイドエンジニアが知りたいIoTの話
サーバサイドエンジニアが知りたいIoTの話
 
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージHBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
 
Java女子部について
Java女子部についてJava女子部について
Java女子部について
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
とにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたいとにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたい
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjug
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 

Similar to Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!

JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているKoichi Sakata
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
REST with Spring Boot #jqfk
REST with Spring Boot #jqfkREST with Spring Boot #jqfk
REST with Spring Boot #jqfkToshiaki Maki
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレットTakashi Makino
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!yoshikawa_t
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osakaSeiji Noro
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門guestd4898b
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows PhoneKenji Wada
 
Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発Kentaro Iizuka
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)Yoshiharu Hashimoto
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-onSeiji Noro
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)JPCERT Coordination Center
 

Similar to Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう! (20)

JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
REST with Spring Boot #jqfk
REST with Spring Boot #jqfkREST with Spring Boot #jqfk
REST with Spring Boot #jqfk
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレット
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
 
Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発Knockout を用いた Firefox OS アプリケーションの開発
Knockout を用いた Firefox OS アプリケーションの開発
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
 

Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!