<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>業務システム &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/業務システム/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>JavaからHTML5ヘ。業務システムの開発におけるWeb技術の変化と適応事例</title>
		<link>/albatrosary/3191/</link>
		<pubDate>Thu, 07 Nov 2013 00:00:39 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[業務システム]]></category>

		<guid isPermaLink="false">/?p=3191</guid>
		<description><![CDATA[フロント開発の現場では、Java中心の開発から、HTML、CSS、JavaScript中心の開発にかわりつつあります。今回は具体的な事例をもとに、実装アーキテクチャや開発インフラに、どのような変化が起きているかレポートし...]]></description>
				<content:encoded><![CDATA[<p>フロント開発の現場では、Java中心の開発から、HTML、CSS、JavaScript中心の開発にかわりつつあります。今回は具体的な事例をもとに、実装アーキテクチャや開発インフラに、どのような変化が起きているかレポートします。</p>

<h1>はじめに</h1>

<p>HTML5が2014年に正式勧告されることを受け、フロント業務アプリケーションに影響を与えています。より多くのことがHTMLやCSSでできるようになり、現場レベルでは開発スタイルそのものの見直しも行われています。実際、私が担当しているプロジェクトではJava中心の開発からHTML、CSS、JavaScript中心の開発へと開発環境を変えています。具体的に何をどのように変更しているのかを、私が担当しているプロジェクトの内容に沿ってご説明したいと思います。</p>

<p>私が携わっているシステムは「営業が客先面前で使用するアプリケーション」を作成しています。アプリケーションとしては、基幹システムというより営業支援システムあるいは営業コンサルティングシステムにあたります。ここではアーキテクチャの詳細に関する説明は割愛させて頂きます。それぞれの事項についてはURLを記載していますので、該当サイトをご参照ください。</p>

<h1>従来型のWebアプリケーション</h1>

<p>JSPを用いたWebアプリケーションは</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/image01.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image01-300x104.png" alt="image01" width="400" height="154" class="alignnone size-medium wp-image-3199" /></a></p>

<ol>
<li>
リクエストをサーバへ送りサーブレットであるControllerへ送付する
</li>
<li>
Controllerは必要な情報をPOJO → Business Logic → O/Rマッパー → Databaseで取得（登録・更新）する
</li>
<li>
ページをJSPで生成しController経由でクライアントへ返却する
</li>
<li>
各ページではAjaxにより部分的な情報の取得を行う
</li>
</ol>

<p>従来型のWebアプリケーション開発では、ほとんどを「Java」で実装しています。</p>

<p>JavaScriptでの処理は</p>

<ul>
<li>
簡単なポップアップ画面ライクな画面表示
</li>
<li>
Ajaxを利用して情報をその都度取得
</li>
</ul>

<p>を目的として使用していました。</p>

<h1>JavaScriptフレームワークを用いたWebアプリケーション</h1>

<p>JavaScriptフレームワークを用いたWebアプリケーションで何がどう変わったか？従来型Webアプリケーションとの違いは、画面遷移も含め、ほとんどの処理をJavaScriptで作っているということが大きく異なります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/image02.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image02-300x106.png" alt="image02" width="400" height="156" class="alignnone size-medium wp-image-3200" /></a></p>

<ol>
<li>
HTMLで作成された画面を表示
</li>
<li>
必要な情報をRESTで取得（登録・更新）し、画面へ表示する
</li>
<li>
取得したトランザクション情報をWeb Storageへ格納する。プルダウン等で使われるマスタ類はJSONで作成し、クライアントへ配置する
</li>
<li>
以後、画面とWeb Storageで情報のやり取りを行う
</li>
<li>
一連の業務完了後、データをRESTでサーバへ送信し、Web Storageのデータとサーバ上に配置されたデータベースとの同期を行う
</li>
</ol>

<p>このWebアプリケーションでは、ほとんどの処理をJavaScriptで作成しています。Javaは「情報を永続化するため」に使用されます。JavaはWebアプリケーションのバックエンド機能としての役割に特化しています。このことは、<a href="http://gihyo.jp/news/report/2013/09/1901" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「業務系システムは今すぐ脱Strutsを！」業務システムエンジニアのためのHTML5勉強会#04 活動報告</a>で寺田氏が挙げているように「次世代型WebアプリケーションとJava標準『Java EE 7』」であると考えています。</p>

<p>注意することとしては、「一連の業務完了」というものが、業務アプリケーション毎に異なる点です。在庫管理に、直にサーバに確認したいようなアプリケーションでは頻繁に発生しますが、ライフプランニングのように一日や数日経過しても問題ないようなアプリケーションでは時間枠が異なります。後者のケースでは特にWeb Storageの機能が本領発揮となるでしょう。</p>

<h1>Web StorageやApplication Cacheを使うメリット</h1>

<p>Web StorageやApplication Cacheを利用することで、サーバとの通信を行わず、ページ切り替えをブラウザ内のみで処理することができます。従来型ではページ切り替え時の通信時間に、少なくとも数秒要していましたが、この時間を発生させないためのレスポンスに有利になります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/image04.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image04-300x265.png" alt="image04" width="250" height="223" class="alignnone size-medium wp-image-3202" /></a></p>

<p>これはユーザビリティの向上にとって非常に重要なことです。従来型のWebアプリケーションではもっさりした感覚のあるものがほとんどでしたが、Web StorageやApplication Cacheの恩恵により、限りなくファットクライアントに近いリッチクライアントを作ることができます。</p>

<h1>開発スタイルがどう変化したか</h1>

<p>開発のウェイトがJavaからJavaScriptへ移ったことにより、アプリケーション開発環境も大きく変化しています。従来型では</p>

<ul>
<li>
Eclipse or NetBeans
</li>
<li>
maven
</li>
<li>
svn
</li>
<li>
JUnit &amp; DBUnit
</li>
<li>
Jenkins
</li>
</ul>

<p>が主たる開発環境でありましたが、JavaScriptフレームワークを用いたWebアプリケーションでは</p>

<ul>
<li>
sublime textとか何でも
</li>
<li>
Yeoman(yo, grunt, bower)
</li>
<li>
Jasmine
</li>
<li>
git &amp; github
</li>
<li>
travis
</li>
</ul>

<p>といった開発が有用です。</p>

<p>「開発者にとって開発環境がすべて」という表現をされる方もいますので、ここで少し私が使用している開発インフラ<a href="http://yeoman.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Yeoman</a>について触れたいと思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/image03.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image03-300x259.png" alt="image03" width="150" height="130" class="alignnone size-medium wp-image-3201" srcset="/wp-content/uploads/2013/11/image03-300x259.png 300w, /wp-content/uploads/2013/11/image03-207x179.png 207w, /wp-content/uploads/2013/11/image03.png 374w" sizes="(max-width: 150px) 100vw, 150px" /></a></p>

<p>Yeomanはyo、grunt、bowerの3つのツールで構成されている「Web App Development Through Tooling」です。それぞれの役割はYeomanのサイトから引用すると次の通りです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/image05.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image05-300x120.png" alt="image05" width="300" height="120" class="alignnone size-medium wp-image-3203" srcset="/wp-content/uploads/2013/11/image05-300x120.png 300w, /wp-content/uploads/2013/11/image05-207x83.png 207w, /wp-content/uploads/2013/11/image05.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a>
￼</p>

<p>Yeomanは次の目的のために使用しています。</p>

<ol>
<li>
yoによるテンプレートの作成。
</li>
<li>
bowerによる依存関係を管理
</li>
<li>
gruntによるアプリケーションの開発およびリリースビルド
</li>
</ol>

<p>特にビルドプロセスでは</p>

<ul>
<li>
JavaScript/CSS等の圧縮
</li>
<li>
JavaScriptに対してUnitテストを実施
</li>
</ul>

<p>などを行っています。テンプレートに関しては必要となるJavaScriptフレームワーク、ユニットテストツール、altJS、Sass/Compass、csslint、jslint等が含まれています。このテンプレートは初めから作成することも可能ですし、すでにあるテンプレートをカスタマイズして利用することも可能です。一般的にプロジェクトで使用する場合はある程度カスタマイズした方が良いでしょう。grunt、bowerですが、mavenやantを利用したことがある方ならイメージがつきやすいかと思います。Yeomanの詳細については次の機会に紹介します。</p>

<p>当然ですが、サーバサイドのモジュールを開発するときには従来型の開発環境を使います。</p>

<h1>開発要員構成</h1>

<p>JavaScriptフレームワークを用いたWebアプリケーションの開発により、開発要員のスキルセットが変化しています。従来型ではそのほとんどがJavaエンジニアで</p>

<ul>
<li>
Javaエンジニア：24名
</li>
<li>
デザイナー：1名
</li>
<li>
その他スタッフ：3名
</li>
</ul>

<p>したが、Web 開発では</p>

<ul>
<li>
Javaエンジニア：3名
</li>
<li>
JavaScriptエンジニア：21名
</li>
<li>
デザイナー：4名
</li>
<li>
その他スタッフ：3名
</li>
</ul>

<p>です。これはあるプロジェクトの要員バランスですが Javaエンジニアが 1/8 に成ってしまったことはエンジニアにとっては感慨深いものがあります。</p>

<h1>JavaScriptフレームワークの導入</h1>

<p>JavaScriptでのコーティング量が増加しているため、実装を整理する意味においても JavaScriptフレームワークの導入検討を行うのは有用だと言えます。様々なところで言われていることですが、フレームワークの導入は「処理を系統立てた仕組みにのせプログラマの作業の効率化とアプリケーションの保守性を高めること」にあると考えています。</p>

<p>すでにJavaScriptフレームワークは<a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">数十種類以上</a>あります。私のプロジェクトでは <a href="http://backbonejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Backbone</a>を使用しています。Yeomanを用いることでBackboneを利用する環境を容易に導入することができ、</p>

<ul>
<li>
データバインディングとカスタムイベントを備えたModel
</li>
<li>
ModelのイテレーションであるCollection
</li>
<li>
イベントをハンドリングするView
</li>
<li>
サーバサイドのアプリケーションと連動するためのRESTful JSONなど
</li>
</ul>

<p>が、提供されます。
￼￼</p>

<p>￼￼<a href="https://html5experts.jp/wp-content/uploads/2013/11/image00.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/image00-255x300.png" alt="image00" width="205" height="250" class="alignnone size-medium wp-image-3198" /></a></p>

<p>このフレームワークはその名の通り骨組みの提供であり、実質的には、Requirejs、Underscore、jQueryの恩恵を受け、強固なフレームワークになります。
<a href="http://requirejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Requirejs</a> は JavaScript ファイルのモジュールローダーです。呼び出す JavaScriptファイルを定義できるので、コードの品質を向上させることができます。
<a href="http://underscorejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Underscore</a> は、JavaScript のユーティリティ郡です。</p>

<p>JavaScriptフレームワークを用いたWebアプリケーション開発におけるもうひとつの変化
業務アプリケーションはあまり画面に動きのあるサイトは作りませんがボタンの形状やグラデーションは頻繁に利用します。従来pngで作成していた</p>

<ul>
<li>
イメージボタン
</li>
<li>
divの角を丸める
</li>
</ul>

<p>といったことがCSS3で作成可能となったことから、カスケードスタイルシートのコーティング量が急増しています。そのため、デザイナーでもある程度のHTML、CSS実装ができることが要求されています。</p>

<p>開発インフラとしては、例えば</p>

<ul>
<li>
Sass &amp; Compass
</li>
</ul>

<p>の導入により、より効率のよいアプリケーション開発を行うように なっています。私の考えですが、CSSはHTMLの表現を定義する設定ファイルの位置付けは、Sass/Compassによりプログラム言語としての位置付けに移ったと考えています。
<a href="http://sass-lang.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Sass</a> は CSS にはない次のことが可能で、<a href="http://compass-style.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Compass</a>はCSSオーサリングフレームワークです。</p>

<ul>
<li>
変数
</li>
<li>
セレクタのネスト
</li>
<li>
ミックスイン
</li>
<li>
セレクタの継承
</li>
</ul>

<p>SassとCompassを利用するためには、ビルドが必要になります。そのためgruntによるビルドを行います。Yeomanで作成したテンプレートには、livereloadという機能が含まれていて、開発環境を常に監視していて変更があるとビルドしブラウザへ変更内容を適用します。</p>

<h1>CoffeeScript の導入メリット</h1>

<p>全体像としては、JavaからJavaScriptへの開発ウェイトが移っています。開発に携わるすべてのプログラマーが正しく、JavaScript モジュールを開発できるスキルを有する必要があります。<a href="https://html5experts.jp/clockmaker/2183/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「モダンな言語でHTML5を開発しよう！俯瞰して理解するaltJSの比較（前篇 &#8211; TypeScript, CoffeeScript, Haxe）池田 泰延」</a>でまとめられているように、「altJS」はスマートにコードを書くための仕組みが用意されています。詳細についてはそちらをご参照ください。</p>

<p>私のプロジェクトでは、CoffeeScriptを導入しています。導入メリットを何点か挙げると</p>

<ul>
<li>
コーティング量が少ない
</li>
<li>
JavaScriptの罠に引っかからない
</li>
<li>
書き方がある程度統一される
</li>
</ul>

<p>ということがあります。特に</p>

<ul>
<li>
varの書き方（varの書き忘れ）
</li>
<li>
this の定義
</li>
<li>
returnの明確化
</li>
<li>
== と === の違い
</li>
</ul>

<p>等がありますが、これらをCoffeeScriptがうまく補完してくれています。
CoffeeScriptもSass/Compass同様にビルドが必要になります。やはり、gruntによるビルドを行います。</p>

<h1>JavaScriptのセキュリティ</h1>

<p>JavaScriptでのコーティング量が増えたことから、JavaScriptのセキュリティについてもより多くのことを考える必要があります。</p>

<ul>
<li>
ロジックをオープンソース化してしまうこと
</li>
<li>
Web Storageにある情報が読み取り可能
</li>
</ul>

<p>JavaScriptに関しては難読化、情報に関しては暗号化してからWeb Storageへの保存等、考慮すべきことがいくつかあります。</p>

<h1>最後に</h1>

<p>HTML5の到来により、今までとは異なるアーキテクチャでの実装が必要となっています。アーキテクチャが変わったことにより実装環境も大きく変える必要が当然あります。これからはJavaScriptコーティングスタイルに合った開発環境を作るべきだと考えています。ここで述べた開発スタイルは、まだエンタープライズでは少数。いずれくるであろうHTML5時代の準備を今からするのは有効と考えて間違いないでしょう。</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
