<?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>Flux &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/flux/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>React及びその周辺技術、事例から見るReact最新情報！──HTML5とか勉強会イベントレポート</title>
		<link>/albatrosary/19288/</link>
		<pubDate>Mon, 13 Jun 2016 06:07:16 +0000</pubDate>
		<dc:creator><![CDATA[佐川 夫美雄]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Flux]]></category>
		<category><![CDATA[React.js]]></category>
		<category><![CDATA[Redux]]></category>
		<category><![CDATA[Relay]]></category>

		<guid isPermaLink="false">/?p=19288</guid>
		<description><![CDATA[5月31日、イベント＆コミュニティスペース dots.にて「第65回HTML5とか勉強会──React最新情報」が開催されました。React及びその周辺技術、事例からReactの最新情報をキャッチアップします。 Reac...]]></description>
				<content:encoded><![CDATA[<p>5月31日、イベント＆コミュニティスペース dots.にて「第65回HTML5とか勉強会──React最新情報」が開催されました。React及びその周辺技術、事例からReactの最新情報をキャッチアップします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0120.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0120.jpg" alt="IMG_0120" width="600" height="400" class="alignnone size-full wp-image-19291" srcset="/wp-content/uploads/2016/06/IMG_0120.jpg 600w, /wp-content/uploads/2016/06/IMG_0120-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0120-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<h2>React現状確認</h2>

<p>＠koba04氏は「React現状確認」というタイトルで、現在、Reactの取り巻く状況を様々まとめて語りました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0141.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0141.jpg" alt="IMG_0141" width="600" height="400" class="alignnone size-full wp-image-19290" srcset="/wp-content/uploads/2016/06/IMG_0141.jpg 600w, /wp-content/uploads/2016/06/IMG_0141-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0141-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>皆さんご存知の通り、React.jsはFacebookが開発しているJavaScriptライブラリです。まず、Reactはどのようなアプリで利用されているかということからお話します。具体的な例として、まず挙げられるのが<a href="https://ja-jp.facebook.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Facebook</a>です。ここではバリバリに利用されていますし、<a href="https://www.instagram.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Instagram</a>では、アプリケーション全体がすべてReact.jsで作られていますので、<a href="https://facebook.github.io/react/blog/2015/09/02/new-react-developer-tools.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Reactのdevtool</a>を使って中身を見てみるとなかなか面白いかもしれません。</p>

<p><a href="https://www.netflix.com/jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Netflix</a>ではヘビーに利用されていて、テレビのレンダリング部分でも使われています。Twitter(mobile)も、React+Redux+React Routerの構成で利用されています。<a href="https://www.uber.com/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">uber</a>では最近サイトをリニューアルし、そこでは先の構成にサーバサイドレンダリングなども利用しています。</p>

<p>どのような人がReact.jsを利用しているかというと、パフォーマンスが速いから使っているという人はあまりいない。それよりも宣言的なコンポーネント、ピュアなコンポーネントを定義するためといったことや、メンテナブルなUIを作るために使っている人が多いです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0150.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0150.jpg" alt="IMG_0150" width="600" height="400" class="alignnone size-full wp-image-19299" srcset="/wp-content/uploads/2016/06/IMG_0150.jpg 600w, /wp-content/uploads/2016/06/IMG_0150-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0150-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>その他、新しく実装された機能、現状議論されている多くの機能についてコメント。盛りだくさんなので具体的な内容については省略します。詳細な話については、当日の資料をご参照ください。</p>

<ul>
<li>Stateless Function Component</li>
<li>ES2015 Classes &amp; ES2015 Classes Components</li>
<li>React.createClass</li>
<li>React.PureComponent</li>
<li>A pitfall of shouldComponentUpdate</li>
<li>react-addons-perf</li>
<li>why-did-you-update</li>
<li>unstable_batchedUpdates</li>
<li>ReactElement</li>
</ul>

<p>最後に、ミーティングが毎週行われていて、ミーティングノートが１週間ごとに出しています。今後のReact.jsはライブラリとしてもっと小さくしていくことや、レンダラー部分についてどう改善していくかなど議論しています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0146.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0146.jpg" alt="IMG_0146" width="600" height="400" class="alignnone size-full wp-image-19300" srcset="/wp-content/uploads/2016/06/IMG_0146.jpg 600w, /wp-content/uploads/2016/06/IMG_0146-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0146-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p><a href="https://speakerdeck.com/koba04/the-state-of-react-dot-js-2016" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">the-state-of-react-dot-js-2016</a></p>

<h2>なぜReduxを使うのか</h2>

<p>＠kuy氏から、最近人気上昇中の<a href="https://github.com/reactjs/redux" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Redux</a>について、Reduxとはどういったものかを語りました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0174.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0174.jpg" alt="IMG_0174" width="600" height="400" class="alignnone size-full wp-image-19293" srcset="/wp-content/uploads/2016/06/IMG_0174.jpg 600w, /wp-content/uploads/2016/06/IMG_0174-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0174-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Reduxが最近注目されている理由は、事例が多くなってきているのと、コミュニティが活発になってきているということが挙げられます。特に開発するための周辺ライブラリが充実し、機運が高まり、Reduxが注目され始めています。</p>

<p>反面、Twitter等でよく見かける投稿は、Reduxがつらい、Redux難しい、Reduxの良さがわからないという意見もあり、結果としてRedux大丈夫なのかと思わせてしまうようなことも起きています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0159.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0159.jpg" alt="IMG_0159" width="600" height="400" class="alignnone size-full wp-image-19305" srcset="/wp-content/uploads/2016/06/IMG_0159.jpg 600w, /wp-content/uploads/2016/06/IMG_0159-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0159-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>そこで、なぜReduxを使うのかということを整理してみます。特に、作者の<a href="https://twitter.com/dan_abramov" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Dan Abramov</a>さんいわく、「ライブラリの使い方に時間を費やすよりも背景にあるアイデアを学んで、他所に活用していこう」ということを訴えています。</p>

<h3>Fluxは何を解決したのか</h3>

<p>Fluxの考え方はご存知の方も多いとは思いますが、順番としてはまず、ViewからActionが投げられます。Dispatherはこの投げられたActionをStoreに投げるルーティングの役割をしています。StoreはActionを受け取ってStateを変更します。このStateの変更をViewが受け取って、Viewはその情報に従ってレンダリングを行うという流れです。</p>

<p>Fluxで解決したかったことは、基本的にはReact単体で構築したときに困ることを解決したかった、具体的には、バケツリレーという問題がありました。バケツリレーというのはコンポーネント階層が深くなったとき、例えば深い階層のコンポーネントへイベントを伝搬するときに、途中のコンポーネントには無関係にも関わらず、通過していくという問題がありました。</p>

<p>Stateをコンポーネントで持っている場合、他のコンポーネントへそのStateを渡したい場合、このコンポーネントの上位の親コンポーネントを作ねばならないという問題があった。何かするときに必ず親コンポーネントを作らないといけない。</p>

<h3>Reduxの何がいいのか</h3>

<p>FluxにはDispatcherが存在していましたが、ReduxではDispatcherがStoreの中に組み込まれていました。FluxでもStoreがあるが、ReduxではそのStoreを役割ごとに名前を変え、利便性を向上させたところがポイントです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_01681.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_01681.jpg" alt="IMG_0168" width="600" height="400" class="alignnone size-full wp-image-19306" srcset="/wp-content/uploads/2016/06/IMG_01681.jpg 600w, /wp-content/uploads/2016/06/IMG_01681-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_01681-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>では、より具体的にReduxのどこがいいのかというと、1つの大きなStateツリーを複数のReducerで構築しています。そして、状態管理だけに特化したところです。反面、それ以外は開発者に丸投げということになりますが、よく言えば開発者の状況に応じて開発できるということを意味します。</p>

<p>そして、状態管理に特化したということがあるので、Reduxを素の状態で利用するのはお勧めできないし、無理してReact, Action, Creator, Reducerで実装すると後で大変な思いをするということです。専用のMiddlewareを入れるといいとのことです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0172.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0172.jpg" alt="IMG_0172" width="600" height="400" class="alignnone size-full wp-image-19302" srcset="/wp-content/uploads/2016/06/IMG_0172.jpg 600w, /wp-content/uploads/2016/06/IMG_0172-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0172-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://speakerdeck.com/kuy/nazereduxwoshi-ufalseka" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nazereduxwoshi-ufalseka</a></p>

<h2>Relay</h2>

<p>＠hokaccha氏による<a href="https://facebook.github.io/relay/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Relay</a>のお話です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0190.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0190.jpg" alt="IMG_0190" width="600" height="400" class="alignnone size-full wp-image-19294" srcset="/wp-content/uploads/2016/06/IMG_0190.jpg 600w, /wp-content/uploads/2016/06/IMG_0190-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0190-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>RelayはクライアントにReactを利用し、サーバにGraphQLを使ったものです。仕様としてまとめたものがGraphQL Relayで実装としては、react-relayとgraphgl-relayがあります。Relayをひと言で言えば、フルスタックなフレームワークです。Angularがよくフルスタックといわれますが、Angularはクライアントだけなので、Relayはサーバまでやっていますので、本当のフルスタックということになると思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0188.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0188.jpg" alt="IMG_0188" width="600" height="400" class="alignnone size-full wp-image-19307" srcset="/wp-content/uploads/2016/06/IMG_0188.jpg 600w, /wp-content/uploads/2016/06/IMG_0188-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0188-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>GraphQLとは、Facebookが開発したクエリ言語で、クライアント/サーバ間でデータのやり取りに利用されます。レイヤーとしてはREST/RPCと同じ位置付けになります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0204.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0204.jpg" alt="IMG_0204" width="600" height="400" class="alignnone size-full wp-image-19310" srcset="/wp-content/uploads/2016/06/IMG_0204.jpg 600w, /wp-content/uploads/2016/06/IMG_0204-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0204-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>RESTと違って、リクエストに対するレスポンスのフィールドが1:1対応しているところです。そうすると、必要なフィールドだけを選択可能となり、ネスとしたデータを一発で抽出できることや、型定義が存在するなどメリットがあります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0207.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0207.jpg" alt="IMG_0207" width="600" height="400" class="alignnone size-full wp-image-19308" srcset="/wp-content/uploads/2016/06/IMG_0207.jpg 600w, /wp-content/uploads/2016/06/IMG_0207-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0207-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Relayの特徴は、そのサイトにも書いてある通り3つあります。</p>

<ul>
<li>DECLARATIVE</li>
<li>COLOCATION</li>
<li>MUTATIONS</li>
</ul>

<p>しかし、Relayは敷居が高いと思います。例えば、GraphQLを覚えて、ちょっとしたアプリを作るにもGraphQLのサーバが必要になりいろいろと大変になる。そしてやっている人もあまりいないので、資料を探すとちょっと大変な思いをします。Relayの期待として、真のフルスタックなフレームワークになり、次世代のRailsになれる可能性があるかもしれないかもしれないです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0222.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0222.jpg" alt="IMG_0222" width="600" height="400" class="alignnone size-full wp-image-19309" srcset="/wp-content/uploads/2016/06/IMG_0222.jpg 600w, /wp-content/uploads/2016/06/IMG_0222-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0222-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://speakerdeck.com/hokaccha/relay-1" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">relay-1</a></p>

<h2>How to style React components</h2>

<p>＠Quramy氏からは、コンポーネント内にあるCSSの話がありました。同氏はメインサービスとしてはAngularを使っているが、社内系ツールではReactを使っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0229.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0229.jpg" alt="IMG_0229" width="600" height="400" class="alignnone size-full wp-image-19295" srcset="/wp-content/uploads/2016/06/IMG_0229.jpg 600w, /wp-content/uploads/2016/06/IMG_0229-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0229-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>UI Componentと呼ばれるものの特徴は、見た目と振る舞いがまとめて提供されていて、適度にカプセル化されているものです。そうなると再利用性が高くなり、保守しやすくなるところに期待があります。このコンポーネントは多くのJSフレームワークでサポートされています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0238.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0238.jpg" alt="IMG_0238" width="600" height="400" class="alignnone size-full wp-image-19311" srcset="/wp-content/uploads/2016/06/IMG_0238.jpg 600w, /wp-content/uploads/2016/06/IMG_0238-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0238-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>Style定義は、とても壊れやすいです。コンポーネントの外部から、CSSを破壊することが簡単にできるからです。つまり、React.Componentを使っただけでは、CSSが適切にカプセル化されているわけではないのです。この問題は、CSSセレクタがGlobalであることが最大の問題だと言えます。この問題解決のために、</p>

<ul>
<li>CSS命名規約</li>
<li>Web Component(Shadow DOM)</li>
<li>CSS in JS</li>
<li>CSS Modules</li>
</ul>

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

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0244.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0244.jpg" alt="IMG_0244" width="600" height="400" class="alignnone size-full wp-image-19312" srcset="/wp-content/uploads/2016/06/IMG_0244.jpg 600w, /wp-content/uploads/2016/06/IMG_0244-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0244-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<h3>CSS in JS</h3>

<p>CSS in JSは、Christopher Chedeauが2014年に発表しました。ReactはJSXでテンプレートをJavaScriptに取り込むことに成功したので、CSSもJavaScriptに取り込めばいいのではということから始まりました。CSS class名を利用しないでinline-styleを利用することで、Styleをコンポーネントに閉じ込めることが可能になり、問題の発生がなくなります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0252.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0252.jpg" alt="IMG_0252" width="600" height="400" class="alignnone size-full wp-image-19314" srcset="/wp-content/uploads/2016/06/IMG_0252.jpg 600w, /wp-content/uploads/2016/06/IMG_0252-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0252-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>こうした考えは、他にもいくつかメリットがあります。デメリットとしては、擬似要素セレクタや擬似クラスセレクタなど、インラインスタイルで定義できないようなものは利用できません。</p>

<h3>CSS Modules</h3>

<p>Glen Maddernが2015年に定評しました。CSS in JSはJavaScriptでStyleを生成したのに対し、CSS ModulesはCSSをJavaScriptから利用するというアプローチを取っています。CSSでできることは、CSSでやろうと言ったところです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0257.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0257.jpg" alt="IMG_0257" width="600" height="400" class="alignnone size-full wp-image-19313" srcset="/wp-content/uploads/2016/06/IMG_0257.jpg 600w, /wp-content/uploads/2016/06/IMG_0257-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0257-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>CSSで定義された名前を論理名として扱い、JavaScriptでimportし、その定義を読み込みます。JavaScriptが実行されるときに内部的に付与した名前に書き換え、容易に破壊できないようにしています。</p>

<p>※当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="https://quramy.github.io/react-css-note/#/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">react-css-note</a></p>

<h2>Atomic Design powered by React @AbemaTV</h2>

<p>五藤佑典氏による＠AbemaTVの事例紹介です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0280.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0280.jpg" alt="IMG_0280" width="600" height="400" class="alignnone size-full wp-image-19296" srcset="/wp-content/uploads/2016/06/IMG_0280.jpg 600w, /wp-content/uploads/2016/06/IMG_0280-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0280-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>＠AbemaTVはサイバーエージントとテレビ朝日が共同で展開していて、多様なコンテンツがあります。AbemaTVでは、開発の初めスマホアプリで開発は進んでいましたが、Web版はなく仕様が決まっていませんでした。しかし、リリース日は決まっているという状態でした。</p>

<p>このような状況では、作っていくうちに画面変更が多々入るのがわかっていたので、わかるところから作るという方針でせめて行きました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0273.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0273.jpg" alt="IMG_0273" width="600" height="400" class="alignnone size-full wp-image-19315" srcset="/wp-content/uploads/2016/06/IMG_0273.jpg 600w, /wp-content/uploads/2016/06/IMG_0273-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0273-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>画面仕様の変更に強いコンポーネントの粒度を、チームで明確化したいという欲求が出てきました。ATOMIC DESIGNを参考にしました。ATOMIC DESIGNとは、UIコンポーネントの要素を化学の原子論的な要素に見立て、小さいシンプルなコンポーネントを組み合わせより大きなコンポーネントを構成するデザインシステムのことです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0282.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0282.jpg" alt="IMG_0282" width="600" height="400" class="alignnone size-full wp-image-19316" srcset="/wp-content/uploads/2016/06/IMG_0282.jpg 600w, /wp-content/uploads/2016/06/IMG_0282-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0282-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>ATOMIC DESIGNの考え方を適用しグローバルナビ、リモコン、スライダー、アイコンなどを作っていきました。こうして作ったAbemaTVの細かな画面変更に関し粒度がある程度細かったため、変更は割とスムーズにできたというところがこのシステムを採用した良い結果だったと考えています。チーム開発において個人の感覚に依存しない形で行えたことは、プロジェクトがうまくいった要素であります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0286.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0286.jpg" alt="IMG_0286" width="600" height="400" class="alignnone size-full wp-image-19317" srcset="/wp-content/uploads/2016/06/IMG_0286.jpg 600w, /wp-content/uploads/2016/06/IMG_0286-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0286-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>@AbemaTVはReact+Flux+Atomic Designですが、ViewでReactとAtomic Designを利用し、StoreでImmutable.js、DespatcherでRxJSを使っています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0287.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0287.jpg" alt="IMG_0287" width="600" height="400" class="alignnone size-full wp-image-19318" srcset="/wp-content/uploads/2016/06/IMG_0287.jpg 600w, /wp-content/uploads/2016/06/IMG_0287-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0287-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>

<p>当日の資料は以下にアップされていますので、こちらも参照してください。</p>

<p><a href="http://www.slideshare.net/ygoto3q/atomic-desigin-powered-by-react-abematv" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">atomic-desigin-powered-by-react-abematv</a></p>

<h2>最後に</h2>

<p>このレポートではイベントが盛りだくさんだったため、内容の細かなところまでは記載できませんでした。各登壇者の資料もアップされていますので、合わせて見ていただけると幸いです。また、<a href="https://www.youtube.com/watch?v=C8bMahvTkHA" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">html5j配信班による動画</a>もありますので、参照してください。</p>

<p>本イベントとは関係ありませんが、2016年のHTML5カンファレンスが9月3日（土）東京電気大学に決まりました！乞うご期待！！</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/06/IMG_0118.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2016/06/IMG_0118.jpg" alt="IMG_0118" width="600" height="400" class="alignnone size-full wp-image-19297" srcset="/wp-content/uploads/2016/06/IMG_0118.jpg 600w, /wp-content/uploads/2016/06/IMG_0118-300x200.jpg 300w, /wp-content/uploads/2016/06/IMG_0118-207x138.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
]]></content:encoded>
			</item>
		<item>
		<title>乗るしかない！Reactのビッグウェーブに！─isomorphic tokyo meetupに参加してきた</title>
		<link>/shumpei-shiraishi/14895/</link>
		<pubDate>Fri, 01 May 2015 03:01:33 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Fetcr]]></category>
		<category><![CDATA[Flatiron]]></category>
		<category><![CDATA[Flummox]]></category>
		<category><![CDATA[Flux]]></category>
		<category><![CDATA[Fluxible]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Rendr]]></category>
		<category><![CDATA[Virtual DOM]]></category>
		<category><![CDATA[isomorphic]]></category>
		<category><![CDATA[アーキテクチャ]]></category>

		<guid isPermaLink="false">/?p=14895</guid>
		<description><![CDATA[連載： アプリケーションアーキテクチャ最前線 (1)おはようございます。編集長の白石です。 昨日（2015年4月30日）、isomorphic tokyo meetupに参加してきました。 というのも実は近々、HTML5...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/arch/" class="series-287" title="アプリケーションアーキテクチャ最前線" data-wpel-link="internal">アプリケーションアーキテクチャ最前線</a> (1)</div><p>おはようございます。編集長の白石です。</p>

<p>昨日（2015年4月30日）、<a href="http://nodejs.connpass.com/event/13363/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">isomorphic tokyo meetup</a>に参加してきました。</p>

<p>というのも実は近々、HTML5 Experts.jpでは「Webアプリケーション・アーキテクチャ」に関する特集を行う予定なのですが、そこでキーワードとして挙げられていたのが<strong>isomorphic。</strong>
サーバサイドとクライアントサイドでコードの共有を促進するのが主な目的の一つ、というところまでは理解できたのですが、実際のところ、アーキテクチャはどう変わるのか？
それを探りたいと思っていたところ、ちょうどよくイベントの開催がアナウンスされていたので、急遽取材させていただきました。</p>

<p>取材を快く受け入れてくださった、主催の<a href="https://twitter.com/yosuke_furukawa" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Yosuke FURUKAWA</a>さん、本当にありがとうございました。</p>

<p>この記事では、トップバッターで講演されていた<a href="https://twitter.com/koichik" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">koichik</a>さんの講演内容を中心にご紹介して、isomorphicに触れるきっかけとなる記事を目指します。</p>

<p>なお、本日の講演者の皆様による資料はこちらになります。</p>

<h2><a href="http://nodejs.connpass.com/event/13363/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">isomorphic tokyo meetup</a>の発表資料</h2>

<h3>「Isomorphic Survival Guide」(by <a href="https://twitter.com/koichik" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">koichik</a>)</h3>

<p><a class="embedly-card" href="https://speakerdeck.com/koichik/isomorphic-survival-guide" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Isomorphic Survival Guide</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<h3>「Isomorphic Web development with Scala &amp; Scala.js」(by <a href="https://twitter.com/TanUkkii007" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TanUkkii</a>)</h3>

<p><a class="embedly-card" href="http://www.slideshare.net/TanUkkii/isomorphic-web-development-with-scala-and-scalajs" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Isomorphic web development with scala and scala.js</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<h3>「実践isomorphic (+ Electron)」(by <a href="https://twitter.com/mizchi" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">mizchi</a>)</h3>

<p><a class="embedly-card" href="https://speakerdeck.com/mizchi/shi-jian-isomorphic-plus-electron" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">実践Isomorphic(+ Electron)</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<h3>「Unified Interface on Isomorphic JavaScript」 (by <a href="https://twitter.com/axross_" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">axross</a>)</h3>

<p><a class="embedly-card" href="http://www.slideshare.net/axross/unified-interface-on-isomorphic-javascript" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Unified Interface on Isomorphic Javascript</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<h3>「やみくも isomorphic から抜け出すために足りてないもの」 (by <a href="http://twitter.com/Jxck_" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Jxck_</a>)</h3>

<p>※資料は後日公開だそうです。</p>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">今日のスライドがちょっと片手間すぎるので、公開はいろいろ直してからにします。 <a href="https://twitter.com/hashtag/isomorphic_meetup?src=hash" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">#isomorphic_meetup</a></p>&mdash; Jxck (@Jxck_) <a href="https://twitter.com/Jxck_/status/593792866075353088" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2015, 4月 30</a></blockquote>

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<h2>koichikさんによる「Isomorphic Survival Guide」つまみ食いレポート</h2>

<p><a href="https://twitter.com/koichik" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">koichik</a>さんの「Isomorphic Survival Guide」は、まずIsomorphicという言葉の語源からでした。ギリシャ語で「同じ」という意味を表す「isos」という言葉と、「形」という意味を表す「morphe」という言葉を合わせたものだそうです。</p>

<div id="attachment_14897" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/01_isomorphic.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/01_isomorphic-640x480.jpg" alt="isomorphicの語源" width="640" height="480" class="size-large wp-image-14897" srcset="/wp-content/uploads/2015/05/01_isomorphic.jpg 640w, /wp-content/uploads/2015/05/01_isomorphic-300x225.jpg 300w, /wp-content/uploads/2015/05/01_isomorphic-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">isomorphicの語源</p></div>

<p>同じ成り立ちの言葉として、「metamorphic」や「polymorphic」があるとのこと。オブジェクト指向の世界で頻繁に用いられる「ポリモーフィック」という言葉が、isomorphicと同様「-morphic」で終わる単語だと気づいたのはこの時が初めてで、ハッとしました。</p>

<div id="attachment_14898" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/02_x-morphic.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/02_x-morphic-640x480.jpg" alt="&quot;-morphic&quot;で終わる言葉はほかにも" width="640" height="480" class="size-large wp-image-14898" srcset="/wp-content/uploads/2015/05/02_x-morphic.jpg 640w, /wp-content/uploads/2015/05/02_x-morphic-300x225.jpg 300w, /wp-content/uploads/2015/05/02_x-morphic-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">&#8220;-morphic&#8221;で終わる言葉はほかにも</p></div>

<p>で、isomorphicが語られるときには、「クライアントとサーバの間でのコード共有」や「フロントエンドとバックエンドの間でのコード共有」と紹介されることが多いですが、そもそもクライアントとフロントエンド、サーバとバックエンドが同じ意味の単語なのか、そこには人による解釈の違いもあれば、指している意味合いの違いもある、と指摘。</p>

<div id="attachment_14899" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/03_2x2.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/03_2x2-640x480.jpg" alt="クライアント・サーバという用語とフロントエンド・バックエンドという用語は同一ではない" width="640" height="480" class="size-large wp-image-14899" srcset="/wp-content/uploads/2015/05/03_2x2.jpg 640w, /wp-content/uploads/2015/05/03_2x2-300x225.jpg 300w, /wp-content/uploads/2015/05/03_2x2-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">クライアント・サーバという用語とフロントエンド・バックエンドという用語は同一ではない</p></div>

<p>この講演においては、クライアントとサーバはネットワークの「こちら側」と「あちら側」、フロントエンドとバックエンドは情報の入出力を「人間相手に行う」のか「ストレージ相手に行う」のか、という意味で取り扱う。</p>

<div id="attachment_14900" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/04_definition.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/04_definition-640x480.jpg" alt="本講演における用語の定義" width="640" height="480" class="size-large wp-image-14900" srcset="/wp-content/uploads/2015/05/04_definition.jpg 640w, /wp-content/uploads/2015/05/04_definition-300x225.jpg 300w, /wp-content/uploads/2015/05/04_definition-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">本講演における用語の定義</p></div>

<p>例えば90年ごろの「C/Sシステム」（いわゆる「クラサバ」）は、クライアントのWindowsマシン上で「人間向け」（フロントエンド）の処理も「ストレージ向け」（バックエンド）の処理も行われていました。このように、クライアント＝フロントエンド、サーバ＝バックエンドという対応関係は時代によって変遷してきており、J2EEが提唱した三層アーキテクチャやRIAなど、様々なアーキテクチャと製品が模索されてきました。</p>

<div id="attachment_14901" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/05_cs.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/05_cs-640x480.jpg" alt="C/Sシステム" width="640" height="480" class="size-large wp-image-14901" srcset="/wp-content/uploads/2015/05/05_cs.jpg 640w, /wp-content/uploads/2015/05/05_cs-300x225.jpg 300w, /wp-content/uploads/2015/05/05_cs-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">C/Sシステム</p></div>

<div id="attachment_14902" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/06_bbff.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/06_bbff-640x480.jpg" alt="フロントエンドとバックエンドの変遷" width="640" height="480" class="size-large wp-image-14902" srcset="/wp-content/uploads/2015/05/06_bbff.jpg 640w, /wp-content/uploads/2015/05/06_bbff-300x225.jpg 300w, /wp-content/uploads/2015/05/06_bbff-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">フロントエンドとバックエンドの変遷</p></div>

<h2>isomorphicに挑戦してきた様々なフレームワーク</h2>

<p>こうした中、少しでも開発から無駄をなくすために、クライアント／サーバ、フロントエンド／バックエンドの間でコードを共有できないかという可能性が探られてきました。</p>

<p>「isomorphic」という単語は、筆者としては最近になって聞くようになったのですが、実は2011年にリリースされた
「<a href="http://flatironjs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Flatiron</a>」というフレームワークが提唱した概念だったそうです。4年近くも前から使われていた用語だったのですね。</p>

<div id="attachment_14903" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/07_flatiron.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/07_flatiron-640x480.jpg" alt="Flatiron" width="640" height="480" class="size-large wp-image-14903" srcset="/wp-content/uploads/2015/05/07_flatiron.jpg 640w, /wp-content/uploads/2015/05/07_flatiron-300x225.jpg 300w, /wp-content/uploads/2015/05/07_flatiron-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Flatiron</p></div>

<p>しかし、Flatironはそれほど普及することなく現在に至ります。その後もYahoo!の「<a href="https://github.com/yahoo/mojito" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Mojito</a>」や、一時期大きな話題になった（今でもアクティブに開発されていますが）<a href="https://www.meteor.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Meteor</a>など、様々なプロダクトがisomorphicなアプローチにチャレンジしてきました。しかしこれらがあまり大きく普及しなかった要因は、「（プロダクト利用者にとっての）どんな課題を解くのか」が不明瞭だったり、ニッチ過ぎたり、先進的すぎたりしたことにあると指摘。</p>

<div id="attachment_14904" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/08_frameworks.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/08_frameworks-640x480.jpg" alt="どんな課題を解くのかが重要" width="640" height="480" class="size-large wp-image-14904" srcset="/wp-content/uploads/2015/05/08_frameworks.jpg 640w, /wp-content/uploads/2015/05/08_frameworks-300x225.jpg 300w, /wp-content/uploads/2015/05/08_frameworks-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">どんな課題を解くのかが重要</p></div>

<p>そんな中、<a href="https://www.airbnb.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Airbnb</a>が2013年に公開した「<a href="https://github.com/rendrjs/rendr" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Rendr</a>」
は、SPA (Single Page Application)の「初期表示が遅い」「SEOが弱い」という課題を解決すべく生み出されたもので、
かなり実用的でした。</p>

<div id="attachment_14905" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/09_rendr.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/09_rendr-640x480.jpg" alt="Rendr(Airbnb)" width="640" height="480" class="size-large wp-image-14905" srcset="/wp-content/uploads/2015/05/09_rendr.jpg 640w, /wp-content/uploads/2015/05/09_rendr-300x225.jpg 300w, /wp-content/uploads/2015/05/09_rendr-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Rendr(Airbnb)</p></div>

<p>RendrはBackbone.jsを拡張してisomorphicな環境を実現するものでした。Rendrは、以下のように様々な可能性を切り開きました。</p>

<ul>
<li>サーバサイドにおけるフロントエンドレイヤをJavaScriptで提供することで、クライアントとサーバのコード共有を実現しやすい</li>
<li>サーバサイドにおけるフロントエンドレイヤがセッション管理を行うことで、バックエンドのAPIをステートレスに保つことができる</li>
<li>サーバサイドにおけるフロントエンドレイヤがAPIゲートウェイとしてデータ変換を行ったり、様々なバックエンドAPIを組み合わせて
フロントエンドに提供する（オーケストレーション）ことを可能にする</li>
<li>上記のことから、（サーバサイドにおける）フロントエンドとバックエンドの疎結合な関係や、バックエンドの実装をJavaScript
に縛られず自由に開発できるようになり、ステートレスなマイクロサービスが協調して一つのサービスを作り上げるという構成を構築しやすい</li>
</ul>

<div id="attachment_14906" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/10_rendr-isomorphic.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/10_rendr-isomorphic-640x480.jpg" alt="Rendr的なIsomorphicの可能性" width="640" height="480" class="size-large wp-image-14906" srcset="/wp-content/uploads/2015/05/10_rendr-isomorphic.jpg 640w, /wp-content/uploads/2015/05/10_rendr-isomorphic-300x225.jpg 300w, /wp-content/uploads/2015/05/10_rendr-isomorphic-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Rendr的なIsomorphicの可能性</p></div>

<h2>Reactの波に乗れ！</h2>

<p>ですが、Rendrがリリースされた時期はAngularJSが人気を獲得した時期と重なっており、残念ながら大きな話題にはなりませんでした…。しかし今、「仮想DOM」というキャッチーなキーワードを引っさげ、<a href="https://facebook.github.io/react/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">React</a>が登場するや、非常な人気を博して今に至ります。</p>

<div id="attachment_14907" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/11_react.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/11_react-640x480.jpg" alt="Reactの仮想DOM" width="640" height="480" class="size-large wp-image-14907" srcset="/wp-content/uploads/2015/05/11_react.jpg 640w, /wp-content/uploads/2015/05/11_react-300x225.jpg 300w, /wp-content/uploads/2015/05/11_react-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Reactの仮想DOM</p></div>

<p>しかしReactはあくまでビューだけに特化したライブラリ。アプリケーションアーキテクチャとしては、Facebookが
「<a href="https://github.com/facebook/flux" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Flux</a>」を提唱していますが、公式な実装が提供されたのはFluxの一部分
のみであったため、独自実装が乱立する事態となっています。</p>

<div id="attachment_14908" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/12_flux.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/12_flux-640x480.jpg" alt="Flux" width="640" height="480" class="size-large wp-image-14908" srcset="/wp-content/uploads/2015/05/12_flux.jpg 640w, /wp-content/uploads/2015/05/12_flux-300x225.jpg 300w, /wp-content/uploads/2015/05/12_flux-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Flux</p></div>

<p>Fluxを用いたアプリの基本的な構成は以下のようになります。
フロントエンド部分に限ってみると、処理の流れが綺麗に一方向（unidirectional）になっているのがわかります。</p>

<div id="attachment_14909" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/13_fluxapp.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/13_fluxapp-640x480.jpg" alt="Flux的アプリの基本要素" width="640" height="480" class="size-large wp-image-14909" srcset="/wp-content/uploads/2015/05/13_fluxapp.jpg 640w, /wp-content/uploads/2015/05/13_fluxapp-300x225.jpg 300w, /wp-content/uploads/2015/05/13_fluxapp-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Flux的アプリの基本要素</p></div>

<p>そして何よりReactが期待されているのは、仮想DOMの仕組みを応用したisomorphicなアーキテクチャ。クライアントでは仮想DOMを実際のDOMツリーに変換しますが、サーバサイドでは仮想DOMからHTML文字列を出力するようにできるので、クライアントとサーバのどちらでも同様のコードが実行できるわけです。</p>

<p>Reactに関係するisomorphicなライブラリには、以下の様なものがあります。</p>

<div id="attachment_14910" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/14_react_isomorphic.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/14_react_isomorphic-640x480.jpg" alt="Reactに関係した、Isomorphicなライブラリ" width="640" height="480" class="size-large wp-image-14910" srcset="/wp-content/uploads/2015/05/14_react_isomorphic.jpg 640w, /wp-content/uploads/2015/05/14_react_isomorphic-300x225.jpg 300w, /wp-content/uploads/2015/05/14_react_isomorphic-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Reactに関係した、Isomorphicなライブラリ</p></div>

<p><a href="https://github.com/acdlite/flummox/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Flummox</a>も期待のライブラリ。</p>

<div id="attachment_14911" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/15_flummox.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/15_flummox-640x480.jpg" alt="Flummox" width="640" height="480" class="size-large wp-image-14911" srcset="/wp-content/uploads/2015/05/15_flummox.jpg 640w, /wp-content/uploads/2015/05/15_flummox-300x225.jpg 300w, /wp-content/uploads/2015/05/15_flummox-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Flummox</p></div>

<p>Yahoo!が開発中の<a href="https://github.com/yahoo/fluxible" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Fluxible</a>は、比較的重量級なアプローチの、isomorphicなFluxアプリケーションコンテナ。</p>

<div id="attachment_14912" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/16_fluxible.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/16_fluxible-640x480.jpg" alt="Fluxible" width="640" height="480" class="size-large wp-image-14912" srcset="/wp-content/uploads/2015/05/16_fluxible.jpg 640w, /wp-content/uploads/2015/05/16_fluxible-300x225.jpg 300w, /wp-content/uploads/2015/05/16_fluxible-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Fluxible</p></div>

<p>Fluxibleが使用する「<a href="https://github.com/yahoo/fetchr" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Fetchr</a>」は、バックエンド（の窓口となるWeb API）へのアクセスを、クライアントサイドとサーバサイドで同様のコードを用いることを実現します。正しくセットアップしていれば、Fluxアプリケーションのisomorphic化を促進できると期待されています。</p>

<div id="attachment_14913" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/17_fetchr.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/17_fetchr-640x480.jpg" alt="Fetchr" width="640" height="480" class="size-large wp-image-14913" srcset="/wp-content/uploads/2015/05/17_fetchr.jpg 640w, /wp-content/uploads/2015/05/17_fetchr-300x225.jpg 300w, /wp-content/uploads/2015/05/17_fetchr-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">Fetchr</p></div>

<h2>まとめ</h2>

<p>isomorphicなアーキテクチャは長い間模索されていましたが、これまでいまいち波に乗り切れていませんでした。しかし今はReactが非常に人気を博し、isomorphicなアーキテクチャの実現に対して、多くの人々が注力しています。</p>

<p>マイクロサービスとの相性も非常に良いと考えられ、今後大きな潮流になっていくのは間違いないでしょう。</p>

<div id="attachment_14914" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/18_matome.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/18_matome-640x480.jpg" alt="まとめ" width="640" height="480" class="size-large wp-image-14914" srcset="/wp-content/uploads/2015/05/18_matome.jpg 640w, /wp-content/uploads/2015/05/18_matome-300x225.jpg 300w, /wp-content/uploads/2015/05/18_matome-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">まとめ</p></div>

<p>Reactの波に乗り遅れるな！</p>
]]></content:encoded>
		
		<series:name><![CDATA[アプリケーションアーキテクチャ最前線]]></series:name>
	</item>
	</channel>
</rss>
