<?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>Sencha &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/sencha/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>エンタープライズで使える！実践から学ぶJavaScript MVCフレームワークの選び方</title>
		<link>/msakamaki/9486/</link>
		<pubDate>Thu, 21 Aug 2014 00:00:20 +0000</pubDate>
		<dc:creator><![CDATA[酒巻瑞穂]]></dc:creator>
				<category><![CDATA[システム開発]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Backbone.js]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Yeoman]]></category>
		<category><![CDATA[エンタープライズ]]></category>

		<guid isPermaLink="false">/?p=9486</guid>
		<description><![CDATA[連載： エンタープライズ開発特集 (3)現在エンタープライズシステムの開発現場では、シングルページアプリケーション（SPA: 単一のWebページで構成されているWebアプリケーションのこと）アーキテクチャの採用が模索され...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/enterprise/" class="series-197" title="エンタープライズ開発特集" data-wpel-link="internal">エンタープライズ開発特集</a> (3)</div><p>現在エンタープライズシステムの開発現場では、シングルページアプリケーション（SPA: 単一のWebページで構成されているWebアプリケーションのこと）アーキテクチャの採用が模索されるなど、根本的な開発パラダイムにおいて大きな変化が起きようとしています（全体的にどのような変化があるかは<a href="https://html5experts.jp/albatrosary/" data-wpel-link="internal">エキスパートNo59の佐川夫美雄さん</a>の書かれた<a href="https://html5experts.jp/albatrosary/3191/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「JavaからHTML5ヘ。業務システムの開発におけるWeb技術の変化と適応事例」</a>によくまとまっています）。</p>

<p>こうした変化の一部を支えているのが、JavaScriptによるMVCフレームワークです。数あるフレームワークの中で、実際にどのフレームワークを採用するかというのは、開発コストだけではなく学習・運用コストにも関わる、非常に大きな問題です。</p>

<p>この記事では、普段エンタープライズ開発に携わる筆者が、実際にJavaScriptフレームワークを選定するにあたって考慮したこと、そして実際の開発・運用から得た学びを具体的にお伝えします。エンタープライズ開発に従事する、読者の皆さんの開発作業に役立てていただければ幸いです。</p>

<h2>フレームワークの選定に必要な考慮事項</h2>

<p>一口にJavaScript MVCフレームワークといっても、よくWebで名前を見かけるものだけで、Sencha、KendoUI、Backbone.js、AngularJS、Ember.js、knockout.jsなどが挙げられ、最近などはVueJSというものも注目を浴びています。そのような数多くのJavaScriptMVCフレームワークの中から、やみくもに試して選定を行うのは、現実的ではありません。</p>

<p>そこで私は、ベンターサポートの有無やブラウザのサポート状況、ドキュメントの情報量や書籍の有無などを元に、まずはフレームワークを以下の3つまで絞り込みました。</p>

<ul>
<li>Backbone.js</li>
<li>AngularJS</li>
<li>Sencha</li>
</ul>

<p>そこからさらに、以下のような基準を設けてプロトタイピングを行うことで、実際に使用するフレームワークの選定にあたりました。</p>

<h4>機能から見る、フレームワークの責任とコスト</h4>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b-1024x382.png" alt="フレームワーク機能" width="1024" height="382" class="aligncenter size-large wp-image-10278" srcset="/wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b-1024x382.png 1024w, /wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b-300x112.png 300w, /wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b-207x77.png 207w, /wp-content/uploads/2014/08/2a88bcbe7f516dcefdfd2218cea0988b.png 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>

<ul>
<li>学習コスト ── 元バックエンドエンジニアたちにかかる学習コストはどの程度なのか？</li>
<li>開発の容易性 ── 実際にフレームワークを適用した際、どれくらい開発コストを低減してくれるか？</li>
<li>コードの統一感 ── 開発・運用ルール通りの品質に、コード全般をフレームワークの機能でどれだけ統一することが可能なのか？</li>
<li>ロックイン ── 「そのフレームワークを使い続けなければならない」というリスクを回避・低減することが可能か？</li>
<li>（フレームワーク固有の）運用コスト ── 運用にかかるコストやリスクの担保はどこでどのように行うのか？</li>
</ul>

<p>ただし、ロックインや運用コストは、フレームワークを導入する上ではある意味避けられない点です。また、技術の移り変わりが激しい現在の状況を鑑みると、一つのフレームワークへの依存度を強めることは、長期的に見ればリスクだと考えられます。そこで私は、プロジェクトごとにその時点で最適なフレームワークを選択することにしました。</p>

<p>これからのエンタープライズ開発では、どんなフレームワークを選択したかに依存しない社内標準ルールや設計資産を残し、開発や運用のコストなどはそちらで担保することのほうが重要となるのではないかと私は考えています。</p>

<h2>フレームワークを比較する</h2>

<p>では実際に、上記の観点から私がフレームワークを比較してみた結果を、以下に挙げます。先程申し上げたように、プロトタイピングまで行って比較したフレームワークはBackbone.js、AngularJS、Senchaの3つになります。</p>

<h3><a href="http://backbonejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Backbone.js</a></h3>

<p><a href="http://backbonejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/roadmap-for-backbonejs-beginners-00-300x53.png" alt="roadmap-for-backbonejs-beginners-00" width="300" height="53" class="alignnone size-medium wp-image-10081" srcset="/wp-content/uploads/2014/08/roadmap-for-backbonejs-beginners-00-300x53.png 300w, /wp-content/uploads/2014/08/roadmap-for-backbonejs-beginners-00-207x36.png 207w, /wp-content/uploads/2014/08/roadmap-for-backbonejs-beginners-00.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Webアプリケーションに構造化された仕組みを取り入れることができる、とてもコンパクトなフレームワークです。
ライセンスはMITです。</p>

<ul>
<li>学習コスト ── 既にjQueryなどを用いた開発経験のあるチームが社内にある場合は、ほぼその経験を引き継いで開発ができるため、学習コストが低くなります。</li>
<li>開発の容易性 ── Backbone単体はそれほど多くの機能を持っていません。そのため複雑、高度なことを低コストで行おうとした場合は様々なJavaScriptライブラリと組み合わせる必要があります。</li>
<li>コードの統一感 ── Backbone単体で使うことは少ないため、様々なライブラリと併用することになるでしょう。そのため、何も対策をせずに開発を行うとプロジェクト全体での統一感がなくなってしまうことが多いため、注意が必要です。</li>
<li>ロックイン ── 数あるJavaScript MVCフレームワークの中でも、最もロックインの度合いが低いと感じました。しかしながら、高度なことを低コストでやるためのフレームワーク（<a href="http://marionettejs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Marionette.js</a>など）を組み合わせはじめた場合、ロックインの度合いは、ほかのフレームワークとそれほど変わらないかもしれません。</li>
<li>運用コスト ── ベンダーサポートは今のところありません。</li>
</ul>

<p>Backbone.jsは歴史も長く、適用事例も数多いため、経験のある要員の調達という点においては、ほかのフレームワークよりも頭一つ秀でています。</p>

<p>開発補助ツールとしては、<a href="https://addons.mozilla.org/ja/firefox/addon/firebug/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebug</a>のプラグイン<a href="https://addons.mozilla.org/ja/firefox/addon/Backbone-Eye/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Backbone-Eye</a>があり、技術的な面での運用コストを下げてくれるでしょう。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/08/backbone.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/backbone.png" alt="backbone" width="470" height="283" class="alignnone size-full wp-image-10246" srcset="/wp-content/uploads/2014/08/backbone.png 470w, /wp-content/uploads/2014/08/backbone-300x180.png 300w, /wp-content/uploads/2014/08/backbone-207x124.png 207w" sizes="(max-width: 470px) 100vw, 470px" /></a></p>

<h4>まとめ</h4>

<ul>
<li>ライブラリの組み合わせにより、どのように作成するかを含め、様々な手段がとれます。</li>
<li>他のフル機能なフレームワークと違い、不要な機能を極力除外した、最適化されたアーキテクチャを構築することができます。</li>
<li>また、アーキテクチャごとのGood Practicesも多く蓄積されています。</li>
</ul>

<p>基本的に選定したライブラリ群＋チーム内で策定したガイドラインでプロジェクトを運用する、コンパクトなWebアプリケーションを作成したいケースで多く使用しています。</p>

<h3><a href="https://angularjs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AngularJS</a></h3>

<p><a href="https://angularjs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/AngularJS-large-300x84.png" alt="AngularJS-large" width="300" height="84" class="alignnone size-medium wp-image-10079" srcset="/wp-content/uploads/2014/08/AngularJS-large-300x84.png 300w, /wp-content/uploads/2014/08/AngularJS-large-207x58.png 207w, /wp-content/uploads/2014/08/AngularJS-large.png 383w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>独自のHTML構文を使うことで、静的なHTMLと動的なアプリケーション部の不整合の解決図った、多彩な機能を持つフレームワークです。ライセンスはMITです。</p>

<ul>
<li>学習コスト ── すべてを学習しようとした場合はJavaScript MVCフレームワークの中でも、最も高いものとなります。また、学習した内容は完全にAngularJSに限定されたものになります。</li>
<li>開発の容易性 ── JavaScriptの記述量はとても少なくなり、開発工数の大幅な削減が可能です。</li>
<li>コードの統一感 ── テンプレートエンジンからバックエンドとの通信部分まで、フレームワークがカバーする範囲が非常に大きいので、ルールを設けて制作することでプロジェクトを横断したコードの統一感を生み出します。しかし気をつけなければならないのは、ビューに関するロジックをコントローラー内でも記述可能な柔軟性を有していることです。そのため、ルールを作らず複数人で実装した場合は、他のJavaScript MVCフレームワーク以上の混沌としたコードとなるリスクも秘めています。</li>
<li>ロックイン ── 設計から自動テストまで、ほぼAngularJSにロックインされます。</li>
<li>運用コスト ── ベンダーサポートは今のところありません。経験のある要員調達については、現状はかなり難しい印象を受けます、そのため要員の調整や追加の際は教育コストを考慮したほうがよいと考えます。しかし、最近になり適用事例が増えているため、今後は要員においても困ることがなくなってくるのではと考えます。開発補助ツールとして、Chromeの拡張機能である<a href="https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AngularJS Batarang</a>があり、技術的な面での運用コストを下げてくれるでしょう。</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/08/Angular.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/Angular.png" alt="Angular" width="468" height="278" class="alignnone size-full wp-image-10244" srcset="/wp-content/uploads/2014/08/Angular.png 468w, /wp-content/uploads/2014/08/Angular-300x178.png 300w, /wp-content/uploads/2014/08/Angular-207x122.png 207w" sizes="(max-width: 468px) 100vw, 468px" /></a></p>

<h4>まとめ</h4>

<ul>
<li>「Module」や「Provider」、「Dependency Injection」といった豊富なAngularの機能に合わせてガイドラインを作ることで、素早く強固なプロジェクトルールが作成できます。</li>
<li>複雑さや共通部分をAngularJSの標準機能である「Directive」、「Module」に梱包することが可能です。</li>
<li>個人的には、Yeomanのgenerator-angularと、generator-angular-fullstackをベースとして開発を行っています。</li>
</ul>

<p>非常に多機能であることの裏返しとして、プロジェクトによっては不要となる機能も多く持ち合わせています。そのような場合には無理をして使わず、Backbone.jsと様々なフレームワークを組み合わせることで、最適化したアーキテクチャを構築する方針を採用しています。</p>

<h3><a href="https://www.sencha.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Sencha</a></h3>

<p><a href="https://www.sencha.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/sencha-large-300x112.png" alt="sencha-large" width="300" height="112" class="alignnone size-medium wp-image-10080" srcset="/wp-content/uploads/2014/08/sencha-large-300x112.png 300w, /wp-content/uploads/2014/08/sencha-large-207x77.png 207w, /wp-content/uploads/2014/08/sencha-large.png 372w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>SenchaはJavaScriptフレームワークの一つというものではなく、アプリケーションフレームワークです。デスクトップはExt JS、モバイルはSencha Touchのように個別のFrameworkが用意されており、豊富なUIウィジェットと、その組み合わせによる開発で複雑さをの解決を図っています。ライセンスはGPLv3と商用、商用OEMが存在します。</p>

<ul>
<li>学習コスト ── 環境構築、開発からリリースに至るまでフレームワークが機能としてサポートしています。その反面、フレームワークの学習コストはとても高くなります。</li>
<li>開発の容易性 ── HTMLやJavaScriptの記述は最低限で、画面の制作が可能です。</li>
<li>複雑さはSenchaフレームワークがほぼ吸収してくれるため、他のフレームワークほど高度なJavaScriptに関する知識が必要ありません。</li>
<li>コードの統一感 ── Sencha特有の拘束力でコードの統一感はとても高いものとなっています。</li>
<li>ロックイン ── 開発環境からリリースまでのほぼすべてがロックインされます。</li>
<li>運用コスト ── ベンダーサポートがあります。私の経験したプロジェクトでは、Sencha要員の確保が難しく、外部からメンバーを揃えることができませんでした。そのため、要員調達よりも教育コストをかけてSenchaができるメンバーを内部で用意するという方法をとっています。幸い、Senchaはベンダーによるトレーニングもあるため教育コストの見通しが立てやすいというメリットもあります。開発補助ツール等は、有料ですが様々な製品があります。</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/08/Sencha.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/Sencha.png" alt="Sencha" width="469" height="284" class="alignnone size-full wp-image-10245" srcset="/wp-content/uploads/2014/08/Sencha.png 469w, /wp-content/uploads/2014/08/Sencha-300x181.png 300w, /wp-content/uploads/2014/08/Sencha-207x125.png 207w" sizes="(max-width: 469px) 100vw, 469px" /></a></p>

<h4>まとめ</h4>

<ul>
<li>フレームワークによる拘束力が非常に高いです。Senchaで書かれた場合は、意識せずともコードや開発ルールが統一されるでしょう。</li>
<li>複雑さはSenchaフレームワークがほぼ吸収してくれるため、他のフレームワークほど高度なJavaScriptに関する知識が必要ありません。</li>
<li>しかしながら、環境構築、開発からリリースまでフルスタック、強固な拘束力と言う特徴故に学習コストはとても高いです。</li>
<li>個人的な経験として、Senchaフレームワークの提供してくれる機能の枠を越えようとした場合には、他のフレームワーク以上の複雑さが必要となる印象を受けます。</li>
<li>使いこなす上では、Senchaフレームワークの枠に収まるか、収まらないか見極めが重要と私は考えます。</li>
<li>トレーニング、高度な機能がSenchaで欲しい場合、適用できるかの見極めなどは、Senchaをサポートしているベンダーがあるため、そういったベンダーへ相談を行うという手もあります。</li>
</ul>

<p>Webシステムを開発する必要があるが、HTML5系の技術要員調達や教育が難しい場合に選択しています。</p>

<h2>事例: AngularJSの導入と開発</h2>

<p>ここからは、私が業務システム開発において、実際にJavaScript MVCフレームワークを導入した事例として、AngularJSを採用した事例を紹介します。</p>

<p>実は、フレームワークを選定するにあたって、AngularJSの評価は当初低いものでした。</p>

<p>AngularJSは独特の書き方が多いため、ロックインの色が強く見え、多くのメンバーが難色を示したためです。また、ドキュメントの量が膨大なため、学習コストが高そうに思えたことも低評価の原因でした。</p>

<p>しかし、フレームワークがカバーする範囲が大きいため、設計から開発、そしてテストまでを同一の思想で統一することができそうなのは魅力的でした。</p>

<p>また、実際にプロトタイプを作って評価してみたところ、一見膨大な機能も、その大半は使わなくとも簡単なシングル・ページ・アプリケーションなら組み上げることが可能だとわかりました。jQueryも共存可能であるため、実質「制作だけするならば、学習コストはそこまで多くもないのではないか」という見通しを立て、AngularJSを選定しました。</p>

<h3>元バックエンドエンジニア達にとっての学習コスト</h3>

<p>フロントエンドエンジニアの調達に困っていた私のプロジェクトにおいて、既存の技術者にとっての学習コストはとても重要でした。</p>

<p>この課題に対して、AngularJSが持つ機能をフル活用して、既存のスキルに応じた分業を行うことで、学習曲線をゆるやかにするという方針を取ることにしました。具体的には、以下の様なチームに分けて分業を行いました。</p>

<ul>
<li>UIテンプレートチーム（デザイナー、フロントエンジニアが担当）</li>
<li>Directiveチーム（フロントエンジニアが担当）</li>
<li>ビジネスロジックチーム（フロントエンジニア、バックエンドエンジニアが担当）</li>
<li>Moduleチーム（フロントエンジニア、バックエンドエンジニアが担当）</li>
</ul>

<p>上記のように分業することで、元々バックエンドしか担当したことのなかった技術者にも、少しずつJavaScriptやDOM操作に慣れていってもらい、だんだんとフロントエンドの実装を任せることができるようになりました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/08/skill.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/skill.png" alt="skill" width="732" height="480" class="aligncenter size-full wp-image-10291" srcset="/wp-content/uploads/2014/08/skill.png 640w, /wp-content/uploads/2014/08/skill-300x196.png 300w, /wp-content/uploads/2014/08/skill-207x135.png 207w" sizes="(max-width: 732px) 100vw, 732px" /></a></p>

<p>このような経験から、私はバックエンドエンジニアにフロントに関わってもらう際にははまず、サーバに近く、ロジカルなJavaScript部分で、フロントエンドエンジニアとペアプログラミングを行って、フロントエンドのプログラミングに慣れてもらうようにしています。あとは実践を踏まえて少しずつできることを増やしていく…という流れです。</p>

<h3>開発者の開発環境は統一すべきか？</h3>

<p>ただ、ペアプログラミングを行うにあたって、大きな問題となったのが開発環境の問題です。フロントエンドエンジニアとバックエンドエンジニアは、それぞれ慣れ親しんだ開発環境が異なります。</p>

<p>当初は、Visual StudioかEclipseで開発環境を統一しようとしていましたが、それらに慣れていないエンジニアにとっては、非常に高い学習コストが必要とされます。</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/2014/08/6052.yeoman-horizontal.gif" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/08/6052.yeoman-horizontal-300x135.gif" alt="6052.yeoman-horizontal" width="300" height="135" class="alignnone size-medium wp-image-10172" srcset="/wp-content/uploads/2014/08/6052.yeoman-horizontal-300x135.gif 300w, /wp-content/uploads/2014/08/6052.yeoman-horizontal-207x93.gif 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Yeomanは、タスクの自動化を行うGruntや、Webアプリ向けのパッケージマネージャーであるBowerと連携しながら、Webアプリのコード生成を自動化してくれるツールです。Yeomanには数多くのサブジェネレーターが存在し、様々なアーキテクチャに基づいたWebアプリケーションを迅速に構築することが可能です。</p>

<p>プロジェクトの骨格づくりにYeomanを利用することで、アーキテクチャ部分については統一しつつも、その後の開発においてはエンジニアがそれぞれ慣れ親しんだ開発環境を使えばよい…という形にすることで、開発や学習に余分なコストをかけることなく、堅牢なアプリケーションを迅速に開発できたと自負しています。</p>

<p>また、既に現在のWeb開発では数多くのフレームワークやライブラリを組み合わせる必要があることや、今後Web Components（HTMLフロントエンドのコンポーネント化を促進するための標準仕様）などの大変革が予想できるフロントエンド開発において、Yeomanのようなコードジェネレータの重要性は今後も高まっていくと予想しています。</p>

<p>開発コストの大幅な低減になるだけではなく、様々なアーキテクチャを気軽に試せますし、ベストプラクティスを世界中で共有することにもなります。実際私の経験でも、<a href="https://github.com/Yeoman/generator-angular" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">generator-angular</a>のサブジェネレータに沿った形で開発を行うことで、かなりの開発コストを削減することができました。</p>

<h2>おわりに</h2>

<p>これまでは私の実務経験からのJavaScriptフレームワーク選定における経験をお話しました。</p>

<p>さらに個人的には、Web標準の今後を見据えて技術を選定することが、アーキテクトには求められているように感じています。</p>

<h3>Web標準とJavaScriptフレームワーク</h3>

<p>現在も、Web標準は絶え間なく進化を続けています。1年前選択した正しいアーキテクチャが、今も正しいと言い切れない、そんな状況である中、我々は約1年か、それ以上の期間をかけてシステムを構築する必要があります。</p>

<p>この進化スピードの中で、1年後も安定した技術を選ぶためには、枯れて進歩が止まったような技術を選ぶしかないのでしょうか？</p>

<p>私は、そうではなくWeb標準に適合していくライブラリやフレームワークこそが、その答えの一つではないかと考えています。</p>

<p>AngularJSは早くからWeb Componentsの考えを取り入れていました。そして、2.0ではPolymerへの対応を予定しています。Knockout.jsやVue.jsも同じく、Web ComponentなどのWeb標準への対応がなされています。</p>

<p>また、TypeScriptのようなaltJSと呼ばれる様々な言語においても、ECMAScript 6で採用される機能（クラスやモジュールなど）との親和性が重要なファクターとして認識されつつあります。</p>

<p>エンタープライズ開発でも、このようなWeb標準技術の実用的なラインを見極めて、Web標準に則った社内標準ルールや、開発インフラを整えていく必要があるのではないかと考えます。</p>

<p>先に述べたAngularJSを導入したプロジェクトでも、将来的な置換えの可能性も考えて、Web Componentsを意識したコーディングを心がけていました。</p>

<p>Web標準と共にシステムが成長し、手術後の縫合糸のように、フレームワークが自然とWeb標準へ吸収される。そしてその流れを阻害しない、そのようなアーキテクチャが、今後のエンタープライズシステムにおけるフロントエンド開発の理想だと私は考えます。</p>
]]></content:encoded>
		
		<series:name><![CDATA[エンタープライズ開発特集]]></series:name>
	</item>
		<item>
		<title>スマートデバイスに特化したSencha Touchでハイブリッド開発（PhoneGap/Cordovaの利用）</title>
		<link>/albatrosary/7298/</link>
		<pubDate>Tue, 08 Jul 2014 01:00:32 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Cordova]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PhoneGap]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[ハイブリッド]]></category>

		<guid isPermaLink="false">/?p=7298</guid>
		<description><![CDATA[連載： ハイブリッドアプリ開発最前線 (5)Sencha Touchは、スマートデバイス開発に特化したJavaScriptフレームワークです。米Sencha社によって開発されました。米Sencha社にはデスクトップ用のS...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/hybrid-special/" class="series-181" title="ハイブリッドアプリ開発最前線" data-wpel-link="internal">ハイブリッドアプリ開発最前線</a> (5)</div><p>Sencha Touchは、スマートデバイス開発に特化したJavaScriptフレームワークです。<a href="http://www.sencha.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">米Sencha社</a>によって開発されました。米Sencha社にはデスクトップ用のSencha Ext JSもありますが、それ以外にもHTML5（JavaScript/CSSを含む）を使ってWebアプリケーションを構築するための様々な開発ツール/サービスを展開しています。</p>

<p>開発環境はWindowsでもMacでも可能です。ここではMacでの開発手順を示しますが、Windowsでも代わりありません。Sencha Touchが動作するデバイスはiPad/iPhone/Windows Phone/BlackBerry/Android 2.3+等、そのほとんどをサポートしています（<a href="http://www.sencha.com/products/touch/features/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">http://www.sencha.com/products/touch/features/</a>）。</p>

<h2>Senchaについて</h2>

<p>Senchaは、単にJavaScriptフレームワークの一つというものではなく、アプリケーションフレームワークです。強力でかつ整理されていて、拡張も可能、メンテナンスも可能なアプリケーションを構築することができます。そのためエンタープライズ向きと言われるところでもあります。</p>

<h3>特徴</h3>

<ul>
    <li>レイアウトマネージャによるデザイン設計</li>
    <li>UIコンポーネントが豊富</li>
    <li>Sencha独自のクラスシステム</li>
</ul>

<p>Senchaには「Sencha Cmd」という<a href="http://yeoman.io/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Yeoman</a>と同じようなSCAFFOLDING TOOLがあります。プロジェクトを作成すると、動くアプリケーションがすぐにでき上がります。この動くアプリケーションからコーティングを開始します（画面のハードコピーとソースを添付します）。</p>

<p>画面の構成はJSONで行いますが、ビジネスロジックは当然JavaScriptで記載します。Senchaは画面構成は設定レベルですませ、エンジニアを業務アプリケーションにとって、最も重要なビジネスロジック部に注力させるよう仕組み作りを行っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70-198x300.png" alt="スクリーンショット 2014-07-01 19.01.49" width="198" height="300" class="alignnone size-medium wp-image-7789" srcset="/wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70-198x300.png 198w, /wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70-676x1024.png 676w, /wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70-136x207.png 136w, /wp-content/uploads/2014/07/bb904cf5876c7a892bd9fc28156f5c70.png 423w" sizes="(max-width: 198px) 100vw, 198px" /></a>
<a href="https://html5experts.jp/wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52-198x300.png" alt="スクリーンショット 2014-07-01 19.02.01" width="198" height="300" class="alignnone size-medium wp-image-7790" srcset="/wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52-198x300.png 198w, /wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52-676x1024.png 676w, /wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52-136x207.png 136w, /wp-content/uploads/2014/07/06aabe6359e9ab8a0af58b4eb992dc52.png 423w" sizes="(max-width: 198px) 100vw, 198px" /></a><a href="https://html5experts.jp/wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b-198x300.png" alt="スクリーンショット 2014-07-01 19.02.04" width="198" height="300" class="alignnone size-medium wp-image-7791" srcset="/wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b-198x300.png 198w, /wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b-676x1024.png 676w, /wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b-136x207.png 136w, /wp-content/uploads/2014/07/830864a9a2ab639d7007ea3225cb2c7b.png 423w" sizes="(max-width: 198px) 100vw, 198px" /></a></p>

<p></p><pre class="crayon-plain-tag">Ext.define('SampleApp.view.Main', {
    extend: 'Ext.tab.Panel',
    xtype: 'main',
    requires: [
        'Ext.TitleBar',
        'Ext.Video'
    ],
    config: {
        tabBarPosition: 'bottom',

        items: [
            {
                title: 'Welcome',
                iconCls: 'home',

                styleHtmlContent: true,
                scrollable: true,

                items: {
                    docked: 'top',
                    xtype: 'titlebar',
                    title: 'Welcome to Sencha Touch 2'
                },

                html: [
                    "You've just generated a new Sencha Touch 2 project. What you're looking at right now is the ",
                    "contents of &lt;a target='_blank' href="app/view/Main.js"&gt;app/view/Main.js&lt;/a&gt; - edit that file ",
                    "and refresh to change what's rendered here."
                ].join("")
            },
            {
                title: 'Get Started',
                iconCls: 'action',

                items: [
                    {
                        docked: 'top',
                        xtype: 'titlebar',
                        title: 'Getting Started'
                    },
                    {
                        xtype: 'video',
                        url: 'http://av.vimeo.com/64284/137/87347327.mp4?token=1330978144_f9b698fea38cd408d52a2393240c896c',
                        posterUrl: 'http://b.vimeocdn.com/ts/261/062/261062119_640.jpg'
                    }
                ]
            }
        ]
    }
});</pre><p></p>

<h3>ライセンス形態</h3>

<p>Sencha Ext JS/Sencha Touch共に3つのライセンス形態が存在しています。</p>

<ul>
    <li>オープンソースライセンス(GPL v3)</li>
    <li>商用ライセンス</li>
    <li>商用OEMライセンス</li>
</ul>

<p>GPL v3ライセンスのもと、自由に利用することが可能ですが、商用アプリにSenchaを利用する場合は、商用ライセンス（開発者ライセンス）を購入する場合がほとんどです。</p>

<p>では、具体的に開発手順を追って説明します。</p>

<h2>開発手順</h2>

<p>Sencha Touchは100% PureなHTML5アプリケーションですが、カメラなどのハードウェアリソースを利用する場合にはPhoneGapもしくはCordovaを利用します（PhoneGap/Cordovaについては、<a href="https://html5experts.jp/fenomas/7672/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらの記事</a>も参考にしてください）。開発手順の大まかな流れを以下に示します。</p>

<ul>
    <li>Sencha Touchアプリケーション開発の準備</li>
    <li>Sencha Touchプロジェクトの作成</li>
    <li>Sencha TouchとPhoneGapもしくはCordovaとの連携</li>
    <li>プラグインの追加およびコーティング</li>
    <li>エミュレータもしくは実機で実行</li>
</ul>

<h2>Sencha Touchアプリケーション開発の準備</h2>

<p>Sencha Touchでアプリケーション開発を行うための準備としては、以下の2つが必要です。</p>

<ul>
    <li><a href="http://www.sencha.com/products/sencha-cmd/download" title="Senchaコマンド" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Senchaコマンド</a>のインストール</li>
    <li><a href="https://www.sencha.com/products/touch/" title="Sencha Touch" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Sencha Touch Software Development Kit</a>のダウンロード</li>
</ul>

<p>Sencha Touch SDKをダウンロードしたら「~/Library/Sencha/」の中へ保存し展開します（習慣的に「~/Library/Sencha/」を利用しますが、どこでもかまいません）。SDKはZIP圧縮されていますので、unzipコマンド等で解凍します。</p>

<p>これに加え、Androidエミュレータ、iOSエミュレータ、PhoneGap、Cordovaなどの開発ツールも必要になりますので、必要なものをインストールしてください（それらのインストール手順については説明を割愛します）。</p>

<h2>Sencha Touchプロジェクトの作成</h2>

<p>Senchaでプロジェクト開発をする際、一番最初に実行するコマンドは以下の<code>sencha</code>コマンドです。</p>

<p><code>
$ sencha -sdk [使うsdkのディレクトリを指定] generate app [アプリケーション名] [アプリケーション開発ワークディレクトリ]
</code></p>

<p>今回は、以下のように実行しています（任意の空ディレクトリ上で実行してください）。</p>

<p><code>
$ sencha -sdk ~/Library/Sencha/touch-2.3.1 generate app SampleApp ./my_sencha_touch_app
</code></p>

<p>このコマンドを実行すると、以下の様なファイルやディレクトリが作成されます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/06/34246d01797bbc7d955f1c3fe9bb01a1.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/06/34246d01797bbc7d955f1c3fe9bb01a1-300x261.png" alt="スクリーンショット 2014-06-19 15.11.01" width="300" height="261" class="alignnone size-medium wp-image-7314" srcset="/wp-content/uploads/2014/06/34246d01797bbc7d955f1c3fe9bb01a1-300x261.png 300w, /wp-content/uploads/2014/06/34246d01797bbc7d955f1c3fe9bb01a1-207x180.png 207w, /wp-content/uploads/2014/06/34246d01797bbc7d955f1c3fe9bb01a1.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<h2>Sencha TouchとPhoneGapもしくはCordovaとの連携</h2>

<p>次に、Sencha TouchアプリケーションとPhoneGapを連携させます。そのために<code>sencha phonegap init</code>というコマンドを使います。</p>

<p><code></p>

<h1>PhoneGap環境の初期化</h1>

<p>$ sencha phonegap init com.albatrosary.SampleApp SampleApp
</code></p>

<p>Cordovaを利用する場合は<code>sencha cordova</code>を用います。</p>

<p><code>
$ sencha cordova init com.albatrosary.SampleApp SampleApp
</code></p>

<p><code>sencha phonegap</code>コマンドを実行することによりPhoneGap/Cordova用のセットアップが行われ、phonegapディレクトリ、phonegap.local.propertiesファイルが生成されています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/06/0c9d85af6ce73561bc8162d34f5a60f7.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/06/0c9d85af6ce73561bc8162d34f5a60f7-283x300.png" alt="スクリーンショット 2014-06-19 15.09.33" width="283" height="300" class="alignnone size-medium wp-image-7315" srcset="/wp-content/uploads/2014/06/0c9d85af6ce73561bc8162d34f5a60f7-283x300.png 283w, /wp-content/uploads/2014/06/0c9d85af6ce73561bc8162d34f5a60f7-195x207.png 195w, /wp-content/uploads/2014/06/0c9d85af6ce73561bc8162d34f5a60f7.png 605w" sizes="(max-width: 283px) 100vw, 283px" /></a></p>

<h2>プラグインの追加およびコーティング</h2>

<p>作成するアプリケーションでは、モバイルデバイスが備えるカメラを使用するため、PhoneGapプラグインの導入を行います。プラグインを追加するには<code>phonegap</code>コマンドを使います。<br />
カメラ用のプラグインをインストールするには、プロジェクトディレクトリ内にあるphonegapディレクトリに移動し、プラグイン追加のコマンドを実行してください。</p>

<p><code>
$ phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git
</code></p>

<p>次にカメラを利用するためのアプリケーションをコーディングします。下記サンプルコードをapp/view/Main.jsに記載します。</p>

<p></p><pre class="crayon-plain-tag">Ext.define('SampleApp.view.Main', {
    extend: 'Ext.Panel',
    xtype: 'main',
    requires: [
        'Ext.Button',
        'Ext.Img'
    ],
    config: {
        layout: {
            type:"vbox",
            pack:"center",
            align:"center"
        },
        items: [
            {
                xtype: "image",
                src: "http://peatix.com.new.s3.amazonaws.com/user/229914/logo-html5j_200w.png",
                width: 200,
                height: 200
            },
            {
                xtype: "button",
                text: "Photo",
                handler: function() {
                    function success(image_uri) {
                        var img = Ext.ComponentQuery.query("image")[0];
                        img.setSrc(image_uri);
                    }

                    function fail(message) {
                        alert("Failed: " + message);
                    }

                    navigator.camera.getPicture(success, fail, 
                        {
                            quality: 50,
                            destinationType: navigator.camera.DestinationType.FILE_URI
                        }
                    );
                }
            }
        ]
    }
});</pre><p></p>

<p>対象となるデバイスを選択するため設定ファイル「phonegap.local.properties」を変更します。今回はphonegap.platformとしてAndroidを指定しています。</p>

<p><code></p>

<h1>The following are supported platforms for local building (blackberry is version 10)</h1>

<h1>android, blackberry, ios, wp7, wp8</h1>

<p>#</p>

<h1>The following are supported platforms for remote building (blackberry is version 6)</h1>

<h1>android, blackberry, ios, symbian, webos, wp7</h1>

<h1>This property can be a single platform or a space delimited list</h1>

<p>phonegap.platform=android</p>

<h1>This determines if build is remote (phonegap build) or local</h1>

<p>phonegap.build.remote=false</p>

<h1>Username for PhoneGap Build</h1>

<p>phonegap.build.remote.username={username}</p>

<h1>Password for PhoneGap Build</h1>

<p>phonegap.build.remote.password={password}
</code></p>

<p>phonegap.build.remote以降の設定内容は<a href="https://build.phonegap.com/plans" title="Adobe PhoneGap Build" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">リモートビルド</a>する場合の指定です（リモートビルドはCordovaの場合には存在しません）。</p>

<p>html5jのロゴをamazonaws.comから取得していますので「my_sencha_touch_app/config.xml」にアクセス許可のためにaccessタグのoriginとして「http://peatix.com.new.s3.amazonaws.com/*」を追加します。</p>

<p><code>
   origin="http://peatix.com.new.s3.amazonaws.com/*"
</code></p>

<p><br /></p>

<h2>エミュレータもしくは実機で実行</h2>

<p><code>
$ sencha app build -run native
</code></p>

<p>このコマンドは、実機がUSB接続されている場合は実機にモジュールが転送されますが、実機が接続されていない場合にはエミュレータが起動します。実機を接続しないで動かしてみます。</p>

<p>起動中の画面<br />
<a href="https://html5experts.jp/wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9-300x172.png" alt="スクリーンショット 2014-06-19 14.42.22" width="300" height="172" class="alignnone size-medium wp-image-7304" srcset="/wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9-300x172.png 300w, /wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9-1024x590.png 1024w, /wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9-207x119.png 207w, /wp-content/uploads/2014/06/c99b6f834594a09276b3680cab825bf9.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>起動完了<br />
<a href="https://html5experts.jp/wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea-300x172.png" alt="スクリーンショット 2014-06-19 14.42.45" width="300" height="172" class="alignnone size-medium wp-image-7305" srcset="/wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea-300x172.png 300w, /wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea-1024x589.png 1024w, /wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea-207x119.png 207w, /wp-content/uploads/2014/06/5b8f7fd5ab6be4f09cc5e47de6ed5fea.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>続いて、実機をUSB接続しコマンドを実行します。アプリケーションが転送されますので実行確認を行いました。実機のスクリーンショットを添付します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44-168x300.png" alt="Screenshot_2014-07-01-21-14-44" width="168" height="300" class="alignnone size-medium wp-image-7810" srcset="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44-168x300.png 168w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44-576x1024.png 576w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44-116x207.png 116w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-44.png 360w" sizes="(max-width: 168px) 100vw, 168px" /></a>
<a href="https://html5experts.jp/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55-168x300.png" alt="Screenshot_2014-07-01-21-14-55" width="168" height="300" class="alignnone size-medium wp-image-7811" srcset="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55-168x300.png 168w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55-576x1024.png 576w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55-116x207.png 116w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-14-55.png 360w" sizes="(max-width: 168px) 100vw, 168px" /></a>
<a href="https://html5experts.jp/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01-168x300.png" alt="Screenshot_2014-07-01-21-16-01" width="168" height="300" class="alignnone size-medium wp-image-7812" srcset="/wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01-168x300.png 168w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01-576x1024.png 576w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01-116x207.png 116w, /wp-content/uploads/2014/07/Screenshot_2014-07-01-21-16-01.png 360w" sizes="(max-width: 168px) 100vw, 168px" /></a></p>

<h2>適用事例</h2>

<p>今回ご紹介させていただいたSencha Touch、Sencha Ext JSは様々なところで利用されています。ご参考までにわずかではありますが、いくつかの事例をご紹介します。</p>

<p><a href="http://www.sencha.com/apps/wacoal-thailand" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/wacoal-icon.jpg" alt="wacoal-icon" width="80" height="80" class="alignnone size-full wp-image-7843" srcset="/wp-content/uploads/2014/07/wacoal-icon.jpg 175w, /wp-content/uploads/2014/07/wacoal-icon-150x150.jpg 150w" sizes="(max-width: 80px) 100vw, 80px" /></a> <a href="http://www.sencha.com/apps/forbes-photos-videos" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/forbes-icon.jpg" alt="forbes-icon" width="80" height="80" class="alignnone size-full wp-image-7844" srcset="/wp-content/uploads/2014/07/forbes-icon.jpg 175w, /wp-content/uploads/2014/07/forbes-icon-150x150.jpg 150w" sizes="(max-width: 80px) 100vw, 80px" /></a> <a href="http://www.sencha.com/apps/loccitane-en-provence" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/Loccitane-en-provence_icon.jpeg" alt="Loccitane-en-provence_icon" width="80" height="80" class="alignnone size-full wp-image-7862" srcset="/wp-content/uploads/2014/07/Loccitane-en-provence_icon.jpeg 175w, /wp-content/uploads/2014/07/Loccitane-en-provence_icon-150x150.jpeg 150w" sizes="(max-width: 80px) 100vw, 80px" /></a> <a href="http://www.sencha.com/apps/airport-car-rental/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/airport-car-rental-logo.png" alt="airport-car-rental-logo" width="80" height="80" class="alignnone size-full wp-image-7868" srcset="/wp-content/uploads/2014/07/airport-car-rental-logo.png 175w, /wp-content/uploads/2014/07/airport-car-rental-logo-150x150.png 150w" sizes="(max-width: 80px) 100vw, 80px" /></a> <a href="http://www.sencha.com/blog/sencha-touch-customer-spotlight-nervana-group/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/nervana-group-logo-300x240.jpg" alt="nervana-group-logo" width="100" height="80" class="alignnone size-medium wp-image-7951" srcset="/wp-content/uploads/2014/07/nervana-group-logo-300x240.jpg 300w, /wp-content/uploads/2014/07/nervana-group-logo-207x165.jpg 207w, /wp-content/uploads/2014/07/nervana-group-logo.jpg 500w" sizes="(max-width: 100px) 100vw, 100px" /></a> <a href="http://www.sencha.com/blog/sencha-touch-and-ext-js-customer-spotlight-decidokompetensor-the-impossible/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/20131007-Decido.jpg" alt="20131007-Decido" width="100" height="80" class="alignnone size-full wp-image-7953" /></a> <a href="http://www.sencha.com/blog/sencha-touch-customer-spotlight-harmon-ie/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/07/20130821-harmonie-spotlight.jpg" alt="20130821-harmonie-spotlight" width="100" height="80" class="alignnone size-full wp-image-7954" /></a></p>
]]></content:encoded>
	<enclosure url="http://av.vimeo.com/64284/137/87347327.mp4" length="295" type="video/mp4" />
	
		<series:name><![CDATA[ハイブリッドアプリ開発最前線]]></series:name>
	</item>
	</channel>
</rss>
