SlideShare a Scribd company logo
1 of 27
Download to read offline
メンテナンス性の良い
Webシステムを構築するために
Javaとフロントエンドでやるべきこと

2013/11/09 JJUG CCC
HTML5jエンタープライズ部
小川充(@mitsuruog)
photo credit
http://www.ashinari.com/2013/09/06-381684.php
自己紹介

小川充(おがわみつる)
株式会社クレスコ 技術研究所
フロントエンジニア

進化し続けるフロントエンド技術と
システム開発の現場をいかに融合させるか!
業務システムエンジニア目線で活動しています。
・HTML5jエンタープライズ部 運営メンバー
・OSSドキュメント翻訳コミュニティ  enja-ossメンバー
・Github:https://github.com/mitsuruog
・Twitter:https://twitter.com/mitsuruog
はじめに
サーバサイドにはうるさい業務系フロントエンジニアです。

2013/09/09にHTML5jエンタープライズ部とJJUGと共催で
「Web×Java」をテーマに勉強会を企画、開催しました。
業務系WebアプリケーションがStrutsから旅立つ日
http://www.slideshare.net/mitsuruogawa33/webstruts
「業務系システムは今すぐ脱Strutsを!」業務システムエンジニアのためのHTML5勉強会#04 活動報告
http://gihyo.jp/news/report/2013/09/1901
はじめに
昨今、UIがリッチになるに従い、サーバ側で実装されていたものがフロント側でも
実装されるようになってきました。
その際にWebシステムのメンテナンス性の上で大切なことは、フロント側とサーバ側
の役割分担を明確にし、影響しあう部分を局所化すること。
これからのJavaでのWeb開発において、フロント側とサーバ側の役割をどのように
考えれば良いかお話します。
話さないこと
・クライアントMV*系フレームワークの詳細
・Javaサーバ側実装の詳細
・CSS(←Webのメンテナンス性を語る上では重要な要素 )
・JSF1.X
・Richfaces、Primefaces
・Scala、Groovy
1.画面構築方式とアンチパターン
なぜ画面構築方式なのか?
・フロント側のロジックのほとんどは画面構築に関するもの。
・Ajaxの登場以来、画面の部分更新が多く行われるようになり、画面構築方法が複雑
化し、フロント側の実装量が増えてきた。
・画面構築の部分が、最もサーバ側との機能重複が発生しやすい箇所。
画面構築方式(従来型・画面遷移方式)
サーバサイド

フロントエンド

Model

Contoller

HTML
テンプレート

View

ロジック

HTML

・画面はサーバ側で生成。
・レスポンスはHTMLベース

Ajaxで画面を部分更新し始めると危険なパターン
(よくある)
画面構築方式(次世代型・REST API方式)
サーバサイド

フロントエンド
VM*系フレームワーク
Contoller
(View)

Model

Contoller
JSON

HTML

View

テンプレート
ロジック

・レスポンスはJSONベース
・画面はフロント側で生成(データバインディング)

サーバ側で画面を部分構築し始めると危険なパターン
(あまりない、要員スキルなど途中で妥協した場合などに起こる。)

Model
画面構築方式(まとめ)
・2つの方式も混ざり合わない間は問題ない。
・2つの方式が混ざり合う部分で機能的な重複が起こる。
・混ざり合う部分での方針やルールが定まっていない場合に混乱が起こり、機能重複
が起こる。
2.フロントエンドの役割とは何か?
~Javascriptの場合~
フロントエンドの役割(従来型)
DOM操作
(アニメーション)

Ajax

フロントエンド役割があまりなかった時代
フロントエンドの役割(次世代型)
DOM操作
(アニメーション)

Ajax
テンプレートエンジン
テンプレート

リソース同期
MV*系フレームワーク

構造化

JAX-RSの場合はこの構成
フロントエンドの役割(JSFの場合)
DOM操作
(アニメーション)

Ajax

テンプレート

リソース同期

JSF

構造化

サーバサイドに大きく依存しており
フロントとの役割分担の見極めが難しい
(アンチパターン)
フロントエンドの役割(まとめ)
・フロントエンドが求められる役割は主に5つ。
(DOM操作、Ajax、テンプレート、データ同期、構造化)
・JSFの場合は、フロントエンドとの役割分担の見極めが難しくアンチパターンに陥りや
すい。
3. JAX-RS、JSF(2.0+)
それぞれとの組み合わせ方
~フロントエンド組み合わせの留意事項~
JAX-RSの場合
・画面構築方式は次世代型。画面はフロント側で生成。
・JAX-RSはREST仕様に則ったWebAPIが容易に作成可能。
例)サーバ側REST実装例

ルーティング、JSONシリアライズが直感的

@RequestScoped
@Path("hoge")
public class HogeResource {
@GET
@Path("product")
@Produces(MediaType.APPLICATION_JSON)
public Product getProduct() {
Product product = new Product();
product.setId(1);
product.setName("Mattress");
product.setDescription("Queen size mattress");
product.setPrice(500);
return product;
}
}

呼び出すURL
http://localhost:8080/web_root/webresources/hoge/product
JAX-RSの場合
・サーバとのREST API呼び出しを隠蔽するようなJavascriptMV*系F/Wと相性がよい。
(個人的にはBackbone.js、Anguler.js推奨)
フロント側実装 (Backbone.js)

Java側の実装(URLは「hoge/product」)

@RequestScoped
var Model = Backbone.Model.extend({
@Path("hoge")
url: 'webresources/hoge/product'
public class HogeResource {
});
@GET
var View = Backbone.View.extend({
@Path("product")
@Produces(MediaType.APPLICATION_JSON)
initialize: function() {
public Product getProduct() {
this.model = new Model();
Product product = new Product();
this.model.fetch();
this.render(); //画面の再構築
//省略
},
render: function(){
return product;
}
//省略
}
}
});
fetch()呼び出し時にGETリクエストを投げる
//Viewの初期化
受信後、F/W側で勝手にModelのデータを更新する
new View();

(Backbone.sync)
JAX-RSの場合(その他留意事項)
・フロント側に実装量が増えるため、JavascriptMV*系F/Wでの構造化が必須。
・フロント側にテンプレートエンジンが必要。
・初期表示時に表示データ取得用の余計なリクエストが1回飛ぶ。
(これをどう捕らえるか次第…)
・本格的にフロントエンジニアの参画が必要。
JSF(2.0+)の場合
・画面構築方式は基本的に従来型。
・画面構築はサーバ側。Ajax通信時もサーバ側で画面構築する。
・Ajaxでの画面部分構築は<f:ajax>を使用すること。
例)Ajax入力チェック「 JSF側」
<h:form id="form">
<h:inputText id="name" value="#{user.name}" validator="#{user.validateName}">
<f:ajax execute="name" render="nameError" event="blur" />
</h:inputText>
<h:message for="name" id="nameError" style="color: red"/>
</h:form>

サーバ側のロジック

<f:ajax>でJavascriptを記述することなくAjax呼び出しが可能
JSF(2.0+)の場合
・jQueryなどから画面部分更新したいケースは、JSFライブラリのAjax通信機能を使用
すること。
⇒画面構築部分はJSFの影響力が強すぎるため、テンプレートとAjax部分は割り
切って任せたほうが良い。(後述)
jQueryからフックする例)
$(document).on('click', '#form:validate', function(e) {
jsf.ajax.request(e.target, e, {
execute: 'form:name',
render: 'form:nameError'
正直、書き方が気持ち悪いw
});
e.preventDefault();
そもそも、無理にフックする必要ない。
});
そうなるようであれば設計を見直した方がいいかも。
JSF(2.0+)の場合
・JSFが持つ、テンプレートとUIコンポーネント化の仕組みが優秀。
⇒UIのコンポーネント化にTaglibのように面倒な手続きが不要。
・<f:metadata>の登場により、GETパラメータの扱いが容易になった。

UIテンプレート化
<ui:insert>と<ui:define>

UIコンポーネント化
<composite:interface>と<composite:implementation>

GETリクエストとの親和性向上
<f:metadata>と<f:viewParam>
JSF(2.0+)の場合(その他留意事項)
・(注意)JSFのAjax通信のレスポンスはXML形式で、かつ独自色が強い。
例)先ほどの入力チェック時に返ってきたレスポンス
<?xml version='1.0' encoding='UTF-8'?>
<partial-response id="j_id1">
<changes>

部分的なHTMLが返ってくる。

<update id="form:nameError">
<![CDATA[<span id="form:nameError" style="color: red">必須入力です </span>]]>
</update>
<update id="j_id1:javax.faces.ViewState:0">
<![CDATA[8183146577291182963:-4484956516055255891]]>
</update>
</changes>
</partial-response>

レスポンスを受けて、自前で何かしようとか思わないほうがいい。
JSF(2.0+)の場合(その他留意事項)
・サーバ側の依存度が高いため、Javascriptとの役割分担が難しい。
⇒むしろ、フロントエンドの出番はあまりない(ようにするべき)。
・JavascriptMV*系F/Wとの組み合わせるべきではない。
・Javascriptライブラリ選定はJSFと機能の包含関係を考慮して行うべき。
4.まとめ
まとめ(JAX-RS)
・サーバ側の役割はREST APIに徹する。
・フロント側の役割はテンプレートと画面構築を担う。
・別途、JavascriptMV*系F/Wなどで構造化が必須。
長所
・基本的にどんな UIにも対応可能。
・フロントエンドの分業が可能。
・様々なJavascriptMV*系F/Wやライブラリが選択可能。
・JSONベースの小さいデータのやり取りが主流であるため、通信環境の悪いモバイルに適してい
る。

短所
・フロントエンジニア的にはないw。
・気をつけないと、 Javascriptがメモリリークしやすい。
・規模や難易度に見合うフロントエンジニアの調達・教育が課題。
まとめ(JSF2.0+)
・フロントエンドとの役割分担を見極めれば、非常に優秀はWebフレームワーク。
・JSFのテンプレートとAjax通信機能をフルで使う前提で設計するべき。
・むしろフロント側の役割は多く持たせるべきではない。
・JavascriptMV*系F/Wとの組み合わせるべきではない。

長所
・Javaエンジニアのみで、ある程度リッチな Webシステムを安全に構築可能。
・JSFの<f:ajax>タグを使っている範囲であれば、 Javascriptを意識する必要はない。
・テンプレート、 UIコンポーネント化機能が優秀で、 UIの再利用性が高くなる。

短所
・リッチなUIには向かない。
・HTML/XMLベースのやり取りが主流であるため、モバイル環境には適していない場合がある。
・安易にAjaxの部分更新ができるため、更新する範囲のコントロールに注意が必要。
・フロントエンジニアにアンチファンが多い。
ご静聴ありがとうございました!

2013/11/09 JJUG CCC
HTML5jエンタープライズ部
小川充(@mitsuruog)
photo credit
http://www.ashinari.com/2007/05/07-002031.php

More Related Content

What's hot

UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日
UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日
UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日Yoichi Suetake
 
実践!RPA のテクノロジーを活用した自動テスト
実践!RPA のテクノロジーを活用した自動テスト実践!RPA のテクノロジーを活用した自動テスト
実践!RPA のテクノロジーを活用した自動テストJunShiomi
 
○○したら受託開発が180°変わった
○○したら受託開発が180°変わった○○したら受託開発が180°変わった
○○したら受託開発が180°変わったAtsushi Harada
 
WebエンジニアのReactNativeでの戦い方
WebエンジニアのReactNativeでの戦い方WebエンジニアのReactNativeでの戦い方
WebエンジニアのReactNativeでの戦い方PIXTA Inc.
 
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜つかってみよう!Yeoman 〜riaビルドツール超入門+α〜
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜Masakazu Muraoka
 
昨日Ucp advanced受験してみた!
昨日Ucp advanced受験してみた!昨日Ucp advanced受験してみた!
昨日Ucp advanced受験してみた!Hideaki Manaka
 
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?Egawa Saori
 
こだわりのkintone
こだわりのkintoneこだわりのkintone
こだわりのkintoneYusuke Amano
 
老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦GuildWorks
 
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬Mizuki Tanno
 
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterRyosuke Uchitate
 
How to develop a huge Single Page Application
How to develop a huge Single Page ApplicationHow to develop a huge Single Page Application
How to develop a huge Single Page ApplicationNaoki Yamada
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化JustSystems Corporation
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいのYasui Tsutomu
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化gree_tech
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略GuildWorks
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_publicYoshiharu Hashimoto
 
ギルドワークスの現場コーチ
ギルドワークスの現場コーチギルドワークスの現場コーチ
ギルドワークスの現場コーチGuildWorks
 

What's hot (20)

UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日
UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日
UiPath Friends Festival 2021 テック三昧 EXCELアプリケーションスコープが無くなる日
 
実践!RPA のテクノロジーを活用した自動テスト
実践!RPA のテクノロジーを活用した自動テスト実践!RPA のテクノロジーを活用した自動テスト
実践!RPA のテクノロジーを活用した自動テスト
 
○○したら受託開発が180°変わった
○○したら受託開発が180°変わった○○したら受託開発が180°変わった
○○したら受託開発が180°変わった
 
WebエンジニアのReactNativeでの戦い方
WebエンジニアのReactNativeでの戦い方WebエンジニアのReactNativeでの戦い方
WebエンジニアのReactNativeでの戦い方
 
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜つかってみよう!Yeoman 〜riaビルドツール超入門+α〜
つかってみよう!Yeoman 〜riaビルドツール超入門+α〜
 
昨日Ucp advanced受験してみた!
昨日Ucp advanced受験してみた!昨日Ucp advanced受験してみた!
昨日Ucp advanced受験してみた!
 
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?
信頼されるエンジニアへの貴重な一歩! テストのお勉強はどうやるの?
 
こだわりのkintone
こだわりのkintoneこだわりのkintone
こだわりのkintone
 
俺の事業部
俺の事業部俺の事業部
俺の事業部
 
Osashimi
OsashimiOsashimi
Osashimi
 
老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦
 
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
 
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
 
How to develop a huge Single Page Application
How to develop a huge Single Page ApplicationHow to develop a huge Single Page Application
How to develop a huge Single Page Application
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいの
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public
 
ギルドワークスの現場コーチ
ギルドワークスの現場コーチギルドワークスの現場コーチ
ギルドワークスの現場コーチ
 

Viewers also liked

これからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへこれからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへMitsuru Ogawa
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Satoshi Kubo
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFMasuji Katoda
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎Ken'ichi Matsui
 
Eclipse文字化けする。一撃で文字化けを直す方法
Eclipse文字化けする。一撃で文字化けを直す方法Eclipse文字化けする。一撃で文字化けを直す方法
Eclipse文字化けする。一撃で文字化けを直す方法H S
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Ryuma Tsukano
 
エンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンエンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンMitsuru Ogawa
 
忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門Toshiaki Maki
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決までRyuma Tsukano
 
ここが変わった!Eclipse 3.6の新機能
ここが変わった!Eclipse 3.6の新機能ここが変わった!Eclipse 3.6の新機能
ここが変わった!Eclipse 3.6の新機能takezoe
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞMitsuru Ogawa
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js iloveigloo
 
EclipseでのデバッグTips
EclipseでのデバッグTipsEclipseでのデバッグTips
EclipseでのデバッグTipsstylefreeslide
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talkkyon mm
 
Coffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へCoffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へKoya Fukuda
 

Viewers also liked (20)

これからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへこれからフロントエンジニアを目指すあなたへ
これからフロントエンジニアを目指すあなたへ
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎
 
Eclipse文字化けする。一撃で文字化けを直す方法
Eclipse文字化けする。一撃で文字化けを直す方法Eclipse文字化けする。一撃で文字化けを直す方法
Eclipse文字化けする。一撃で文字化けを直す方法
 
Eclipse Plugin Dev 200711
Eclipse Plugin Dev 200711Eclipse Plugin Dev 200711
Eclipse Plugin Dev 200711
 
EMF勉強会
EMF勉強会EMF勉強会
EMF勉強会
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)
 
エンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンエンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb Componentsハンズオン
 
忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門忙しい人のためのBackbone.jsとAngular.js入門
忙しい人のためのBackbone.jsとAngular.js入門
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
 
Nodeを稼働させる
Nodeを稼働させるNodeを稼働させる
Nodeを稼働させる
 
ここが変わった!Eclipse 3.6の新機能
ここが変わった!Eclipse 3.6の新機能ここが変わった!Eclipse 3.6の新機能
ここが変わった!Eclipse 3.6の新機能
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞ
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js
 
EclipseでのデバッグTips
EclipseでのデバッグTipsEclipseでのデバッグTips
EclipseでのデバッグTips
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
Ajax basic
Ajax basicAjax basic
Ajax basic
 
資格四方山話
資格四方山話資格四方山話
資格四方山話
 
Coffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へCoffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へ
 

Similar to メンテナンス性の良いWebシステムを構築するためにjavaとフロントエンドでやるべきこと

賢くツールを使って脱人海戦術駆動テスト
賢くツールを使って脱人海戦術駆動テスト賢くツールを使って脱人海戦術駆動テスト
賢くツールを使って脱人海戦術駆動テストMitsuru Ogawa
 
ボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるMasakazu Muraoka
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterpriseKoichiro Sumi
 
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学 松崎
 
HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識Mitsuru Ogawa
 
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)Mitsuru Ogawa
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化Toshio Ehara
 
SORACOM UG Explorer 2018 - IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ
SORACOM UG Explorer 2018 -  IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウSORACOM UG Explorer 2018 -  IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ
SORACOM UG Explorer 2018 - IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ紘之 大田黒
 
イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱Fumio SAGAWA
 
Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発Masakazu Muraoka
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven DevelopmentTakuya Tejima
 
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみるWeb屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみるMasakazu Muraoka
 
スマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイントスマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイントMasakazu Muraoka
 
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)さくらインターネット株式会社
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。Akihiro Kuwano
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3irof N
 
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324Shotaro Suzuki
 

Similar to メンテナンス性の良いWebシステムを構築するためにjavaとフロントエンドでやるべきこと (20)

賢くツールを使って脱人海戦術駆動テスト
賢くツールを使って脱人海戦術駆動テスト賢くツールを使って脱人海戦術駆動テスト
賢くツールを使って脱人海戦術駆動テスト
 
ボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考える
 
Html5 and Graphics
Html5 and GraphicsHtml5 and Graphics
Html5 and Graphics
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
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
 
AMD basic and practice
AMD basic and practiceAMD basic and practice
AMD basic and practice
 
HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識
 
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
 
AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化AngularJSで業務システムUI部品化
AngularJSで業務システムUI部品化
 
SORACOM UG Explorer 2018 - IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ
SORACOM UG Explorer 2018 -  IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウSORACOM UG Explorer 2018 -  IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ
SORACOM UG Explorer 2018 - IoTxAIを活用した小売業向け店舗解析サービスの仕組みとノウハウ
 
イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱
 
Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発Yeomanではじめる爆速webアプリ開発
Yeomanではじめる爆速webアプリ開発
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven Development
 
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみるWeb屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
Web屋という仕事のこれから Web動向からWeb屋に必要な技術を考えてみる
 
スマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイントスマートフォン開発の事例 Html5開発の導入ポイント
スマートフォン開発の事例 Html5開発の導入ポイント
 
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)
さくらとエンジニアの幸せな未来を実現するための組織づくり(Developers Summit 2016 KANSAI)
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
 
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
 

More from Mitsuru Ogawa

Angular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overviewAngular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overviewMitsuru Ogawa
 
Webアプリケーションセキュリティ ディスカッション資料
Webアプリケーションセキュリティ ディスカッション資料Webアプリケーションセキュリティ ディスカッション資料
Webアプリケーションセキュリティ ディスカッション資料Mitsuru Ogawa
 
Lightningコンポーネント事始め
Lightningコンポーネント事始めLightningコンポーネント事始め
Lightningコンポーネント事始めMitsuru Ogawa
 
ゆるふわWoT&firefoxOS体験記
ゆるふわWoT&firefoxOS体験記ゆるふわWoT&firefoxOS体験記
ゆるふわWoT&firefoxOS体験記Mitsuru Ogawa
 
今後のWeb開発の未来を考えてangularJSにしました
今後のWeb開発の未来を考えてangularJSにしました今後のWeb開発の未来を考えてangularJSにしました
今後のWeb開発の未来を考えてangularJSにしましたMitsuru Ogawa
 
オフラインWeb 今どきのデータ永続化事情
オフラインWeb 今どきのデータ永続化事情オフラインWeb 今どきのデータ永続化事情
オフラインWeb 今どきのデータ永続化事情Mitsuru Ogawa
 
Enja OSSやってます
Enja OSSやってますEnja OSSやってます
Enja OSSやってますMitsuru Ogawa
 

More from Mitsuru Ogawa (8)

Angular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overviewAngular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overview
 
Webアプリケーションセキュリティ ディスカッション資料
Webアプリケーションセキュリティ ディスカッション資料Webアプリケーションセキュリティ ディスカッション資料
Webアプリケーションセキュリティ ディスカッション資料
 
Lightningコンポーネント事始め
Lightningコンポーネント事始めLightningコンポーネント事始め
Lightningコンポーネント事始め
 
ゆるふわWoT&firefoxOS体験記
ゆるふわWoT&firefoxOS体験記ゆるふわWoT&firefoxOS体験記
ゆるふわWoT&firefoxOS体験記
 
今後のWeb開発の未来を考えてangularJSにしました
今後のWeb開発の未来を考えてangularJSにしました今後のWeb開発の未来を考えてangularJSにしました
今後のWeb開発の未来を考えてangularJSにしました
 
ゆるふわCSS3
ゆるふわCSS3 ゆるふわCSS3
ゆるふわCSS3
 
オフラインWeb 今どきのデータ永続化事情
オフラインWeb 今どきのデータ永続化事情オフラインWeb 今どきのデータ永続化事情
オフラインWeb 今どきのデータ永続化事情
 
Enja OSSやってます
Enja OSSやってますEnja OSSやってます
Enja OSSやってます
 

メンテナンス性の良いWebシステムを構築するためにjavaとフロントエンドでやるべきこと