<?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>ng-japan 2015 特集 &#8211; HTML5Experts.jp</title>
	<atom:link href="/series/ngjapa2015/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>「NewRouter」という名前を付けてしまってゴメンナサイ…Angular開発者が生で答えるQ&#038;Aセッション─ng-japan 2015</title>
		<link>/albatrosary/14233/</link>
		<pubDate>Fri, 10 Apr 2015 03:00:31 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">/?p=14233</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (6)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第6回目）です。ng-japan特集最後は懇親会でのQ&#38;Aの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (6)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第6回目）です。ng-japan特集最後は懇親会でのQ&amp;Aの模様をレポートします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg" alt="16880968991_bb477b9a39_z" width="640" height="427" class="aligncenter size-full wp-image-14234" srcset="/wp-content/uploads/2015/04/16880968991_bb477b9a39_z.jpg 640w, /wp-content/uploads/2015/04/16880968991_bb477b9a39_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16880968991_bb477b9a39_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>AngularカンファレンスQ&amp;A</h1>

<h3>Q1. Angular 2を開発するに当たって、React.jsのアーキテクチャや考え方から影響を受けていますか？</h3>

<p>一定の影響はありました。よく聞かれる質問としては「Virtual DOMについて」ですが、我々はこのVirtual DOMがパフォーマンスを上げるために必ずしも必要となるものではないと考えています。それよりも「unidirectional data flow」という考え方のほうが役に立つのではないかと考えています。</p>

<p>プレゼンテーションの中でも「Immutable Infrastructure」については触れましたが、これについてはReactのチームともディスカッションを始めているところ。この分野についてはReactチームとAngularチームのコラボで行っていけるのではないかと考えています。</p>

<h3>Q2. GoogleのプロダクトでAngularはどのぐらい利用されていますか？</h3>

<p>Googleプロダクトの約2,000のアプリケーションで、Angularを使っています。特にGoogleが提供するクラウドでは、ほとんどのUIがAngularで書かれています。AngularチームというのはGoogle内でもいろいろな組織が存在していますが、その中に広告のグループであるAdsのチームがあり、ここでもAngularが使われています。その他にもGoogle内部だけで使われるような、内部プロセス用のアプリケーションについてもAngularが利用されています。</p>

<p>すべてのアプリケーションがAngular 2に移行するとは考えていませんが、Angular 2を使った方が簡単ものもありAngular 2を使う価値があるものについては移行をします。</p>

<h3>Q3. Angular 1系のサポートはいつまで行っていきますか？</h3>

<p>一時期Angular 1のサポートはいつまでで、Angular 2はいつからといった区切りを設定する予定でした。例えば、Angular 1のサポートを2016年末で終わりますと言って、Angular 2が2016年末に出てきたら、まったく移行の期間がなくなります。プレゼンテーションでも様々なお話をしたようないろいろなシグナルを見て今開発をしている人は、自分の位置がどのあたりにいて、今後どうなるのかを把握する必要があります。そして移行期間が作れるように、段階的に終了していくというのが正しい方向ではないかと考えています。</p>

<p>そして、GoogleだけがAngularに投資を行っている企業ではなく、Googleの外にもコアなチームメンバーがいて、彼らは彼らでAngularの開発にあたっています。なので我々としてもサポートをしっかりしていくということが重要でありオープンソースにとっても重要だと考えています。とは言うもののAngular 2を魅力的なものにし、しかもマイグレーションし易いものにし、誰もがAngular 2に移行した利用したいといった素晴らしいものに創りあげたいと考えています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg" alt="16261977763_ed8d764c2b_z" width="640" height="427" class="aligncenter size-full wp-image-14236" srcset="/wp-content/uploads/2015/04/16261977763_ed8d764c2b_z.jpg 640w, /wp-content/uploads/2015/04/16261977763_ed8d764c2b_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16261977763_ed8d764c2b_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>Q4. Angular 2の新しい機能に対してServiceとかFilterとか変な名前を付けてないか確認したい</h3>

<p>まだ名前の付け方が得意じゃないけど、なるべく混乱のないような名前をつけていきます。でも、もう既に新しいRouterに対して、「NewRouter」という名前を付けてしまってゴメンナサイ。</p>

<h3>Q5. Angularで検討されている機能で「Component Helper」というのがあるようですが、Angular1.4でリリースされる予定はありますか？</h3>

<p>他のコンポーネントとの兼ね合い、Angular 2の機能の一部をAngular1.4に入れていることもあり、もしかするとAngular1.5でリリースされるかもしれません。十分な時間をかけて検討していきたいと考えています。</p>

<p>このAPIというのはベストプラクティスとなっていくものです。「Component Helper」の仕様を一旦決めてしまうと後になって開発者が変えていくことは大変な労力が必要になるため、じっくり考える時間を設ける。「Component Helper」はAngular1.5に入れることを検討しています。</p>

<h3>Q6. New RouterでControllerを指定するようになっていますが、Component Directiveのようなものを指定するようにはならないでしょうか？</h3>

<p>我々がしようとしていることは、まさにそういったComponentを指定するということです。しかし、まだAngular 1系ではComponentを使うことはできない。いまはどうすれば、Angular 1とAngular 2とで整合性が保たれるか、Componentを導入できるかを検討しています。</p>

<h3>Q7. Angular 2でEvent Emitterの仕組みは導入されますか？</h3>

<p>Event Emitterの機能は、Angular 2ではありません。しかし、それに変わる別のやり方が提供されます。Angular 2では各パーツ間のコミュニケーションのやり方が変わっていきます。</p>

<p>その変わりに使えるものが2種類あります。</p>

<ul>
<li>DOM Event</li>
<li>サードパティ・ライブラリ</li>
</ul>

<p>この変更に対してどこにアドバンテージがあるのかというと、いろいろなケースを考えると今のAngularイベントを使っていった場合、さまざまなところでタイポが発生し、イベントの名前が間違ってしまうことがあります。するとイベント名が有効でなく一体何が起こったのが開発者がわからないという状況になりますので、問題を解決するために「Event Injection」を入れました。そうすることでダイレクトにイベントが伝わるようになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg" alt="16674642047_3cb1b85970_z" width="640" height="427" class="aligncenter size-full wp-image-14235" srcset="/wp-content/uploads/2015/04/16674642047_3cb1b85970_z.jpg 640w, /wp-content/uploads/2015/04/16674642047_3cb1b85970_z-300x200.jpg 300w, /wp-content/uploads/2015/04/16674642047_3cb1b85970_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>最後に（編集後記）</h1>

<p>ng-japanの様子を余すことなく書き下ろしましたが、いかがだったでしょうか？</p>

<p>Angular1.4の内容やNewRouterの機能、Angular 2に関すること、Angular 1からAngular 2へのマイグレーションなど盛りだくさんの内容だったと思います。Angularはあまり大規模なアプリケーションを作るのには不適という話もありますが、Angularチームが目指すところは規模に関わらず作りやすく、よりメンテナンスビリティの良いフレームワークを目指しているのではないかと思います。</p>

<p>AngularはGoogle社の閉じた世界観で作られているのではなく、Google社外のコミッターとの連携やReactチームとのコラボレーションもあり健全なオープンソースの道を歩んでいるのではないかと考えてます。しかも我々がAngularと関わりたいと思えばGitHubでissueを書くこともpull requestも送ることもできます。より関わることで、Angularが我々開発者にとって良いものになるのではと思います。</p>

<p>そのための一歩としてまずは、Angularを「触ってみる」ということも重要だと思います。「AngularJS Japan User Group」では各地で初心者向けハンズオンや、中上級者向けのハッカソン、ナイトセミナーも実施しておりますので、機会がありましたら足を運んでいただけたら幸いです。</p>

<p>最後に多くの方に来場いただき、感謝するとともに、多くのスポンサー様にご協力いただききました。この場をお借りし御礼申し上げます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/04/3bcdd72fb8d51ac61624d195f02dabd4.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/04/3bcdd72fb8d51ac61624d195f02dabd4.png" alt="スクリーンショット 2015-04-02 13.44.25" width="640" height="344" class="aligncenter size-full wp-image-14239" srcset="/wp-content/uploads/2015/04/3bcdd72fb8d51ac61624d195f02dabd4.png 640w, /wp-content/uploads/2015/04/3bcdd72fb8d51ac61624d195f02dabd4-300x161.png 300w, /wp-content/uploads/2015/04/3bcdd72fb8d51ac61624d195f02dabd4-207x111.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはYouTubeで公開されています。是非ご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/QzyUePqt4RM" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
		<item>
		<title>噂のAngular 2をのぞき見る！ーng-japan 2015</title>
		<link>/albatrosary/13980/</link>
		<pubDate>Fri, 03 Apr 2015 00:00:53 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">/?p=13980</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (5)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第5回目）です。 はじめに Angular 2の発表があり、大きく様...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (5)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第5回目）です。</p>

<h1>はじめに</h1>

<p>Angular 2の発表があり、大きく様変わりするのではないかと懸念され、話題にもなりました。そして、AtScriptからTypeScriptへの変更など、話題にことかかないAngular 2ですが、彼らがなぜ、そのような変更を行っているのかが理解できるセッションとなりました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/2565c2726d9ebf968ae5399b387f34cc.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/2565c2726d9ebf968ae5399b387f34cc.png" alt="スクリーンショット 2015-03-25 17.30.33" width="640" height="427" class="alignnone size-full wp-image-13982" /></a></p>

<h1>Angular 2 &#8211; Igor Minar</h1>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16694579000_e362bfda34_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16694579000_e362bfda34_z.jpg" alt="16694579000_e362bfda34_z" width="640" height="427" class="alignnone size-full wp-image-13981" srcset="/wp-content/uploads/2015/03/16694579000_e362bfda34_z.jpg 640w, /wp-content/uploads/2015/03/16694579000_e362bfda34_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16694579000_e362bfda34_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Angularは、私たち開発者のWebアプリ開発の手法を変え、生産性を向上してくれました。今度は我々のニーズに合わせて、Angularが変化をする番です。このセッションでは、何が変わり、なぜそのような変更が必要なのかをお話します。</p>

<p>まずは、Angular 2の3つのポイントについて。</p>

<ul>
<li>なぜAngular 2を作ることにしたのか</li>
<li>Angular 2はどういうものにあるのか</li>
<li>いつ出てくるか</li>
</ul>

<h1>なぜAngular 2を作ることにしたのか</h1>

<p>5年前にAngular 1の開発を始めたわけですが、これはWebアプリケーションの生産制を上げるために始めました。自分だちだけで閉鎖的に作るのではなく、様々な人にも見てもらいので、オープンソースにしました。その結果、多くの人に気に入ってもらえたと思います。そして気に入ったということだけではなく、実際に使い、コントリビューションしてくれました。</p>

<p>実際、世の中にどのくらいAngularが使われているかはよくわかりませんが、類推できる統計値はいくつかあります。例えば、今回のカンファレンスがほぼ満席になっているということが挙げられますね。とても嬉しいことです。そして毎月100万の開発者が、Angularについて学ぼうとしサイトにやってきます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/193c9f76f1d9a4efb82a03f415c18f81.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/193c9f76f1d9a4efb82a03f415c18f81.png" alt="スクリーンショット 2015-03-25 17.33.13" width="640" height="427" class="alignnone size-full wp-image-13983" /></a></p>

<p>Googleの外の世界で、Angularがどう使われているのか計り知ることは難しいですが、Googleの中ではヘビーに使っています。現在Googleの中では2,000のアプリケーションが構築されています。このような数字が何をもの語っているかというと、多くの人がAngularを信頼されているということです。しかし、信頼されているということは、責任が増すとも言えます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/c3ca979bb08fd7688ffc36025f7a9077.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/c3ca979bb08fd7688ffc36025f7a9077.png" alt="スクリーンショット 2015-03-25 17.33.23" width="640" height="427" class="alignnone size-full wp-image-13984" /></a></p>

<p>5年間で徐々にAngularを育ててきた中で、次の段階ではもっとよりよいものにしたいと考え、Angular 2を作ることにしました。Angular 2がどういうものになるのかが気になるところだと思いますし、指針は重要かと思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/8cc83ed56b8d2f3c575dd6c901cbe97f.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/8cc83ed56b8d2f3c575dd6c901cbe97f.png" alt="スクリーンショット 2015-03-25 17.33.44" width="640" height="427" class="alignnone size-full wp-image-13985" /></a></p>

<p>Angularを、よりシンプルな一貫性のあるものにしたいと考えています。なぜそれが実現できたかというと、どう使われて、どう開発されてきたかわかっているので、どう最適化すればいいのかも見えてきたからです。そしてAngularを気にいっている人からは、とても柔軟性があるからと言われています。こうした柔軟性も、Angular 2に盛り込みたいと考えています。</p>

<p>私たちがAngular 1で経験できていなかった部分として、パフォーマンスが挙げられます。より大きなプロジェクトを行っているうちに、パフォーマンスが重要であることに気づきました。そして、最後の要素が生産性の向上になりますが、Angular 2でも生産性の向上を行っていきます。</p>

<h1>Angular 1とAngular 2は似たようなものにあるか？</h1>

<p>APIとシンタックスは異なる部分は多くありますが、Angularの中に入れば基本的な概念は似たようなものが多くあります。Angular 1で好んで使ってくれたData Bindingなどは、Angular 2でも利用することができます。</p>

<p>Angular 2は、より使い勝手がよくシンプルにし、よりパワフルにしました。そして新しい強力な機能を追加しました。</p>

<ul>
<li>Viewports</li>
<li>New languages</li>
<li>Web Components</li>
<li>New template syntax</li>
<li>Unidirectional data flow</li>
<li>Ultra-fast change detection</li>
</ul>

<h1>Productivity</h1>

<p>Angular 2の中で盛り込んでいくテーマについてもいくつかありますが、その中で2つ話をします。</p>

<ul>
<li>生産性向上</li>
<li>パフォーマンス向上</li>
</ul>

<p>Angular 2においては、Angular 1のさらにその先をいくことを考え、それがtoolsを活用することができるということです。いま提案された、開発が終わってない、ブラウザでも実装されていないものに対しても、コードを書くことができるということです。そして開発者にとって役に立つこととして、タイプミスを防ぐことをしています。この新しいテンプレートシステムによってエラーやタイプミスがないかを抽出することができます。TypeScriptのチームとパートナーシップを組むことでそれを進めることができました。</p>

<p>TypeScriptを利用する重要なことの一つは、ECMAScript 6でも使うことができるようになることです。つまりTypeScriptをオプションとして、使うことができます。異なるチームに分散した大きなプロジェクトのときに、コントラクトを表すことができます。</p>

<p>もう一つTypeScript 1.5に含まれることにアノテーションがあります。アノテーションのお陰でコードを書く量を減らすことができます。これらの機能を標準化しJavaScriptに入れていくことを考えています。ChromeのV8チームやTypeScriptのチーム、その他のチームと連携しています。</p>

<p>将来的にはこれら機能がJavaScriptの中に含まれていくと思います。そういうことになると将来的には変換ということが必要ではなくなります。もちろんこれらは長く時間がかかるものですが、時間をかけてやっていくことには意義があると思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/472f9edd9bba6254906b67ad1ad06cbf.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/472f9edd9bba6254906b67ad1ad06cbf.png" alt="スクリーンショット 2015-03-25 17.34.08" width="640" height="427" class="alignnone size-full wp-image-13986" /></a></p>

<p>Angular 2はTypeScriptが使われていますが、一般の開発者がTypeScriptを使わないといけないのかという疑問があるかと思います。答えとしては自由に選択することができます。みなさんが自由にどの言語を使って、Angularアプリケーションを書くか、ECMAScript 5やECMAScript 6などどれを使ってもいいです。ただこうしたアプリケーションのツールを使いたいときは、TypeScriptを使うのがよいと思います。</p>

<h1>標準化</h1>

<p>言語の拡張と標準の話をしてきました。しかし、このAngular 2の大きなテーマとしては、標準化が好きだということがあります。Angular 1を作り始めた頃は、まだ使えないようなAPIを持ってきて、Angular 2の中に盛り込みました。よい例としては、Shadow DOM、Templateエレメントなどを使っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/c9a5352b684443b8c188bbdf592fb514.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/c9a5352b684443b8c188bbdf592fb514.png" alt="スクリーンショット 2015-03-25 17.41.17" width="640" height="427" class="alignnone size-full wp-image-13987" /></a></p>

<h1>パフォーマンス</h1>

<p>Angular 1.3のときに、パフォーマンスの改善を試みたというのがわかると思います。パフォーマンスを語るときに、難しいのは速いというのはどういうことなのかという定義です。この答えとして、ツールを作りました。パフォーマンスを信頼性の高いものにするためBenchmarksというのを作りました。</p>

<p>一連のベンチマークテストとして、世の中でやっているいろいろなベンチマークを行いました。その一つがDeep Treeです。Deep Treeでは深く複雑にネスティングしているものをベンチマークすることができます。結果的にAngularでは複雑な画面に対して、どのくらいパフォーマンスがあるのかを知ることができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/174ba8a6d1e5426757e573e156d25597.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/174ba8a6d1e5426757e573e156d25597.png" alt="スクリーンショット 2015-03-25 17.34.30" width="640" height="427" class="alignnone size-full wp-image-13988" /></a></p>

<p>Angularが速いのか遅いのかを知るために、ベースマークを作りました。それにはJavaScriptをAngularを使わずに作り、様々な工夫してベースマークを作りました。ポイントは、とにかく速く走るというプログラムなので通常書くようなロジックではありません。同じベンチマークでAnguler 1を作りました。</p>

<p>このベンチマークでは、ベースラインと比べると8倍時間がかかります。しかし、他に出ているソリューションとでは、ほとんど変わらないものになっています。もっと改善できるというはずだということで、Angular 2で試した結果としては3倍時間になりました、もっと速くすることができると考え、結果としては改善することができました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/a9be98635c597ac79f71185a50f1250a.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/a9be98635c597ac79f71185a50f1250a.png" alt="スクリーンショット 2015-03-25 17.34.39" width="640" height="427" class="alignnone size-full wp-image-13989" /></a></p>

<p>Angualar 2の中にはView Cacheがあり、DOMエレメントを再利用することができ、この機能を使うことでパフォーマンスを上げていくことができます。</p>

<p>特にナビゲーションの中で2つのViewを行ったり来たりする場合、高い効果がありました。もちろんパフォーマンスについて注目しましたが、ガベージコレクションも気になるところです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/927ca1ea1bd4285d53a639ddbfdc7454.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/927ca1ea1bd4285d53a639ddbfdc7454.png" alt="スクリーンショット 2015-03-25 17.34.53" width="640" height="427" class="alignnone size-full wp-image-13990" /></a></p>

<p>アプリケーションの様々な操作によってメモリーに関する事象が異なりますが、モバイル・アプリケーションのようなメモリーに制限のあるものについてはいろいろと効果することがあります。パフォーマンスというのは速度だけが重要なのではなく様々な要素で出てきます。一つパフォーマンスの中で注目しているのが、変更検知を取り入れた時に、どのくらい影響があるのかに興味がありました。</p>

<p>幸いなことに、Angular 2では柔軟な変更検知ができます。変更不可能なデータ構造がエキサイティングなのはなぜかというと、絶対に変わることがないとわかっていますので、変更検知の中で活用していくことになります。いくつかのシナリをの中で、使っていくことができます。バーチャルスクローリングが、それにあたります。</p>

<p>Angular 1の場合には変更検知を行っていくための時間というのは、データのサイズに比例して増えていきました。Angular 2の場合には改善されほとんど気にする必要のないくらいの速度になります。</p>

<h1>Angular 2</h1>

<p>Angular 2がどういうものかご紹介します</p>

<p><a href="https://github.com/davideast/ng2do" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/ca03f6027ad8871828c7e4ba3f2e1875.png" alt="スクリーンショット 2015-03-25 17.52.28" width="640" height="427" class="alignnone size-full wp-image-13994" /></a></p>

<h1>いつAngular 2が使えるか</h1>

<p>いまAngular 2はアルファバージョンになっていますので、大きな変更はあります。なぜ、安定してないものを紹介しているかというと、我々がどのようなな開発をしているかを示したいからです。オープンソースにし、Angular 2の初期の段階で、様々なフィードバックを受けたいという想いから公開しています。</p>

<p>すべてのコードはgithubに公開していますので、issueやコメントを入れてください。どういうアイデアがこれまでインプリされているかは、ドキュメントを見ていただきたいと思います。</p>

<p>2月にアルファを出したが、3月に行われたng-confでAngular 2のデモを行い、多くの反響をいただきました。正確にいつリリースされるか、日付は発表されてはいませんが、Googleのあるチームは5月には使いはじめ、マイグレーションを行っていきます。そして、このGoogle内部のチームからのフィードバック、コミュニティからのフィードバックでロードマップが決まってきます。</p>

<p>Angular 1を使う人は、angularjs.orgのサイトも使っていると思いますが、Angular 2に特化したサイトも立ち上げました。多くのAngular 2のドキュメントは、angular.ioに掲載されます。</p>

<p>では、Angular 1はどうなるかというと、多くの方がAngular 1を使っていると思いますので、ほとんどの方がAngular 2に移行したというまでは、Angular 1をサポートし残しておく方針です。より移行が簡単になるようAngular 2を開発していく予定です。そのマイグレーションが進む中で1.5や1.6を出していきます。</p>

<p>数週間前のng-confでのビデオがありますので、見ていただけたらと思います。</p>

<p><a href="https://www.youtube.com/user/ngconfvideos" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/990efc3ffd5ec8cd2bd4f552bcda069e.png" alt="スクリーンショット 2015-03-25 17.45.33" width="640" height="427" class="alignnone size-full wp-image-13992" /></a></p>

<div style="border: 1px solid gray; margin: 1em; padding: 1em;">
<article>
<h1>CodeIQとの連動企画！</h1>
AngularJS雑学、豆知識を問う問題です。<br>腕試しに、もしくは理解度チェックに是非ご活用ください！<a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>から問題にチャレンジ！<br><a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">問題：知ってる？AngularJS雑学</a>
</article>
</div>

<h1>プレゼンテーション資料</h1>

<p>今回取り上げたプレゼンテーションの資料は以下のとおり公開されています。合わせてご覧ください。</p>

<p><a href="https://docs.google.com/presentation/d/1c9YTFu5Dn6sxwnkWhXZhJC8pppASfJraKz6CC_eTezU/pub?start=false&amp;loop=false&amp;delayms=3000&amp;slide=id.p" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/f047265561803cbc9cdfec34f5c1c08a.png" alt="スクリーンショット 2015-03-25 17.43.44" width="640" height="427" class="alignnone size-full wp-image-13991" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはyoutubeで公開されています。逐次通訳付きなので、是非ご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/EEOKVlEaIDY?start=15653" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
		<item>
		<title>Webエンジニア必見！AngularとTypeScriptが大規模開発の未来を変えるーng-japan 2015</title>
		<link>/albatrosary/13971/</link>
		<pubDate>Thu, 02 Apr 2015 00:00:37 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[TypeScript]]></category>

		<guid isPermaLink="false">/?p=13971</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (4)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第4回目）です。 はじめに 昨年秋に、Angular 2はAtScr...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (4)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第4回目）です。</p>

<h1>はじめに</h1>

<p>昨年秋に、Angular 2はAtScriptというaltJSで開発するといったアナウンスがありました。しかし、今年3/5に急遽、Angular 2はTypeScriptで開発するという変更がなされました。このニュースはGoogle社とMicrosoft社が手を結んだということでも大きなニュースになり、今年一番の出来事かもしれません。</p>

<p>そのTypeScriptとカレントバージョンであるAngular 1.3を利用した開発ポイントを、株式会社トップゲートのエンジニアであり、TypeScriptマスターでもある@vvakame氏に講演していただきました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16259614824_b82efd0d83_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16259614824_b82efd0d83_z.jpg" alt="16259614824_b82efd0d83_z" width="640" height="427" class="alignnone size-full wp-image-13973" srcset="/wp-content/uploads/2015/03/16259614824_b82efd0d83_z.jpg 640w, /wp-content/uploads/2015/03/16259614824_b82efd0d83_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16259614824_b82efd0d83_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>TypeScript+Angular 1.3 &#8211; vvakame</h1>

<p>AtScriptからTypeScriptに移行される旨がアナウンスされたため、TypeScript自体の話を少しと、現行のAngular 1.3とTypeScriptを組み合わせて開発する方法についてお話します。</p>

<p>「AtScriptの近況と将来」の話をしようと思いましたが、3月頭に必要なくなったようなのでタイトルを変えました。「TypeScript+Angular 1.3」というタイトルでお話させていただきます。</p>

<h1>Angularを取り巻く開発言語</h1>

<h3>ECMAScriptとは</h3>

<p>ECMAScriptに関して整理します。</p>

<ul>
<li>JavaScriptの元となる仕様のこと</li>
<li>DOMの仕様は入っていない</li>
<li>最近のブラウザはECMAScript 5をサポート</li>
<li>そろそろ6の仕様が確定（現在RC2</li>
</ul>

<h3>AtScriptとは</h3>

<p>AtScriptとは何だったのかを振り返ってみます。</p>

<ul>
<li>AtScript=ES6+A (A=Annotiosion, AnnotationはES6に含まれない)</li>
<li>Super set of TypeScript</li>
</ul>

<p>AngularチームがAngular 2を開発するために策定したTypeScriptより、優れているaltJSということでした。</p>

<h3>TypeScriptとは</h3>

<p>では、TypeScriptの特徴はどういうものかを整理します。</p>

<ul>
<li>TypeScriptはJavaScriptを拡張した言語</li>
<li>静的型付け</li>
<li>ECMAScript6規格の文法を取り込み中</li>
<li>読みやすい変換後JavaScript</li>
<li>Java, C#とかにやさしい言語仕様</li>
</ul>

<p>TypeScriptは、Microsoftが出してきたということで当時注目されました。特徴の一つである静的型付けの特徴をまとめます。</p>

<ul>
<li>静的解析で多くの整合性検証が可能</li>
<li>不整合があった場合、コンパイルエラー</li>
<li>大規模、大人数になるほど有利</li>
<li>Java, C#が有名</li>
</ul>

<p>通常のJavaScriptでは、バグに関して実際に動かしてみて初めて分かりますが、TypeScriptのような静的型付けを用いると、静的解析でより多くの整合性検査が可能です。なるべくコンパイルした段階で、エラーが出力されるところが良い点の一つです。</p>

<p>例えば次の文はエラーになります。</p>

<p></p><pre class="crayon-plain-tag">var foo: number="bar";</pre><p></p>

<p>TypeScriptは、ECMAScript 6のスーパーセットになると考えられています。既存の資産を活用したいという要望も当然あります。そうした要望を満たすため、TypeScriptに様々なJavaScriptライブラリの型を定義した型情報を用意する必要があります。例えば、次のようなものがあります。</p>

<ul>
<li>jQuery</li>
<li>Angular</li>
<li>mocha</li>
<li>etc</li>
</ul>

<h3>DefinitelyTyped</h3>

<p>型定義ファイルというものがあります。現在は1,000個以上あります。既存JavaScriptに型を後付けというのはわかりづらいとは思います。</p>

<p>Angularの例を見てみます。</p>

<p></p><pre class="crayon-plain-tag">declare var angular: angular.IAngularStatic;

// Type definitions for Angular JS 1.3+
// Project: http://angularjs.org/
// Definitions by: Diego Vilar 
// Definitions: https://github.com/borisyankov/DefinitelyTyped


/// 

declare var angular: angular.IAngularStatic;

// Support for painless dependency injection
interface Function {
    $inject?: string[];
}

// Collapse angular into ng
import ng = angular;
// Support AMD require
declare module 'angular' {
    export = angular;
}

///////////////////////////////////////////////////////////////////////////////
// ng module (angular.js)
///////////////////////////////////////////////////////////////////////////////
declare module angular {

    // not directly implemented, but ensures that constructed class implements $get
    interface IServiceProviderClass {
        new (...args: any[]): IServiceProvider;
    }

    interface IServiceProviderFactory {
        (...args: any[]): IServiceProvider;
    }

    // All service providers extend this interface
    interface IServiceProvider {
        $get: any;
    }</pre><p></p>

<p>実際にこれを使ってコードを見てみます。JavaScriptとあまり変わりがないので読みやすいのではないかと思います。</p>

<p></p><pre class="crayon-plain-tag">module App {
	"use strict";

	angular.module(
		"app",
		["ngRoute", "app.hello"],
		($routeProvider: ng.route.IRouteProvider, $locationProvider: ngILocationProvider)=&gt; {
			$routeProvider
				.when("/sample", {
					templateUrl: "/template/sample.html"
				})
				.otherwise({
					templateUrl: "/template/main.html"
				});
			$locationProvider.html5Mode(true);
		}
	)
		.run(($rootScope: ngIRootScopeService, $routeParams: ng.route.IRouteParamsService)=&gt; {
			false;
		})
	;

	angular.module(
		"app.hello",
		[],
		()=&gt; {
			false;
		}
	)
		.service("sampleService", Service.SampleService)
		.controller("SampleTestController", Sample.TestController)
	;</pre><p></p>

<h1>Angular 2とTypeScript</h1>

<p>2015年3月5日に、Angular 2はTypeScriptで作ることになるという記事が出てきました。AtScriptからTypeScriptに変えた理由がいくつかあり、AngularチームとTypeScriptチームの調整がうまくいったのではないかと考えられます。</p>

<ul>
<li>TypeScriptに必要な機能が入る</li>
<li>Angularチームが作りたいのは、AtScriptではなくAngular本体である</li>
<li>TypeScriptのスーパーセットを作るのが困難</li>
</ul>

<p>TypeScriptのスーパーセットを作るという話でしたが、TypeScript自体の開発スピードがかなり早く、しかもその間にECMAScript 6の仕様も出て、短期間の内にAtScriptを開発するためには、人的にもコスト的にも難しい状況だと考えられます。</p>

<p>話をまとめると、Angularを使うという観点からも、今からTypeScriptを使う必要があると言えます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16856063626_096494ddbb_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16856063626_096494ddbb_z.jpg" alt="16856063626_096494ddbb_z" width="640" height="427" class="alignnone size-full wp-image-13976" srcset="/wp-content/uploads/2015/03/16856063626_096494ddbb_z.jpg 640w, /wp-content/uploads/2015/03/16856063626_096494ddbb_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16856063626_096494ddbb_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>TypeScriptのSyntax</h1>

<p>TypeScriptの独自Syntaxはあまりなく、JavaScriptとそれほど変わるものではありません。TypeScriptですが、だいたい2日もあれば書けるようになると思われます。</p>

<h3>Type Annotations</h3>

<p>Type Annotationsを具体的に見てみます。</p>

<p></p><pre class="crayon-plain-tag">var str1:string = "string";
var str2:number = "string"; // エラー
var str3 = "string"; // 初期化子から型推論されstringを指定したのと等価
str3 = 1; //エラー

var b: boolean = true;
var n: number = 1;

var a: any = true;
a = 1; // anyは何でもOK</pre><p></p>

<h3>Classes</h3>

<p>ECMAScript 6からは、クラスの宣言ができるようになりました。TypeScriptの例を見てみます。</p>

<p></p><pre class="crayon-plain-tag">class Hoge {
	name: string;
	
	constructor(name: string) {
		this.name = name;
	}
	
	hello(): string{
		return "Hello, " + this.name;
	}
}

var obj = new Hoge("world");
window.alert(obj.hello());</pre><p></p>

<h3>Interface</h3>

<p>TypeScriptで定義したInterfaceは、実行時には消えてしまいます。型だけの定義です。</p>

<p></p><pre class="crayon-plain-tag">interface Hoge {
	str: string;
	num: number;
}

var obj: Hoge = {
	str: "string",
	num: 1
};

window.alert(obj.str + obj.num);
window.alert(obj.hello());</pre><p></p>

<h3>Allow Functions</h3>

<p>Allow Functionsは、最近話題になっています。メリットとしては、functionというキーワードが必要なくなるところです。これはECMAScript 6でも標準化されますので、TypeScriptを通して今のうちから慣れるのもよいかと思います。</p>

<p></p><pre class="crayon-plain-tag">var hello = (word: string) =&gt; console.log("Hello, " + word);
hello("TypeScript");

// 返り値の型を明示する
var hello2 = (word: string): void =&gt; console.log("Hello, " + word);
// 参考：今まで通りの書き方 1
var hello3 = function (word: string) { console.log("Hello, " + word); };
// 参考：今まで通りの書き方 2
function hello4(word: string) { console.log("Hello, " + word); }</pre><p></p>

<h3>internal modules</h3>

<p>今までのJavaScriptでは、モジュールの定義するというのは存在していませんでした。TypeScriptではモジュールが定義されています。今は過渡期でこうした書き方ですが、ECMAScript 6だと書き方があるので、なくなると思われます。</p>

<p></p><pre class="crayon-plain-tag">module app {
	export class Sample {
		hello(word = "TypeScript") {
			return `Hello, ${word}`;
		}
	}
}
var obj = new app.Sample();
console.log(obj.hello("AngularJS"));


var app;
(function (app) {
    var Sample = (function () {
        function Sample() {
        }
        Sample.prototype.hello = function (word) {
            if (word === void 0) { word = "TypeScript"; }
            return "Hello, " + word;
        };
        return Sample;
    })();
    app.Sample = Sample;
})(app || (app = {}));
var obj = new app.Sample();
console.log(obj.hello("AngularJS"));</pre><p></p>

<h3>Generics</h3>

<p>Genericsは非常に便利です。</p>

<p></p><pre class="crayon-plain-tag">class Container {
    constructor(public data: T) { }
}

var a = new Container("str");
var b = new Container(1);

a.data.charAt(0);
b.data.toExponential();</pre><p></p>

<h1>はじめてみよう &#8211; Angular-typescript</h1>

<p>@vvakameのgithubにあるので是非見ていただき、TypeScriptを始めてもらえたらと思います。</p>

<p><a href="https://github.com/vvakame/angularjs-typescript" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/ffa63c24a9c43d2715cc64655dd91f1d.png" alt="スクリーンショット 2015-03-25 16.14.58" width="640" height="427" class="alignnone size-full wp-image-13978" /></a></p>

<p>開発する際、利用するツールは次の通りです。</p>

<ul>
<li>node.js</li>
<li>grunt</li>
<li>bower</li>
<li>TypeScript
** tslint
** typedoc
** dtsm (tsd)</li>
<li>LESS</li>
<li>unit test
** mocha
** power-assert</li>
<li>karma</li>
<li>protractor</li>
<li>その他</li>
</ul>

<h1>Angular 1.3と組み合わせる</h1>

<p>あまり考えなくてよく、TypeScriptと重ねることは特別なことはないです。TypeScriptはJavaScriptの延長線上にあり、JavaScriptのベストプラクティスがそのまま利用することができます。</p>

<p>その中で覚えなければならないのは</p>

<ul>
<li>型の名前</li>
<li>使いたいメソッド（angularのドキュメントを読むより型定義ファイルを見たほうが早い）</li>
<li>使いたいDIオブジェクト名</li>
</ul>

<p>その中で次のことに注意すれば、問題なく記述することができます。</p>

<ul>
<li>tsc &#8211;noImplicitAny</li>
<li>型注釈を書く</li>
</ul>

<div style="border: 1px solid gray; margin: 1em; padding: 1em;">
<article>
<h1>CodeIQとの連動企画！</h1>
AngularJS雑学、豆知識を問う問題です。<br>腕試しに、もしくは理解度チェックに是非ご活用ください！<a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>から問題にチャレンジ！<br><a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">問題：知ってる？AngularJS雑学</a>
</article>
</div>

<h1>プレゼンテーション資料</h1>

<p>今回取り上げたプレゼンテーションの資料は、以下のとおり公開されています。合わせてご覧ください。</p>

<p><a href="http://www.slideshare.net/vvakame/ngjapan-2015-typescriptangularjs-13" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/7219121e4a9fc12387b410f2da9e1224.png" alt="スクリーンショット 2015-03-25 16.04.40" width="640" height="427" class="alignnone size-full wp-image-13972" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはYouTubeで公開されています。是非ご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/EEOKVlEaIDY?start=12068" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
		<item>
		<title>Angular 1でもAngular 2でも利用可能な大規模開発向けNew Routerの素顔ーng-japan 2015</title>
		<link>/albatrosary/13954/</link>
		<pubDate>Wed, 01 Apr 2015 00:00:39 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">/?p=13954</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (3)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第3回目）です。 はじめに 策定されているNew Routerは、A...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (3)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第3回目）です。</p>

<h1>はじめに</h1>

<p>策定されているNew Routerは、Angular 1でもAngular 2でも利用可能で、大規模開発向けでもあるということが言われています。そのNew Routerに関する機能を見ていきたいと思います。このセッションではBrian Ford氏がNew Routerというタイトルで講演を行いました。</p>

<p>Angular 1 におけるNew Routerを使った大規模で維持しやすく、モジュラーなアプリケーションの作り方についてお話します。また、このRouterのAngular 2における挙動についても触れ、スムーズなアップグレードに活かす方法をお知らせします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16261993083_bea51246a2_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16261993083_bea51246a2_z.jpg" alt="16261993083_bea51246a2_z" width="640" height="427" class="alignnone size-full wp-image-13955" srcset="/wp-content/uploads/2015/03/16261993083_bea51246a2_z.jpg 640w, /wp-content/uploads/2015/03/16261993083_bea51246a2_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16261993083_bea51246a2_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>New Router &#8211; Brian Ford</h1>

<p>多くの人がアプリケーションを作ったことがあり、Routingもよく知っていると思いますが、Routingのハイレベルな話をしていきたいと思います。Routingの基本的な考えは、URLとページをマッピングしていくことです。しかし、Angularの中でRoutingといった場合は、コンポーネントに対してマッピングをしていくという意味になります。つまり、URLの一部に対してUIの一部がマッピングされます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/60debc9857599657000ad5f77d23f9ad.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/60debc9857599657000ad5f77d23f9ad.png" alt="スクリーンショット 2015-03-25 12.24.34" width="640" height="427" class="alignnone size-full wp-image-13960" /></a></p>

<p>もう一つRoutingの重要な機能として、Deep Linkingがあります。たとえば利用しているアプリケーションがURLを持っていて、それを友人にURLを送ることがあります。あるいはブックマーキングしページから離れ、戻ってきたときに同じ状態にするということがあります。</p>

<p>Angularの新しいルーティングは、こうした様々な過程をより簡単にするものです。</p>

<h1>Routingの歴史</h1>

<p>このプレゼンテーションの内容はNew Routerの話ではありますが、その前にRoutingの歴史を振り返ってみたいと思います。</p>

<ul>
<li>ngRoute &#8211; Very simple router with basic feature</li>
<li>UI-Router &#8211; Mature, flexible router for Angular 1 that influenced the design of the New Router</li>
<li>New Router &#8211; Designed with Angular 2 in mind, also works in Angular 1, and has features for migration</li>
</ul>

<p>Angular 1がリリースされたときは、ngRouteがありました。このRoutingシステムはよかったのですが、非常にシンプルなユースケースのみサポートしていました。そうすると開発者のニーズがその範囲を越えていき、ニーズを満たすためにコミュニティの中でUI-Routeが生まれてきました。</p>

<p>UI-Routeはとてもよくできていて、Angular 1とよくあっていました。我々はAngular 2ともうまく機能しAngular 1ともうまくいくRoutingシステムを作りたかったのです。そしてUI-Routerを作ってきた開発者の知識を使って、Angular 2でもうまく機能するような新しいRouterを作ることになりました。結果として、Angular 1ともAngular 2ともうまく機能するRouterを作ることができました。</p>

<p>マイグレーションの話は後でお話しますが、Angular 1ともAngular 2ともうまく機能するRouterを作ることができましたので、マイグレーションも簡単にできるようになりました。そして、Angular1, 2とうまく連携するということと、Reusable, Composableにも優れているものになりました。</p>

<p>このNew Router開発者の生産性を上げていくことができます。多くのところで使えるものを作りました。その再利用性ですが、一つ簡単な例として、みなさんの会社の中で複数の場所で使えるロギングの仕組みを考えた場合がそうです。もう一つの例としては、リファクタリングしている間にこのコンポーネントを動かすことができるということです。</p>

<p>APIに関しても、他のRouteingを使っている開発者にとって、使い勝手のよいものにしました。あえて新しいものを発明するというよりも、いままで使っているRoutingの考えををAngularの中でも適用していく、ということにしました。Routingのプロジェクトには様々なものがありますが、新しいRoutingシステムは、特に目新しいものではありません。</p>

<p>以上のことを念頭に置き、新しいRouterについてどういうところで使えるかお話していきたいと思います。</p>

<h1>Basic Use</h1>

<h3>$routeConfig</h3>

<p>次の例は、あまりおもしろいWebアプリケーションではありません。しかし、アプリケーションのメニューの部分をクリックするとURLが変化します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/f79b75a1b7bda90d7b5b0b1ae8d19402.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/f79b75a1b7bda90d7b5b0b1ae8d19402.png" alt="スクリーンショット 2015-03-25 12.25.48" width="640" height="427" class="alignnone size-full wp-image-13961" /></a></p>

<p>URLとしてハッシュバンを使っていますが、HTML5を使うこともできます。このアプリケーションのコードが下記になります。</p>

<p></p><pre class="crayon-plain-tag">angular.model('example', [
    'example.goobye',
    'example.welcame',
    'ngAnimate',
    'ngNewRouter'
])
.controller('AppController', ['$router', AppController]);

AppController.$routeConfig = [
    { path: '/',          redirectTo: '/welcome' },
    { path: '/welcame',    component: 'welcome' },
    { path: '/goodbye',    component: 'goodbye' }
];
function AppController($router) {
	this.greeting = 'Hello';
}</pre><p></p>

<p>このコードの中で興味深いところだけをピックアップしご紹介します。</p>

<p></p><pre class="crayon-plain-tag">AppController.$routeConfig = [
    { path: '/',          redirectTo: '/welcome' },
    { path: '/welcame',    component: 'welcome' },
    { path: '/goodbye',    component: 'goodbye' }
];</pre><p></p>

<p>このコードが、ルーティングをどう設定するかのコンフィグレーションになります。これは単純なJavaScriptオブジェクトですが、$routeConfigのプロパティをコントローラーに対してAttributeをつけていきます。これにより、コンポーネントに対してどうURLにマッピングするかをAngularに伝えていきます。</p>

<p>たとえば「/」が「/welcame」にリダイレクトするように設定しています。そして「/welcame」はコンポーネントの「/welcame」に「/goodbay」はコンポーネントの「/goodbay」にいくということになります。</p>

<h3>ng-link</h3>

<p>このアプリケーションに対応しているHTMLがこちらです。</p>

<p></p><pre class="crayon-plain-tag">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;base href="/examples/angular-1/animation/"&gt;
&lt;/head&gt;
&lt;body ng-app="example"
      ng-strict-di
      ng-controller="AppController as app"&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a ng-link="welcame"&gt;welcame&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a ng-link="goodbye"&gt;goodbye&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;ng-viewport&gt;&lt;/ng-viewport&gt;

  &lt;script src="/node_modules/angular/angular.js"&gt;&lt;/script&gt;
  ・・・
&lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>ここでも興味深い機能をご紹介します。ng-linkのAttributeですが、値がwelcameになっていてWelcameのコンポーネントに結びついています。そして、このディレクティブは自動的にhrefタグを生成していきます。</p>

<h3>ngViewport</h3>

<p>もう一つ面白いのがngViewportディレクティブです。ngViewportはプレスフォルダに対しアクセルします。そしてプレスフォルダの中はコンテンツに基づいて管理されています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/1c1cfbaed9bd7c16c89d7b8cafe84f74.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/1c1cfbaed9bd7c16c89d7b8cafe84f74.png" alt="スクリーンショット 2015-03-25 12.34.59" width="640" height="427" class="alignnone size-full wp-image-13962" /></a></p>

<h3>Sibling Routes</h3>

<p>今度はもう少し複雑な例を見てみます。アイデアを表した概念図はこちらになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/4d5ca9fa014597ecfad25ffeb5fee342.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/4d5ca9fa014597ecfad25ffeb5fee342.png" alt="スクリーンショット 2015-03-25 12.36.29" width="640" height="427" class="alignnone size-full wp-image-13963" /></a></p>

<p>このアプリケーションでは、URLに基いてパネルをリアレンジすることができます。もしURLが/post/usersになっていたらpostは左、usersは右に見せることができます。URLが逆になっていたら、パネルも逆に表示されます。この例のコードの例を見ていきます。</p>

<p></p><pre class="crayon-plain-tag">AppController.$routeConfig = [
  { path: '/',            redirectTo: '/users/posts' },
  { path: '/users/posts', components: { left: 'users', right: 'posts' } },
  { path: '/posts/users', components: { left: 'posts', right: 'users' } }
];</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;
  &lt;a href="./users/posts"&gt;users then posts&lt;/a&gt;
  &lt;a href="./posts/users"&gt;posts then users&lt;/a&gt;
&lt;/nav&gt;
&lt;div class="container"&gt;
  &lt;div ng-viewport="left"&gt;&lt;/div&gt;
  &lt;div ng-viewport="right"&gt;&lt;/div&gt;
&lt;/div&gt;</pre><p></p>

<p>ここで重要なのは、複数のコンポーネントに対して、名前で指定することができるというところです。ngViewportは、アトリビュートとしても利用することができます。このアトリビュートの値ですが、コンフィグレーションの中で使われているものと対応することができます。</p>

<h3>Lifecycle Hooks</h3>

<p>この機能を使うために、例を紹介します。この例ではユーザが保存しない場合、「saveしますか？」と問い合わせを出します。もしユーザが保存するという場合は、ナビゲータが出てきて指示どおりに動かくことができます。「saveしない」ということになれば、そのまま処理を行いデータを保存まま進めることもできます。ここでも重要なところを見ていきます。</p>

<p></p><pre class="crayon-plain-tag">angular.module('myApp', [
  'ngNewRouter',
  'myApp.index',
  'myApp.editPost',
  'myApp.saveModel'
])
.controller('AppController', ['$router', AppController])
.factory('post', postsFactory);

AppController.$routeConfig = [
  { path: '/',         component: 'index' },
  { path: '/post/:id', component: 'editPost' }
];
function AppController($router) {
  ...
}

function postsFactory() {
  return {
    '1': { title: 'First Post',  content: 'I wrote this first' },
    '2': { title: 'Second Post', content: 'I wrote this second' }
  };
}</pre><p></p>

<p>Configuration DSLですが、ngRouteと似たものになります。</p>

<p></p><pre class="crayon-plain-tag">{ path: '/post/:id', component: 'editPost' }</pre><p></p>

<p>この例ではIDを持っていて、コンポーネントに対してシリアライズされていきます。そして、「editPost」というコンポーネントにナビゲーションされます。対応するコンポーネントがこちらです。</p>

<p></p><pre class="crayon-plain-tag">&lt;h1&gt;Post Index&lt;/h1&gt;

&lt;ul&gt;
  &lt;li ng-repeat="(id, item) in index.posts"&gt;
    &lt;a ng-link="editPost({ id: id })"&gt;
      Edit {{item.title}}
    &lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;</pre><p></p>

<p>Deep Linking DSLは、パラメータを使っています。</p>

<p></p><pre class="crayon-plain-tag">&lt;a ng-link="editPost({ id: id })"&gt;</pre><p></p>

<p>この場合は、特定のリンクに対してidを付与しています。今度はeditPostコンポーネントのコードを見ていきます。</p>

<p></p><pre class="crayon-plain-tag">angular.module('myApp.editPost', [])
.controller('EditPostController', ['$routeParams', 'posts', ...

function EditPostController($routeParams, posts, saveModal) {
  this.saveModal = saveModal;
  this.post = posts[$routeParams.id];
  this.newContent = this.post.content;
}

EditPostController.prototype.canDeactivate = function () {
  if (this.newContent === this.post.content) {
    return true;
  }
  return this.saveModel.getResponse();
}</pre><p></p>

<p>$routeparameterがコントローラーにどう渡されていくかを見ていきます。</p>

<p>canDeactivateメソッドを使っていまが、これはAngularのルーティングシステムが理解できる特定のメソッドになります。URL変更やナビゲータのフックの一部として、このフックを実行してきます。ここには現れていませんが、getResponse()でポップアップを見せていくこともできます。この関数はプロミスを返します。このプロミスですがユーザがどのボタンを押したかによって、リゾルブあるいはリジェクトになっていきます。</p>

<p>Angularのシステムは、このプロミスの値が何になるかわかるようになります。このシステムにより、より大きなアプリケーションの中で複雑なものをコンポーズすることができます。そして、今述べたように、Routerは異なるものを組み合わせていくことができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/9867a87ad4166ecdb564144478f23989.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/9867a87ad4166ecdb564144478f23989.png" alt="スクリーンショット 2015-03-25 12.37.52" width="640" height="427" class="alignnone size-full wp-image-13964" /></a></p>

<p>ナビゲーションがスタートしたときに、既存のコンポーネントがリアクタベートされることができるか、リユースすることができるのかを決めていきます。答えが「Yes」であれば、このナビゲーションは完了していきます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/c4f57d0e7059c6318966b04053e99903.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/c4f57d0e7059c6318966b04053e99903.png" alt="スクリーンショット 2015-03-25 12.38.01" width="640" height="427" class="alignnone size-full wp-image-13965" /></a></p>

<p>もしリアクティベートできないのであれば、アクティベートしていきます。そしてリアクティベート可能なら新しいコンポーネントのインスタンスを生成していきます。次のコンポーネントに対して、アクティベート可能か聞いていきます。新しいコンポーネントがアクティベート可能なら、古いコンポーネントに対しリアクティベートしていきます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/bc34bd5f1e072d734b8b87e04a0d2b1c.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/bc34bd5f1e072d734b8b87e04a0d2b1c.png" alt="スクリーンショット 2015-03-25 12.38.09" width="640" height="427" class="alignnone size-full wp-image-13966" /></a></p>

<p>最後に、新しいコンポーネントにフックしてviewportのプレスフォルダーの中に入っていきます。</p>

<h1>マイグレーション</h1>

<p>新しいRouterは、Angular 1からAngular 2へのマイグレーションを簡単にするという話をしました。Routerというのはアプリケーションにとって最もトップクラスにあたります。マイグレーションする上でRouterの2つの重要な機能があります。</p>

<ul>
<li>Angular 1とAngular 2とで同じコンフィグレーションを使っていく</li>
<li>新しいRouterを使っていくことで一部はAngular 1で他の一部Angular 2で動く</li>
</ul>

<p>上がAngular 2、下はAngular 1です。</p>

<p></p><pre class="crayon-plain-tag">@component({ selector: 'hello-app', ... })
@Template({ ... })
@RouteConfig([
  { path: '/'     , redirectTo: '/home' },
  { path: '/home' ,  component: 'index' }
])
class HelloComponent {
  greeting: string;
  constructor(service: GreetingService) {
    this.greeting = service.greeting;
  }
  changeGreeting() {
    this.greeting = 'howdy';
  }
}</pre><p></p>

<p></p><pre class="crayon-plain-tag">angular.module('hello-app', [].controller( ... );

HelloController.$routeConfig = [
  { path: '/'     , redirectTo: '/home' },
  { path: '/home' ,  component: 'index' }
];

function HelloController(greetingService) {
  this.greeting = greetingService.greeting;
}

HelloController.prototype.changeGreeting = function() {
    this.greeting = 'howdy';
  }
}</pre><p></p>

<p>見た目が違うように見えますが、ルーティングのコンフィグレーションという観点では変わりありません。</p>

<p>2つの目重要なこととしてAngular 1とAngular 2とで平行して動かすことができます。Angular 2が良い場合はAngular 2で、Angular 1がよければAngular 1で動かすことができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/c6c6eab3f25a736fc51ac1777cb0ad87.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/c6c6eab3f25a736fc51ac1777cb0ad87.png" alt="スクリーンショット 2015-03-25 12.41.49" width="640" height="427" class="alignnone size-full wp-image-13967" /></a></p>

<p>大きなアプリケーションを作っている場合、一度にAngular 2に移行することは難しいので使いたい部分だけ使っていけばいいです。つまり部分的にAngular 2にしていくことが可能になります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/409a8763c0414f5d5695a382841d8584.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/409a8763c0414f5d5695a382841d8584.png" alt="スクリーンショット 2015-03-25 12.41.58" width="640" height="427" class="alignnone size-full wp-image-13968" /></a></p>

<p>これは、大きなアプリケーションの場合、徐々にAngular 2にしていくことが可能なことを示しています。最後にAngular 1として残った複雑なものは、すべてが終わった後にゆっくり変えていくなど、いろいろなやり方でマイグレーションしていくことができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/2381ce69aa40ad3ac98e5b46f15f648a.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/2381ce69aa40ad3ac98e5b46f15f648a.png" alt="スクリーンショット 2015-03-25 12.42.07" width="640" height="427" class="alignnone size-full wp-image-13969" /></a></p>

<h1>Future</h1>

<p>New Routerですが、すべてがまだ完全に終わったわけではありません。現在のカレントバージョンは0.5になっています。新しいRouterが出せるまでにもう少し作業しなければならないのですが、New Router 1.0はAngular 1.4と同時に出そうと思っています。なのでタイミングとしては来週にリリースする予定になっています。</p>

<p>その後New Routerのリリースに関しては、Angular 1、Angular 2とも独立したかたちでリリースしていくことになります。</p>

<p>New Routerに関して情報がほしい人はこちらを見てください：</p>

<ul>
<li><a href="http://goo.gl/rC4xcZ" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://goo.gl/rC4xcZ</a></li>
<li><a href="https://github.com/angular/angular.js/issues/11015" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://github.com/angular/angular.js/issues/11015</a></li>
<li><a href="http://angular.github.io/router/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://angular.github.io/router/</a></li>
</ul>

<div style="border: 1px solid gray;margin: 1em;padding: 1em">
<article>
<h1>CodeIQとの連動企画！</h1>
AngularJS雑学、豆知識を問う問題です。<br>腕試しに、もしくは理解度チェックに是非ご活用ください！<a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>から問題にチャレンジ！<br><a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">問題：知ってる？AngularJS雑学</a>
</article>
</div>

<h1>プレゼンテーション資料</h1>

<p>今回取り上げたプレゼンテーションの資料は、以下で公開されています。合わせてご覧ください。</p>

<p><a href="https://docs.google.com/presentation/d/1iKznB6Gxx3Dw8t5zgRx0BXncR0wQuAD9Fo2HZpeeumM/pub?start=false&amp;loop=false&amp;delayms=3000&amp;slide=id.p" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/4932353365691aa3a104aae5af04b3aa.png" alt="スクリーンショット 2015-03-25 12.21.00" width="640" height="427" class="alignnone size-full wp-image-13958" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはYouTubeで公開されています。逐次通訳付きなので、ぜひご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/EEOKVlEaIDY?start=8467" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
		<item>
		<title>誰でもハイパフォーマンス！OnsenUIが変えるハイブリッドアプリ開発の常識ーng-japan 2015</title>
		<link>/albatrosary/13896/</link>
		<pubDate>Tue, 31 Mar 2015 00:00:45 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Onsen UI]]></category>

		<guid isPermaLink="false">/?p=13896</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (2)この記事は、Angularをテーマとした日本初のカンファレンス 「ng-japan」のイベントレポート（第2回目）です。 はじめに HTML5ハイブリッドアプリケーションと...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (2)</div><p>この記事は、Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」のイベントレポート（第2回目）です。</p>

<h1>はじめに</h1>

<p>HTML5ハイブリッドアプリケーションとは、内部の実装にHTML5が利用されているモバイルアプリケーションです。アプリの内部実装にHTML5を使うことでクロスプラットフォーム対応が可能になりますが、その代わり問題となるのがUIとパフォーマンスです。このセッションでは、Angularの上に構築されたUIフレームワークであるOnsen UIを紹介しながら、Angularでどうすれば高速かつ快適なUIを持つモバイルアプリを作れるかについて話します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16856094836_48127e4cbd_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16856094836_48127e4cbd_z.jpg" alt="16856094836_48127e4cbd_z" width="640" height="427" class="aligncenter size-full wp-image-13911" srcset="/wp-content/uploads/2015/03/16856094836_48127e4cbd_z.jpg 640w, /wp-content/uploads/2015/03/16856094836_48127e4cbd_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16856094836_48127e4cbd_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ &#8211; 久保田 光則</h1>

<p>久保田光則氏は、アシアル株式会社でUI/UXデザイナー兼ソフトウェアエンジニアとして活動されています。今回お話するOnsen UIのリード開発者としても活動していて、専門でハイブリットアプリを開発しています。本日お話する内容はAngularの上に作られたOnsen UIというライブラリの内容になります。Onsen UIはonsen.ioというドメインで日本語版/英語版が公開されているオープンソースです。</p>

<p>特徴としては</p>

<ul>
<li>HTML5ハイブリットアプリ用のUIフレームワーク</li>
<li>Angularをベースにしている</li>
<li>iOS, Androidをサポートしている</li>
<li>高速な動作</li>
</ul>

<p>今回は次のことに焦点を当てて、お話します。</p>

<ul>
<li>HTML5ハイブリットアプリとは</li>
<li>ハイブリッドアプリ開発にどんな問題があるか？</li>
<li>なぜAngularとOnsen UIが必要なのか？</li>
<li>少しだけOnsen UIの紹介</li>
</ul>

<p>HTML5ハイブリットとはどのようなものか、ハイブリットアプリケーションを開発するときにどのような問題があるのか、AngularやOnsen UIがハイブリットアプリケーションを作成するためになぜ必要なのか、そして最後にOnsen UIのお話をしたいと思います。</p>

<h1>HTML5ハイブリットアプリとは</h1>

<p>HTML5ハイブリットアプリとは、ネイティブアプリとWebアプリの両方を書き合わせたアプリケーションになっています。実装の中身はHTML5で書かれています。WebViewというものがありその部分でHTMLを利用します。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/e642ef4b19593f79e4dd24fb4d9e6eb4.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/e642ef4b19593f79e4dd24fb4d9e6eb4.png" alt="スクリーンショット 2015-03-23 18.07.15" width="640" height="427" class="alignnone size-full wp-image-13930" /></a></p>

<p>HTML5ハイブリットアプリの何がよいのかというと、</p>

<ul>
<li>クロスプラットフォーム制</li>
<li>Webの知識が活かせる</li>
<li>ストアで配布できる</li>
<li>ネイティブの呼び出しがJavaScriptから機能を呼び出しできる</li>
</ul>

<p>ネイティブアプリケーションではそのプラットフォームの流儀に合わせて作る必要がありますが、HTML5の部分はプラットフォームには依存しないので、クロスプラットフォーム化しやすいというメリットがあります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/74a1d8a046713952a91ae2c360ac54d9.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/74a1d8a046713952a91ae2c360ac54d9.png" alt="スクリーンショット 2015-03-23 18.07.22" width="640" height="427" class="alignnone size-full wp-image-13931" /></a></p>

<p>そして、Webの知識がそのままモバイル開発に活かせるということも、メリットの一つです。ネイティブ機能の呼び出しがなぜできるかというと、通常のWebViewではできず、セキュリティ的にも難しいところがありますが、Cordovaを使うことによってHTML5をアプリケーション内部でパッケージ化し、OSとのやり取りもAPIを通じて一本化できJavaScriptを通じて利用することが可能になります。</p>

<p>具体的には</p>

<ul>
<li>ファイルストレージ</li>
<li>カメラ</li>
<li>コンパス</li>
<li>加速度センサー</li>
<li>コンタクトリスト</li>
<li>ネットワーク</li>
<li>Bluetooth通信</li>
<li>などなど</li>
</ul>

<p>さらにCordovaプラグインを作ることで、幅が広がっていきます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/3a15bf31804567cd5abdd4a13beeced3.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/3a15bf31804567cd5abdd4a13beeced3.png" alt="スクリーンショット 2015-03-23 18.09.42" width="640" height="427" class="alignnone size-full wp-image-13932" /></a></p>

<p>「HTML5でモバイル・アプリが作れる」ということで、多くのフロント・エンジニアがHTML5ハイブリットアプリケーションに取り組んできました。あまりうまくいかなかったのが現実だったと思います。三年程前になりますが、Facebookは一部分の機能をHTML5で構築しましたが、結果として「HTML5に賭けたのは失敗だった」とし、ネイティブで書きなおすということが発生しました。しかし数年前に比べ、現在状況は改善してきています。</p>

<ul>
<li>端末スペックの向上</li>
<li>AndroidでのWebViewのChromiumの採用</li>
<li>利用できるHTML5 APIの増加</li>
<li>Android2.3系のシェア低下</li>
<li>CrossWalkの登場</li>
<li>Android5からAndroid System WebViewの登場</li>
<li>HTML5ハイブリットアプリケーションの事例増加</li>
<li>BYODの一般化</li>
</ul>

<p>最近だとRailsの作成なども昔はスペックが低かったのですが、最近はだいぶよくなってきたという認識があるようです。しかし、ネイティブに比べあまりよくないという印象があります。ではよくないというのは、何が問題なのかを考えます。</p>

<ul>
<li>パフォーマンスや安定性がよくない</li>
<li>UIコンポーネントをいちいち作らないといけない</li>
</ul>

<p>パフォーマンスに関しては、チューニングすればいいという話ですが。実際にはチューニングの方法に関しては、あまり興味ないという人が多いようです。特にフロントエンド開発者の多くが、HTML, CSS, JavaScriptの書き方は理解しているが、チューニング方法に関してはあまり関心がないということがあるようです。</p>

<p>そこでチューニングのやり方について、少しお話しようと思います。</p>

<h1>効率的なチューニング</h1>

<p>まず、どこがボトルネックになっているのかを調べる必要があります。これはハイブリットアプリケーションを開発する人だけではなく、一般のWebアプリケーション開発者に取っても必要になる事柄です。</p>

<ul>
<li>インスペクタのTimelineタブで計測</li>
<li>AndroidではChrome</li>
<li>iOSではSafari</li>
</ul>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/5bdf8b82fbba661f9347af1ce83d9e58.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/5bdf8b82fbba661f9347af1ce83d9e58.png" alt="スクリーンショット 2015-03-23 18.11.05" width="640" height="427" class="alignnone size-full wp-image-13933" /></a></p>

<p>実機で開発しているときにも、このインスペクタを使って測定することが可能です。インスペクタのTimelineで取れるカテゴリは4つあります。</p>

<ul>
<li>Loading</li>
<li>Scripting</li>
<li>Rendering</li>
<li>Painting</li>
</ul>

<p>このLoading, Scripting, Rendering, Paintingという流れがありますが、これを1frameと呼びます。描画が始まってから終わるまでが1frameで、この1frameを16ms以下に抑えればよいということになります。Timelineを使って測定した後、どこにボトルネックがあるかでチューニングが変わります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/25d51172d0c1dff81468020af3b585ad.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/25d51172d0c1dff81468020af3b585ad.png" alt="スクリーンショット 2015-03-23 18.11.16" width="640" height="427" class="alignnone size-full wp-image-13934" /></a></p>

<h3>Loading</h3>

<p>Loadingは、リソースの読み込みやパースが行われます。ハイブリッドでは、Webアプリケーションよりも消費する時間は短いです。理由としては、リソースがローカルにあるからです。通常のWebアプリケーションは、リソースの取得もこのLoadingに含まれます。</p>

<h3>Scripting</h3>

<p>次に、Scriptingになります。これは、JavaScriptの実行時間になります。</p>

<p>今のJavaScriptの実行時間としては、純粋な計算は速いと考えてよく、基本的には問題ならないです。ただし、canvasへの描画などは遅くなる場合があります。チューニングに関しては、簡単で単純にでき、Profilesタブでどのコードが遅いかを確認すればよいということになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/9b3fc6b11cd7e706620d7a32d033e0a9.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/9b3fc6b11cd7e706620d7a32d033e0a9.png" alt="スクリーンショット 2015-03-23 18.13.08" width="640" height="427" class="alignnone size-full wp-image-13935" /></a></p>

<h3>Rendering</h3>

<p>ここから話が少しややこしくなります。Renderingであるレイアウト処理は、大きく2つの処理があります。</p>

<ul>
<li>Recalculate Style &#8211; 要素に当たるCSSルールの計算</li>
<li>Layout &#8211; Render Treeの生成</li>
</ul>

<p>Recalculate Styleがどのような計算をするかというと、個別のDOM要素に対して該当するスタイル（プロパティ）を計算します。CSSがレンダリング内部でパースされるとCSS OMという形になり参照して</p>

<p>DOM要素の数 × CSSルール</p>

<p>数分のマッチング処理が行われます。チューニングの一つとしてCSSの使ってないルールは削除するというものがありますが、この数式に由来しています。ルールが一つ減るだけでも、DOM要素の数分処理が減るということになるためです。さらに、重たいCSSの書き方を減らすということを行うと、より効果的です。</p>

<p>その次のLayoutというフェーズでは、すべてのDOM要素のレイアウト情報を計算します。計算された結果として、視覚的なオブジェクトツリーのことをRenderTreeと言います。そして、CSSの書き方やDOM要素の数を工夫することで、レスポンス改善することができます。</p>

<h3>Painting</h3>

<p>4つのうちの最後の処理ですが、さらに3つの工程があります。</p>

<ul>
<li>Paint &#8211; Display Listの生成</li>
<li>Rasterize &#8211; Display Listを実行してピクセル化</li>
<li>Composite Layers &#8211; レイヤの合成</li>
</ul>

<h1>雑多なチューニングテクニック小話</h1>

<h3>translate3d(0, 0, 0)が速いのはなぜ？</h3>

<p>これは、GPUで描画されるので速いという話がありますが、実は半分正解で、半分は間違っています。GPUで描画され、transform CSSプロパティを変更しても、Composite Layersのみが起こるためです。同時に別処理でLayoutを引き起こしたりすると、効果が薄れます。</p>

<p>どのCSSプロパティを変更すると、何が起こるのかというところは不明瞭な部分が多い。ある程度パターンはあり次の区分けで分類できます。</p>

<ul>
<li>要素の大きさが変わるような場合</li>
<li>Layoutから処理が始まる</li>
<li>transformやopacityたとComposite Layersのみ実行</li>
<li>CSSプロパティによる変更では事象が異なる</li>
</ul>

<p>CSS Triggersというサイトがあるので、ぜひ参考にして欲しいと思います。CSSプロパティを変更すると、インスペクタのTimelineで取れるカテゴリの何が実行されるかを示した表になっています。</p>

<p>http://csstriggers.com/ の紹介</p>

<h3>DOMリークを防ぐ</h3>

<p>DOM要素が誤って参照されたまま、開放されないという現象です。見た目よりも深刻で、DOM要素の参照は親要素への参照も子要素への参照も持っているので、DOMリークが起こるとすべてリークになります。detached DOMツリーとそれに参照されているリソースが、すべてリークするということがあります。その中に画像が入っているとそういった部分もリークします。</p>

<p>ディスクトップではあまり意識しなくてもよかったのですが、iOS, Androidだとメモリスワッピングが弱く設計されていて、アプリケーションの利用を破棄するといったことが起こります。そのためにモバイルだと、メモリーの管理を余計にしないといけなくなります。</p>

<h3>reflowを起こさないようにする</h3>

<p>Reflowを起こさないためには</p>

<ul>
<li>画像のサイズは必ず指定</li>
<li>DOMツリーから切り離して操作</li>
</ul>

<p>画像がまだ読み込まれていない時に、サイズとして仮指定する場合があります。画像を描画し、本当のサイズにレンダリングすることになりますが、DOM要素の大きさが変わるため、Layoutの処理が再度はじめから行われるということになります。</p>

<h3>GPUバウンド</h3>

<p>CPUよりもGPUの方で時間がかかっている状態のことを、GPUバウンドと言います。先ほどtranslate3d(0, 0, 0)が速いという話がありましたが、これはComposite Layersだけが走っているためです。しかしこれを使いすぎると、GPUバウンドが発生します。</p>

<p>GPUバウンドなページを作ることは簡単で、多くな領域を持つ要素にtransform: translate3d(0, 0, 0)を当てて多く生成し、アニメーションさせれば作られます。</p>

<h1>チューニングの罠</h1>

<p>こういったチューニングの大部分のところは、レンダリングエンジンに依存しています。どうしてもわからないときは、レンダリングエンジンのソースを読んだりします。ただ、なぜHTML5のコードを書くのに、ここまでやる必要があるのか。なぜ単にCSS書いているだけなのに、GPUのVRAMへの転送速度を気にしなければならないのか、という疑問があります。実際にアプリケーション開発中にここまでチューニングする余裕はないはずだし、こういったチューニングをすべて把握することを、開発者に求めてよいのかということもあります。</p>

<p>ごく一部の人間でないと、高速なHTML5ハイブリットアプリケーションは開発できないのでしょうか。今のHTML5アプリケーションの課題としては、アプリケーションアーキテクチャの構築方法の不在ということや、チューニングされて高速に動作するUI基盤がないということが言えると思います。ネイティブだとUIフレームワークがあるが、HTML5ハイブリットアプリケーションだとUIフレームワークがないというのが現実です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/71d029abf7baad9ed581d790f49f0905.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/71d029abf7baad9ed581d790f49f0905.png" alt="スクリーンショット 2015-03-23 18.14.19" width="640" height="427" class="alignnone size-full wp-image-13936" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/9f5b8ba38d69b948ae12e154e84fbff7.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/9f5b8ba38d69b948ae12e154e84fbff7.png" alt="スクリーンショット 2015-03-23 18.14.28" width="640" height="427" class="alignnone size-full wp-image-13937" /></a></p>

<h1>Onsen UI</h1>

<p>そこでOnsen UIです。この目的は、開発者がアプリの開発そのものに注力できるようにすることです。</p>

<p><a href="http://ja.onsen.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/bfc8f88e2bd478e15c29970ef366bc61-300x216.png" alt="スクリーンショット 2015-03-23 18.04.07" width="300" height="216" class="alignnone size-medium wp-image-13928" srcset="/wp-content/uploads/2015/03/bfc8f88e2bd478e15c29970ef366bc61-300x216.png 300w, /wp-content/uploads/2015/03/bfc8f88e2bd478e15c29970ef366bc61.png 640w, /wp-content/uploads/2015/03/bfc8f88e2bd478e15c29970ef366bc61-207x149.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p>Angularをベースにして構築しています。Angularの持つ機能を利用しHTMLを拡張することで、アプリケーションを記述することができ、大規模なアプリケーションでも耐えられるアーキテクチャを作ることができます。Angularの持っているディレクティブを使うことで、UIを構築することもできる。Onsen UIでは「ons-」を使っています。そして、Adobeの超高速CSSフレームワークtopcoteを利用しテーマを開発しています。またOnsen UIでは多くのコンポーネントを用意しています。</p>

<p>Onsen UIが目指すものとして、誰でもHTML5で高速に動作するモバイル・アプリケーションを作ることができる世界を提供したいと考えています。さらに、UIをどうチューニングするかではなく、アプリケーションの本質的な機能の開発にフォーカスすることができる基盤も提供したい。今後は、Onsen UIはMaterial Designs、Angular2のサポートを行っていくつもりです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16880985411_03e74f1dd3_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16880985411_03e74f1dd3_z.jpg" alt="16880985411_03e74f1dd3_z" width="640" height="427" class="alignnone size-medium wp-image-13912" srcset="/wp-content/uploads/2015/03/16880985411_03e74f1dd3_z.jpg 640w, /wp-content/uploads/2015/03/16880985411_03e74f1dd3_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16880985411_03e74f1dd3_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<div style="border: 1px solid gray; margin: 1em; padding: 1em;">
<article>
<h1>CodeIQとの連動企画！</h1>
AngularJS雑学、豆知識を問う問題です。<br>腕試しに、もしくは理解度チェックに是非ご活用ください！<a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>から問題にチャレンジ！<br><a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">問題：知ってる？AngularJS雑学</a>
</article>
</div>

<h1>プレゼンテーション資料</h1>

<p>このセッションのプレゼンテーション資料は下記になります。合わせてご覧ください。</p>

<p><a href="http://www.slideshare.net/AsialCorp/angularonsen-uihtml5" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/574548450afbb6e5bbf3c81d200e782d.png" alt="スクリーンショット 2015-03-23 18.02.45" width="640" height="427" class="alignnone size-full wp-image-13927" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはYouTubeで公開されています。ぜひご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/EEOKVlEaIDY?start=4980" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
		<item>
		<title>乗り遅れるな！よりパワフルになったAngular1.4リリースまであと一週間！ Angular1.4 and beyondーng-japan 2015</title>
		<link>/albatrosary/13876/</link>
		<pubDate>Tue, 24 Mar 2015 08:28:43 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[AngularJS]]></category>

		<guid isPermaLink="false">/?p=13876</guid>
		<description><![CDATA[連載： ng-japan 2015 特集 (1)Angularをテーマとした日本初のカンファレンス 「ng-japan」が2015/3/21(土)サイバーエージェントで開催されました。 ng-japanは、参加者350名...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/ngjapa2015/" class="series-258" title="ng-japan 2015 特集" data-wpel-link="internal">ng-japan 2015 特集</a> (1)</div><p>Angularをテーマとした日本初のカンファレンス 「<a href="http://ngjapan.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ng-japan</a>」が2015/3/21(土)サイバーエージェントで開催されました。</p>

<p>ng-japanは、参加者350名以上という、単独JavaScriptフレームワークをテーマにしたカンファレンスとしては、非常に多くの方が来場。日本でAngularを利用して活躍しているスピーカーや、Google Angularチームのメンバーを迎え（逐次通訳あり）、Angularの現状と未来についての学びの場となりました。</p>

<p>本日からそのイベントの模様を6回に渡り、あますところなくお伝えしていきます！</p>

<h1>Angular1.4 and beyond &#8211; Chirayu Krishnappa氏</h1>

<p>最初のセッションでは、Angular1.4の新機能の概要について紹介がありました。また、パフォーマンスの向上とAngularアプリケーションを構築する上で、維持しやすいコードを書くのためのベストプラクティスについても紹介されました。スピーカーのChirayu Krishnappa氏は、Google社でAngularやAngularDartを担当しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16880808302_3134cc8b30_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16880808302_3134cc8b30_z.jpg" alt="16880808302_3134cc8b30_z" width="640" height="427" class="aligncenter size-full wp-image-13902" srcset="/wp-content/uploads/2015/03/16880808302_3134cc8b30_z.jpg 640w, /wp-content/uploads/2015/03/16880808302_3134cc8b30_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16880808302_3134cc8b30_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>セッションは、来日されたGoogleエンジニア3人の紹介からはじまりました。一枚目のスライドは富士山をバックにした記念写真です。右からChirayu Krishnappa氏、Brian Ford氏、Igor Minar氏です。富士山に登ってみたかったということですが、時期としては閉山しているので残念だったので、絵をバックに写真を撮ったとのことです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/CAXXdAIUIAAAcHn.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/CAXXdAIUIAAAcHn.jpg" alt="CAXXdAIUIAAAcHn" width="640" height="360" class="aligncenter size-full wp-image-13877" srcset="/wp-content/uploads/2015/03/CAXXdAIUIAAAcHn.jpg 640w, /wp-content/uploads/2015/03/CAXXdAIUIAAAcHn-300x169.jpg 300w, /wp-content/uploads/2015/03/CAXXdAIUIAAAcHn-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>それでは本題にはいります。</p>

<h1>Angularとコミュニティ</h1>

<p>私がお話するトピックは「Angular1.4」です。まだAngular1.4はリリースされていませんが、あと一週間ほどでAngular1.4がリリースされる予定です。これは、今までリリースされたAngularの中でもっとも成熟度があり安定したリリース版となっています。オンライン上に1.4に関する様々なリソースが提示され読むことができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16259619194_9d97013791_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16259619194_9d97013791_z.jpg" alt="16259619194_9d97013791_z" width="640" height="427" class="aligncenter size-full wp-image-13908" srcset="/wp-content/uploads/2015/03/16259619194_9d97013791_z.jpg 640w, /wp-content/uploads/2015/03/16259619194_9d97013791_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16259619194_9d97013791_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Angularのコミュニティはとても大きく様々な素晴らしい人に参加してもらっています。このグラフはコミュニティの成長過程を示していますが、実際にはAngularのソースコードが格納されているgithubリポジトリに対するビジターを数えています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/f9e93379949647f827f50d07cd8f8320.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/f9e93379949647f827f50d07cd8f8320.png" alt="sc1" width="640" height="351" class="aligncenter size-full wp-image-13918" srcset="/wp-content/uploads/2015/03/f9e93379949647f827f50d07cd8f8320.png 640w, /wp-content/uploads/2015/03/f9e93379949647f827f50d07cd8f8320-300x165.png 300w, /wp-content/uploads/2015/03/f9e93379949647f827f50d07cd8f8320-207x114.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>6ヶ月前の段階で、2週間の間に5万人ほどの方に訪れてもらっていました。現在時点では、2週間で10万人ほど訪れてもらっています。そして同じ2週間の間に1600ほどの新しいissueやPRが作られます。そして新しい200ほどのコントリビュータが新しいPRやissueを立てていたり、ドキュメントを修正するということを行っています。これほど大きなコミュニティに育ったことをとても嬉しく思っています。多くの方がAnglarが大好きということ、急速に採用してくれていることをとても嬉しく思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/c1e317cd3b4a0be9159e677eb5f59955.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/c1e317cd3b4a0be9159e677eb5f59955.png" alt="sc2" width="640" height="350" class="aligncenter size-full wp-image-13919" srcset="/wp-content/uploads/2015/03/c1e317cd3b4a0be9159e677eb5f59955.png 640w, /wp-content/uploads/2015/03/c1e317cd3b4a0be9159e677eb5f59955-300x164.png 300w, /wp-content/uploads/2015/03/c1e317cd3b4a0be9159e677eb5f59955-207x113.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Angularコニュニティの成長は著しく、はじめの頃はGoogleのコア・メンバーがコミットしていましたが、現在では、Googleのコア・メンバーとコミュニティのコミットかでは、コミュニティのコミットの方が多くなっています。</p>

<h1>Angular1.4とは</h1>

<p>Angularのリリース・プロセスは完成されていて1週間単位でリリースができるような仕組みが構築されています。Angular1.4では35の新しい機能が入り、140のバグが修正されています。そしてパフォーマンスの点で改善が行われています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16694586050_f03cab76f3_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16694586050_f03cab76f3_z.jpg" alt="16694586050_f03cab76f3_z" width="640" height="427" class="aligncenter size-full wp-image-13907" srcset="/wp-content/uploads/2015/03/16694586050_f03cab76f3_z.jpg 640w, /wp-content/uploads/2015/03/16694586050_f03cab76f3_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16694586050_f03cab76f3_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>今回はAngular1.4の機能の中で特に興味がありそうな機能をピックアップしました。</p>

<p>まずは、</p>

<ul>
<li>New Router</li>
<li>Pluralization and Gender support</li>
<li>ng-animate update</li>
<li>ng-message update</li>
<li>ng-cookies update</li>
</ul>

<p>最初の機能のNew routeです。特に皆さんが興味ある機能ですし様々な機能が盛り込まれていますので別のセッション、ブライアンから説明します。Angularの中で複数および性別を扱ってていくことができJavaScriptでコードを書く必要がないということになります。ng-animateに関してはすぐに目に見えて役に立つというものではありませんが、将来利用していく中で活用することができると思います。そしてng-message,ng-cookiesもかなりの改善が行われています。</p>

<h3>Pluralization and Gender support</h3>

<p>ここでは「複数の扱い」と「性別の扱い」について見て行きたいと思います。このシンタックスはICUが出しているMessage Formatのシンタックスがベースになっています。現行Angularのinterpolationシンタックスを拡張したもので、interpolationシンタックスの中で記載することが可能になっています。これにはいくつかのアドバンテージがあり</p>

<ul>
<li>宣言型になっている</li>
<li>新しい国際化に対応できる</li>
<li>アトリビュートの中で使うことができる</li>
</ul>

<p>ということが挙げられます。</p>

<p>例をいくつか紹介しますが、オンラインで見てもらうことでより詳細なことが分かります。</p>

<p></p><pre class="crayon-plain-tag">{{numMessage, plural, 
    =0 { You have no new message }
    =1 { You have one new message }
 ohter { Tou have # new message }
}}</pre><p></p>

<p>複数扱いの簡単な例になりますが、今までAngularのコードを記載するときに行われていたダブルカーリーで記載します。ダブルカーリーの中でカンマが続きメッセージフォーマットが入ります。この書き方は、現在時点のAngularのコードと互換性があります。</p>

<p>つまり、後方互換性があるということを意味しています。詳細については説明しませんが簡単に読める構造なっています。最後のパラメータでは、複数のインタプリを入れることができ、変更があった場合には容易に追加することができます。性別に関するものも同様でシンプルな構造になっています。</p>

<p></p><pre class="crayon-plain-tag">{{friendGender, select,
     male { Invite him }
   female { Invite her }
    other { Invite them } 
}}</pre><p></p>

<h3>ng-massage update</h3>

<p>ng-massageの変更点について説明します。大きな特徴が2つあります。</p>

<p>一つ目の特徴ですが、複数のインクルードを入れることができます。そしてもうひとつexpentionを入れることができます。これにより簡単にコンフォート、リファクタリングすることができます。</p>

<p></p><pre class="crayon-plain-tag">&lt;input type="email" ng-model="data.email" name="myEmail"
ng-minlength="5" ng-maxlength="100" required /&gt;

&lt;div ng-message="myForm.myEmail.$error"&gt;
  &lt;div ng-message-exp="['minlength', 'maxlength']"&gt;
    Tour email must be between 5 and 100 characters long 
  &lt;/div&gt;
  &lt;div ng-message-include="required-errors.html"&gt;&lt;/div&gt;
  &lt;div ng-message-include="email-errors.html"&gt;&lt;/div&gt;
&lt;/div&gt;</pre><p></p>

<h3>ng-cookie update</h3>

<p>いままでのAngularにおけるcookieの対応はシンプルなものでだったので、もっといろいろな機能を追加して欲しいという要望が多く上がっていました。それらリクエストには</p>

<ul>
<li>クッキーのドメインとパスを持ていること</li>
<li>クッキーがアップデートできること</li>
<li>2年程前からあるあまり一般的でないバグについていくつか解消したこと</li>
</ul>

<p>その他に何が機能として新しく加わったかというと</p>

<ul>
<li>CommonJSフレンドリーなビルド</li>
<li>&#8220;unknown provider&#8221;というエラーをインジェクション使って取り扱うことができる</li>
<li>jqLiteを強制的に使う、あるいは特定のjQueryバージョンを使うことができる</li>
<li>ngOptionsを使ってオプションをdisableに</li>
<li>limitToを使うとbeginning indexの引数を加えた</li>
<li>ngModelで$setDirtyメソッドの使用</li>
<li>ルートプロバイダですがアプリケーションのcase-Insensitiveなurlに対応</li>
<li>ngAriaのオートアクセサビリティに関する改善</li>
<li>$httpについての改善</li>
</ul>

<p>ぜひみなさんもチェンジログを読み、どこが自分に関係するのか見てもらえるとよいかと思います。</p>

<h3>Better Performance</h3>

<p>さきほど言ったようにAngular1.4においてはパフォーマンス向上にフォーカスしています。その中でもダイジェストタイムの改善を行っています。ダイジェストタイムというのは、Angularで何かイベントが発生した場合、何が変わったかというのを発見するという機能で、それによりUIを変更するという機能です。これは30%程度改善されました。メモリーのfootprintですが2〜4%改善しました。ということはそれほど頻繁にガベージコレクションを考えなくていいことになります。</p>

<p>とは言え自動的に皆様が作ったアプリケーションのパフォーマンスが30%程度あるいは数%改善されることはありません。パフォーマンスの改善の度合いはアプリケーションの構造や作りにもよります。しかしながら、特に大きなテーブルや大量のデータを扱った場合は、直ぐにレスポンス改善されたというのがわかると思います。Angular1.4がリリースされたら何をするべきかというと、まずはUPDATEするのがよい。</p>

<p>そしてAngular1.4を構築するにあたって互換性に関しては注意をしました。大規模な変更がほとんどのアプリケーションで影響を及ぼすことはありません。</p>

<p>Angular1.3でサポートされていたブラウザはAngular1.4でサポートでされます。そうすると全員Angular1.4にバージョンアップしなければならないと思われます。その次にはAngular1.5にアップグレードしていきます。</p>

<h1>Angular1.5</h1>

<p>Angular1.4は一週間後にリリースされますが、そのあとAngular1.5の作業になります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/0b48aec144db2adac6562ada29b8ec90.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/0b48aec144db2adac6562ada29b8ec90.png" alt="sc3" width="640" height="345" class="aligncenter size-full wp-image-13921" srcset="/wp-content/uploads/2015/03/0b48aec144db2adac6562ada29b8ec90.png 640w, /wp-content/uploads/2015/03/0b48aec144db2adac6562ada29b8ec90-300x162.png 300w, /wp-content/uploads/2015/03/0b48aec144db2adac6562ada29b8ec90-207x112.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Angular1.5の策定の作業も今までの作業と同じように作業を行っていきます。Angular1.5を決めていくにあたってはgithubの意見を尊重しフィードバックする形で行われます。github上でどの機能を入れていくかを決めていきます。Angular1.5の中に入っていくものはコミュニティの意見にしたがって決めていきます。</p>

<p>次はAngular 2ということになりますが、new routeもあり、いろいろな新しいトピックがあります。今Angularでアプリケーションを開発するにはAngular1.4で開発するのが最もよいと思います。このリリースが最も安定しているというのは変わりありません。</p>

<h1>リリースサイクル</h1>

<p>リリースサイクルの期間がどんどん短くなっています。過去においてリリースサイクルはゆっくりしていた。例えばAngular1.0からAngular1.2は2年近く必要でしたが、リリースサイクルは後になればなるほど短くなっています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/08e9b4a40da32ffae61e4b0854794555.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/08e9b4a40da32ffae61e4b0854794555.png" alt="sc4" width="640" height="348" class="aligncenter size-full wp-image-13922" srcset="/wp-content/uploads/2015/03/08e9b4a40da32ffae61e4b0854794555.png 640w, /wp-content/uploads/2015/03/08e9b4a40da32ffae61e4b0854794555-300x163.png 300w, /wp-content/uploads/2015/03/08e9b4a40da32ffae61e4b0854794555-207x113.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>どうやったらうまくリリースを出していけるか、そしてサイクルをより効率よくできるか考えていました。リリースサイクルが早くなるということは将来の姿がすぐに見えるということになります。そして、リリースサイクルが短くなるということは、一回のリリースが盛りだくさんで移行が大変になるということがなくアップデートが容易になるということが言えます。</p>

<h1>Angularコミュニティ</h1>

<p>少しコミュニティについても考えていきたいと思います。AngularコミュニティというのはAngularにとって欠かせないものになっています。ngJapanもそうですし2週間前に開催されたng-confもそうです。我々はコミュニティが好きだし、コミュニティの力も必要としています。新しいプルリクエストや機能、バグフィックス等をいただけることは我々にとってとてもエキサイティングなことです。しかし、そのようなリクエストが多ければ多いほど、それをカバーする時間に多くを割く必要があります。みなさんのお手伝いによって助かっていきます。</p>

<p>最後にその3つの分野について触れていきます。</p>

<p>新しい機能を追加していくとき、開発者とのスレッドを立て何をつくろうとしているのかディスカッションから始めるといいです。新しい機能を開発するときはなるべく多くの人が参加して、多くの人が考えることが重要です。どの部分でデザイン変更が必要になるのか予測できるようにするのが重要です。そういう過程を踏むことでより良いAngularになると思われます。機能のプルリクエストはなるべく絞り込んで行くことが重要で、なるべくコンパクトにしてあとでまとめていくのがいいです。そして後でプルリクエストをつなげる方が良い方法です。変更というのは後で簡単に足していけるので、初めは機能として絞り込んだものの方が必要になります。</p>

<p>PRを出していくにあたって重要なことがあと2つあります。</p>

<p>unitテストを加える事が重要です。前回のコードに対して3,000のunitテストがありましたが、unitテストがあればあるほどコードカバレッジがよいということになります。詳細についてはコントリビュートドキュメントがgithub上にあるので確認してもらえるとよいと思います。</p>

<p>最後はバグやissueに関する分野です。自分が期待していた通りに動かない場合、何処かにバグがあるかもしれません。実際にこのテストが失敗したという実例を入れてくれると助かります。このバグの情報をやりとりをするときに、記述の中にどこでどのようなバグがあったのかというのを伝えて行くことは、同じ英語の中でもとても伝わりにくいです。ですので、失敗したテストコードをつけてもらうことで曖昧さがなくなり、手助けになります。バグだと思っていてもリリースサイクルが短くなったことでFIXしているかもしれません。ほんとにmasterでも治っていないことなのか確認してください。</p>

<p>さまざまな多くのPRがでてきますので、どれを優先して解決していくのか決めていきます。みなさまにも情報を提供してもらい、古いissueによくあるのが、すでに解決しているものもいくつかあります。古いissueのリストの中に入っていて、もう重要でない問題である場合、コメントを入れていただけると助かります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/16881987695_aa60e8830d_z.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/16881987695_aa60e8830d_z.jpg" alt="16881987695_aa60e8830d_z" width="640" height="427" class="aligncenter size-full wp-image-13904" srcset="/wp-content/uploads/2015/03/16881987695_aa60e8830d_z.jpg 640w, /wp-content/uploads/2015/03/16881987695_aa60e8830d_z-300x200.jpg 300w, /wp-content/uploads/2015/03/16881987695_aa60e8830d_z-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<div style="border: 1px solid gray;margin: 1em;padding: 1em">
<article>
<h1>CodeIQとの連動企画！</h1>
AngularJS雑学、豆知識を問う問題です。<br>腕試しに、もしくは理解度チェックに是非ご活用ください！<a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>から問題にチャレンジ！<br><a href="https://codeiq.jp/q/1384" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">問題：知ってる？AngularJS雑学</a>
</article>
</div>

<h1>プレゼンテーション資料</h1>

<p>今回取り上げたプレゼンテーションの資料は以下のとおり公開されています。合わせてご覧ください。</p>

<p><a href="http://ngjapan2015.chirayuk.com/#/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/03/5d152f4b3e5f3074d1db385dbfa0de7a.png" alt="sc5" width="640" height="347" class="aligncenter size-full wp-image-13917" srcset="/wp-content/uploads/2015/03/5d152f4b3e5f3074d1db385dbfa0de7a.png 640w, /wp-content/uploads/2015/03/5d152f4b3e5f3074d1db385dbfa0de7a-300x163.png 300w, /wp-content/uploads/2015/03/5d152f4b3e5f3074d1db385dbfa0de7a-207x112.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h1>セッション動画</h1>

<p>当日のセッションはyoutubeで公開されています。逐次通訳付きなので、是非ご覧ください！</p>

<div class="aligncenter">
<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/EEOKVlEaIDY?start=1250" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>
</div>
]]></content:encoded>
		
		<series:name><![CDATA[ng-japan 2015 特集]]></series:name>
	</item>
	</channel>
</rss>
