<?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>Java &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/java/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>ニュースタブ新設で月間アクティブユーザー数が5900万人を突破した「LINE NEWS」の開発技術と体制を聞いてきた！</title>
		<link>/miyuki-baba/24053/</link>
		<pubDate>Fri, 22 Sep 2017 01:00:29 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Assault]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LINE]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[React.js]]></category>

		<guid isPermaLink="false">/?p=24053</guid>
		<description><![CDATA[2017年2月に新設されたニュースタブによって、ユーザー層をより広く拡大し、2017年3月時点で月間アクティブユーザー数5900万人を突破した「LINE NEWS」。そのニュースタブは、WebViewで実装されているのを...]]></description>
				<content:encoded><![CDATA[<p>2017年2月に新設されたニュースタブによって、ユーザー層をより広く拡大し、2017年3月時点で月間アクティブユーザー数5900万人を突破した「LINE NEWS」。そのニュースタブは、WebViewで実装されているのをご存じでしたか？</p>

<p>LINEのニュースタブをReact.jsで開発しているフロントエンド、JavaとPerlで開発しているサーバーサイドのエンジニアの方々に、どんな開発技術や体制で開発しているのか、HTML5 Experts.jp白石俊平編集長が直撃インタビューしてきました！</p>

<h4>今回お話を聞いた「LINE NEWS」開発チームの皆さん</h4>

<p><img src="/wp-content/uploads/2017/09/maezawa.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24089" /><br><span style="font-size: 90%;"><strong>LINE株式会社 前澤 春樹さん</strong><br>Javaのサーバーサイド担当。200以上の媒体社様向け管理画面のコンテンツ入稿システム開発や、公式アカウントから発信されるメッセージ配信システムが主な担当。</span></p>

<p><img src="/wp-content/uploads/2017/09/morifuji.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24092" /><br><span style="font-size: 90%;"><strong>LINE株式会社 森藤 賢司さん</strong><br>Perlで作られている一般ユーザーから見えるニュースタブ、記事ページのバックエンドや社内向けの管理画面を担当。</span></p>

<p><img src="/wp-content/uploads/2017/09/otsuki.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24095" /><br><span style="font-size: 90%;"><strong>LINE株式会社 大槻 友諒さん</strong><br>フロントエンドエンジニア。WebViewでつくられているニュースタブの実装を担当している。React.jsなどの最新技術に触れることも多い。</span></p>

<p><img src="/wp-content/uploads/2017/09/tomita.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24097" /><br><span style="font-size: 90%;"><strong>LINE株式会社 富田 梓さん</strong><br>マークアップエンジニア。デザイナーの作成したPSDをもとにしたCSSの設計と実装を行う。ニュースタブの他、PC/SPのWeb、キャンペーンページなどニュース関連全般を担当。</span></p>

<h2>なぜ、ニュースタブはWebViewなの？</h2>

<p><strong>白石</strong>：今日は主にニュースタブにフォーカスしてお話を聞いていきますね。LINEのニュースタブは、なぜWebViewを使ったのでしょうか。</p>

<p><strong>大槻</strong>：もともと記事ページはWebViewで作っていました。ニュースタブを作ろうという話になったときに、記事ページと同じ技術で作るほうが開発スピードも早いし、やりやすい。バージョンアップなども、そろえたほうがリリースしやすいということでWebViewで作ることになりました。</p>

<p><img src="/wp-content/uploads/2017/09/line-1.jpg" alt="" width="640" height="600" class="alignnone size-full wp-image-24282" srcset="/wp-content/uploads/2017/09/line-1.jpg 640w, /wp-content/uploads/2017/09/line-1-300x281.jpg 300w, /wp-content/uploads/2017/09/line-1-207x194.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：じゃあ、ニュースタブ以外はネイティブでできているんですね。</p>

<p><strong>大槻</strong>：そうです。トークやタイムラインなど、メインの機能はネイティブで実装されています。並んでるタブの中だと、ニュースタブだけがWebViewです。</p>

<p><strong>白石</strong>：WebViewとネイティブといった複数の技術を混ぜるのって、大変だったんじゃないでしょうか。</p>

<p><strong>大槻</strong>：ネイティブとWebView間でデータやイベントをやり取りする必要があって、そのための仕組みをアプリエンジニアと協力して実現しました。ユーザーにはLINEアプリの一部として見えるので、挙動やパフォーマンスに違和感が出ないようにするのが大変でした。</p>

<p><img src="/wp-content/uploads/2017/09/714103152f1f91a24b71227d63f2b089.jpg" alt="" width="640" height="421" class="alignnone size-full wp-image-24137" srcset="/wp-content/uploads/2017/09/714103152f1f91a24b71227d63f2b089.jpg 640w, /wp-content/uploads/2017/09/714103152f1f91a24b71227d63f2b089-300x197.jpg 300w, /wp-content/uploads/2017/09/714103152f1f91a24b71227d63f2b089-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：WebViewだと、読み込みや表示が遅かったりしません？</p>

<p><strong>大槻</strong>：いえ、結果的にそこまで遅いということはなかったです。Webだからの限界はありましたけど、WebViewだから特別つらいことはありませんでした。</p>

<p>LINEバイトやLINEギフトといったファミリーアプリにはすでにWebViewの技術が使われていて、知見があったことも役立ったんだと思います。</p>

<p><strong>白石</strong>：React.jsを使っているとのことですが、SPA的な開発だとマークアップはそんなに必要じゃないと思うんですが、両方必要なのはどうしてなんでしょう。</p>

<p><strong>富田</strong>：うちは分業体制をとっていて、僕と大槻さんが所属しているチームはフロントエンドを担当しています。案件によってJSとマークアップの両方を一人が担当することもありますが、newsでは規模の大きさもあって担当が分かれています。</p>

<p>デザインからHTMLを起こして、それを渡しているので、一般的に言われているReactを使うイメージとはちょっと違うかもしれません。</p>

<p><strong>大槻</strong>：セマンティックなHTMLを書くとか、CSSを設計するといったところは完全にお任せしてします。一回組んだものを、パーツとして分解してJSXに落とし込んでいます。</p>

<p><strong>白石</strong>：PCでも記事ページそのものは見られるんでしたっけ？</p>

<p><strong>富田</strong>：記事ページは見られます。</p>

<p><strong>白石</strong>：あ、レスポンシブ対応しているんですね。</p>

<p><strong>富田</strong>：いえ、レスポンシブとかではなくて、PC専用に作っています。SNSなどでシェアされたURLはPCからでもアクセスできるため、PC用の記事ページを用意しています。</p>

<p><img src="/wp-content/uploads/2017/09/a62e25023750308dc74bc0daa58c6104.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24139" srcset="/wp-content/uploads/2017/09/a62e25023750308dc74bc0daa58c6104.jpg 640w, /wp-content/uploads/2017/09/a62e25023750308dc74bc0daa58c6104-300x200.jpg 300w, /wp-content/uploads/2017/09/a62e25023750308dc74bc0daa58c6104-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>JavaとPerlでサーバー管理</h2>

<p><strong>白石</strong>：サーバーサイドでJavaとPerlという複数言語を使っているのはなぜですか？</p>

<p><strong>森藤</strong>：もともとPerlで全体が作られていたのですが、社内の方針で最近はJavaで作ろうという流れになってきています。なので、最近のレポジトリとかはJavaで作ってます。まあ、歴史的背景です(笑)。</p>

<p>Perlはニュースタブと記事ページ、あと社内向けのCMSもPerlで作られています。</p>

<p><strong>白石</strong>：へえ！CMSは自作なんですね。ちなみに、ReactはAPIを出すのに使ってるんですか？</p>

<p><strong>森藤</strong>：はい、ニュースタブの部分は、全てAPIで実装されています。</p>

<p><img src="/wp-content/uploads/2017/09/7fc05e3e81bcb17d5b5ad87ec08a1f58.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-24141" srcset="/wp-content/uploads/2017/09/7fc05e3e81bcb17d5b5ad87ec08a1f58.jpg 640w, /wp-content/uploads/2017/09/7fc05e3e81bcb17d5b5ad87ec08a1f58-300x195.jpg 300w, /wp-content/uploads/2017/09/7fc05e3e81bcb17d5b5ad87ec08a1f58-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：Reactでサーバーサイドレンダリングしているのでしょうか。</p>

<p><strong>大槻</strong>：いえ、クライアント側でレンダリングしています。</p>

<p>APIでとってきたデータをローカルストレージにのせておいて、ネットワークがないところでも画面が真っ白にならないように工夫しています。</p>

<p><strong>白石</strong>：JavaとPerlで分かれていますけど、システム間連携しているんですか？</p>

<p><strong>森藤</strong>：データベースで連携しています。データベースはMySQLを使っています。</p>

<p><strong>白石</strong>：MySQLをクラウド上で？</p>

<p><strong>森藤</strong>：いえ、オンプレです。本番環境は、現在ほとんどオンプレのサーバーで動いていますが、最近構築したサーバーや開発環境はプライベートクラウドの「Verda」というサービスを使っています。</p>

<p><strong>白石</strong>：えっ、どこかの製品を買うのではなく、自分たちで作ってるんですか。かっこいいですね。</p>

<p><strong>森藤</strong>：DB周りはDBA（データベース管理者）のチームが運用しています。DBサーバーの構成は、マスター1台に参照やバックアップに使うスレーブが数台ある感じです。テキストで入稿するデータなので、データ容量が一気に増えて困ったとか、容量が足りなくなったという話も聞いたことがないですね。</p>

<p><strong>白石</strong>：Javaで入稿システムを作っていらっしゃるんですよね。ScalaやKotlinなんかも使っているんでしょうか？</p>

<p><strong>前澤</strong>：Javaだけです。最近のモダンな言語に比べると、やっぱりJavaは冗長というかすごいコード量を書かないといけないのは大変なんですが…。</p>

<p><img src="/wp-content/uploads/2017/09/7e28640bea28ad295c056205fe2d3ed1.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24142" srcset="/wp-content/uploads/2017/09/7e28640bea28ad295c056205fe2d3ed1.jpg 640w, /wp-content/uploads/2017/09/7e28640bea28ad295c056205fe2d3ed1-300x200.jpg 300w, /wp-content/uploads/2017/09/7e28640bea28ad295c056205fe2d3ed1-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：ぼくは昔Javaエンジニアだったのですごく気になるんですが、Javaのバージョンは何ですか？</p>

<p><strong>前澤</strong>：Java 8です。</p>

<p><strong>大槻</strong>：僕も前職では、エンタープライズ系のサービスをJavaで書いていました。その時はバージョンが古くて4でした。あと8をちょっと触ったくらい。当時はジェネリクスもアノテーションもなくて(笑)。</p>

<p><strong>白石</strong>：僕はXML地獄でしたね(笑)。EclipseみたいなIDEとかは使ってますか？</p>

<p><strong>前澤</strong>：Eclipseは使ってなくて、IntelliJ IDEAを使ってます。</p>

<h2>React.jsを選択した背景は？</h2>

<p><strong>白石</strong>：フロントエンドのReact.jsはいつから使ってるんですか？</p>

<p><strong>大槻</strong>：ニュースタブができてからなので、2017年2月からですね。</p>

<p><strong>白石</strong>：苦労したこととかありますか？</p>

<p><strong>大槻</strong>：React.jsだから苦労したことは特になかったんですが、どのライブラリにするかは結構検証しました。Vue.jsやRiot.jsなんかもいろいろ試してみたのですが、結局React.jsにしました。</p>

<p>Create React Appでベースを立ち上げた経緯もあって、最初の環境を整えるのはすごくスムーズでした。React.jsは結構書きやすくて、世の中で使われているアプリも多く、バージョンアップも早いし、安定していて信頼できました。</p>

<p><strong>白石</strong>：なるほど。stateの管理とか、Reduxは使ってますか？</p>

<p><strong>大槻</strong>：Reduxは最初は使おうと思ったのですが、意外と過剰なスペックがあってやめました。代わりにFlux Utilsを使っています。</p>

<p><img src="/wp-content/uploads/2017/09/b469fca96ff63ef07dd9aa9661fa216d.jpg" alt="" width="640" height="416" class="alignnone size-full wp-image-24144" srcset="/wp-content/uploads/2017/09/b469fca96ff63ef07dd9aa9661fa216d.jpg 640w, /wp-content/uploads/2017/09/b469fca96ff63ef07dd9aa9661fa216d-300x195.jpg 300w, /wp-content/uploads/2017/09/b469fca96ff63ef07dd9aa9661fa216d-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>足りない開発ツールはどんどん作る</h2>

<p><strong>白石</strong>：ほかにLINEさん独自の開発手法があれば教えてください。</p>

<p><strong>大槻</strong>：フロントのアクセス解析はGoogle アナリティクスを使っているんですが、そのほかに社内で開発した「LINE Analytics」という解析ツールを使っています。JavaScriptのエラー部分もリアルタイムに収集できるので、リリース直後に増減を確認したりしています。</p>

<p><strong>白石</strong>：LINEさんは結構社内で作る文化があるんですね。自分たちでも作るというのは、意思決定が必要だと思うんですが、どんなかんじで決めているんですか？</p>

<p><strong>富田</strong>：その辺は結構自由にやらせてもらえる風土ですね。プロジェクトで使うツールだけでなく、たとえばメーラーやスケジュール管理といった社内システムについて内製する部署があります。既製品でもの足りなかったら、自分たちで作っちゃおうみたいな。</p>

<p><strong>大槻</strong>：分業しているのでサーバーに触れること自体は少ないんですが、JSやCSSの配信ツールをフロントエンドチーム内で開発したりと、役割内で足りないものは作って配布させたりする人が多いですね。</p>

<p>サーバー側はCIも自前で作ってると聞きました。社内の承認フローがそれほどかたくないので、わりと気軽に自前で作ってます。</p>

<p><strong>白石</strong>：CIもですか！Jenkinsとかを使わずに？</p>

<p><strong>前澤</strong>：Perlでは内製のCIを使っていますが、JavaではJenkinsを使ってビルドしていて、ビルドした成果物をサーバーに配布するシステムは内製です。CDNのオリジンサーバーも自作してますね。</p>

<p><img src="/wp-content/uploads/2017/09/602ad76d16be61a37571ec369267e1b3.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24145" srcset="/wp-content/uploads/2017/09/602ad76d16be61a37571ec369267e1b3.jpg 640w, /wp-content/uploads/2017/09/602ad76d16be61a37571ec369267e1b3-300x200.jpg 300w, /wp-content/uploads/2017/09/602ad76d16be61a37571ec369267e1b3-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>秒間2万のアクセスを捌くパフォーマンス</h2>

<p><strong>白石</strong>：パフォーマンスなんかもかなり気をつかっているんじゃないでしょうか。</p>

<p><strong>森藤</strong>：はい。APIアクセスが秒間2万くらいのアクセスがあるので試行錯誤しています。APPサーバーの台数は約30台くらいなんですが。</p>

<p><strong>森藤</strong>：去年の6月に高速化プロジェクトがあって、CDNを追加しました。CDNはAkamaiを使っています。クエリーをちゃんと書いてなかったりするとサービスが止まるので、SQLには気をつけてキャッシュに貯めるようにしていますね。</p>

<p><strong>白石</strong>：フロントエンドのパフォーマンスで工夫した点はどうですか？</p>

<p><strong>大槻</strong>：ニュースタブは縦に長いんですけど、DOMが増え過ぎるとメモリを食ってアプリがクラッシュしてしまう問題がありました。</p>

<p>iPhoneでは横スワイプでタブ移動できるので、左右のタブを予め描画している分よりDOMが多く、見えないDOMをいかに削除していくかなどの工夫をしています。</p>

<p><img src="/wp-content/uploads/2017/09/03af4a0fd0dd99fb25cd675d50767410.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-24147" srcset="/wp-content/uploads/2017/09/03af4a0fd0dd99fb25cd675d50767410.jpg 640w, /wp-content/uploads/2017/09/03af4a0fd0dd99fb25cd675d50767410-300x194.jpg 300w, /wp-content/uploads/2017/09/03af4a0fd0dd99fb25cd675d50767410-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>タスク管理・チーム間の共有ツールは？</h2>

<p><strong>白石</strong>：皆さんは所属する組織は違うとのことですが、「LINE NEWS」プロジェクトのタスク管理やチーム間の共有ツールはどうしていますか。</p>

<p><strong>富田</strong>：ニュースチームのプロジェクトとして定例ミーティングをして、進捗管理しています。管理に使っているツールはJIRAですね。</p>

<p><strong>白石</strong>：進め方はアジャイルですか？</p>

<p><strong>富田</strong>：そんなにアジャイルぽくはないです。企画チームが20人くらいいて、案件ベースを作ってくれるので、早い段階で開発からもフィードバックしたり、企画と一緒に練ったりします。1週間のスプリント制でやっています。</p>

<p><img src="/wp-content/uploads/2017/09/a93d802f163a1d84f00d15d6fa46a45b.jpg" alt="" width="640" height="419" class="alignnone size-full wp-image-24150" srcset="/wp-content/uploads/2017/09/a93d802f163a1d84f00d15d6fa46a45b.jpg 640w, /wp-content/uploads/2017/09/a93d802f163a1d84f00d15d6fa46a45b-300x196.jpg 300w, /wp-content/uploads/2017/09/a93d802f163a1d84f00d15d6fa46a45b-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：ニュースチームは全体で何人くらいいらっしゃるんですか？</p>

<p><strong>前澤</strong>：企画や開発、制作、編集、アライアンス、モニタリング、PR・マーケティングなどを含めると、プロジェクトに関わっている人は100人を超えています。エンジニアは現在、バックエンドが8人、フロントエンドが4人です。</p>

<p><strong>白石</strong>：大型プロジェクトですね。CIは自作されてるとのことでしたけど、DevOpsみたいな工夫ポイントはありますか？</p>

<p><strong>前澤</strong>：これまでは五月雨で流動的だったけど、人が増えてきたので週1回のサイクルを整えたり、模索しているところです。</p>

<p><strong>白石</strong>：ソースコードの管理やリリースのルールとかはどうでしょう。</p>

<p><strong>森藤</strong>：ソースコードの管理はGitHubです。Perl側は最低2人レビュアーがいないとリリースやマージしちゃいけないことになっています。</p>

<p><img src="/wp-content/uploads/2017/09/39bde474619f03cb353ff513ca4ae7b9.jpg" alt="" width="640" height="421" class="alignnone size-full wp-image-24149" srcset="/wp-content/uploads/2017/09/39bde474619f03cb353ff513ca4ae7b9.jpg 640w, /wp-content/uploads/2017/09/39bde474619f03cb353ff513ca4ae7b9-300x197.jpg 300w, /wp-content/uploads/2017/09/39bde474619f03cb353ff513ca4ae7b9-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>急成長するサービスと開発体制に合った環境を構築</h2>

<p><strong>白石</strong>：最後に今後こうしたいという抱負や、チャレンジしたい目標を教えてください。</p>

<p><strong>前澤</strong>：LINEのサービスが急速に成長して、エンジニアも増えているので、開発時期によってリポジトリやフレームワークの使い方も違ってきています。それを統一したいと思っているんですけど、結構大変そうです(笑)。</p>

<p><strong>森藤</strong>：これまでのサーバーサイドはほとんどPerlだったんですけど、ここ数年みんなJavaを書くようになって、Perlを書くエンジニアが減ってきているんです。サーバー側をもっとJavaに置き換えていけたらと思ってます。</p>

<p><strong>大槻</strong>：TypeScriptを導入も検討していきたいです。依存するライブラリの都合もあって、簡単ではないかもしれませんが。</p>

<p><strong>富田</strong>：ニュースのプロジェクトが始まったのが2013年で、最近では更新が滞っているruby-sassやgrunt、compassといった古い環境に依存しており、日々の更新に忙しくてそういった根幹部分はなかなか手を入れることが難しかったんですが、最近のリリースで、タスクランナーに依存したコンパイルをやめたり、node-sassへの移行したりしました。</p>

<p>それに伴ってチームで使っている社内用のツールやsassのライブラリを更新しているので、今後も新しい技術についてそれらに生かせるか検証しつつ対応できればと思っています。</p>

<p><strong>白石</strong>：LINEさんは独自の開発ツールをどんどんつくっていく行動力と技術力が素晴らしいですね。今日はいろいろ面白い話をありがとうございました！</p>

<p>LINEさんでは、9月28日(木) にエンジニア向け技術カンファレンス「<a href="http://linedevday.linecorp.com/jp/2017/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">LINE DEVELOPER DAY 2017</a>」を開催するそうです。LINEの様々なサービスにおける技術領域でのチャレンジや開発体制などについて語られるとのことなので、興味のある方はぜひ参加してみてください。</p>

<p><img src="/wp-content/uploads/2017/09/DSC02651-2.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-24057" srcset="/wp-content/uploads/2017/09/DSC02651-2.jpg 640w, /wp-content/uploads/2017/09/DSC02651-2-300x195.jpg 300w, /wp-content/uploads/2017/09/DSC02651-2-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>JJUGのエキスパートが語るエンタープライズ・アーキテクチャの過去、現在、未来──SOAP・RESTからIoT・ウェアラブルまで</title>
		<link>/yoshikawa_t/14403/</link>
		<pubDate>Fri, 15 May 2015 00:00:38 +0000</pubDate>
		<dc:creator><![CDATA[吉川 徹]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[アーキテクチャ]]></category>
		<category><![CDATA[エンタープライズ]]></category>
		<category><![CDATA[クラウド]]></category>

		<guid isPermaLink="false">/?p=14403</guid>
		<description><![CDATA[連載： アプリケーションアーキテクチャ最前線 (4)特集企画「アプリケーションアーキテクチャ最前線」では、さまざまな視点からアプリケーションアーキテクチャをエキスパートたちに語っていただきます。今回は、エンタープライズ・...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/arch/" class="series-287" title="アプリケーションアーキテクチャ最前線" data-wpel-link="internal">アプリケーションアーキテクチャ最前線</a> (4)</div><p>特集企画「アプリケーションアーキテクチャ最前線」では、さまざまな視点からアプリケーションアーキテクチャをエキスパートたちに語っていただきます。今回は、エンタープライズ・アーキテクチャについて取り上げます。</p>

<p>HTML5・モバイル・IoT・ウェアラブルなどビジネス環境が激変する中、エンタープライズ・アーキテクチャはどういう課題を抱えていて、どうあるべきなのか。今回は、<a href="http://www.java-users.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JJUG (日本Javaユーザーグループ）</a>でご活躍中のお二人に話を伺うことにしました。</p>

<p><img src="/wp-content/uploads/2015/04/hx-21.jpg" alt="" width="600" height="354" class="aligncenter size-full wp-image-14671" srcset="/wp-content/uploads/2015/04/hx-21.jpg 600w, /wp-content/uploads/2015/04/hx-21-300x177.jpg 300w, /wp-content/uploads/2015/04/hx-21-207x122.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>アーキテクチャを主軸に第一線で活躍している<a href="https://www.gxp.co.jp/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">グロースエクスパートナーズ株式会社</a> 執行役員の鈴木雄介さんと、「流しのアーキテクト」を自称する<a href="http://www.architectus.co.jp/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">株式会社アーキテクタス</a> 代表取締役の細川努さんを交えて、エンタープライズ開発出身の白石俊平編集長がさまざまなトピックスをぶつけていきます。</p>

<h2>XML Webサービスは今どうなったのか</h2>

<p><br>
<strong>白石：</strong>とりあえず、昔話から軽く聞いてみたいですね。まずは、エンタープライズ内のシステム間連携でよく話題に上がる、<a href="http://ja.wikipedia.org/wiki/SOAP_%28プロトコル%29" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SOAP</a>とRESTについての現状について、どうお考えでしょうか？
<br><br>
<strong>鈴木：</strong>SOAPは下火だと思われがちですが、私の知る限り、今でもよく利用されています。RESTとJSONの組み合わせも当然よく使われているんですが、（SOAPは）<a href="http://ja.wikipedia.org/wiki/Web_Services_Description_Language" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WSDL</a>で型定義ができるので、それなりにかたいシステム間連携だったりすると、WSDLがあるほうがコードの自動生成もできるし、非常に楽なのでよく使われています。</p>

<p><img src="/wp-content/uploads/2015/04/hx-131.jpg" alt="" width="600" height="370" class="aligncenter size-full wp-image-14680" srcset="/wp-content/uploads/2015/04/hx-131.jpg 600w, /wp-content/uploads/2015/04/hx-131-300x185.jpg 300w, /wp-content/uploads/2015/04/hx-131-207x128.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />　　 ▲グロースエクスパートナーズ株式会社 執行役員 鈴木雄介さん</span>
<br><br>
<strong>細川：</strong>とはいえ、SOAPの上位レイヤで規定されている<a href="http://en.wikipedia.org/wiki/WS-Reliability" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WS-Reliability</a>だとか<a href="http://ja.wikipedia.org/wiki/WS-Security" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WS-Security</a>などの様々なプロトコルは、あまり使われていない印象です。
<br><br>
<strong>白石：</strong>では、システム間連携などではプレーンなSOAPがよく使われているということですね。
<br><br>
<strong>鈴木：</strong>まあSOAPもRESTも用意する、というパターンが多いんじゃないでしょうか。オブジェクトモデルは同じで、それをSOAPでもJSONでも表現できるように設計しておくというパターンは、比較的多いような気がします。
<br><br>
<strong>細川：</strong>あと僕が気になるのは、スケーラビリティなんですよね。SOAPだとちょっと気になるのはやっぱりシリアライズ・デシリアライズの処理が重いし、トラフィックも増大するじゃないですか。そういった意味だとやっぱりREST + JSONのほうにもメリットがありますね。本来だったら使い分けみたいなところが重要なんですけど、いまだにSOAP一択という開発現場も多い。</p>

<p><img src="/wp-content/uploads/2015/04/hx-151.jpg" alt="" width="600" height="357" class="aligncenter size-full wp-image-14692" srcset="/wp-content/uploads/2015/04/hx-151.jpg 600w, /wp-content/uploads/2015/04/hx-151-300x179.jpg 300w, /wp-content/uploads/2015/04/hx-151-207x123.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />　　　▲株式会社アーキテクタス 代表取締役 細川努さん</span>
<br><br>
<strong>白石：</strong>どっちかに寄せちゃったほうが考えることが少なくて、楽ってこともあるかもしれないですね。
<br><br>
<strong>鈴木：</strong>一長一短…というとつまらない話になってしまいますが（笑）、実際のところそういう結論になっちゃいますね。HTML5が盛り上がっている現在、JavaScriptと相性が良いJSONにはすごく価値がある。一方で例えば、日付型をどう扱うんだとか、型定義やコードの自動生成がしづらいというJSONには苦手な分野もあるのですが、SOAPはそういう部分に強い。「SOAPはXMLだからダメ・ダサい」ということは、実際のシステム開発には全く当てはまらないと思いますよ。
<br><br></p>

<h2>エンタープライズアーキテクチャパターンは今も有効か</h2>

<p><br>
<strong>白石：</strong>アーキテクチャという点では、<a href="http://www.amazon.co.jp/dp/4798105538" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">マーティン・ファウラーのエンタープライズ アプリケーションアーキテクチャパターン</a>が昔は王道だったかとと思うんですが、それは今も有効なんでしょうか？
<br><br>
<strong>鈴木：</strong>あれは普遍的なものなので、時代が変わったからといって使えなくなってしまうようなものではありません。ただ、昔と比べると今はWeb API主導型のアプリケーションが主流になりつつありますね。クライアントのマルチデバイス化は当然エンタープライズでも相当重要なので、「サーバー側はAPIを提供するだけ」というスタイルに移行しつつあるのは、Webでもエンタープライズでもまったく変わらないと思います。
<br><br>
<strong>白石：</strong>具体的には、<a href="http://ja.wikipedia.org/wiki/JAX-RS" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">JAX-RS</a>を利用するとか？
<br></p>

<p><img src="/wp-content/uploads/2015/04/hx-18.jpg" alt="" width="600" height="390" class="aligncenter size-full wp-image-14678" srcset="/wp-content/uploads/2015/04/hx-18.jpg 600w, /wp-content/uploads/2015/04/hx-18-300x195.jpg 300w, /wp-content/uploads/2015/04/hx-18-207x135.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>JAX-RSもありますし、JSON用のバインディングAPIもJava EE 7で標準化されたので、何の違和感もなく使えますね。
<br><br>
<strong>細川：</strong>エンタープライズ アプリケーションアーキテクチャパターンは非常に洗練されていたのですが、実際のエンタープライズ・アプリケーションはもっと泥臭いです（笑）。
例えば<a href="http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%83%BB%E3%83%95%E3%82%A1%E3%82%A6%E3%83%A9%E3%83%BC" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">マーティン・ファウラー</a>の提唱するモデルだと、プレゼンテーションレイヤからデータレイヤまでが3、4層ぐらいなんですが、実際はビジネスロジックだけで3層以上に分けたりとか、ビジネスロジックとプレゼンテーションの間にいろいろ挟んだりとか、端から端まで数えると下手したら10層ぐらいあるものも実際のプロジェクトでは山ほどありました。
<br><br>
<strong>白石：</strong>僕もそういうプロジェクトをやったことがあります。なんか別のメソッドを呼び出してるだけのメソッドが大量にあったり（笑）。
<br><br>
<strong>細川：</strong>そうそう。なので、どちらかというとほんとに綺麗なレイヤリングはできてなかったというのが現実ですね。最近、６〜７年以前につくられた数十万ステップくらいのシステムをいくつか実際に解析してみたんですけど、結構面白い結果が出たんですよ。サーバーサイドJava（JavaEE）としては最新ではなく、まだJ2EEと呼ばれていた頃のシステムです。どのシステムも、一番複雑度が高いのはビューとデータアクセス（永続化）、アーキテクチャ共通系のモジュールです。ビジネスロジックの部分は量は膨大なんですけど、複雑度自体は比較的シンプルなんです。 
<br><br>
何が言いたいかというと、古い世代のサーバーサイドJavaは、ビューとアーキテクチャ制御に作り込みが必要で、そこのところが本当に大変だった。例えば、ビューのところのバリデーションなんかは、かなり作り込みが必要で、簡単な画面作るのも相当手間がかかってたんですよね。結局は、<strong>かつてのJava EE（J2EE）って、エンタープライズ系プログラマーが本来集中すべき業務上のロジックにあんまり集中できていなくて、もっと簡単にできるはずのところに手間がかかっていた</strong>のが現実だったんじゃなかったかなと。
<br><br>
<strong>白石：</strong>ほんとにそうですよね。オブジェクトの変換とか、別のメソッド呼び出すだけとか、<a href="http://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ファサード</a>作ってそこに一生懸命集めるだけとかやっていて、なにやってるんだろうこれは…とか思っていました。
<br><br>
<strong>細川：</strong>以前はそうでしたね。そのレガシーなところが今はみんなの足を引っ張ってる（笑）。現在は、それがどれだけ良くなってるか、というところですよね。
<br></p>

<p><img src="/wp-content/uploads/2015/04/hx-16.jpg" alt="" width="600" height="343" class="aligncenter size-full wp-image-14675" srcset="/wp-content/uploads/2015/04/hx-16.jpg 600w, /wp-content/uploads/2015/04/hx-16-300x172.jpg 300w, /wp-content/uploads/2015/04/hx-16-207x118.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>白石：</strong>今の流れをまとめると、ビューの複雑なところっていうのが、だんだんクライアント側に寄ってきていて、ようはHTML5でリッチクライアント化されてきて、サーバー側はAPIを提供しているだけになっていると。
<br><br>
<strong>鈴木：</strong>大きくはそうです。ただ、エンタープライズシステムの場合、とにかくシステム間連携が多くて、1つの企業の中でいろんなシステムがあって、ほとんどのシステムが関連付いているのが当然になっています。そうするとクライアント側からするといろんなシステムにいちいちログインして使うのは面倒くさいので、どうやってシンプルに使うのかというのが今の大きなテーマになっていると思います。サーバー間で連携したり、クライアント側でアグリゲーションしたりというのが今の課題としてあって、エンタープライズの場合は、そこがシンプルにならないので、それがひとつの前提になっています。
<br><br>
<strong>白石：</strong>なるほど。そのシステム間連携がさきほどおっしゃっていたようにXMLベースだったり、RESTだったりという感じですね。
<br><br>
<strong>鈴木：</strong>はい。企業って、いろんなユーザーといろんなシステムがあるので、いわゆる一般コンシューマー向けのECサイトのようなシステムもあれば、例えば人事システムみたいなものもありますよね。人事システムだと、人事部だけが使うのでユーザーが10人しかいなかったり、でも社員数10万人を支える人事システムっていうと相当でかいっていうものだとか。じゃあその2つが同じアーキテクチャで、同じ作り方でいいんですかっていうと全然そうじゃないですよね。
<br><br>
企業の中のさまざまなシステムの中で、HTML5に合うものもすごく増えてますし、HTMLの可能性が広がったことでやれることもすごく増えましたが、一方でそれが銀の弾丸ではないです。ここはRESTでつくったらいいよねとか、ここはWSDLがちゃんとあってSOAPでやったほうがいいよねっていうのがある。そこは全体の中での選択してやっていけばよいことです。エンタープライズの人って古めかしい人印象があるかもしれないですけど、新しいことも古いこともやらきゃいけないので、そういう意味ではちゃんとまともにやっている人は、それを両方うまくバランスよくやっていますね。</p>

<h2>エンタープライズとモバイル</h2>

<p><br>
<strong>白石：</strong>最近のエンタープライズ業界に疎くて、初心者的な質問で申し訳無いのですが、モバイルをエンタープライズで使うというのはもうかなり普通に行われていることなんでしょうか。
<br><br>
<strong>鈴木：</strong>そうですね。モバイル、タブレット、PC、専用の機器とか、何を何に使うといいよねっていうユースケースはちゃんと考えなきゃいけないですが、モバイルはものすごく重要なツールとして使われています。
<br><br>
<strong>白石：</strong>エンタープライズでモバイルといえば結構HTML5が使われているという話を聞くのですが、実際そうなんですか？コンシューマ向けだと、ネイティブアプリが全盛です。</p>

<p><img src="/wp-content/uploads/2015/04/hx-19.jpg" alt="" width="600" height="369" class="aligncenter size-full wp-image-14679" srcset="/wp-content/uploads/2015/04/hx-19.jpg 600w, /wp-content/uploads/2015/04/hx-19-300x185.jpg 300w, /wp-content/uploads/2015/04/hx-19-207x127.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>そもそもモバイルという文脈で求められる操作性とか機能が、エンタープライズの場合はそんなにネイティブでやらなくてもいいようなものが多いので、HTML5がフィットしてるんじゃないかと思います。例えば、ゲームはネイティブアプリがいいといわれますが、別にあそこまでビジュアル的なものとか、細やかな操作性はあんまり求められることはないと。
<br><br>
なので、HTML5でやるっていうのは多いんじゃないでしょうか。Webアプリであれば、リリースも楽ですしね。去年ぐらいまでは写真とか音声とかでいろいろやろうとすると、まだまだHTML5では制約が多いということでネイティブアプリという選択もありましたが、そうした制約もブラウザが進化してきてだんだん問題にならなくなってきています。
<br><br>
<strong>白石：</strong>なるほど。ちなみに、そうしたHTML5で書かれた業務アプリは、ハイブリッドアプリとしてインストールする形が多いのか、それともWebサイトとしてURLでアクセスする形で作るんでしょうか。
<br><br>
<strong>鈴木：</strong>それは両方あります。どちらにも利点があるので。</p>

<h2>クラウドがアーキテクチャに与えた影響は？</h2>

<p><br>
<strong>白石：</strong>これも初心者的な質問で恐縮です。クラウドがエンタープライズのアーキテクチャに与えた影響はありますか。
<br><br>
<strong>鈴木：</strong>もちろんあります。クラウドができたことで一番大きかったのは、PaaSという概念ができたことですね。あるニーズに特化したものっていうのは共有化されたものが使われるべきだっていう概念がはっきりしたのはPaaSのおかげです。例えばAWSのラインナップを見て貰うとわかるんですが、CDNありますねだとか、ロードバランサありますねだとか、ストレージ、サーバーノード、認証認可とか、メールの配信サービスとか、ああいうものはPaaSとしてみんなが共有して使うべきだという概念ができた。
<br><br>
なので、そういうプラットフォームを用意してその上にアプリケーションを作って、アプリケーションはUIを含めてそれだけに特化して、なるべくプラットフォームの機能をうまくつかってやっていくていうアイデアは、今のエンタープライズでも浸透している考え方だと思います。</p>

<p><img src="/wp-content/uploads/2015/04/hx-17.jpg" alt="" width="600" height="394" class="aligncenter size-full wp-image-14677" srcset="/wp-content/uploads/2015/04/hx-17.jpg 600w, /wp-content/uploads/2015/04/hx-17-300x197.jpg 300w, /wp-content/uploads/2015/04/hx-17-207x136.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>細川：</strong>開発者視点でいうと、開発者ができる領域が増えてきましたね。従来だと、サーバ構築とソフトウェア開発は別々のものでしたが、プログラマーがだんだんとクラウドを前提にして、環境を構築するようになってきた。そうすると、同時にパフォーマンスだとかセキュリティだとかをエンジニアが自分で考えなきゃいけない時代になってきていて、Webエンジニアだとかエンタープライズエンジニアとかの区別はなくなってきている。そういう意味では、フルスタックで両方できなきゃまずいんじゃないでしょうか。
<br><br>
<strong>鈴木：</strong>もうそれはエンタープライズでも間違いなくそうですね。
<br><br>
<strong>細川：</strong>もうひとつの特徴としては、昔は大規模＝エンタープライズということが多かったんですが、今ではコンシューマー向けとかゲームだとか、そっちのほうがより大規模なんですよね。それを実現しているのがやっぱりクラウドなのかと思っています。そういった意味でも、これからはWebエンジニアこそ大規模を得意にならなきゃいけないんじゃないかと。サーバーとクライアントのメッセージの単位なんかもパフォーマンスに大きく影響するので、そういったところも、かなりノウハウを積まないといけなくなってきています。</p>

<h2>エンタープライズ・アーキテクチャの未来像</h2>

<p><br>
<strong>白石：</strong>IoTとかウェアラブルとかを見据えて、今後どういうふうにエンタープライズ・アーキテクチャが変わっていくべきか、ご意見はありますか？
<br><br>
<strong>鈴木：</strong>IoTを真剣にやろうとすると、先ほど細川さんが言っていた大規模っていうのがエンタープライズに戻ってくるんですよね。対応するデバイスの数が、今まではユーザーが数万人ですんだのが、億になるかもしれない。例えば、すべてのダンボール箱にチップがついたらどうなるんだろうっていう世界を考える。そうすると日本で流通しているダンボール箱は何箱あるんだとか、ものすごいクライアントの数になってしまう。そうなってくると、エンタープライズがまた大規模な性能を頑張らないといけなりますね。
<br><br>
例えば、わかりやすい例でB2Bのケースを考えると、トラックをトレースする仕組みを作ることになったとします。じゃあ全国にあるトラックを全台管理しますとなったときに、全部で何台あるのか。1台のトラックにセンサーがいくつついているのかということになると、センサーが車輪それぞれにあって、それぞれのタイヤのすり減り方を計測して、運転手が寝てるんじゃないかというのを監視するセンサーがあって、速度・加速度をとるセンサーがあって…というようにトラックにすごい数のセンサーがある。</p>

<p><img src="/wp-content/uploads/2015/04/hx-22.jpg" alt="" width="640" height="353" class="aligncenter size-full wp-image-14690" srcset="/wp-content/uploads/2015/04/hx-22.jpg 640w, /wp-content/uploads/2015/04/hx-22-300x165.jpg 300w, /wp-content/uploads/2015/04/hx-22-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br>
そして、トラックを1万台管理します、データを500msごとに取るとすなると、ものすごい数になる。つまり、B2BでIoT、ウェアラブルというのはB2Cのスケーラビリティをエンタープライズでもう1回頑張らないといけないということになる。今、Webの人が大規模で頑張っているテクノロジーセット、例えば大量のストリームを処理しながらイベントドリブンでやるっていうのは昔からエンタープライズにあって、それがWeb側ですごく実用化されて使われていたのが、またエンタープライズに戻ってくる。そういう流れが未来にはやってくるんじゃないかなと考えています。
<br><br>
<strong>白石：</strong>なるほど。ちなみに、もう実際にIoTの案件とか発生しているんでしょうか。
<br><br>
<strong>鈴木：</strong>相談はかなり増えてきてますね。まだ実証実験ぐらいが多いという感覚ですが。今は車がうまくいっていて、ホンダの事例がわかりやすいです。日本中の車のブレーキの発生情報を集めてるんですけど、それを解析すると事故が発生しやすい曲がり角がわかるんですよね。みんながたくさんブレーキを踏んでいる曲がり角がどこかっていうのを提供しているんですよ。そしたらそれを元に道路の信号とか標識とかを改善するってことをやっています。</p>

<h2>まとめ</h2>

<p><br>
<strong>白石：</strong>本日は、エンタープライズ・アーキテクチャについて様々なご意見をいただき、誠にありがとうございました。最後に、読者に向けて一言お願いします。</p>

<p><img src="/wp-content/uploads/2015/04/hx-20.jpg" alt="" width="600" height="387" class="aligncenter size-full wp-image-14681" srcset="/wp-content/uploads/2015/04/hx-20.jpg 600w, /wp-content/uploads/2015/04/hx-20-300x194.jpg 300w, /wp-content/uploads/2015/04/hx-20-207x134.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>自分たちの生活を考えると、やっぱりエンタープライズ業界の会社が自分達の生活を支えてるわけじゃないですか。それがより便利になったり、役立つようになったり、世の中が進化するっていうのはとても大事なことだと思うんですよ。なので、それが実現されるためにはどうしたらいいのかっていうときに、エンタープライズとかWebとかそういう区切りはどうでもよくて、どうやれば本当に価値がでるのか、そういうのを考えるのが面白い。
<br><br>
ただ、社会基盤として変えてはいけないところもエンタープライズにはどうしてもあるので、それをどのように変えずに、より新しいことにトライしながら今あるものの価値をより高めるのかというところが大事ですね。なので「エンタープライズwww」という風潮はよろしくないと思います（笑）。</p>

<p><img src="/wp-content/uploads/2015/04/hx-211.jpg" alt="" width="600" height="381" class="aligncenter size-full wp-image-14682" srcset="/wp-content/uploads/2015/04/hx-211.jpg 600w, /wp-content/uploads/2015/04/hx-211-300x191.jpg 300w, /wp-content/uploads/2015/04/hx-211-207x131.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>細川：</strong>2点あって、ひとつは、今までのエンタープライズ開発は、ユーザーの言われたものを作るという風潮が多かったんですが、今後はユーザーと一緒につくるっていうのは大事になってくるんじゃないかと考えています。そういう意味ではエンタープライズ業界もWeb業界と同じようにUXとか、よりユーザーが求めるものは何かというところを柔軟に対応してかなきゃいけない。エンタープライズもWebに学ばなきゃいけないということ。
<br><br>
もうひとつは、今後、変化がたくさんあって、それに対応するためにエンタープライズ側、Web側が両方対応しないと対応できないんじゃないかなと思う。これらの技術の変化に対応できるようにフルスタック、両方できるようなエンジニアが増えてくると心強いんじゃないでしょうか。</p>
]]></content:encoded>
		
		<series:name><![CDATA[アプリケーションアーキテクチャ最前線]]></series:name>
	</item>
		<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>
