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

<channel>
	<title>マークアップ &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/マークアップ/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>Webアプリのアクセシビリティを追求せよ！「インクルーシブ」なマークアップを議論しながら学んでみた</title>
		<link>/shumpei-shiraishi/24671/</link>
		<pubDate>Thu, 02 Nov 2017 09:07:28 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[アクセシビリティ]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=24671</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (10) こんにちは、編集長の白石です。 この記事は、9月24日に開催されたHTML5 Conference 2017に登壇したエキスパートに、お話されたセッション...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (10)</div><p><style>
iframe.slide {
  width: 320px;
  height: 189px;
}
@media (min-width: 768px) {
  iframe.slide {
    width: 600px;
    height: 355px;
  }
}
</style></p>

<p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催された<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇したエキスパートに、お話されたセッションのトピックを中心に語っていただこうとういものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、freeeの伊原力也さんと、ビジネス・アーキテクツの太田良典さんです。</p>

<p><img src="/wp-content/uploads/2017/11/42A4910.jpg" alt="" width="640" height="401" class="alignnone size-full wp-image-24714" srcset="/wp-content/uploads/2017/11/42A4910.jpg 640w, /wp-content/uploads/2017/11/42A4910-300x188.jpg 300w, /wp-content/uploads/2017/11/42A4910-207x130.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>お二人のセッション「多様なユーザーニーズに応えるフロントエンドデザインパターン〜書籍「インクルーシブ HTML + CSS &amp; JavaScript」より」に関するスライド資料は、こちらで公開されています。</p>

<iframe class="slide" src="https://docs.google.com/presentation/d/e/2PACX-1vTovsRiX8lB4Fb5J6PJIZAEE4suzO9PMzWOvdqxHbhrfmrvFn97arnD-ZCBifgm3z0a-rzLyZEo5jCj/embed?start=false&#038;loop=false&#038;delayms=3000" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

<h2>「インクルーシブ」に込められた意味とは？</h2>

<p><b class="speaker siraisi">白石:</b> 今回は取材をお受けいただきありがとうございました！簡単に自己紹介をお願いします。</p>

<p><b class="speaker ota">太田:</b> ビジネス・アーキテクツに所属している太田です。大規模企業サイトの構築、ガイドライン策定などを行ってきました。</p>

<p>Webアクセシビリティ関連に昔から取り組んでいまして、「<a href="http://waic.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアクセシビリティ基盤委員会</a>」の翻訳作業部会主査を担当しています。</p>

<p><img src="/wp-content/uploads/2017/11/42A4913.jpg" alt="" width="640" height="397" class="alignnone size-full wp-image-24709" srcset="/wp-content/uploads/2017/11/42A4913.jpg 640w, /wp-content/uploads/2017/11/42A4913-300x186.jpg 300w, /wp-content/uploads/2017/11/42A4913-207x128.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><strong>▲株式会社ビジネス・アーキテクツ 太田良典さん</strong><span style="font-size: 80%;">　　※写真提供：html5j [HTML5 Conference 2017事務局</span></p>

<p><b class="speaker ihara">伊原:</b> freee株式会社の伊原です。Webサイトやアプリケーションの情報設計を行っています。私も<a href="http://waic.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアクセシビリティ基盤委員会</a>に所属しており、「理解と普及作業部会」にて活動しています。</p>

<p>他には、<a href="https://www.hcdnet.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HCD-Net</a>という人間中心設計を推進する団体でも活動しており、UXデザインの普及に務めています。</p>

<p><img src="/wp-content/uploads/2017/11/42A5098.jpg" alt="" width="640" height="408" class="alignnone size-full wp-image-24710" srcset="/wp-content/uploads/2017/11/42A5098.jpg 640w, /wp-content/uploads/2017/11/42A5098-300x191.jpg 300w, /wp-content/uploads/2017/11/42A5098-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><strong>▲freee株式会社 伊原力也さん</strong><span style="font-size: 80%;">　※写真提供：html5j [HTML5 Conference 2017事務局</span></p>

<p><b class="speaker siraisi">白石:</b> 本日は、HTML5 Conferenceでお話された内容を主にお聞きしたいのですが、このセッションは、今度出版される書籍を元にしてらっしゃるんですよね。</p>

<p><b class="speaker ihara">伊原:</b> はい、11月4日に出版される「<a href="https://www.amazon.co.jp/dp/4862463878" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">インクルーシブ HTML + CSS &amp; JavaScript</a>」という書籍の内容をベースにしています。</p>

<p>私たちは2年ほど前に<a href="https://www.amazon.co.jp/dp/4862462650/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">デザイニングWebアクセシビリティ</a>という書籍を、その半年ほど前には<a href="https://www.amazon.co.jp/dp/4862462669/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コーディングWebアクセシビリティ</a>という書籍を上梓しました。</p>

<p>今回のセッションの元になった書籍は、いわばそうした流れを組んだ最新のものだといっていいと思います。特にコーディングWebアクセシビリティとは、著者も同じヘイドン・ピカリング氏ですし、続編といって差し支えないかと思います。</p>

<p><b class="speaker siraisi">白石:</b> では、今回もWebアクセシビリティに関する書籍なんですね。</p>

<p><b class="speaker ihara">太田:</b> そうです。「コーディングWebアクセシビリティ」では特に、WAI-ARIAの使い方について詳しく論じられていました。WAI-ARIAの基本的な知識はあっても、「なぜそう書くのか」「いつどう使うのか」を知らない方に向けて、具体的な例を挙げつつ語った本です。</p>

<p><b class="speaker siraisi">白石:</b> では、今回の書籍は「インクルーシブ HTML + CSS &amp; JavaScript」となっているわけですが、これはどういう内容の本なのでしょうか？</p>

<p><b class="speaker ihara">伊原:</b> 原著のタイトルは「<a href="https://www.amazon.co.jp/dp/B01MAXK8XR/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Inclusive Design Patterns</a>」と言うのですが、サブタイトルは「Coding Accessibility Into Web Design」（Webデザインの中にアクセシビリティをコーディングする）となっていて、こちらの方がわかりやすい(笑)。</p>

<p>ぶっちゃけて言えば、アクセシビリティに配慮したコーディング例を具体的に挙げていっているという本です。</p>

<p>原著者がなんで「インクルーシブ」という単語を用いたかというと、「アクセシビリティ」というと、「アクセシビリティガイドラインを満たしていくこと」とか、「特定の障害を持つ人に向けた配慮」というニュアンスが強く根付いてしまっているからだと言っています。</p>

<p>また、「アクセシビリティ」という言葉自体には、デザインや設計という意味は含まれていない。アクセシビリティとは単に「アクセスできる可能性の度合い」のことですから。</p>

<p>一方でインクルーシブというのは「包括的」とか「全てを包む」といったニュアンスを含む英単語で、「できるだけ受け入れる」とか「できるだけ含める」という意味合いがあります。原著者が「インクルーシブ」という単語を用いたのは、「できるだけ多くの人に使ってもらえる」「できるだけ多くの状況で使える」ものをデザインしていこう、という意図なんです。</p>

<p><b class="speaker ihara">太田:</b> ただ、日本語版では元のタイトルにある「デザインパターン」という言葉は使いませんでした。Web制作の世界では、「デザインパターン」と言う単語からはWebデザインを想起してしまいがちなので…。</p>

<p>アクセシビリティにおいては、そういう（UI）デザインのニュアンスだけが強いわけではありませんからね。</p>

<p><b class="speaker siraisi">白石:</b> 「デザインパターン」という単語は、エンジニアの方であれば逆に馴染みはあるかもしれませんね。</p>

<p>しかし、「コーディングWebアクセシビリティ」や「デザイニングWebアクセシビリティ」という書籍がありながら、今回新しい書籍を出版されたのはどういう背景があるのでしょうか？</p>

<p><b class="speaker ihara">太田:</b> ここ10年くらいで、JavaScriptを用いた動的なUIがすごく普及しました。Ajaxがその立役者で、JavaScriptを利用して非同期にUIを書き換えるような作り方が一般的になってきました。</p>

<p>おかげで、WebサイトのUXは全般的に向上しましたが、一方で、アクセシビリティ的には新たな課題を抱えることにもなったわけです。<strong>元々、HTMLはアクセシブルに設計されているのに、JSがそれを損なってしまうケースが散見されるようになった</strong>のです。</p>

<p>例えばフォーム送信などは良い例です。昔ながらのフォームで、「送信」ボタンを押したら次のページ…という流れであれば、アクセシビリティに問題はあまりありません。ただこれを、JavaScriptを用いてAjaxでデータ送信するようにした途端、アクセシビリティが低下してしまうことが多い。</p>

<p><b class="speaker ihara">伊原:</b> そもそも、JSで「アプリ」を作ろうとすると、アクセシビリティへの配慮がされにくくなりがちです。ほとんど<code>div</code>や<code>span</code>でマークアップして、見た目上動けばOK…という場合が少なくありません。</p>

<p>それを、<strong>セマンティックなHTML要素とWAI-ARIAを活用して、アクセシブルでUXにも優れたWebアプリを作ろう</strong>というのが、この「インクルーシブ HTML + CSS &amp; JavaScript」で述べていることです。</p>

<h2>実践！アクセシブルな商品リストを作ってみる</h2>

<p><b class="speaker siraisi">白石:</b> では、アクセシブルなマークアップの具体的なパターンを幾つかお話いただきたいと思います。</p>

<p>ただ、セッションの内容全体については<a href="https://docs.google.com/presentation/d/1jaf-x24jZtVbQDzniovnxhk7gzZ8rkNNaznRM030wSo/edit#slide=id.p" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スライド資料</a>をご覧になってもらえればいいと思うので、ここでは、私が個人的に疑問に思ったことなどを遠慮なくツッコませていただきつつ、ポイントとなる部分をおさらいしていっていただけると嬉しいです。</p>

<p><b class="speaker ihara">伊原:</b> わかりました。では一つ目の例として、<strong>商品リスト</strong>を見ていきます。</p>

<p>このサイトは画像アセットを購入できるサービスという想定ですが、UIデザインについては、Amazonの検索結果のようなものを想像して頂ければいいと思います。</p>

<p>リストの項目それぞれは商品名やレビュー結果、そして「すぐに購入」ボタンなどがあります。</p>

<p><img src="/wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24676" srcset="/wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905.png 640w, /wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-300x169.png 300w, /wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>これが複数縦に並んでいるリストをイメージしてください。</p>

<p><b class="speaker siraisi">白石:</b> こういう一覧の実装方法っていろいろですよね。個人的には、単に<code>div</code>を並べるときもあれば、表っぽければ<code>table</code>を使うときもあります。</p>

<p><b class="speaker ihara">伊原:</b> まず、<strong>リストそのものはリスト要素（<code>ul</code>や<code>ol</code>）を使ってマークアップした方がいい</strong>かなと思います。</p>

<p>ここでリスト要素をお薦めするのは、要素の意味合いがわかりやすいのと、スクリーンリーダーがリストを読み上げるのに特別な機能を持つからですね。</p>

<p><b class="speaker ota">太田:</b> 例えばスクリーンリーダーは、リストの項目数を先に読み上げたり、前後のリスト項目にジャンプしたりできるんです。項目数って結構大事で、項目数が多い場合と少ない場合では、ユーザーの行動も変わってきますからね。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。</p>

<p><b class="speaker ihara">伊原:</b> また商品名ですが、見出し要素を使用するのが最適です。スクリーンリーダーは見出しに直接飛んだり、直前の見出しを読みあげたりすることもできる。
リストと見出しを組み合わせることで、一覧の見出しを飛ばし読みしていくようなことが可能になるんです。</p>

<p>まとめると、以下のようなマークアップがおすすめですね。</p>

<p></p><pre class="crayon-plain-tag">&lt;li&gt;
  &lt;h3&gt;
  ガソリンスタンドにたたずむ裸の男 &lt;a href="/artist/kenny-mulbarton"&gt;by &lt;cite&gt;ケニー・マルバートン&lt;/cite&gt;&lt;/a&gt;
  &lt;/h3&gt;
&lt;/li&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> <code>li</code>の中に見出し要素を置くと、リスト項目が全て個別のセクションということになりますが、それは問題ないんでしょうか。HTML5からは、見出し要素は暗黙的にセクションを構成するようになりましたよね。</p>

<p><b class="speaker ota">太田:</b> はい、確かにセクショニングアルゴリズムの観点から、<code>li</code>の中に<code>h3</code>を入れることを望ましくないと考える人もいるかもしれません。ここは意見が分かれるところでしょうね。
ただ、アクセシビリティの観点からは支援技術で実際に使えるかどうかが重要で、その意味では十分に実用的だと言えると思います。</p>

<h2>「今すぐ購入」ボタンはボタンにする？それともリンクにする？</h2>

<p><b class="speaker ihara">伊原:</b> 次は、「今すぐ購入」ボタンをどうマークアップするかを検討してみましょうか。</p>

<p><b class="speaker siraisi">白石:</b> うーん、これは<code>button</code>一択じゃないですか？</p>

<p><b class="speaker ihara">伊原:</b> それもアリです。<code>button</code>を使うケースとしては、JavaScriptと組み合わせて、購入処理をその場で行えるようにするような場合ですね。</p>

<p>でもこの例のサイトは一般的なプリント写真購入サイトをイメージしているものなので、「今すぐ購入」ボタンを押したら、写真の購入確認画面に飛ぶことになります。</p>

<p><b class="speaker siraisi">白石:</b> そうなると、写真の購入確認画面へのリンクとして実装したほうが良さそうですね。</p>

<p><b class="speaker ihara">伊原:</b> はい、そのほうがJavaScriptがなくても動きますし、要素の意味合いも明確になります。ここでは<code>a</code>要素を使いましょう。</p>

<p>以下のようなマークアップがまずは望ましいですね。</p>

<p></p><pre class="crayon-plain-tag">&lt;a href="/product/naked-man-in-garage" class="button"&gt;今すぐ購入&lt;/a&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> このマークアップだと、<code>class="button"</code>となっていますし、CSSで見た目をボタンっぽくするイメージですね。例えばWAI-ARIAを使って、このリンクのロールをボタンにするというのはいかがでしょうか？</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- role要素でbuttonを指定 --&gt;
&lt;a href="/product/naked-man-in-garage" role="button"&gt;今すぐ購入&lt;/a&gt;</pre><p></p>

<p><b class="speaker ihara">伊原:</b> あ、それはやめてください。これでは、元のHTML要素が持つセマンティクスが変わってしまい、この要素はリンクではなくボタンであるという意味合いになってしまいます。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、ここでは見た目だけボタンにしておいて、セマンティクスは変えないのが望ましいと。</p>

<p><b class="speaker ota">太田:</b> そうなんです。WAI-ARIAって覚えると濫用されがちな技術でもありますが、<strong>基本的には「WAI-ARIAは使わない」のが正しい</strong>。</p>

<p>W3Cの「<a href="https://www.w3.org/TR/using-aria/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Using WAI-ARIA</a>」という文書の先頭に書いてあるのは、「（HTMLでまかなえる場合は）WAI-ARIAは使うな」なんですよ(笑)。</p>

<p>例えばボタンや見出しがあったとしたら、素直に<code>&lt;button&gt;</code>や<code>&lt;h1&gt;</code>を使えば良い。WAI-ARIAを使う必要は必ずしもないんです。基本的にはHTML5の語彙を用いて、足りないところをWAI-ARIAで補う、という形が望ましい。</p>

<h2>リンクテキストにも配慮しよう！</h2>

<p><b class="speaker ihara">伊原:</b> あともう一つ考えてみたいのは、リンクテキストです。このままだと全てのリンクが「今すぐ購入」になってしまいますが、それってアクセシビリティに優れていると言えるでしょうか？</p>

<p><b class="speaker siraisi">白石:</b> うーん…見出しに商品名はあるので、全くアクセシブルじゃないとは思いませんが。リンクテキストも読み上げられるんですよね？全部が「今すぐ購入」じゃ不親切かも？</p>

<p><b class="speaker ihara">伊原:</b> そうです。「何を購入できるか」が、リンクテキストから分かると、よりアクセシブルですよね。</p>

<p>なので、非表示のテキストでリンクテキストをより詳細化すれば、UIデザインも損なわれません。</p>

<p></p><pre class="crayon-plain-tag">&lt;a href="/product/naked-man-in-garage" class="call-to-action"&gt;
  &lt;span class="visually-hidden"&gt;ガソリンスタンドにたたずむ裸の男を&lt;/span&gt;今すぐ購入
&lt;/a&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> なるほど、不可視のテキストも利用してより説明的にするとは…！アクセシビリティへの配慮を真面目に考えてないと、まず出てこない発想ですね。</p>

<p><b class="speaker ihara">伊原:</b>ちなみに他にもやり方はいくつかありますが、この本ではSEOにおける内部対策的な意味合いも込めて、このやり方が推奨されています。</p>

<h2>検索結果ページ（SERP）にも配慮する</h2>

<p><b class="speaker ihara">伊原:</b> 最後に、検索エンジンの結果ページで商品（Search Engine Result Pages）がどう見えるか、についても配慮した方がいいでしょう。</p>

<p><b class="speaker siraisi">白石:</b> 検索結果ページですか？なんでですか？</p>

<p><b class="speaker ihara">伊原:</b> 支援技術ユーザーの中には、目的のページに辿り着くために、検索エンジンのインターフェースを利用する人も多くいるんです。Google検索って、<code>site:</code>を前につけるとサイト内検索を行えるじゃないですか。</p>

<p><b class="speaker siraisi">白石:</b> ああなるほど。言われてみれば、ぼくもAmazonの中検索するのに、Google検索をよく使います(笑)。</p>

<p><b class="speaker ihara">伊原:</b> 例えばマイクロデータと<code>schema.org</code>を使えば、検索結果の表示をより充実させることが可能です。以下に、商品のレビュー結果を表すマークアップの例を示します。</p>

<p></p><pre class="crayon-plain-tag">&lt;span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"&gt;
&lt;span itemprop="ratingValue"&gt;4&lt;/span&gt;つ星、
レビュー数&lt;span itemprop="reviewCount"&gt;13&lt;/span&gt;
&lt;/span&gt;</pre><p></p>

<p><img src="/wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24675" srcset="/wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242.png 640w, /wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-300x169.png 300w, /wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> そうか、今までぼく、「マイクロデータ使っとけば検索結果ページで目立てるかな」くらいしか考えたことなかったんですが、アクセシビリティの点から考えても重要なんですね。あんまりちゃんと意識したことなかったです。</p>

<h2>見た目ではなく機能でマークアップせよ！</h2>

<p><b class="speaker ihara">伊原:</b> では次の例に移らせてください。表示結果を絞り込んだり並び順を変えたりするUIを実装してみたいと思います。</p>

<p><img src="/wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24673" srcset="/wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf.png 640w, /wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-300x169.png 300w, /wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> うーん、こういうの実装するんだったら、ぼくだったらどうするかなあ。ナビゲーションメニューみたいなものと捉えて、リストと<code>a</code>要素とかでやるかもしれません。</p>

<p><b class="speaker ihara">伊原:</b> それも悪くないのですが、このメニューって、どれかが選択中の場合は他のメニューを選択できませんよね。それってどうします？</p>

<p><b class="speaker siraisi">白石:</b> …JavaScriptのお世話にならざるを得ないかもしれません。</p>

<p><b class="speaker ihara">伊原:</b> そう、でも、標準のHTMLには、そういう「排他的」な選択を行うためのフォーム要素があります。</p>

<p><b class="speaker siraisi">白石:</b> …ラジオボタン、ですか？</p>

<p><b class="speaker ihara">伊原:</b> そのとおりです！</p>

<p>このデザインだけからだと、見た目はラジオボタンとは似ても似つきませんが、ここではラジオボタンを使うことにします。マークアップの段階では、<strong>見た目ではなく機能に沿ってマークアップ</strong>するのが重要ですから。</p>

<h2>ラジオボタンのスタイリング…やりにくい！どうする？</h2>

<p><b class="speaker siraisi">白石:</b> でも、ラジオボタンは「◎」みたいな余計なUIがくっついてきちゃいますよね？しかもあれがブラウザごとに異なる上、どのブラウザのデザインもあんまりカッコよくない(笑)。</p>

<p><b class="speaker ihara">伊原:</b> そうなんです。ラジオボタンってスタイリングしにくいので評判が良くないですよね(笑)。だから、結局他の要素を使っちゃう…なんてことも起きちゃうんですが、そこは工夫次第です。</p>

<p>ここでは<code>label</code>要素をうまく使って、目標とするデザインを実現しましょう。<code>label</code>要素は、それ自身をクリックすることで、対象となるラジオボタンやチェックボックスの状態を変更できますよね。</p>

<p><b class="speaker siraisi">白石:</b> ああ、なるほど！<strong><code>label</code>はクリッカブルな状態で表示しておいて、ラジオボタン本体は隠しちゃえばいい</strong>んだ。</p>

<p><b class="speaker ihara">伊原:</b> そうです。<code>label</code>さえあればラジオボタンのクリックは可能ですので、実際のラジオボタンは隠しちゃってもいいんですよね。ラジオボタンのフォーカス状態やチェック状態はCSSの擬似クラスで指定できますので、CSSだけで表示の切り替えが可能です。</p>

<p>例えばこんな感じになります。</p>

<p></p><pre class="crayon-plain-tag">&lt;input type="radio" name="sort-method" id="most-recent" checked /&gt;
&lt;label for="most-recent"&gt;新着順&lt;/label&gt;

&lt;input type="radio" name="sort-method" id="most-popular" checked /&gt;
&lt;label for="most-popular"&gt;人気順&lt;/label&gt;
...(略)...</pre><p></p>

<p></p><pre class="crayon-plain-tag">[type="radio"] + label {
  cursor: pointer;
  /* その他、基本のスタイル */
}
[type="radio"]:focus + label {
  /* フォーカス時のスタイル */
}
[type="radio"]:checked + label {
  /* 選択時のスタイル */
}
/* ラジオボタンを見えなくする */
.sorter [type="radio"] {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding:0 !important;
  border:0 !important;
  overflow: hidden !important;
  clip: rect(1px, 1px, 1px, 1px);
}</pre><p></p>

<p><b class="speaker siraisi">白石:</b> なるほど、これならHTMLのセマンティクスもわかりやすいし、JavaScriptもいらない。素晴らしい。</p>

<p><b class="speaker ihara">伊原:</b> ちなみに、<strong>このCSSの!important連打は「とにかく扱いづらいラジオボタンを消し去ってやりたい」という原著者のジョークなので、真似しないでください(笑)</strong>。</p>

<h2>無限スクロールはやっぱり×？「もっと読む」はどう実装するか</h2>

<p><b class="speaker ihara">伊原:</b> 最後に、検索結果が複数ページに渡る場合、どういう風なUXが望ましいかを考えてみたいと思います。昔よく使われていたのはページングですが、今は無限スクロールを採用するサイトも多いですね。</p>

<p><b class="speaker siraisi">白石:</b> はい、ぼくも自社で運営している<a href="http://techfeed.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というアプリで無限スクロールを採用しています。</p>

<p><b class="speaker ihara">伊原:</b> ただ、<strong>アクセシビリティ的には無限スクロールは使わないほうが無難です</strong>。</p>

<p><b class="speaker siraisi">白石:</b> えっ！いろんなサイトが採用しているし、使いやすいとも思うんですが…</p>

<p><b class="speaker ihara">伊原:</b> 理由はいくつかあります。</p>

<p>まず、スクロールという操作が読み込みを誘発することが、ユーザーにとって望ましいことなのかどうか。ユーザーは次のページ読み込みを望んでいないかもしれないですよね。</p>

<p>あと、スクロールバーを使っているユーザーは、新たなページが読み込まれた瞬間スクロールバーが勝手に上下するので、混乱します。</p>

<p>最後に、ページのフッターにたどり着けないことがあります。フッターに要素を置いているにもかかわらず、無限スクロールがあるものだから、フッターに触りたくとも触れない…という事態が起こりうるのです。</p>

<p><b class="speaker siraisi">白石:</b> ふむ、理由はわかります。では、代わりにどうデザインすべきだと思いますか？</p>

<p><b class="speaker ihara">伊原:</b> ページ読み込みをユーザーが制御できればいいので、「もっと読む」ボタンを明示的に設置するというのは一つの解決策ですね。</p>

<p><img src="/wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24674" srcset="/wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-640x360.png 640w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-300x169.png 300w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-768x432.png 768w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> でも、いちいちそのボタンを押さなくちゃならないというのも結構面倒な気がします…。あと、サービス事業者側としては、無限スクロールでどんどん下に読んでいってもらうことで、ユーザーの滞留時間を伸ばしたいという気持ちもあると思うんですよね。</p>

<p><b class="speaker ihara">伊原:</b> この本では、ユーザーが「もっと読む」ボタンをよくクリックするようなら、その時に改めて「続きを自動的に読み込むか」を尋ねるようにするというやり方が紹介されています。その質問に「YES」と答えるのなら、そのユーザーにとっては、先ほど挙げられていた無限スクロールのデメリットが気にならないという証拠でもあると。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。確かにそのほうがユーザー本位でもありますね。</p>

<p><b class="speaker ota">太田:</b> あとこういう動的にリストを追加する場合、アクセシビリティの観点から一点注意点があります。</p>

<p>読み込みが完了したら、<strong>新しく読み込んだデータの先頭にフォーカスを移す</strong>ことです。そうしないと、スクリーンリーダーのユーザーが、次にどこに行けばいいかわからなくなってしまいますから。</p>

<p>そのために、新たに読み込んだデータの先頭に<code>tabindex="-1"</code>を指定しつつ、JavaScriptでフォーカスを与えます。</p>

<p></p><pre class="crayon-plain-tag">...
&lt;li&gt;
  &lt;!-- tabindexを指定して、タイトルをフォーカス可能にする --&gt;
  &lt;h3 tabindex="-1"&gt;
    ガソリンスタンドにたたずむ裸の男&lt;a href="/artist/kenny-mulbarton"&gt;by &lt;cite&gt;ケニー・マルバートン&lt;/cite&gt;&lt;/a&gt;
  &lt;/h3&gt;
  ...
&lt;/li&gt;
&lt;li&gt;&lt;!-- 新たに表示された商品の2番目 --&gt;&lt;/li&gt;
...</pre><p></p>

<p><b class="speaker siraisi">白石:</b> おお、こういう配慮は全く考えていませんでした。勉強になります。ちなみに、<code>tabindex</code>にマイナス値を指定することなんてできるんですね…知りませんでした。</p>

<p><b class="speaker ota">太田:</b> <code>tabindex</code>にマイナスを指定すると、ユーザーはそこにフォーカスを当てられないのですが、スクリプトでなら当てられるようになります。</p>

<h2>「アクセシビリティは0点か100点っていう話じゃない」</h2>

<p><b class="speaker siraisi">白石:</b> 本日は、いろんな例についてマークアップを考えられて面白かったです。</p>

<p>ただ最後に質問があります。</p>

<p>最近のWebアプリはどんどん動的になっていて、「UIのほとんどをJavaScriptで構築する」という場合も少なくありません。Single Page Applicationなんかはその最たるものだと思います。</p>

<p>こうしたサイトでも、アクセシビリティを担保することは可能なんでしょうか？相当の工数をかけないと難しいんじゃないかという気がしているのですが。</p>

<p><b class="speaker ihara">伊原:</b> 確かに、<strong>SPAのアクセシビリティ</strong>は面白いテーマです。ただ、SPAだからアクセシビリティの担保が難しいということはないと思います。</p>

<p>というのも、<strong>Google DocsやGoogle SlidesはWAI-ARIAにかなり対応していて、コンテンツの読み上げに対応している</strong>んですよ。</p>

<p><img src="/wp-content/uploads/2017/11/Google-Slides-640x377.png" alt="" width="640" height="377" class="aligncenter size-large wp-image-24672" srcset="/wp-content/uploads/2017/11/Google-Slides-640x377.png 640w, /wp-content/uploads/2017/11/Google-Slides-300x177.png 300w, /wp-content/uploads/2017/11/Google-Slides-207x122.png 207w, /wp-content/uploads/2017/11/Google-Slides.png 724w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> え、そうなんですか！それらのアプリ、SPAの代表格みたいなもんだと思ってました…。<strong>「SPAはスクリーンリーダーになじまないんじゃないか」なんて思ってましたが、それは単なる思い込み</strong>ですね。</p>

<p><b class="speaker ihara">伊原:</b> <strong>どんなサイトでもまずは一回、スクリーンリーダーで読み上げを行ってみる</strong>ことをお勧めします。SPAであっても、意外なほどスクリーンリーダーが綺麗に読み上げてくれることもありますので。</p>

<p><b class="speaker ota">太田:</b> 私はいつも言っているのですが、<strong>アクセシビリティって0点か100点かだけではない</strong>んです。全くアクセスできないサイトもなければ、全世界のすべての人がパーフェクトにアクセスできるサイトもありません。全てのサイトがその中間のどこかに位置していて、少しでもよくしていこうという考え方が大事だと思います。</p>

<p><b class="speaker ihara">伊原:</b> 「アクセシブルかどうか」はちょっとした改善で大きく変わったりもするものです。</p>

<p>例えば先日、とあるサイトをスクリーンリーダーで読み上げてみたのですが、ほとんど問題なく使える。ただ一点、そのページで一番重要なラベルだけ読み上げてもらえないんです。こういう点を改善するだけで、アクセシビリティはぐっと向上する。</p>

<p>なので、まずはアクセシビリティ上の問題を特定し、問題の重要度を判断して、重要なところから対応していく…という現実的なアプローチが、アクセシビリティを向上させていく上では大事だと思っています。</p>

<p><b class="speaker siraisi">白石:</b> 本日は、いろんなお話を聞かせていただき、ありがとうございました。</p>

<p><DIV align=right>（写真提供：html5j [HTML5 Conference 2017事務局　写真撮影：刑部友康）</div></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>schema.org構造化データマークアップのシンタックスにJSON-LDという選択</title>
		<link>/miiitaka/17128/</link>
		<pubDate>Tue, 06 Oct 2015 00:00:53 +0000</pubDate>
		<dc:creator><![CDATA[高見和也]]></dc:creator>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[JSON-LD]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[schema.org]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=17128</guid>
		<description><![CDATA[2014年10月28日にHTML5が勧告され、もうすぐ1年が経とうとしています。HTML5やその他のAPI、たとえばWeb StorageやService Workerを始め、WebではJavaScriptで操作するよう...]]></description>
				<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2015/09/eyecatch_jsonld-640x400.jpg" alt="schema.org 構造化データマークアップのシンタックスに JSON-LD という選択" width="640" height="400" class="aligncenter size-large wp-image-17179" srcset="/wp-content/uploads/2015/09/eyecatch_jsonld.jpg 640w, /wp-content/uploads/2015/09/eyecatch_jsonld-300x188.jpg 300w, /wp-content/uploads/2015/09/eyecatch_jsonld-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>2014年10月28日にHTML5が勧告され、もうすぐ1年が経とうとしています。HTML5やその他のAPI、たとえばWeb StorageやService Workerを始め、WebではJavaScriptで操作するようなAPI技術が話題に上がることが多いように思えます。しかし忘れてはいけないのは、HTML5では検索エンジンなどのプログラムにサイトの情報を正しく理解してもらうことを可能とするマークアップができることです。</p>

<p>&lt;header&gt;や&lt;article&gt;といったタグレベルでの情報はたくさんあり、一般的になりつつあります。代表的なCMSのテンプレートでも実際に組み込まれているものがほとんどです。そこで今回は、Webサイトのコンテンツ情報をよりプログラムで構造的に取得できるように考えられた、構造化データ定義ボキャブラリ「<a href="http://schema.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">schema.org</a>」とそのシンタックスとして「<a href="http://json-ld.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">JSON-LD（JSON for Linking Data）</a>」を選ぶ理由をまとめたいと思います。</p>

<h2>schema.org登場の背景</h2>

<p>schema.orgが登場する以前は、検索サービスを提供しているYahoo!・Microsoft・Googleの3社がそれぞれ別々のボキャブラリ（語彙）で定義していました。しかし、検索サービス毎に定義が別では、その検索サービスに合わせたマークアップをそれぞれ行わなければいけません。そこで3社は2011年から共同で1つのフォーマットの策定を進めてきました。それがschema.orgです。最新バージョンは2.1で、2015年8月6日にリリースされたものです。</p>

<h2>JSON-LDシンタックスの利点</h2>

<p>JSON-LDは、2014年1月16日にW3C勧告になったオープンデータフォーマットです。その名のとおり、JSON形式で情報をセットします。schema.orgのほかのシンタックスとして、MicrodataやRDFaがありますが、どちらもタグの属性として値をセットします。Googleの<a href="https://developers.google.com/structured-data/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">構造化マークアップ公式サイト</a>に掲載されている<a href="https://developers.google.com/structured-data/rich-snippets/reviews" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">商品レビューのマークアップ方法</a>で、JSON-LDとMicrodataシンタックスの記述を比較してみると以下のように違いがわかります。</p>

<p></p><pre class="crayon-plain-tag">&lt;div&gt; 
  &lt;div&gt; 
    &lt;span&gt;Legal Seafood&lt;/span&gt; 
  &lt;/div&gt; 
  &lt;span&gt; 
    &lt;span&gt;4&lt;/span&gt; 
  &lt;/span&gt; stars - 
  &lt;b&gt;"&lt;span&gt;A good seafood place.&lt;/span&gt;" &lt;/b&gt; 
  &lt;span&gt; 
    &lt;span&gt;Bob Smith&lt;/span&gt; 
  &lt;/span&gt; 
  &lt;span&gt;The seafood is great.&lt;/span&gt; 
&lt;/div&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;div itemscope itemtype="http://schema.org/Review"&gt; 
  &lt;div itemprop="itemReviewed" itemscope itemtype="http://schema.org/Restaurant"&gt; 
    &lt;span itemprop="name"&gt;Legal Seafood&lt;/span&gt; 
  &lt;/div&gt; 
  &lt;span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"&gt; 
    &lt;span itemprop="ratingValue"&gt;4&lt;/span&gt; 
  &lt;/span&gt; stars - 
  &lt;b&gt;"&lt;span itemprop="name"&gt;A good seafood place.&lt;/span&gt;" &lt;/b&gt; 
  &lt;span itemprop="author" itemscope itemtype="http://schema.org/Person"&gt; 
    &lt;span itemprop="name"&gt;Bob Smith&lt;/span&gt; 
  &lt;/span&gt; 
  &lt;span itemprop="reviewBody"&gt;The seafood is great.&lt;/span&gt; 
  &lt;div itemprop="publisher" itemscope itemtype="http://schema.org/Organization"&gt; 
    &lt;meta itemprop="name" content="Washington Times"&gt; 
  &lt;/div&gt; 
&lt;/div&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;script type="application/ld+json"&gt; 
{ 
  "@context": "http://schema.org/", 
  "@type": "Review", 
  "itemReviewed": { 
    "@type": "Restaurant", 
    "name": "Legal Seafood" 
  }, 
  "reviewRating": { 
    "@type": "Rating", 
    "ratingValue": "4" 
  }, 
  "name": "A good seafood place.", 
  "author": { 
    "@type": "Person", 
    "name": "Bob Smith" 
  }, 
  "reviewBody": "The seafood is great.", 
  "publisher": { 
    "@type": "Organization", 
    "name": "Washington Times" 
  } 
} 
&lt;/script&gt;</pre><p></p>

<p>構造化マークアップを実装する前のソースコードにそれぞれ実装した例です。属性（itemprop、itemscope、 itemtype など）で設定するMicrodataはソースコードが複雑になり可読性が悪くなります。一方、JSON-LDではscript要素で別に定義しますので、本来のソースコードを汚染することはありません。おそらく属性値から情報を取得するよりJSON形式でデータをまとめておいてもらったほうが検索プログラムもデータを扱いやすいのではないかと考えています。</p>

<h2>GoogleはJSON-LDシンタックスを推奨している</h2>

<p>Googleの<a href="http://googlewebmastercentral-ja.blogspot.jp/2015/03/easier-website-development-with-web.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ウェブマスター向け公式ブログ</a>の過去記事にもあるように、JSON-LDによるシンタックスを推奨しています。schema.orgの定義をWeb Componentと組み合わて、必要箇所にインポートすることができます。</p>

<p>では、基本です。JSON-LDの基本型は以下のとおりです。</p>

<p></p><pre class="crayon-plain-tag">&lt;script type="application/ld+json"&gt; 
{ 
  "@context": "http://schema.org/", 
  "@type": "xxxxxxxx" 
} 
&lt;/script&gt;</pre><p></p>

<p>script要素のtype属性にapplication/ld+jsonを設定します。そして定義するJSONデータをその中に記述します。@contextはschema.org定義です。これは変わらず。@typeでいろいろな種類の定義ができます。例えば、商品・商品レビュー・イベント・会社情報・レシピなど、schema.orgの公式サイトを見てもらうと設定値が詳しく記載されています。そのタイプに応じたパラメータを設定することで、正確な情報を伝えることができるようになります。Googleではそのページが構造化マークアップが正しくできているかテストができる「<a href="https://developers.google.com/structured-data/testing-tool/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">構造化マークアップテストツール</a>」も準備していますので、マークアップ後にテストをしてエラーがないことを確認しましょう。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/11874e9dcbd86ae56f9279864b538033.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/11874e9dcbd86ae56f9279864b538033-640x288.png" alt="Structured Data Testing Tool" width="640" height="288" class="aligncenter size-large wp-image-17134" srcset="/wp-content/uploads/2015/09/11874e9dcbd86ae56f9279864b538033.png 640w, /wp-content/uploads/2015/09/11874e9dcbd86ae56f9279864b538033-300x135.png 300w, /wp-content/uploads/2015/09/11874e9dcbd86ae56f9279864b538033-207x93.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>※ @type: &#8220;Organization&#8221;の構造化マークアップテストツールの確認例</p>

<p>構造化マークアップを行うことで検索プログラムに正確な情報を収集してもらいます。検索プログラムはこの情報をもとに検索結果を最適化することはもちろんですが、ナレッジグラフにもこの情報が影響することが公式サイトに記載されてあります。サイトに構造化マークアップをして、その情報を検索プログラムが認識したかどうかは<a href="https://www.google.com/webmasters/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Google Search Console</a>の「検索デザイン」→「構造化データ」で確認することができます。下図は、schema.orgのOrganizationやBreadclumbListなどが認識された例です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/64d59b422189a4505ac968484538cc8f.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/64d59b422189a4505ac968484538cc8f.png" alt="Web Search Console" width="589" height="205" class="aligncenter size-full wp-image-17168" srcset="/wp-content/uploads/2015/09/64d59b422189a4505ac968484538cc8f.png 589w, /wp-content/uploads/2015/09/64d59b422189a4505ac968484538cc8f-300x104.png 300w, /wp-content/uploads/2015/09/64d59b422189a4505ac968484538cc8f-207x72.png 207w" sizes="(max-width: 589px) 100vw, 589px" /></a></p>

<p>私が注目しているのは、構造化マークアップで<a href="https://developers.google.com/structured-data/slsb-overview" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">検索結果ページに絞り込み検索（サイト内検索）のボックスを表示させることができる</a>設定です。下図は、「LinkedIn」を検索した結果です。サイト名の下に検索ボックスが表示されています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/SiteLink-Search-Box.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/SiteLink-Search-Box.png" alt="SiteLink Search Box" width="549" height="338" class="aligncenter size-full wp-image-17175" srcset="/wp-content/uploads/2015/09/SiteLink-Search-Box.png 549w, /wp-content/uploads/2015/09/SiteLink-Search-Box-300x185.png 300w, /wp-content/uploads/2015/09/SiteLink-Search-Box-207x127.png 207w" sizes="(max-width: 549px) 100vw, 549px" /></a></p>

<p>例えば「高見和也」と入力して検索すると「高見和也 site:linkedin.com」とGoogleの検索ボックスに入力した状態と同じになります。しかし、検索ボックスが検索結果に表示されているほかのサイトで使用してみると、サイト内に設置してある検索ボックスを使用して検索を実行するものもありました。これはおそらく、Google が自動で検索ボックスを認識したパターンの場合です。LinkedInのサイトのソースコードにはschema.org定義のマークアップはありませんでした。ナレッジグラフや企業情報も同じだと思うのですが、Googleが自動的に情報を読み取って表示してもらえるパターンがあるがschema.orgで正確に情報を渡してあげればこういった対応の揺れがなくなる、そういうことだと理解しています。</p>

<p>話は検索ボックスに戻りまして、通常そのサイトで探したいものがある場合、サイトにアクセスして、サイト内検索ボックスに検索キーワードを入力するという流れになります。しかし、このマークアップを実装していてGoogleが検索結果として表示してくれるようになれば、一手少なくすみます。少しでも短い導線で必要な情報にアクセスする仕組みを考えるのもフロントエンドエンジニアの仕事の一つではないかと考えています。</p>

<h2>メールも構造化マークアップができる</h2>

<p>Webサイトだけが構造化の対象というわけではありません。Gmailを使用している方は、お気づきかもしれません。例えば、Googleカレンダーから招待メールを送ります。すると、下図のようなメールが届きます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/Calender-Mail.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/Calender-Mail-640x22.png" alt="Calender Mail" width="640" height="22" class="alignnone size-large wp-image-17141" srcset="/wp-content/uploads/2015/09/Calender-Mail.png 640w, /wp-content/uploads/2015/09/Calender-Mail-300x10.png 300w, /wp-content/uploads/2015/09/Calender-Mail-207x7.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>「出欠確認」のプルダウンボタンが表示されています。これをクリックするとメールを開かなくても一覧の状態のままで出欠の返信ができます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/Calender-Action.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/Calender-Action.png" alt="Calender-Action" width="354" height="179" class="alignnone size-full wp-image-17143" srcset="/wp-content/uploads/2015/09/Calender-Action.png 354w, /wp-content/uploads/2015/09/Calender-Action-300x152.png 300w, /wp-content/uploads/2015/09/Calender-Action-207x105.png 207w" sizes="(max-width: 354px) 100vw, 354px" /></a></p>

<p>これは、HTMLメールのソースコード内にJSON-LDでschema.org定義をマークアップすることで実現できます。公式サイトにGASから実装する例が掲載されていたので実際に組んでみました。</p>

<p></p><pre class="crayon-plain-tag">&lt;html&gt; 
  &lt;head&gt; 
    &lt;script type="application/ld+json"&gt; 
    { 
      "@context": "http://schema.org/", 
      "@type": "EmailMessage", 
      "description": "Check this out", 
      "potentialAction": { 
        "@type": "ViewAction", 
        "target": "/" 
      } 
    } 
    &lt;/script&gt; 
  &lt;/head&gt; 
  &lt;body&gt; 
    &lt;p&gt; 
      This a test for a Go-To action in Gmail. 
    &lt;/p&gt; 
  &lt;/body&gt; 
&lt;/html&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">function testSchemas() { 
  var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent(); 
 
  MailApp.sendEmail({ 
    to: Session.getActiveUser().getEmail(), 
    subject: 'テスト', 
    htmlBody: htmlBody, 
  }); 
}</pre><p></p>

<p>Googleスプレッドシートからスクリプトエディタを起動して、mail_template.htmlを作成します。それからmain.gsを新規作成しメールを送信する処理を記述します。getContent()で作成したテンプレートのHTMLを取得してメールの本文とし送信を行う単純な処理です。送られてきたメールは以下のとおりです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/09/8c3cd6315b27a45d837afce3f8dbaa27.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/09/8c3cd6315b27a45d837afce3f8dbaa27-640x24.png" alt="Mail View Action" width="640" height="24" class="alignnone size-large wp-image-17136" srcset="/wp-content/uploads/2015/09/8c3cd6315b27a45d837afce3f8dbaa27.png 640w, /wp-content/uploads/2015/09/8c3cd6315b27a45d837afce3f8dbaa27-300x11.png 300w, /wp-content/uploads/2015/09/8c3cd6315b27a45d837afce3f8dbaa27-207x8.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>この例は、potentialActionの@typeで「ViewAction」を指定しているので、「表示」をクリックするとtargetで指定している「<a href="https://html5experts.jp/" data-wpel-link="internal">/</a>」のサイトに遷移します。クリック以外にもカレンダーからの出欠確認やレビュー、Google Nowでのリッチスニペット化、Inboxにおけるハイライトなどさまざまなアクションが準備されています。</p>

<p>GitHubやAmazonからのメールでも使用されているようです。Amazonで注文した際に送られてくる確認メールを見てもらうと「注文を表示」というボタンが表示されていました。この技術を利用するには、Googleに<a href="https://developers.google.com/gmail/markup/registering-with-google" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ホワイトリスト</a>登録を行う必要があるようで、ECサイトなどからのメルマガを配信したいといった場合は、ドメインを専用フォームから申請しなければいけません。</p>

<p>この形式が正式に定義されれば、今はGmailだけが使用できているこの機能を、ほかのメールアプリケーションでも独自の機能が組み込めていけるのではないでしょうか？ECサイトではメルマガからのユーザーの流入は集客の王道です。競合他社との差別化を図るにはこういった細かい改善や工夫が必要です。</p>

<h2>構造化とSEO</h2>

<p>では構造化マークアップを行えば、検索結果の上位に表示されるようになるのか？と思われるでしょうが、そうではありません。構造化することで検索プログラムに正確な情報を収集してもらい、理解してもらうことでユーザーにとって最適な検索結果を提供するというものです。もちろん、前述したとおりメールでの構造化では別の利点もあります。</p>

<p>しかし、先日行われたWebマスター向けのGoogleハングアウト</a>で、John Mueller氏の発言に驚きました。</p>

<p>&gt; 構造化データのマークアップをランキングアルゴリズムに組み込むかもしれない</p>


<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="640" height="360" src="https://www.youtube.com/embed/QWL864VlW7I?feature=player_embedded" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>


<p>構造化された情報を収集してもらうことで、検索時にGoogleが推測せずともそのサイトがどのような情報を持っているか事前に把握しているわけです。そう考えると、そのサイトの順位を上げるのは自然な考え方に思えます（これを利用したスパムサイトが横行しないかが懸念材料ですが）。</p>

<p>ここまで、schema.org + JSON-LDのお話をしてきましが、すぐに導入すべきということではありません。
  まだJSON-LDのサポートを実装する過程で、Googleとしては<a href="https://developers.google.com/structured-data/rich-snippets/reviews" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">MicrodataかRDFaで実装することを推奨している定義もあります。</a></p>

<blockquote>
We are in the process of implementing JSON-LD support for this Rich Snippet type. At the current time, we recommend using microdata or RDFa.
</blockquote>

<p>しかしこれから除々に実装していく事は確かですので、これから必要になる知識として憶えておいて良い技術ではないでしょうか？</p>

<h2>参考サイト</h2>

<ul>
<li><a href="http://schema.org/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">schema.org</a> </li>
<li><a href="http://www.w3.org/TR/json-ld/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">JSON-LD</a> </li>
<li><a href="https://developers.google.com/structured-data/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Google：構造化マークアップの推奨</a> </li>
<li><a href="https://developers.google.com/gmail/markup/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Google：Email Markup</a> </li>
</ul>
]]></content:encoded>
			</item>
		<item>
		<title>昨今のCSS設計事情からみるCSS設計のあり方とは</title>
		<link>/hiloki/14372/</link>
		<pubDate>Wed, 15 Apr 2015 00:00:23 +0000</pubDate>
		<dc:creator><![CDATA[谷拓樹]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web Components]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=14372</guid>
		<description><![CDATA[連載： HTML5 Conference 2015 特集 (4)本記事は2015年1月に開催されたHTML5 Conferenceでお話させていただいた、 「Beyond CSS Architecture」というCSS設...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/h5conf2015/" class="series-257" title="HTML5 Conference 2015 特集" data-wpel-link="internal">HTML5 Conference 2015 特集</a> (4)</div><p>本記事は2015年1月に開催された<a href="http://events.html5j.org/conference/2015/1/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference</a>でお話させていただいた、
「Beyond CSS Architecture」というCSS設計のセッションをフォローアップする記事です。</p>

<p>本記事では、このセッションの概要と補足、またセッション中に説明できなかった点などについて書いていきます。</p>

<p><img src="/wp-content/uploads/2015/04/beyondcssarchitecture.jpg" alt="" width="500" height="373" class="aligncenter size-full wp-image-14555" srcset="/wp-content/uploads/2015/04/beyondcssarchitecture.jpg 500w, /wp-content/uploads/2015/04/beyondcssarchitecture-300x224.jpg 300w, /wp-content/uploads/2015/04/beyondcssarchitecture-207x154.jpg 207w" sizes="(max-width: 500px) 100vw, 500px" /></p>

<p>※当日のセッションの動画・スライドも公開されているので、文末からご覧ください。</p>

<h2>CSSの難しさと、昨今のCSS設計事情</h2>

<p>この近年、CSSにおける設計論というのが話題に出てくるようになりました。筆者も拙著『<a href="http://www.amazon.co.jp/gp/product/4844336355" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web制作者のためのCSS設計の教科書</a>』を書いたり、各地でCSS設計をテーマとした講演をする機会が多くありました。</p>

<p>CSSの難しさというのは、<a href="https://html5experts.jp/t32k/13504/" data-wpel-link="internal">石本氏によるCSSコードの評価についての記事</a>にも書かれているのですが、CSSは良くも悪くも厳格なコード規約は少なく、ただ宣言的に書けばいいだけです。セレクタとその詳細度や、後出しされたルールの方が優先されるという、シンプルがゆえに「書く」のは簡単ですが、「直す」のは容易ではありません。</p>

<p>Normalize.cssの作者であり、現在Twitterのエンジニアであるニコラス・ギャラガー氏（<a href="https://twitter.com/necolas" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">@necolas</a>）のツイートを引用するならば、次のように考えられるかどうかです。</p>

<blockquote>
  <p>Replace &quot;can you build this?&quot; with &quot;can you maintain this without losing your minds?&quot;<br>
  &mdash; <a href="https://twitter.com/necolas/status/360170108028600320" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Nicolas Gallagher (@necolas) </a></p>
</blockquote>

<p><br></p>

<p>複数人のチームでの開発はもちろんですが、自分のひとりの開発であったとしても、いざメンテナンスするとなったときに、数日前に自分が書いたCSSを呪うようなことはよくあります。</p>

<p>中長期的に運用されるWebサイト、Webサービスにおいては、その運用に耐えうるメンテナブルかつ、拡張性のあるCSSを書くことは非常に重要です。
こうしたCSS設計の話題が以前よりも見かけるようになったのは、単純な数ページのWebサイトよりも、少しリッチで複数のテンプレートが必要なWebサイト、Webサービスが増えてきていることもあり、メンテナブルなCSSにするための設計とは何か、というのが求められているからかもしれません。</p>

<h2>OOCSSとBEM</h2>

<p>セッション内でも取り上げている<a href="https://github.com/stubbornella/oocss/wiki" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">OOCSS</a>と<a href="https://en.bem.info/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BEM</a>は、CSS設計を考える上で避けられない方法論のひとつです。</p>

<p>OOCSSは、ページ上で繰り返されるビジュアルパターンをオブジェクトと考え、そのオブジェクトはHTML/CSSまたはJavaScriptのコードの固まりで構成されます。それはボタンやリスト、見出しというような単位であったり、場合によってはただ文字色を赤くするためのものかもしれません。こうした作られた小さなオブジェクトをレゴのように組み合わせてUIを作るというのが、OOCSSの基本的なアプローチです。</p>

<p>BEMは、Yandexという会社のフロントエンド開発チームによって考えられた開発手法です。BEMはUIをBlock,Element,Modifierという分類で設計するのですが、BEMで使われている命名規則とその記法が特徴的で、Blockを名前空間として使うのが良いアイデアとされています。</p>

<p></p><pre class="crayon-plain-tag">.menu { ... } /* Block */
.menu__item { ... } /* Block + Element */
.user { ... } /* Block */
.user_login { ... } /* Block + Modifier */
.user__avatar { ... } /* Block + Element */
.user__name { ... } /* Block + Element */</pre><p></p>

<p>このコード例では<code>.menu</code>がBlockの単位となり、またそれがセレクタの接頭辞にすることで、マークアップ上でつけられたクラス名を見るだけで、どのUI（Block）に依存するものかが分かります。例えば<code>class="item"</code>だと抽象的すぎて何に依存しているかわかりませんが、<code>.menu__item</code>であれば分かる、ということです。</p>

<p>また<code>_</code>、<code>__</code>の記号の組み合わせは、設計上のルールとして、単語間がどういう関係性を持つのかを明確にしています。<code>__</code>は一見冗長で、普通に名前をつけるときには使わなそうですが、それが良い意味でただの命名ではなく、デリミタ（区切り）として使われているということです。</p>

<p>このBEMのアプローチの細かなルールは必ずしもオリジナルのBEMに倣っているものばかりではなく、<a href="http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MindBEMding</a>のような独自のルールで運用されることもあります。筆者の<a href="https://github.com/hiloki/flocss" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FLOCSS</a>も、いろいろなものを参考にして作成したものです。</p>

<h2>モダンなCSS設計の誤解</h2>

<p>OOCSS、BEMについて言及される記事を見ると、これらやCSS設計における大きな誤解を招いていると感じることがあります。</p>

<p>OOCSS派か、BEM派か、というような表現も見かけますが、多くの場合、OOCSSは複数のクラスを組み合わせるアプローチ、BEMは単一クラスのアプローチ、というような解釈をされているようです。</p>

<p>OOCSSが体系化された当時にはSassのようなメタ言語もなく、OOCSSを実現するためには複数のクラスを組み合わせるアプローチが適切だったというだけでしょう。事実、彼女自身が<a href="https://www.youtube.com/watch?v=GhX8iPcDSsI" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">&#8220;OOCSS and Preprocessors in a tree, K-I-S-S-I-N-G&#8221;</a>という講演で、OOCSSとSassを組み合わせたアプローチについて述べています。</p>

<p>また提唱者であるニコール・サリバン氏が関わったプロジェクトにおいては、<code>font-size</code>という単位でもオブジェクトとして分解することが、数百と宣言される<code>font-size</code>プロパティを、たった数個のクラスで管理することに意味がありました。</p>

<p>ただそのいくつかの例が拡大解釈され、<code>.red {color: red;}</code>や<code>.large {font-size: 36px}</code>というような、見た目だけの、コンテンツ派生の意味をもたないクラスを複数組み合わせるアプローチがOOCSSである、と考えられることは少なくありません。</p>

<p>しかし、OOCSSの本質は、現在のHTML/CSSでは難しいモジュラーなアプローチを実践するためのパラダイムである、と筆者は考えています。</p>

<p>一方、BEMについてもいくつかの誤解があるように感じています。Block、ElementあるいはModifierとしての命名と設計は、マークアップを見て、その構造をセレクタにするものではありません。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav class="globalNav"&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href="/home"&gt;Home&lt;/a&gt;
    &lt;/li&gt;
    &lt;!-- more --&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>例えばこのようなマークアップがあった時に、その構造を意識してしまい、次のようなCSSにしてしまうことがあります。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav class="globalNav"&gt;
  &lt;ul class="globalNav__menu"&gt;
    &lt;li class="globalNav__menu__item"&gt;
      &lt;a href="/home"&gt;Home&lt;/a&gt;
    &lt;/li&gt;
    &lt;!-- more --&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>極端な例ではありますが、近いコードを見ることはあるのではないでしょうか。こうなってしまうと、BEMが冗長すぎる、気持ちが悪い、というのは素直な感情だともいえます。</p>

<p>しかし本来のBEMらしい考え方であれば、このようなマークアップを元にセレクタに命名するものではなく、UIをBlock,Element,Modifierのツリー構造で考え、それが名前にも与えられるものです。</p>

<p>この例でいえば、<code>globalNav</code>をBlockとするならば、それを構成する要素は次のようになるかもしれません。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav class="globalNav"&gt;
  &lt;ul class="globalNav__menu"&gt;
    &lt;li class="globalNav__menuItem"&gt;
      &lt;a href="/home"&gt;Home&lt;/a&gt;
    &lt;/li&gt;
    &lt;!-- more --&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>そもそも、もっと小さな単位にするべきかもしれません。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav class="globalNav"&gt;
  &lt;ul class="globalNav__menu menu"&gt;
    &lt;li class="menu__item"&gt;
      &lt;a href="/home" class="menu__target"&gt;Home&lt;/a&gt;
    &lt;/li&gt;
    &lt;!-- more --&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>どちらが正しいかというものではなく、その時々で適切な命名や分割があるはずですが、少なくともマークアップの構造をなぞって親子関係を命名で表すのが、BEMの命名規則というわけではありません。</p>

<p>最後の例を見ての通り、BEMの記法であっても、複数のBlockとElement、つまりはそれぞれはOOCSS的にいえばオブジェクトであり、組み合わせによって作られるわけです。</p>

<p>つまり、OOCSS派かBEM派かという天秤があるわけではありませんし、思想として良いところを取り入れて、プロジェクトに適切な方法論、設計を考えることが重要です。</p>

<p>逆にいえば、これらは<a href="http://ja.wikipedia.org/wiki/%E9%8A%80%E3%81%AE%E5%BC%BE%E3%81%AA%E3%81%A9%E3%81%AA%E3%81%84" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">銀の弾丸</a>というわけでもありませんから、OOCSSやBEMがすべての問題を解決するわけでもありません。プロジェクトの規模やその運用の方向性によっては、もっと単純な規約のもとでCSSが書かれていても構いません。</p>

<p>いずれの場合も、そのプロジェクト内において一貫性が保たれていることのほうが大事で、<a href="https://github.com/necolas/idiomatic-css" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ideomatic CSS</a>から引用するならば、次のようなことです。</p>

<blockquote>
  <p>どんなに多くの人が貢献したとしても、どのコードも一人で書いたようにすること。<br>
  &mdash; <a href="https://github.com/necolas/idiomatic-css" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ideomatic CSS</a></p>
</blockquote>

<p>セッションで紹介しているツール、スタイルガイドや<a href="http://www.stylestats.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">StyleStats</a>のようなツールは、一貫性を保ったCSSを書くための補助となるものです。</p>

<p>これらもまたツールでしかなく、導入しただけで問題が解決するというわけではないので、どのように運用するか、自動化などを含めた仕組みを考えることがより重要です。</p>

<h2>まとめ</h2>

<p>セッションの最後に<a href="https://html5experts.jp/tag/web-components/" data-wpel-link="internal">Web Components</a>に触れていました。Shadow DOMによって、今のHTML/CSSにないスコープの概念がもたらされれば、現状HTML/CSSをモジュラーに設計・実装するためのいくつかの課題は解決するかもしれません。</p>

<p>しかし、それによってCSS設計が簡単になるか、といえば決してそうではありませんし、どちらかといえばより難しくなるかもしれません。</p>

<p>またWeb Componentsの実用は少し先かもしれませんが、現在でも<a href="https://html5experts.jp/hokaccha/13301/" data-wpel-link="internal">React</a>のようなものを採用したプロジェクトにおいては、CSSはどのように設計するか、というのは課題として出てきています。個人的にはそれを考えることは、HTML/CSSをより面白くするものでもあります。（その分の苦しみも多くありますが）</p>

<p>どのような未来がくるにせよ、よりよいCSS設計をするためには、より多くのパターンを知ることだと考えています。</p>

<p>同じリスト型のUIを組むにしても、どのようなパターンが目の前のプロジェクトにおいて適切か、それはパターンを多く知らなければいけません。</p>

<p>そのためには、世の中に多く公開されているフレームワーク、またはプロダクトとして公開されているWebサイトやWebサービスのコードを読むことが大事です。続々と出てくる、新たなOOCSSやBEMのような方法論たちも、食わず嫌いはせず一読してみてください。</p>

<p>CSS設計は非常に難しく、壊れないCSSを書くというのは不可能です。私は次の言葉を胸に、いつもCSSを書いています。</p>

<blockquote>
壊れない完璧な設計を求めるのではなく、壊れたときに勇気を持って修復できる設計を<br>
&mdash; <a href="https://html5experts.jp/cssradar/" data-wpel-link="internal">斉藤 祐也</a>
</blockquote>

<p><br></p>

<p>はじめから作ることはもちろん、どれだけシミュレーションや設計をしても壊れるときはありますから、それをいかに直しやすいものにするか、そしてそれが他の開発者にとって可能であり、数日後の自分でも直せるようなCSSを書くようにしましょう。</p>

<p>当日のセッションの動画・スライドは、こちらからご覧ください。</p>

<div class="aligncenter">

<!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/1VZ_Rm5_rY4" frameborder="0" 0="allowfullscreen" scrolling="yes" class="iframe-class"></iframe>

</div>

<p><a href="https://www.youtube.com/watch?v=1VZ_Rm5_rY4" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Youtube</a> /
<a href="http://www.slideshare.net/hiloki/beyond-css-architecture" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Slideshare</a></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2015 特集]]></series:name>
	</item>
		<item>
		<title>Markup Cafe FUKUOKA Vol.1開催レポート～福岡で盛り上がる！HTML5マークアップのアイデアあれこれ～</title>
		<link>/bathtimefish/6644/</link>
		<pubDate>Wed, 14 May 2014 03:00:18 +0000</pubDate>
		<dc:creator><![CDATA[村岡 正和]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=6644</guid>
		<description><![CDATA[連載： イベントレポート (17)こんにちは！html5jマークアップ部 部長の村岡です。 この記事では2014年3月8日に開催されたMarkup Cafe FUKUOKA Vol.1のイベントレポートをさせていただきま...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (17)</div><p>こんにちは！html5jマークアップ部 部長の村岡です。<br>
この記事では2014年3月8日に開催されたMarkup Cafe FUKUOKA Vol.1のイベントレポートをさせていただきます。</p>

<p><img src="/wp-content/uploads/2014/05/photo01-1024x768.jpg" alt="お菓子やコーヒーとともに" width="1024" height="768" class="alignnone size-large wp-image-6645" srcset="/wp-content/uploads/2014/05/photo01-1024x768.jpg 1024w, /wp-content/uploads/2014/05/photo01-300x225.jpg 300w, /wp-content/uploads/2014/05/photo01-207x155.jpg 207w, /wp-content/uploads/2014/05/photo01.jpg 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>

<p>大阪に続く地方開催でのMarkup Cafe、今回も20名以上の方々に参加いただいて様々なマークアップ案が披露されました。</p>

<p>Markup Cafe FUKUOKAの開催にあたっては準備や開催告知などで地元のHTMLマークアップコミュニティである福岡マークアップ勉強会、通称「マカベン」の方々にご協力いただきました。この場を借りて改めて御礼申し上げます。ありがとうございました。</p>

<p>福岡マークアップ勉強会「マカベン」（敬称略）</p>

<p><img src="/wp-content/uploads/2014/05/staff-1024x768.jpg" alt="MarkupCafe Fukuoka Vo.1スタッフ" width="1024" height="768" class="alignnone size-large wp-image-6647" srcset="/wp-content/uploads/2014/05/staff-1024x768.jpg 1024w, /wp-content/uploads/2014/05/staff-300x225.jpg 300w, /wp-content/uploads/2014/05/staff-207x155.jpg 207w, /wp-content/uploads/2014/05/staff.jpg 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>

<ul>
<li><a href="https://twitter.com/mune_nori" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">西村 宗倫</a>（左）</li>
<li>筆者（中央左）</li>
<li><a href="https://twitter.com/kanapple73" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">卜部 加奈子</a>（中央右）</li>
<li><a href="https://twitter.com/tamshow_" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">田村 章吾</a>　<a href="http://masizime.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ましじめ</a>（右）</li>
</ul>

<h2>FUKUOKA Vol.1 マークアップ事例の解説</h2>

<p>今回は地域スタッフの方々から「普段マークアップで疑問に思ってることをみんなで検討したい」というご意見があったので、出題を2題にし、残りの時間でQ&amp;Aを行う構成にしました。</p>

<p>このタイムテーブルは実際やってみてよかったです。普段は3題出題するんですが、結構頭が疲れるし、ゆっくりコーヒーを飲む時間もなかったりするので（笑）。2題がんばった後にQ&amp;Aコーヒーを飲みながら談笑するくらいがカフェっぽくていいです。これからはこの時間配分でやろうかなと思いました。</p>

<h3>1問目 記事のヘッダ</h3>

<p><img src="/wp-content/uploads/2014/05/b99273e55e3d10d312e91ad04766471b.png" alt="記事のヘッダ" width="727" height="302" class="alignnone size-full wp-image-6649" srcset="/wp-content/uploads/2014/05/b99273e55e3d10d312e91ad04766471b.png 640w, /wp-content/uploads/2014/05/b99273e55e3d10d312e91ad04766471b-300x124.png 300w, /wp-content/uploads/2014/05/b99273e55e3d10d312e91ad04766471b-207x85.png 207w" sizes="(max-width: 727px) 100vw, 727px" /></p>

<p>今回の2題はマカベンの方々に考えていただきました。最初のお題は記事ページのヘッダ部分のマークアップです。ブログなどでよく使われるレイアウトですね。サンプルとしてこのHTML5 Experts.jpのヘッダ部分を採用しました。よくみるとパンくず、タイトル、著者の写真、日付、ソーシャルボタンなどなど……このヘッダの情報量はかなり多いですね。みなさん結構苦戦してたみたいです。</p>

<p><a href="http://jsdo.it/ren-mj/A5Aq" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:Aチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;article&gt;
&lt;nav&gt;
&lt;ul&gt;
&lt;li&gt;HTML5Experts.jp&lt;/li&gt;
&lt;li&gt;中島直博&lt;/li&gt;
&lt;li&gt;続・よくある3つのデザインから考える、マ...&lt;/li&gt;
&lt;/ul&gt;
 &lt;/nav&gt;
&lt;header&gt;

&lt;div id=”flame”&gt;
&lt;figure&gt; picture  &lt;/figure&gt;
&lt;h1&gt;続・よくある3つのデザインから考える、マークアップの最適解&lt;/h1&gt;
&lt;p&gt;中島直博&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=”#”&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;マークアップ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;time datetime=”2013-11-08”&gt;2013年11月8日&lt;/time&gt;
&lt;/div&gt;

&lt;aside&gt;
&lt;ul&gt;
&lt;li&gt;facebook&lt;/li&gt;
&lt;li&gt;twitter&lt;/li&gt;
&lt;li&gt;google+&lt;/li&gt;
&lt;li&gt;hatebu&lt;/li&gt;
&lt;li&gt;pocket&lt;/li&gt;
&lt;li&gt;☆&lt;/li&gt;
&lt;/ul&gt;

 &lt;/aside&gt;

&lt;/header&gt;
&lt;/article&gt;</pre><p></p>

<p>Aチームのポイントは以下です。</p>

<ul>
<li>全体をarticle要素とした</li>
<li>パンくずはnav要素とし項目をul, li要素でリストとした</li>
<li>nav要素内に見出しを入れるかどうか悩んだが、入れなかった</li>
<li>パンくずの下、タイトル、ソーシャルボタン等をheader要素とした</li>
<li>ソーシャルボタン群はaside要素とした</li>
<li>著者名はp要素とした</li>
</ul>

<p>まず、HTML5で新たに登場したarticle要素で記事全体を囲っています。このお題ではヘッダの下に記事本文が続くことが想定できるので、本文や記事のフッタがあればそのフッタもarticle要素内に入るでしょう。</p>

<p>Aチームはnav要素がセクショニング・コンテンツであることに着目して、見出し要素を入れるべきかどうか悩んだようです。ここは悩むケースが出てくるところですね。個人的にはレイアウト上見出し表記がない場合には必要がないと考えていますが、スクリーンリーダー等に配慮して見出し要素で「パンくずナビゲーション」などと記載しCSSでdisplay:none;してもよいかもしれないです。</p>

<p>article要素は自己完結するコンテンツを表します。HTML5を学ぶ上で、articleやsectionといった新しい要素は使いどころが難しいとよく言われますね。個人的には新聞の紙面から記事をスクラップするようなケースで理解しています。</p>

<p>新聞中のひとつの記事をハサミで切り取ってスクラップファイルに収録する場合は、記事のタイトルや本文、補足事項など、後から読んだときに情報が欠損しない範囲を切り取るでしょう。そのようなイメージでarticle要素を使うのが適当だと考えています。</p>

<p><a href="http://jsdo.it/kiyopikko/qUIq" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:Bチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;
&lt;ol&gt;
&lt;li&gt;xHTML5Expert.jp&lt;/li&gt;
&lt;li&gt;中島直博&lt;/li&gt;
&lt;li&gt;続・よくある3つのデザインから考える、マークアップの最適解&lt;/li&gt;
&lt;/ol&gt;
&lt;/nav&gt;

&lt;article&gt;
&lt;header&gt;
&lt;h1&gt;続・よくある3つのデザインから考える、マークアップの最適解&lt;/h1&gt;
&lt;figure&gt;
&lt;img src="" alt=""&gt;
&lt;figcaption&gt;中島直博&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=""&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;マークアップ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;time datatime="2013-11-08"&gt;2013年11月8日&lt;/time&gt;

&lt;ul&gt;
&lt;li&gt;facebook&lt;/li&gt;
&lt;li&gt;twitter&lt;/li&gt;
&lt;li&gt;google+&lt;/li&gt;
&lt;li&gt;はてぶ&lt;/li&gt;
&lt;li&gt;pocket&lt;/li&gt;
&lt;li&gt;評価&lt;/li&gt;
&lt;/ul&gt;
&lt;/header&gt;
&lt;/article&gt;</pre><p></p>

<p>Bチームのポイントは以下です。</p>

<ul>
<li>パンくずより下の部分をarticle &gt; header要素とした</li>
<li>パンくずの階層を意識してol要素とした</li>
<li>著者の写真、著者名やfigure, figcaption要素とした。</li>
</ul>

<p>Bチーム中の参加者の方が終わってから<a href="http://2ndidea.com/markup/markupcafe-fukuoka-vol1/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ブログ</a>を書かれています。勉強会の経験をもとにマークアップを再考されてるのはとても素晴らしいですね！ボクも読んで勉強になりました。</p>

<p>このチームでは、パンくずには階層（≒順序）があると考えてol要素でリスト化しています。また、著者の写真と著者名の関連性を意識してかそれらをfigure, figcaption要素でマークアップしています。</p>

<p>figure要素は図表を表し、figcaption要素はその説明を表します。なるほど…著者近影と著者名が図表とその説明にあたると解釈できるかもしれないですね。興味深いです。その他、日付をtime要素で囲っているのも特徴的ですね。</p>

<p><a href="http://jsdo.it/Yusuke.Hirao/wcRL" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:Cチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;article&gt;

	&lt;header&gt;
		
		&lt;nav prefix="v: http://rdf.data-vocabulary.org/#"&gt;
			&lt;span typeof="v:Breadcrumb"&gt;
				&lt;a href="#" rel="v:url" property="v:title"&gt;
					HTML5Experts.jp
				&lt;/a&gt; ›
			&lt;/span&gt;
			&lt;span typeof="v:Breadcrumb"&gt;
				&lt;a href="http://www.example.com/dresses/real" rel="v:url" property="v:title"&gt;
					中島 直博
				&lt;/a&gt; ›
			&lt;/span&gt;
			&lt;span typeof="v:Breadcrumb"&gt;
				&lt;a href="http://www.example.com/dresses/real/green" rel="v:url" property="v:title"&gt;
					続・よくある3つのデザインから考える、マ...
				&lt;/a&gt;
			&lt;/span&gt;
		&lt;/nav&gt;

		&lt;div prefix="v: http://rdf.data-vocabulary.org/#" typeof="v:Person"&gt;
			&lt;img class="avatar" src="#" alt="中島 直博"&gt;
			&lt;h1&gt;続・よくある3つのデザインから考える、マークアップの最適解&lt;/h1&gt;
			&lt;span property="v:name"&gt;中島 直博&lt;/span&gt;
			&lt;div&gt;
				&lt;ul class="tags"&gt;
					&lt;li&gt;&lt;a href="#"&gt;&lt;data value="css"&gt;CSS&lt;/data&gt;&lt;/a&gt;&lt;/li&gt;
					&lt;li&gt;&lt;a href="#"&gt;&lt;data value="markup"&gt;マークアップ&lt;/data&gt;&lt;/a&gt;&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/div&gt;
			&lt;time datetime="2013-11-08"&gt;2013年11月8日&lt;/time&gt;
		&lt;/div&gt;

		&lt;div&gt;

			&lt;div class="social_buttons"&gt;
				&lt;ul&gt;
					&lt;li&gt;各SNSタグ&lt;/li&gt;
					&lt;li&gt;各SNSタグ&lt;/li&gt;
					&lt;li&gt;各SNSタグ&lt;/li&gt;
					&lt;li&gt;各SNSタグ&lt;/li&gt;
					&lt;li&gt;各SNSタグ&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/div&gt;

			&lt;div class="rating"&gt;
				&lt;img src="#" alt="評価4.5" class="star"&gt;
				(&lt;span class="counting"&gt;6&lt;/span&gt;人が評価しています。)
			&lt;/div&gt;
			
		&lt;/div&gt;

	&lt;/header&gt;

	&lt;section&gt;
		
		本文〜

	&lt;/section&gt;

&lt;/article&gt;
	
&lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>Cチームのポイントは以下です。</p>

<ul>
<li>HTML5バリデーション合格</li>
<li>RDFa Breadcrumb, Personを使用</li>
</ul>

<p>CチームはマークアップをHTMLバリデーターに通し、合格してから発表に臨んでいました。そのためにdoctypeやhtml要素もマークアップされています。そこまで考えていたとは。なんかかっこいいですねｗ</p>

<p>情報をよりセマンティックにするためパンくずはBreadcrumb, 著者写真、著者名はPersonのRDFaスキーマを使いマークアップしています。このチームの後からの反省点として、Personスキーマはちょっとおかしかったかも。というのがありましたが、まあこれはこれでいいんじゃないですかね。<br>
全体的に情報の順番とCSSの装飾のバランスが意識されたマークアップです。</p>

<p><a href="http://jsdo.it/tamshow/zOJL" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:Dチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;article&gt;
 &lt;nav&gt;
   &lt;ol&gt;
    &lt;li&gt;&lt;a href=""&gt;ホーム&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=""&gt;現在地&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
 &lt;/nav&gt;   

&lt;header&gt;
    &lt;h1&gt;タイトルタイトル&lt;/h1&gt;
    &lt;figure&gt;
     &lt;img src=""&gt;
     &lt;figcaption&gt;名前&lt;/figcaption&gt;
    &lt;/figure&gt;
    
    &lt;dl&gt;
        &lt;dt&gt;タグ&lt;/dt&gt;
        &lt;dd&gt;tag&lt;/dd&gt;
        &lt;dd&gt;tag&lt;/dd&gt;
        &lt;dd&gt;tag&lt;/dd&gt;
    &lt;/dl&gt;
    &lt;time&gt;2013年9月25日&lt;/time&gt;
&lt;/header&gt;

&lt;aside&gt;
    &lt;div&gt;sns&lt;/div&gt;
    &lt;div&gt;記事の評価&lt;/div&gt;
 &lt;/aside&gt;
    
  &lt;section&gt;本文&lt;/section&gt;
  &lt;/article&gt;</pre><p></p>

<p>Dチームのポイントは以下です。</p>

<ul>
<li>タイトル、著者情報、タグ、日付をheader要素とした</li>
<li>ぱんくずはnav, ソーシャルボタン群はaside要素とした</li>
<li>パンくずはol要素とした</li>
<li>著者の写真、著者名やfigure, figcaption要素とした</li>
</ul>

<p>他のチームと比べてheader要素の範囲が限定的なのが特徴的です。パンくずやソーシャルボタンがヘッダなのかどうかについては、各チームでもいろいろな意見が出たようですが、この辺りは制作者の解釈によって様々ありそうですね。</p>

<p>パンくずでol要素を使う、著者情報にfigure, figcaption要素を使うという考え方はBチームに似ています。タグをdl要素で定義リストとしているところも特徴的ですね。</p>

<p><a href="http://jsdo.it/Garyuten/we1A" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:Eチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;header&gt;
		&lt;div itemscope itemtype="http://"&gt;
		    &lt;a href="http://" itemprop="url"&gt;
		      &lt;span itemprop="title"&gt;HTML5Experts.jp&lt;/span&gt;
		    &lt;/a&gt;
		    &lt;img src="img/arrow.png" alt="の中の"&gt;
		    &lt;div itemprop="child" itemscope itemtype="http://"&gt;
		      &lt;a href="http://" itemprop="url"&gt;
		        &lt;span itemprop="title"&gt;中島 直博&lt;/span&gt;
		      &lt;/a&gt;
		    	&lt;img src="img/arrow.png" alt="の中の"&gt;
		      &lt;div itemprop="child" itemscope itemtype="http://"&gt;
		        &lt;a href="http://" itemprop="url"&gt;
		          &lt;span itemprop="title"&gt;続・よくある３つのデザインから考える、マークアップの最適解&lt;/span&gt;
		        &lt;/a&gt;
		      &lt;/div&gt;
		    &lt;/div&gt;
		&lt;/div&gt;

		&lt;section&gt;
			&lt;h1&gt;続・よくある3つのデザインから考える、マークアップの最適解&lt;/h1&gt;
		&lt;/section&gt;
		&lt;figure itemprop="image"&gt;&lt;img src="author.png" alt=""&gt;&lt;/figure&gt;
		&lt;span itemprop="author"&gt;中島直博&lt;/span&gt;
		&lt;time itemprop="pubdate" datetime="2013-11-08"&gt;2013年11月8日&lt;/time&gt;
		&lt;dl class="tags"&gt;
			&lt;dt&gt;タグ&lt;/dt&gt;
			&lt;dd&gt;
				&lt;ul&gt;
					&lt;li&gt;&lt;a href="#"&gt;CSS&lt;/a&gt;&lt;/li&gt;
					&lt;li&gt;&lt;a href="#"&gt;マークアップ&lt;/a&gt;&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/dd&gt;
		&lt;/dl&gt;
		&lt;aside class="sns-share"&gt;
			&lt;ul&gt;
				&lt;li&gt;いいね&lt;/li&gt;
				&lt;li&gt;ツイート&lt;/li&gt;
				&lt;li&gt;g+&lt;/li&gt;
				&lt;li&gt;B!&lt;/li&gt;
				&lt;li&gt;Pocket&lt;/li&gt;
				&lt;li&gt;
                    &lt;img alt="4.5個の星です" class="star"&gt;
                    &lt;img alt="" class="star"&gt;
                    &lt;img alt="" class="star"&gt;
                    &lt;img alt="" class="star"&gt;
                    &lt;img alt="" class="star-half"&gt; 6人が評価しています。&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/aside&gt;
	&lt;/header&gt;</pre><p></p>

<p>Eチームのポイントは以下です。</p>

<ul>
<li>全体をheader要素とした</li>
<li>パンくずの構造をitempropで定義、矢印画像のalt属性値を&#8221;の中の&#8221;とした</li>
<li>&lt;dt&gt;タグ&lt;/dt&gt;はCSSで非表示にすることを想定</li>
<li>スター評価の画像グループはWEBアクセシビリティガイドラインに沿ってマークアップした</li>
</ul>

<p>この問題では、パンくず、ソーシャルボタン群をヘッダとして扱うかどうかが議論の焦点となっていましたが、Eチームは記事ヘッダの一部とみなしてheader要素内としています。</p>

<p>Eチームは特にスクリーンリーダーに配慮された印象が強いマークアップです。<br>
パンくずのデザインで使われている&#8221;＞&#8221;を画像とし、alt属性値を&#8221;の中の&#8221;とすることで、スクリーンリーダーで「◯◯の中の◯◯」と読み上げる配慮をしています。さらにDチームと同様タグブロックにdt要素でタイトルを記載し、CSSで非常時とすることでスクリーンリーダーでの読み上げに配慮しています。</p>

<p>スター評価の画像グループでは、一番上の画像のalt属性値を&#8221;4.5個の星です&#8221;とし、その他の画像のalt属性値を空にしています。これは<a href="http://waic.jp/docs/WCAG-TECHS/G196.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">G196: 画像のグループにある一つの画像に代替テキストを提供して、そのグループの全ての画像を説明する</a>の実装例に沿ったもので、同じくスクリーンリーダーでの読み上げに配慮したものになっています。</p>

<h4>部長はこう書く</h4>

<p><a href="http://jsdo.it/bathtimefish/uujd" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:部長</a></p>

<p></p><pre class="crayon-plain-tag">&lt;article itemscope itemtype="http://schema.org/Article"&gt;
    &lt;header&gt;
        &lt;div xmlns:v="http://rdf.data-vocabulary.org/#"&gt;
           &lt;span typeof="v:Breadcrumb"&gt;
             &lt;a href="#" rel="v:url" property="v:title" class="link"&gt;
                 HTML5Experts.jp
            &lt;/a&gt;
           &lt;/span&gt;
           &lt;span typeof="v:Breadcrumb"&gt;
            &lt;a href="#" rel="v:url" property="v:title" class="link"&gt;
              中島直博
            &lt;/a&gt;
           &lt;/span&gt;
           &lt;span typeof="v:Breadcrumb"&gt;
            &lt;a href="#" rel="v:url" property="v:title" class="current"&gt;
              続・よくある3つのデザインから考える、マークアップの最適解
            &lt;/a&gt;
           &lt;/span&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;div class="author-photo"&gt;
                &lt;img alt="中島直博" src="photo.jpg"&gt;
            &lt;/div&gt;
            &lt;div class="title"&gt;
                &lt;h1 itemprop="name"&gt;
                    続・よくある3つのデザインから考える、マークアップの最適解
                &lt;/h1&gt;
            &lt;/div&gt;
            &lt;div class="author"&gt;
                &lt;span itemprop="author"&gt;中島直博&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="tags" itemprop="keywords"&gt;
                &lt;a href="#"&gt;CSS&lt;/a&gt;,
                &lt;a href="#"&gt;マークアップ&lt;/a&gt;
            &lt;/div&gt;
            &lt;div class="publish-date"&gt;
                &lt;time itemprop="datePublished" datetime="2013-11-08"&gt;2013年11月8日&lt;/time&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;aside&gt;
            &lt;ul class="sns-buttons"&gt;
                &lt;li&gt;いいね！&lt;/li&gt;
                &lt;li&gt;ツイート&lt;/li&gt;
                &lt;li&gt;g+&lt;/li&gt;
                &lt;li&gt;B!&lt;/li&gt;
                &lt;li&gt;Pocket&lt;/li&gt;
            &lt;/ul&gt;
            &lt;div class="stars"&gt;
                &lt;img src="star.jpg" alt="星5つ中、星4.5個"&gt;
                &lt;img src="star.jpg" alt=""&gt;
                &lt;img src="star.jpg" alt=""&gt;
                &lt;img src="star.jpg" alt=""&gt;
                &lt;img src="star.jpg" alt=""&gt;
            &lt;/div&gt;
            &lt;span itemprop="interactionCount" content="UserLikes:6"&gt;(6人が評価しています)&lt;/span&gt;
        &lt;/aside&gt;
    &lt;/header&gt;
&lt;/article&gt;</pre><p></p>

<ul>
<li>schema.org Articleを採用し、記事情報をマークアップした</li>
<li>パンくずはRDFa Breadcrumbを採用</li>
<li>スター評価、ソーシャルボタン群はaside要素とした</li>
<li>スター評価の画像グループはG196の実装例に沿ってマークアップした</li>
</ul>

<p>懸案のパンくず、ソーシャルボタン群はheader要素内に入れています。その上でソーシャルボタン、スター評価はaside要素としました。特に厳密に考慮したわけではないですが、まあヘッダの一部でよいと思っています。</p>

<p>パンくずは<a href="https://html5experts.jp/bathtimefish/5506/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">前回の時</a>と同様Googleのリッチスニペットのマークアップを参考にしました。記事全体の情報の記述も<a href="https://support.google.com/webmasters/answer/3222269" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Googleウェブマスターツールの記事</a>をヒントに<a href="http://schema.org/Article" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Articleスキーマ</a>を使っています。</p>

<p>別にGoogle信者というわけじゃないですが、ウェブマスターツールのヘルプにあるように、将来的に検索エンジン等でサーチフレンドリーとなる可能性が高まるのは良いことだと思います。</p>

<p>スター評価の画像グループはEチームと同様WCAGのG196の実装例に沿いました。このような画像グループのケースごとの実装はWCAGのドキュメントのほか、最近公開された<a href="http://www.w3.org/WAI/tutorials/images/groups/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WAI Web Accessibility Tutorials &#8211; Groups of Images</a>のドキュメントも参考になります。</p>

<p><img src="/wp-content/uploads/2014/05/photo02-1024x768.jpg" alt="photo02" width="1024" height="768" class="alignnone size-large wp-image-6651" srcset="/wp-content/uploads/2014/05/photo02-1024x768.jpg 1024w, /wp-content/uploads/2014/05/photo02-300x225.jpg 300w, /wp-content/uploads/2014/05/photo02-207x155.jpg 207w, /wp-content/uploads/2014/05/photo02.jpg 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>

<h3>2問目 複数のリンクリスト／ナビゲーション</h3>

<p><img src="/wp-content/uploads/2014/05/f60ff0720990d08d6699f5f5a93173cc-808x1024.png" alt="複数のリンクリスト・ナビゲーション" width="808" height="1024" class="alignnone size-large wp-image-6652" srcset="/wp-content/uploads/2014/05/f60ff0720990d08d6699f5f5a93173cc-808x1024.png 808w, /wp-content/uploads/2014/05/f60ff0720990d08d6699f5f5a93173cc-236x300.png 236w, /wp-content/uploads/2014/05/f60ff0720990d08d6699f5f5a93173cc-163x207.png 163w, /wp-content/uploads/2014/05/f60ff0720990d08d6699f5f5a93173cc.png 505w" sizes="(max-width: 808px) 100vw, 808px" /></p>

<p>2問目は、ページのサイドによくあるリンクのリスト、ナビゲーションなどのレイアウトです。画像中のグローバルナビゲーションの下、メインコンテンツの右側の部分です。ウェブページではこのような上部のグローバルナビゲーションのほかにサイドペインにサブナビゲーションやバナーなど複数のテキストリンク、ボタンなどが並ぶレイアウトがよくありますね。一見単純なマークアップになりそうな気がしますが、ここでも細かいところでいろいろな疑問やアイデアが出てきました。</p>

<p><a href="http://t.co/RvRXc9OPAk" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2:Aチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;aside&gt;
&lt;section class="article_list"&gt;
&lt;h1&gt;マークアップカフェ&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル02&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル03&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル05&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル06&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル07&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル08&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル09&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;タイトル10&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

&lt;div class=”banner”&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=”#”&gt;&lt;img src=”#” alt=”マークアップカフェについて”&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;&lt;img src=”#” alt=”マカベンについて”&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#”&gt;&lt;img src=”#” alt=”マカベンについて”&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;section class=”link”&gt;
&lt;h1&gt;福岡のIT勉強会&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=”#” title=”ダミーテキスト”&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#” title=”ダミーテキスト”&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#” title=”ダミーテキスト”&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=”#” title=”ダミーテキスト”&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/aside&gt;</pre><p></p>

<p>Aチームのポイントは以下です。
* 全体をaside要素とした
* 1番目のリストをol要素とした
* 1, 3番目のリストをsection要素とした</p>

<p>まず、このブロック全体をaside要素としています。aside要素はコンテンツには関連があるが、切り離しても問題がないようなセクションを表します。1番目のリストをローカルナビゲーションとみなした場合、asideにするのは違和感がないか？という意見がありました。Aチームではaside=サイド部分というような感覚で考えていたようなので、解釈が違っていたという反省があったようです。</p>

<p>1番目のリストはulかolか悩んだようですが、テキストに番号が降ってあったのでolにしたそうです。テキストの番号がリストの順序に意味的に直結している場合はそうかもしれませんが、これは文書構造をどう設計したいかによるかもしれないですね。</p>

<p>1, 3番目のリストをsectionとし、2番目をdivとしています。この場合は文書のアウトラインがおかしくなるのでは？という指摘がありました。</p>

<p>実際にこのマークアップを<a href="http://gsnedders.html5.org/outliner/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Outliner</a>にかけてみると図のようになります。</p>

<p><img src="/wp-content/uploads/2014/05/outliner.png" alt="1.Untitled Section、ネスト、1.Untitled Section、ネスト、1.マークアップカフェ、2.福岡のIT勉強会" width="500" height="201" class="alignnone size-full wp-image-6654" srcset="/wp-content/uploads/2014/05/outliner.png 500w, /wp-content/uploads/2014/05/outliner-300x120.png 300w, /wp-content/uploads/2014/05/outliner-207x83.png 207w" sizes="(max-width: 500px) 100vw, 500px" /></p>

<p>アウトライン上に2番目のリストが現れていません。2番目のリストもセクショニング・コンテンツでよいかもしれないという意見がありました。</p>

<p>全体的に情報の文脈と、文書構造をどう切り分けてマークアップしていくかということをよく考えさせられるマークアップでした。</p>

<p><a href="http://jsdo.it/kiyopikko/xcP7" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2:Bチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;section&gt;
&lt;nav&gt;
&lt;h1&gt;マークアップカフェ&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/nav&gt;

&lt;aside&gt;
&lt;section&gt;
&lt;h1 class="hide"&gt;広告&lt;/h1&gt;
&lt;div&gt;&lt;a href=""&gt;&lt;img src="" alt=""&gt;&lt;p&gt;マークアップカフェについて&lt;/p&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=""&gt;&lt;img src="" alt=""&gt;&lt;p&gt;マークアップカフェについて&lt;/p&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=""&gt;&lt;img src="" alt=""&gt;&lt;p&gt;マークアップカフェについて&lt;/p&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;最近のIT勉強会&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/aside&gt;
&lt;/section&gt;</pre><p></p>

<p>Bチームのポイントは以下です。</p>

<ul>
<li>1番目のリストをol要素とした</li>
<li>2番目のリストに見出しをつけ、CSSで非表示とする</li>
<li>1番目のリストをnav, 2,3番目のリストをそれぞれsection要素とした</li>
<li>2, 3番目のリストをaside要素とした</li>
<li>全体をsection要素とした</li>
</ul>

<p>1番目のリストはAチームと同様、順番を意識してol要素としています。2番目のリストに見出しをつけてCSSで非表示とすることで、スクリーンリーダー等での読み上げに配慮しています。</p>

<p>セクショニングは1番目をnav、2,3番目をsectionとし、2,3番目をasideとし、全体をsectionとしています。これをHTML5 Outlinerにかけてみると次のようになります。</p>

<p><img src="/wp-content/uploads/2014/05/outline2.png" alt="1.Untitled Section、ネスト、1.Untitled Section、ネスト、1.マークアップカフェ、2.Untitled Section、ネスト、1.広告、ネスト、2.最近のIT勉強会" width="500" height="277" class="alignnone size-full wp-image-6655" srcset="/wp-content/uploads/2014/05/outline2.png 500w, /wp-content/uploads/2014/05/outline2-300x166.png 300w, /wp-content/uploads/2014/05/outline2-207x114.png 207w" sizes="(max-width: 500px) 100vw, 500px" /></p>

<p>Untitled Section（見出しのないセクション）が余分に現れてきています。特に「広告」、「最近のIT勉強会」がUntitled Sectionで下げられてしまっていますね。チームではHTML5の要素でできるだけ意味的なまとまりをつくろうと考えたようですが、結果的にアウトラインがおかしくなっています。</p>

<p>HTML5で登場したarticle, section, nav, asideといったセクショニング・コンテンツは文書のアウトラインを表現するので、意味づけだけを意識して使うとアウトラインの構造がおかしくなる可能性があります。ここが使いどころに悩むところですね。その意味で非常に参考になるマークアップです。</p>

<p><a href="http://jsdo.it/Yusuke.Hirao/vz8W" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2:Cチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="side_menu"&gt;

	&lt;div class="side_menu_block"&gt;
		&lt;nav class="nav_local"&gt;
			&lt;h1 class="cat_title"&gt;マークアップカフェ&lt;/h1&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="#" rel="prev"&gt;タイトル01&lt;/a&gt;&lt;/li&gt;
				&lt;li class="current"&gt;&lt;a&gt;タイトル02&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" rel="next"&gt;タイトル03&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル04&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル05&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル06&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル07&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル08&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル09&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#"&gt;タイトル10&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/nav&gt;
	&lt;/div&gt;
	
	&lt;div class="side_menu_block"&gt;
		&lt;aside class="banners"&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;&lt;img src="#" alt="xxxのバナー"&gt;&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;&lt;img src="#" alt="yyyのバナー"&gt;&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;&lt;img src="#" alt="zzzのバナー"&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/aside&gt;
	&lt;/div&gt;

	&lt;div class="side_menu_block"&gt;
		&lt;aside class="external_link"&gt;
			&lt;h1&gt;福岡のIT勉強会&lt;/h1&gt;
			&lt;ul&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="#" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;/aside&gt;
	&lt;/div&gt;
	
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>Cチームのポイントは以下です。</p>

<ul>
<li>HTML5バリデーション合格</li>
<li>1番目のリストはnav要素とした</li>
<li>2, 3番目のリストはそれぞれaside要素とした</li>
<li>それぞれのリストをdivで囲い同一のクラス名を割り当てた</li>
</ul>

<p>1問目と同様バリデーションに合格していますｗ 1番目のリストはローカルナビゲーションとみなしnav要素としました。ulで順番なしリストとし、a要素中のrel属性でカレントページの前後を表しています。</p>

<p>2,3番目のリストはそれぞれをaside要素としています。ページコンテンツから切り離せる部分という考えはBチームと同様ですが、アウトラインとCSSを考慮してのようです。</p>

<p>各リストはCMSではウィジェット機能で提供されるのが多いことに配慮して各リストをdivとし、同一のクラス名を当てています。現実的な配慮ですね。</p>

<p><a href="http://t.co/ajZrSHWsZT" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2:Dチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;article&gt;メインコンテンツ&lt;/article&gt;

&lt;article&gt;
  &lt;section&gt;
      
    &lt;h1&gt;マークアップカフェ&lt;/h1&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=""&gt;タイトル01&lt;/a&gt;&lt;/li&gt;
      &lt;li class="current"&gt;&lt;a href=""&gt;タイトル02&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;タイトル03&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;タイトル04&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;タイトル05&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=""&gt;タイトル06&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;aside&gt;
    &lt;section&gt;
      &lt;h1&gt;バナーリンク&lt;/h1&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;&lt;img src="" alt="マークアップカフェについてへリンク"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;&lt;img src="" alt="マカベンについてへリンク"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;&lt;img src="" alt="マカベンについてへリンク"&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;
    &lt;section&gt;
      &lt;h1&gt;福岡のIT勉強会&lt;/h1&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;ダミーテキスト&lt;img src="" alt="外部へリンク"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;ダミーテキスト2&lt;img src="" alt="外部へリンク"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;ダミーテキスト3&lt;img src="" alt="外部へリンク"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="" class="js-blank"&gt;ダミーテキスト4&lt;img src="" alt="外部へリンク"&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/section&gt;
  &lt;/aside&gt;
&lt;/article&gt;</pre><p></p>

<p>Dチームのポイントは以下です。</p>

<ul>
<li>全体をarticle要素とした</li>
<li>各リストをsection要素とした</li>
<li>2, 3番目のリストをaside要素とした</li>
<li>外部リンクにクラス名を割り当て、JavaScriptで別タブを開く想定</li>
</ul>

<p>全体をarticle要素としています。このリンクリスト／ナビゲーションの部分だけで完結したコンテンツと言えるかどうかは、微妙な気がしますね。article要素の解釈が難しいところですが、ここはarticleでなくてもいいのではないでしょうか。</p>

<p>アウトラインの取り方はBチームとほぼ同様、HTML5 Outlinerでも同様のアウトライン構成が見られました。各リストを意味的にまとめたいという意図が伝わりますが、結果的にアウトラインがおかしくなっているのはおしいですね。</p>

<p>外部リンクについては、各チームがterget=&#8221;_blank&#8221;を利用しているのに比べてクラス名を割り当てJavaScriptでの制御を想定しているのが特徴的です。terget属性はリンク先の表示方法を指定します。_blankを指定すると強制的に別ウィンドウ（タブ）で開く動作になりますが、このような動作に慣れないユーザーに対して混乱を与える可能性があります。</p>

<p><a href="http://waic.jp/docs/WCAG-TECHS/SCR24.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SCR24: プログレッシブ・エンハンスメントを用いて、利用者の要求に応じて新しいウィンドウを開く</a>ではこれに配慮するためのJavaScriptによる実装例が収録されています。このような配慮は、Webアクセシビリティとしても重要ですね。</p>

<p><a href="http://jsdo.it/Garyuten/kFJs" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2:Eチーム</a></p>

<p></p><pre class="crayon-plain-tag">&lt;div&gt;
	&lt;nav role="navigation"&gt;
		&lt;h2&gt;マークアップカフェ&lt;/h2&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル01&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル02&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル03&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル04&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル05&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル06&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル07&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル08&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル09&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=""&gt;タイトル10&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/nav&gt;
	&lt;aside&gt;
		&lt;h2 class="reader"&gt;広告&lt;/h2&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;img src="" alt="マークアップカフェについて"&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;img src="" alt="マカベンについて"&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;&lt;img src="" alt="マカベンについて"&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/aside&gt;
	&lt;aside&gt;
		&lt;h2&gt;福岡のIT勉強会&lt;/h2&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href="" target="_blank"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/aside&gt;
&lt;/div&gt;</pre><p></p>

<p>Eチームのポイントは以下です。</p>

<ul>
<li>全体をdiv要素とした</li>
<li>1番目のリストはnav要素としrole=&#8221;navigation&#8221;を設定</li>
<li>2, 3番目のリストはそれぞれaside要素とした</li>
</ul>

<p>テーマは「年度末の納期の案件」だとかｗ <br>
忙しい中で無駄なく的確にマークアップするという条件を自ら設定してのトライです。</p>

<p>まず、全体をdivとしてCSSの割り当てを想定しました。レスポンシブデザインによるレイアウトのダイナミックな変更をも視野に入れたそうです。2番目のリストに見出しを設定し、非表示としました。B, Dチームと同じ配慮ですね。</p>

<p>1番目のリストはローカルナビゲーションとみなしnav要素としARIAのrole=&#8221;navitaion&#8221;を指定。2,3番目のリストはそれぞれをaside要素としました。</p>

<p>セクショニング・コンテンツの使い方はCチームとほぼ同様です。ちなみにnav要素のロールはデフォルトでnavigationなので省略可能です。</p>

<p>なるほど、繁忙期という条件だけあって、そつのないマークアップですねｗ</p>

<h4>部長はこう書く</h4>

<p><a href="http://jsdo.it/bathtimefish/vQnl" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1:部長</a></p>

<p></p><pre class="crayon-plain-tag">&lt;div&gt;
    &lt;nav&gt;
        &lt;h2&gt;マークアップカフェ&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル01&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル02&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル03&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル04&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル05&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル06&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル07&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル08&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル09&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=""&gt;タイトル10&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/nav&gt;
    &lt;aside&gt;
        &lt;h2 class="sr-only"&gt;広告&lt;/h2&gt;&lt;!-- http://getbootstrap.com/getting-started/#accessibility --&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;&lt;img src="" alt="マークアップカフェについて"&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;&lt;img src="" alt="マカベンについて"&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;&lt;img src="" alt="マカベンについて"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/aside&gt;
    &lt;aside&gt;
        &lt;h2&gt;福岡のIT勉強会&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="" rel="external"&gt;ダミーテキスト&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/aside&gt;
&lt;/div&gt;</pre><p></p>

<ul>
<li>1番目のリストをnav要素とした</li>
<li>2番目のリストに見出しをつけた</li>
<li>セクショニングはC, Eチームと同様</li>
<li>外部リンクにrel=&#8221;external&#8221;を設定</li>
</ul>

<p>1番目のリストはローカルナビゲーションとみなしてnav要素としました。セクショニングの考え方はC, Eチームと同様です。</p>

<p>2番目のセクションにはB, D, Eチームと同様に広告だとわかる見出しをつけています。なくてもいいかなと思ったんですが、読み上げの脈絡を考えると、このケースではあったほうがいい感じかなと思いました。CSSでの非表示を想定しています。</p>

<p>余談ですが、このクラス名&#8221;sr-only&#8221;は<a href="http://getbootstrap.com/getting-started/#accessibility" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Bootstrapで使われているクラス名</a>を参考にしています。BootstrapのようなCSSフレームワークでもアクセシビリティが考えられているんですね。</p>

<p>広告、福岡のIT勉強会リンクリストのリンク先は外部リンクとみなして、rel=&#8221;external&#8221;を設定しました。外部リンクを開く制御はDチームと同様JavaScriptの利用を想定しています。</p>

<p>rel属性のexternal値はそのリンクが外部のリンクであることを示します。<a href="http://jquerymobile.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">jQuery Mobile</a>ではrel=&#8221;external&#8221;のリンクはAJAXでのページ遷移処理がオフになり内部ページヘとのアクセスと異なる挙動になります。このような事例があるのも参考に、マークアップしてみました。</p>

<h3>福岡のマークアップ熱はすごかった！</h3>

<p><img src="/wp-content/uploads/2014/05/photo03-1024x768.jpg" alt="みんなでマークアップを検討している" width="1024" height="768" class="alignnone size-large wp-image-6657" srcset="/wp-content/uploads/2014/05/photo03-1024x768.jpg 1024w, /wp-content/uploads/2014/05/photo03-300x225.jpg 300w, /wp-content/uploads/2014/05/photo03-207x155.jpg 207w, /wp-content/uploads/2014/05/photo03.jpg 640w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>

<p>MarkupCafeを楽しんだ後は、みんなでやったマークアップの反省や、普段疑問に思ったことを話し合いました。福岡はマカベンの活躍もあって昔からHTMLマークアップに対する関心が高い地域です。皆さんが熱心に意見交換されており、なにより間違いをおそれず積極的にHTML5マークアップを実践していこうという意識が素晴らしかったです。</p>

<p>個人的には懇親会で食べた手羽先、ラーメンが忘れられません（笑）。福岡の皆さん、また行きたいと思いますのでぜひよろしくお願いします！！</p>

<p>さて、今日の問題、皆さんならどうマークアップしますか？</p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>「Markup Maniax &#8211; マークアップ部が語り合うHTML5仕様のいま・これから」HTML5 Conference2013</title>
		<link>/miyuki-baba/3748/</link>
		<pubDate>Sun, 29 Dec 2013 04:00:14 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[HTML5 Conference 2013]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=3748</guid>
		<description><![CDATA[連載： HTML5 Conference 2013レポート (9)2013年11月30日に開催された「HTML5 Conference2013」において行われた数々のセッション。その中で今回は、マークアップに関する活動を...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conference-2013-2/" class="series-160" title="HTML5 Conference 2013レポート" data-wpel-link="internal">HTML5 Conference 2013レポート</a> (9)</div><p>2013年11月30日に開催された「HTML5 Conference2013」において行われた数々のセッション。その中で今回は、マークアップに関する活動を展開している「マークアップ部」メンバー3名によるセッション「Markup Maniax &#8211; マークアップ部が語り合うHTML5仕様のいま・これから」の一部に関してレポートする。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/Markup1.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/Markup1.jpg" alt="Markup" width="700" height="397" class="alignnone size-full wp-image-4006" srcset="/wp-content/uploads/2013/12/Markup1.jpg 640w, /wp-content/uploads/2013/12/Markup1-300x170.jpg 300w, /wp-content/uploads/2013/12/Markup1-207x117.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<p>HTML5といえばAPIや周辺技術の話題を目にすることが多くなった一方、Webサイトで重要なのはやはりマークアップ。HTML5がLast Callになってからも仕様に随時変更が加わっている。また、独自の要素を定義できる仕組みも登場している。今回のセッションでは「マークアップの今後はどう向かうのか？」マークアップ部から3人、バスタイムフィッシュ村岡正和氏、WEBCRE8.jp酒井優氏、矢倉眞隆氏がそれぞれの持論を展開した。</p>

<h2>H1の使い方はどうあるべき？</h2>

<p>村岡：今、HTML5.1の方で、新しい要素がどんどん追加されています。要素や属性も含め、どうしたらやりやすく解決できるか？
世界中で議論されています。</p>

<p>酒井：最近のマークアップに注目すると、特に見出しに関して大きな変化がありましたよね。　</p>

<p>矢倉：HTML5以前は、そもそもセクショニングコンテンツがなかった。そこにHTML5で新たにセクションがでてきて、H1 H2と数字を見て判断できていたことが行えなくなりました。H1 H2 H3と重要度に応じた見出しを使い分けていましたが、HTML5では数字は関係ない。そうすると見出しはH1だけでいいのでは、という考えもあり仕様にもそう書かれている。</p>

<p>村岡：僕も昔からH1 H2とマークアップしていたし、Hの見出しでアウトライン考えていました。しかしそれがすべてH1になってしまうと、人間的レベルの気持ち悪さを感じてしまうんですよね。</p>

<p>酒井：コーダーとして困っていることがあって、それはサイトトップのロゴをH1でマークアップしたら、記事中にもまたH1を使う。H1はどうなっていくのだろう、という困惑が私の中にはあります。</p>

<p>矢倉：そもそもH1を2回使っちゃいけないという明確なルールはなく、仕様で決まっているわけではないので。ニュース記事を伝えるサイトの構造　側としてのレベルとコンテンツ、そうした混在したものをH1にするかしないかで意見は分かれると思います。「ロゴはH1だろう」という考えもあれば、「そもそもサイトのトップページはいろんなものが混在しているのでH1はあり得ない」という人もいる。本当に正解はないですよね。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/yakura6.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/yakura6.jpg" alt="yakura6" width="700" height="382" class="alignnone size-full wp-image-4012" srcset="/wp-content/uploads/2013/12/yakura6.jpg 640w, /wp-content/uploads/2013/12/yakura6-300x163.jpg 300w, /wp-content/uploads/2013/12/yakura6-207x112.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<h2>パンくずリストから考える「マークアップに正解はない」</h2>

<p>村岡：どういう目的でどういうサイトを作るのかによって、マークアップの仕方も変わってくる。</p>

<p>矢倉：マークアップ部は正解を出すより「おまえの考えで文章構造とはなんぞや」を問う部活動ですから。</p>

<p>村岡：「目的に応じたマークアップができてます」と自信を持って言い切れればそれでいいんですよね。</p>

<p>矢倉：パンくずリストを例に考えてみたいと思います。これまでと違い、HTML5.1では「→（矢印）」がパンくずだとされ、Webサイトの階層構造と認識されている。</p>

<p>村岡：私、実はこれが非常に気持ち悪くて、やりたくない人も多いんじゃないでしょうか？　そもそもパンくずをマークアップする専用のタグがないから、こんなことが起こる。「Breadcrumbs」というタグがあればいいのに。</p>

<p>矢倉：最近「Web Components」が登場して、マークアップやスクリプトをコンポーネントとして組み込んでいるので、ｐだのなんだの議論すること自体が無駄になるかも、という議論も。</p>

<p>酒井：コーダーとしてWeb Componentsにどう向き合うか？　Web Componentsを使ってソースコードを公開し、それを真似して使ってデファクトにしていく。そうするとHTML仕様に組み込まれる可能もでてくるのか？</p>

<p>矢倉：Web Componentsがもてはやされる理由として、みんなの要望に答えられていない現状があって、そこでもっと下のレイヤーで答えていこう、という流れがある。そこから標準化の検討課題になるのではないでしょうか。</p>

<p>村岡：私としては2つの立場があるんですよ。マークアップを研究する立場でいえば「どこまでパンくずのことを考えられるか？」ぜひやりたい。でもそれは、一切ご飯が食べれないからきついですよね（笑）。</p>

<p>仕事をする立場としては、人が作ったものを使いたいという思いもある。例えばモジラが作っている<a href="http://mozilla.github.io/brick/index.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Brick</a> というWeb Components frameworkがあって、「x-fripbox」というタグを入れるだけで、フリックボックスが作れてしまう便利なものもある。</p>

<p>矢倉：やがてマークアップでUIをつくるWeb Componentsが出てきてもおかしくない。そうすると、あれこれ考えなくてもパンくずつかえるわけです。</p>

<p>酒井：一見、思考停止に見えるかもしれないけれど、いいことだと思います。文書構造で考えると、Webサイトにしかパンくずはない　</p>

<p>村岡：HTML5の仕様策定では、実装が仕様になるスキームで動いているので、とりあえずみんながトライして「いいね！」が一番多いマークアップが仕様になる気がします。自分がいいと思ったものが一番いいし、そういう意味では今が無法地帯。いつか「Breadcrumbs」というタグができると信じてその時、「理想の構造は？」「パンくずリストは何か？」を自分で考え、出した答えをよしとしよう。まだ正解はないんです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/muraoka0.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/muraoka0.jpg" alt="muraoka0" width="700" height="451" class="alignnone size-full wp-image-4011" srcset="/wp-content/uploads/2013/12/muraoka0.jpg 640w, /wp-content/uploads/2013/12/muraoka0-300x193.jpg 300w, /wp-content/uploads/2013/12/muraoka0-207x133.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<p>矢倉：「マークアップに正解はない」これがマークアップ部の座右の銘になりますかね（笑）。</p>

<h2>エンジニアがデザインに「文句を言える」ようになってほしい</h2>

<p>村岡：マークアップ部では「マークアップカフェ」というイベントを定期的に開催しています。先ほど話したようにマークアップに正解はない以上は、もうみんなで決めるしかない。そこで「どれが一番いい感じか？」を議論しています。その中で例えばあるお題を出して「これ、あなたならどうマークアップしますか？」と30分考えて答えを出してもらう。ふつう、業務でマークアップの方法について30分もまず考えないですよね。でもあえて考えることで、いろんな疑問や考え方が出てくるわけです。</p>

<p>酒井：確かに仕事では時間の制約上、マークアップについてそこまで深く考えることができずに不完全燃焼で終わること多いですね。でも仕事を離れたこうした場で改めて考えると、割と迷うことに気付くんです。結局のところ、結論を出すことより構造を考えることがマークアップにとって重要で、意義があるのではないでしょうか。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/12/sakai3.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/12/sakai3.jpg" alt="sakai3" width="700" height="365" class="alignnone size-full wp-image-4013" srcset="/wp-content/uploads/2013/12/sakai3.jpg 640w, /wp-content/uploads/2013/12/sakai3-300x156.jpg 300w, /wp-content/uploads/2013/12/sakai3-207x107.jpg 207w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<p>矢倉：実は提示されているお題にも構造的なミスがあるケースもあります。その場合、そもそもデザインの方で直せないのか？といった議論も起こる。</p>

<p>村岡：「マークアップエンジニアがデザインに文句を言える」これが重要だと思うんですよ。「これでは正しい文書構造を表現できない」と思ったとき、論理的に言い切れる知識と経験・根拠を持った説明ができるマークアップエンジニアになってほしいし、そうやって正しいものになっていくのだと思います。</p>

<p>酒井：そもそも仕様を策定する人も人間だし、自分らも同じ土俵に立っている。じゃあ、正解がないのになぜ考えるのか？　それは仕様を理解することからはじめて、その上で「自分はこう思う」という考えを持つことが大事だから。</p>

<p>村岡：皆さんにはぜひhtml5jのメーリングリストで「これどうデザインします？」と気軽に投稿してほしい。少なくとも僕が必ずレスつけます（笑）。</p>

<p>酒井：私もちょいちょい投げ込んでます。「もしかして自分だけ気になっていることかも？」という不安もありましたけど、実は結構有名な人が返してくれたりするんですよね。だから気軽に質問放り込んでほしい。</p>

<p>村岡：何度も言いますけど、マークアップに正解はない以上、どんな著名な人も「これはこうです」とはいえなくて、「僕はこう思います」としかいえない。その上で「僕はこう思う」をたくさん共有したらいいと思っています。</p>

<p><DIV align=right></p>

<p style="padding-top: 16px; line-height: 1.55; color: #60aa2a;">（レポート：山田政明／撮影：中川淳子）</p>

<p></div></p>

<p>【講演資料・セッション映像】</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/tfGqbWoAKUs" frameborder="0" allowfullscreen></iframe>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2013レポート]]></series:name>
	</item>
		<item>
		<title>続・よくある3つのデザインから考える、マークアップの最適解</title>
		<link>/nakajmg/3225/</link>
		<pubDate>Fri, 08 Nov 2013 00:00:03 +0000</pubDate>
		<dc:creator><![CDATA[中島 直博]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=3225</guid>
		<description><![CDATA[連載： イベントレポート (3) マークアップシリーズの第2回は、前回のよくある3つのデザインから考える、マークアップの最適解と同じく、html5jマークアップ部主催のイベント「MarkupCafe」で出題された3つのお...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (3)</div><p><img src="/wp-content/uploads/2013/11/IMG_4833-300x200.png" alt="IMG_4833" width="300" height="200" class="alignright size-medium wp-image-3226" srcset="/wp-content/uploads/2013/11/IMG_4833-300x200.png 300w, /wp-content/uploads/2013/11/IMG_4833-207x138.png 207w, /wp-content/uploads/2013/11/IMG_4833.png 640w" sizes="(max-width: 300px) 100vw, 300px" />
マークアップシリーズの第2回は、前回の<a href="https://html5experts.jp/nakajmg/2502/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">よくある3つのデザインから考える、マークアップの最適解</a>と同じく、html5jマークアップ部主催のイベント「MarkupCafe」で出題された3つのお題から最適なマークアップを探ります。</p>

<p>イベントではAからDの4つのチームにわかれてマークアップを考えました。それぞれのチームごとに違ったマークアップへの考えが表れていてとても興味深いです。また今回はイベント終了後に<a href="https://html5experts.jp/bathtimefish/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「HTML5 Experts.jp」のエキスパート</a>兼マークアップ部の部長でもある村岡正和氏に、氏自身ならこうするといったマークアップを公開してもらいました。</p>

<p>本記事ではWebサイト制作の際にありがちな&#8221;ページング&#8221;、&#8221;フォーム&#8221;、&#8221;データテーブル&#8221;の3つについて要素の使いどころや仕様、アクセシビリティやユーザビリティといった観点からマークアップを考えていきます。</p>

<p><span id="more-3225"></span></p>

<h2>1.ページングの中身と重要度</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/11/markup2_q1.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/11/markup2_q1.png" alt="markup2_q1" width="399" height="55" class="aligncenter size-full wp-image-3228" srcset="/wp-content/uploads/2013/11/markup2_q1.png 399w, /wp-content/uploads/2013/11/markup2_q1-300x41.png 300w, /wp-content/uploads/2013/11/markup2_q1-207x28.png 207w" sizes="(max-width: 399px) 100vw, 399px" /></a></p>

<p>最初のお題はページング。<br>
ブログのページ送りや検索結果でページが多い場合に使われますが、あまり深く考えてマークアップしたことはないのではないでしょうか。</p>

<p>このお題で注目したポイントは以下の3つです。</p>

<ul>
<li>現在地をどう示すか</li>
<li>重要と強調の違い</li>
<li>前へと次への扱い</li>
</ul>

<p>それぞれのチームのマークアップから考えていきます。</p>

<h3>各チームのマークアップ</h3>

<ul>
<li><a href="http://jsdo.it/myakura/eQ0R" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1：チームA</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;div class="pagination"&gt;
    &lt;p class="prev"&gt;&lt;a rel="prev"&gt;前へ&lt;/a&gt;
    &lt;p class="next"&gt;&lt;a href="/next" rel="next"&gt;次へ&lt;/a&gt;
    &lt;ol class="sequential"&gt;
        &lt;li&gt;&lt;a class="current"&gt;1&lt;/a&gt;
        &lt;li&gt;&lt;a href="/page2"&gt;2&lt;/a&gt;
        &lt;li&gt;&lt;a href="/page3"&gt;3&lt;/a&gt;
        &lt;li&gt;&lt;a href="/page4"&gt;4&lt;/a&gt;
        &lt;li&gt;&lt;a href="/page5"&gt;5&lt;/a&gt;
    &lt;/ol&gt;
&lt;/div&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/nakajmg/5Rcx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1：チームB</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;div class="paginate"&gt;
    &lt;p&gt;
        &lt;a href="" rel="prev" class="prev"&gt;＜＜前へ&lt;/a&gt;
    &lt;/p&gt;
    &lt;ol&gt;
        &lt;li&gt;&lt;em&gt;1&lt;/em&gt;
        &lt;li&gt;&lt;a href="2"&gt;2&lt;/a&gt;
        &lt;li&gt;&lt;a href="3"&gt;3&lt;/a&gt;
        &lt;li&gt;&lt;a href="4"&gt;4&lt;/a&gt;
        &lt;li&gt;&lt;a href="5"&gt;5&lt;/a&gt;
    &lt;/ol&gt;
    &lt;p&gt;
        &lt;a href="" rel="next" class="next"&gt;次へ＞＞&lt;/a&gt;
    &lt;/p&gt;
&lt;/div&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/can.i.do.web/gv4Z" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1：チームC</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;
    &lt;a href="#"&gt;&amp;lt;&amp;lt;前へ&lt;/a&gt;
    &lt;ol&gt;
        &lt;li&gt;&lt;a href="#"&gt;1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;2&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;3&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;4&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;5&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
    &lt;a href="#"&gt;次へ&amp;gt;&amp;gt;&lt;/a&gt;
&lt;/nav&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/kana0330/tUXk" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題1：チームD</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;
    &lt;strong&gt;&lt;a&gt;&amp;lt;&amp;lt;&lt;/a&gt;&lt;/strong&gt;
    &lt;ul&gt;
       &lt;li&gt;&lt;span&gt;1&lt;/span&gt;&lt;/li&gt;
       &lt;li&gt;&lt;a&gt;2&lt;/a&gt;&lt;/li&gt;
       &lt;li&gt;&lt;a&gt;3&lt;/a&gt;&lt;/li&gt;
       &lt;li&gt;&lt;a&gt;4&lt;/a&gt;&lt;/li&gt;
       &lt;li&gt;&lt;a&gt;5&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;strong&gt;&lt;a&gt;&amp;gt;&amp;gt;&lt;/a&gt;&lt;/strong&gt;
&lt;/nav&gt;</pre><p></p>

<h3>現在地の表し方</h3>

<p>チームAは <pre class="crayon-plain-tag">&lt;li&gt;&lt;a class="current"&gt;1&lt;/a&gt;</pre> と、href属性を外しています。a要素はアンカーとしての意味がありますが、<strong>href属性がないa要素はプレースホルダーを表す</strong>という仕様を考えてのことです。</p>

<p>チームBは <pre class="crayon-plain-tag">&lt;li&gt;&lt;em&gt;1&lt;/em&gt;</pre> とem要素で現在地を強調することで表しています。</p>

<p>現在どこのページにいるのかをページングで表現する場合、主に視覚的な観点からスタイルを変えるというアプローチを取ることが多いと思います。ですがセマンティクスを考える場合には、こういった表し方も意識する必要があるのではないでしょうか。</p>

<h3>重要か強調か、strongとemの違いは？</h3>

<p>チームDは前へと次へのリンクに対してstrong要素でマークアップしています。<br>
strong要素はHTML5の仕様では強調ではなく<strong>強い重要性を表す要素</strong>とされています。</p>

<p>em要素はニュアンスとしての強調ですがstrong要素を使った場合<strong>そのコンテンツの中でその部分が重要である</strong>と意味付けしていることになります。<br>
ページングというコンテキストにおいて、重要かどうかといった意味付けをするのが適しているかは、判断するのがかなり難しいと思います。</p>

<h3>リンク先との関係から考えられるもの</h3>

<p>チームAとチームBは <pre class="crayon-plain-tag">&lt;a href="#" rel="prev"&gt;前へ&lt;/a&gt; &lt;a href="#" rel="next"&gt;次へ&lt;/a&gt;</pre> といったように、a要素に対してrel属性を付けています。<br>
rel属性は<strong>参照元のドキュメントからみた参照先のリンクとの関係性(relationship)を示す</strong>属性です。 <pre class="crayon-plain-tag">rel="prev"</pre> とすることでリンクが示す先のページが前のページであると意味をつけることができます。</p>

<p>ブラウザの中にはrel属性を解釈して<strong>ブラウザ自体のナビゲーションに前のページや次のページへのリンクを表示する</strong>といった実装をしているものもあります。(prestoの頃のOperaなど)</p>

<p>普段外部CSSの読み込みの際に <pre class="crayon-plain-tag">rel="stylesheet"</pre> と記述することが多いと思いますが、ユーザビリティやアクセシビリティといった観点からrel属性を使用するというのも一つの考えです。</p>

<h3>視覚的・構造的順番の分離がもたらす効果</h3>

<p>またチームAは他のチームと大きく違い、&#8221;次へ”のリンクをページ番号のリストより前にマークアップしています。<br>
これはスクリーンリーダなど音声による読み上げを考えた場合に<strong>「&#8221;前へ&#8221;の次に数字が読みあげられるよりも&#8221;次へ&#8221;を読み上げたほうが良いと考えた」</strong>という観点からでした。</p>

<p>視覚的な構造をスタイルシートで表すようにすることで、<strong>アクセシビリティを意識するといった違った視点からマークアップをすることができる</strong>と、とても考えさせられるマークアップです。</p>

<h3>部長はこう書く！</h3>

<p>このお題に対しての村岡氏のマークアップです。</p>

<p></p><pre class="crayon-plain-tag">&lt;head&gt;
    &lt;link rel="next" href="p2.html"&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div&gt;
        &lt;p&gt;&lt;a class="prev"&gt;前へ&lt;/a&gt;&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;&lt;a class="current-page"&gt;1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="p2.html"&gt;2&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="p3.html"&gt;3&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="p4.html"&gt;4&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="p5.html"&gt;5&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;p&gt;&lt;a class="next" href="p2.html"&gt;次へ&lt;/a&gt;
    &lt;/div&gt;    
&lt;/body&gt;</pre><p></p>

<p>マークアップ自体はチームAとチームBに似ていますが、&#8221;＜＜&#8221;や&#8221;＞＞&#8221;はスクリーンリーダなどで読み上げてほしくないといったことから、CSSの擬似要素で視覚的に挿入しています。<br></p>

<p>アクセシビリティを意識したとき、順番を考えるのも大事ですが、そのコンテンツ自身も意識することが大事だと考えられます。</p>

<h2>2.進化するフォームに対応できるか</h2>

<p><img src="/wp-content/uploads/2013/11/markup2_q2.jpg" alt="markup2_q2" width="430" height="583" class="aligncenter size-full wp-image-3229" srcset="/wp-content/uploads/2013/11/markup2_q2.jpg 430w, /wp-content/uploads/2013/11/markup2_q2-221x300.jpg 221w, /wp-content/uploads/2013/11/markup2_q2-152x207.jpg 152w" sizes="(max-width: 430px) 100vw, 430px" /></p>

<p>2つ目のお題はフォームです。<br>
このお題で注目したポイントは以下の3つです。</p>

<ul>
<li>アスタリスク</li>
<li>label要素の使い方</li>
<li>input要素の属性</li>
</ul>

<h3>各チームのマークアップ</h3>

<ul>
<li><a href="http://jsdo.it/myakura/rWj1" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2：チームA</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;section class="reservation"&gt;
    &lt;h1&gt;バスタイム商事 会議室予約フォーム&lt;/h1&gt;
    &lt;p class="note"&gt;&lt;span class="mark-req"&gt;*&lt;/span&gt;は必須入力です&lt;/p&gt;
    &lt;form&gt;
        &lt;table&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="room"&gt;会議室名&lt;/label&gt;
                &lt;td&gt;&lt;input id="room" required aria-label="会議室名（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="date"&gt;ご利用日&lt;/label&gt;
                &lt;td&gt;&lt;input id="date" type="date" required aria-label="ご利用日（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="time"&gt;ご利用時刻&lt;/label&gt;
                &lt;td&gt;&lt;input id="time" type="time" required aria-label="利用開始時刻（必須）"&gt; 〜 &lt;input type="time" required aria-label="利用終了時刻（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="number"&gt;ご利用人数&lt;/label&gt;
                &lt;td&gt;&lt;input id="number" type="number" min="1" step="1" required aria-label="ご利用人数（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="name"&gt;代表者氏名&lt;/label&gt;
                &lt;td&gt;&lt;input id="name" required aria-label="代表者氏名（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="name-reading"&gt;代表者氏名ローマ字&lt;br&gt;&lt;span class="note-label"&gt;（半角英字）&lt;/span&gt;&lt;/label&gt;
                &lt;td&gt;&lt;input id="name-reading" pattern="[A-Za-z\. ]+" required aria-label="代表者氏名ローマ字（必須、半角英字）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="email"&gt;E-Mail&lt;/label&gt;
                &lt;td&gt;&lt;input id="email" type="email" required aria-label="E-Mail（必須）"&gt;
                    &lt;span class="mark-req"&gt;*&lt;/span&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="tel"&gt;TEL&lt;/label&gt;
                &lt;td&gt;&lt;input id="tel" type="tel"&gt;
            &lt;tr&gt;&lt;th&gt;&lt;label for="url"&gt;URL&lt;/label&gt;
                &lt;td&gt;&lt;input id="url" type="url" pattern="^https?\:\/\/.+"&gt;
        &lt;/table&gt;
        &lt;button&gt;予約する&lt;/button&gt;
    &lt;/form&gt;
&lt;/section&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/nakajmg/TIve" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2：チームB</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;form action=""&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f1"&gt;会議室名&lt;/label&gt;&lt;input type="text" name="f1" id="f1" required autofocus="autofocus"&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f2"&gt;ご利用日&lt;/label&gt;&lt;input type="date" name="f2" id="f2" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f3"&gt;ご利用時刻&lt;/label&gt;&lt;input type="time" name="f3" id="f3" required&gt;〜
            &lt;label for="f4"&gt;&lt;/label&gt;&lt;input type="time" name="f4" id="f4" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f5"&gt;ご利用人数&lt;/label&gt;&lt;input type="number" name="f5" id="f5" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f6"&gt;代表者氏名&lt;/label&gt;&lt;input type="text" name="f6" id="f6" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f7"&gt;代表者氏名ローマ字&lt;/label&gt;&lt;input type="text" pattern="^[A-Za-z]+$" name="f7" id="f7" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;
        &lt;strong&gt;
            &lt;label for="f8"&gt;E-Mail&lt;/label&gt;&lt;input type="email" name="f8" id="f8" required&gt;&lt;span&gt;*&lt;/span&gt;
        &lt;/strong&gt;
    &lt;p&gt;&lt;label for="f9"&gt;TEL&lt;/label&gt;&lt;input type="tel" name="f9" id="f9"&gt;
    &lt;p&gt;&lt;label for="f10"&gt;URL&lt;/label&gt;&lt;input type="url" name="f10" id="f10"&gt;
    &lt;p&gt;&lt;input type="submit" value="予約する"&gt;
&lt;/form&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/can.i.do.web/oo7o" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2：チームC</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;header&gt;
    &lt;h1&gt;バスタイム商事 会議室予約フォーム&lt;/h1&gt;
&lt;/header&gt;
&lt;p&gt;&lt;span&gt;※&lt;/span&gt;は入力必須です&lt;/p&gt;
&lt;form action="#"&gt;
&lt;div&gt;
    &lt;label for="muraoka1"&gt;会議室名&lt;/label&gt;
    &lt;input id="muraoka1"  type="text" name="btf1"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka2"&gt;ご利用日&lt;/label&gt;
    &lt;input id="muraoka2" type="date" name="btf2"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label&gt;ご利用時刻
    &lt;input  id="muraoka3" type="time" name="btf31"&gt;〜
    &lt;input type="time" name="btf32"&gt;&lt;span&gt;※&lt;/span&gt;
    &lt;/label&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka4"&gt;ご利用人数&lt;/label&gt;
    &lt;input  id="muraoka4" type="number" name="btf4"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka5"&gt;代表者氏名&lt;/label&gt;
    &lt;input  id="muraoka5" type="text" name="btf5"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka6"&gt;代表者氏名ローマ字(半角英字)&lt;/label&gt;
    &lt;input  id="muraoka6" type="text" name="btf6"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka7"&gt;E-Mail&lt;/label&gt;
    &lt;input  id="muraoka7" type="email" name="btf7"&gt;&lt;span&gt;※&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka8"&gt;TEL&lt;/label&gt;
    &lt;input  id="muraoka8" type="tel" name="btf8"&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for="muraoka9"&gt;URL&lt;/label&gt;
    &lt;input  id="muraoka9" type="url" name="btf9"&gt;
&lt;/div&gt;
&lt;input type="submit" value="予約する"&gt;
&lt;/form&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/ahiru_x/AhwK" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題2：チームD</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;h1&gt;バスタイム商事 会議予約フォーム&lt;/h1&gt;
&lt;p&gt;&lt;small&gt;&lt;i&gt;*&lt;/i&gt;は入力必須です&lt;/small&gt;&lt;/p&gt;
&lt;form action=""&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;label&gt;会議室名 &lt;input type="text" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;ご利用日 &lt;input type="date" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;ご利用時刻 &lt;input type="time" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;ご利用人数 &lt;input type="number" min="1" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;代表者氏名 &lt;input type="text" required&gt;&lt;i&gt;*&lt;/i&gt;&lt;/label&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;代表者氏名ローマ字&lt;small&gt;(半角英字)&lt;/small&gt; &lt;input type="text" pattern="^[0-9A-Za-z]+$" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;E-Mail &lt;input type="email" required&gt;&lt;/label&gt;&lt;i&gt;*&lt;/i&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;TEL &lt;input type="tel"&gt;&lt;/label&gt;&lt;/li&gt;
        &lt;li&gt;&lt;label&gt;URL &lt;input type="url"&gt;&lt;/label&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;input type="submit" value="予約する"&gt;
&lt;/form&gt;</pre><p></p>

<h3>i要素は日本語に合わない？</h3>

<p>チームDは必須項目を表しているアスタリスクをi要素でマークアップしています。i要素は最近ですとスプライトアイコンを使用する際に使われていることが多いように思います。<br>
仕様的にはi要素は文章中で<strong>他と区別したいテキストや印刷の際に斜体になるテキストに対して使う</strong>とされています。<br>
ただこの仕様は欧文の文章慣習に拠っている部分が大きいので<strong>「そもそも日本語の文章慣習には合っていないのではないか」</strong>という意見もありました。<br></p>

<p>そう考えるとi要素を使わずにem要素やb要素でマークアップするといったことも考えられるかもしれません。</p>

<h3>アスタリスクじゃ伝わらない</h3>

<p>Webのフォームにおいて、赤いアスタリスクで&#8221;入力必須項目&#8221;であることを表しているページが多いと思います。<br>
しかしこれについて<strong>「赤いアスタリスク自体には必須項目であるという意味はないので、そもそもこういった使い方がよくないのでは」</strong>という意見がありました。<br>
また、このお題ではデザイン的にアスタリスクが後ろに来ていることから、アスタリスクを項目の後ろにマークアップすると思います。ですが読み上げされる場合を考えると、項目名の読み上げを行なった後にその項目が必須であるかどうかがわかります。<br></p>

<p>アクセシビリティやユーザビリティをしっかり考えた場合、項目の前に&#8221;(必須項目です)&#8221;といったような記述をすることが望ましいのではないかと筆者は考えます。</p>

<h3>囲むか分けるか、label要素の使い方</h3>

<p>label要素はinput要素を内包する書き方と、for属性によって対象のinput要素を指定する書き方の二通りあり、マークアップ的にはどちらの書き方も正しいです。<br>
今回の場合デザイン的にラベルの右側にマージンが空いてる様に見えるので、スタイル付けがしやすいようにlabel要素とinput要素を分けて書く方が適していると考えることができます。</p>

<h3>type=&#8221;?&#8221;</h3>

<p>HTML5ではinput要素のtype属性に色々なtypeが設定できるようになっています。
数字にはnumber、メールアドレスにはemailなど、JavaScriptを使わずに入力項目のフォーマットを指定することができます。<br>
typeを上手く使い分けることで、ユーザが入力の際に迷わないフォームが作れるのではないでしょうか。<br></p>

<p>なお、これらのtypeに対応していないブラウザでは <pre class="crayon-plain-tag">type="text"</pre> を指定したのと同等に扱われます。</p>

<h3>input要素で使える便利な属性たち</h3>

<p>いくつかのチームでinput要素の属性にrequired属性やautofocus属性といった指定をしています。<br>
requiredはその項目が必須であることを表し、送信ボタンを押した際にはその項目が未入力であった場合に未入力であると警告して送信処理を行いません。<br>
autofocus属性はそのページを開いた際に自動的に入力欄にフォーカスされ、ユーザーが項目を選択することなく入力を開始することができます。<br></p>

<p>ほかにもautocomplete属性やstep属性、またpattern属性といったものもあり、これらを使えばJavaScriptを書かずに入力内容に制約をかけることもできます。</p>

<h3>入力チェックは万全に</h3>

<p>input要素の属性を使う上で注意しておきたい点があります。required属性やpattern属性といった属性は確かに便利なのですが、データの入力チェックをこれだけで済ましてはいけません。<br>
これらの属性はあくまでも入力の補助的な機能であって、送信されてくるデータは保証していません。<br>
悪意のある第三者が、入力フォームを通さずにフォームの送信先に直接データを送ることも十分に考えられます。そういった場合これらの属性は無力です。</p>

<p>フォームで入力必須にしてあるし正規表現で形式指定してあるから送られてくるデータは必ず正しい、と思わずに、<strong>送信されてきたデータはしっかりとサーバサイドで整合性をチェックする必要がある</strong>、ということを覚えておいてください。</p>

<h3>部長はこう書く！</h3>

<p></p><pre class="crayon-plain-tag">&lt;h1&gt;バスタイム商事 会議室予約フォーム&lt;/h1&gt;
&lt;p class="note"&gt;&lt;span class="mark-req"&gt;*&lt;/span&gt;は必須入力です&lt;/p&gt;
&lt;form&gt;
    &lt;div&gt;
        &lt;label for="room-name"&gt;会議室名&lt;/label&gt;
        &lt;input id="room-name" required placeholder="A会議室"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="date"&gt;ご利用日&lt;/label&gt;
        &lt;input id="date" type="date" required placeholder="2013/01/23"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;    
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="time"&gt;ご利用時刻&lt;/label&gt;
        &lt;input id="time" type="time" required placeholder="01:13"&gt;
        〜
        &lt;input type="time" required placeholder="02:34"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;    
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="number"&gt;ご利用人数&lt;/label&gt;
        &lt;input id="number" type="number" placeholder="1"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;        
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="name"&gt;代表者氏名&lt;/label&gt;
        &lt;input id="name" required placeholder="神戸　太郎"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;    
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="name-roma"&gt;
            代表者氏名ローマ字&lt;br&gt;
            &lt;span class="notes"&gt;（半角英字）&lt;/span&gt;
        &lt;/label&gt;
        &lt;input id="name-roma" pattern="[A-Za-z/ .]+" required placeholder="Taro Kobe"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;    
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="email"&gt;E-Mail&lt;/label&gt;
        &lt;input id="email" type="email" required placeholder="kobe@bathtimeshoji.com"&gt;
        &lt;span class="required"&gt;*&lt;/span&gt;        
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="tel"&gt;TEL&lt;/label&gt;
        &lt;input id="tel" type="tel" placeholder="0123456789"&gt;        
    &lt;/div&gt;
    &lt;div&gt;
        &lt;label for="url"&gt;URL&lt;/label&gt;
        &lt;input id="url" type="url" placeholder="http://bathtimeshoji.com/"&gt;    
    &lt;/div&gt;
    &lt;input type="submit" value="予約する"&gt;
&lt;/form&gt;</pre><p></p>

<p>前述したように、ブラウザが対応していないtypeが指定されている場合には <pre class="crayon-plain-tag">type="text"</pre> として扱われます。<br>
対応していないブラウザでフォームを開いた場合に、ユーザーが少しでも迷わないようにplaceholder属性で入力する項目の内容を示すのも有効な手段です。</p>

<h2>3.tableを見直す</h2>

<p><img src="/wp-content/uploads/2013/11/markup2_q3.png" alt="markup2_q3" width="622" height="541" class="aligncenter size-full wp-image-3230" srcset="/wp-content/uploads/2013/11/markup2_q3.png 622w, /wp-content/uploads/2013/11/markup2_q3-300x260.png 300w, /wp-content/uploads/2013/11/markup2_q3-207x180.png 207w" sizes="(max-width: 622px) 100vw, 622px" /></p>

<p>最後のお題は業績の表です。</p>

<p>このお題で注目したポイントは以下の2つです。</p>

<ul>
<li>tableの構造</li>
<li>scope属性</li>
</ul>

<p>お題のデザインをHTMLとCSSで<strong>見た目的に</strong>表すのにそれほど時間はかからないと思います。
table要素でマークアップして見出しのセルをcolspanで適宜結合すれば数分で終わる作業です。
ですが各データと見出しの関係性をしっかりとマークアップで表そうとした場合、table要素への理解が必要になります。</p>

<h3>各チームのマークアップ</h3>

<ul>
<li><a href="http://jsdo.it/myakura/A6VP" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題3：チームA</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;table border&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;
            &lt;th&gt;2012年3月
            &lt;th&gt;2013年3月
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;th colspan="3" scope="rowgroup"&gt;連結経営成績
        &lt;tr&gt;&lt;th scope="row"&gt;営業収益
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;営業利益
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;税引前利益
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;当期利益
            &lt;td&gt;1,000
            &lt;td&gt;1,000
    &lt;/tbody&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;th colspan="3" scope="rowgroup"&gt;連結財政状態
        &lt;tr&gt;&lt;th scope="row"&gt;資産合計
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;資本合計
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;帰属持分比率（％）
            &lt;td&gt;10.0
            &lt;td&gt;10.0
    &lt;/tbody&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;th colspan="3" scope="rowgroup"&gt;キャッシュフローの状況
        &lt;tr&gt;&lt;th scope="row"&gt;営業活動によるキャッシュフロー
            &lt;td&gt;1,000
            &lt;td&gt;&lt;span class="mark"&gt;△&lt;/span&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;投資活動によるキャッシュフロー
            &lt;td&gt;&lt;span class="mark"&gt;△&lt;/span&gt;1,000
            &lt;td&gt;&lt;span class="mark"&gt;△&lt;/span&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;財務活動によるキャッシュフロー
            &lt;td&gt;1,000
            &lt;td&gt;1,000
        &lt;tr&gt;&lt;th scope="row"&gt;現金及び現金同等物&lt;br&gt;期末残高
            &lt;td&gt;1,000
            &lt;td&gt;1,000
    &lt;/tbody&gt;
&lt;/table&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/nakajmg/6H7B" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題3：チームB</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;div&gt;
    &lt;table&gt;
        &lt;caption&gt;連結経営成績&lt;/caption&gt;
        &lt;thead class="thead"&gt;
            &lt;tr&gt;
                &lt;th&gt;項目&lt;/th&gt;
                &lt;th&gt;2012年3月&lt;/th&gt;
                &lt;th&gt;2013年3月&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;営業収益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;営業利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;税引前利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;当期利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/div&gt;

&lt;div&gt;
    &lt;table&gt;
        &lt;caption&gt;連結財政状態&lt;/caption&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;項目&lt;/th&gt;
                &lt;th&gt;2012年3月&lt;/th&gt;
                &lt;th&gt;2013年3月&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;営業収益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;営業利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;税引前利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;当期利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/div&gt;

&lt;div&gt;
    &lt;table&gt;
        &lt;caption&gt;キャッシュフローの状況&lt;/caption&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;項目&lt;/th&gt;
                &lt;th&gt;2012年3月&lt;/th&gt;
                &lt;th&gt;2013年3月&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;営業収益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;営業利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;税引前利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;当期利益&lt;/td&gt;&lt;td&gt;237,409&lt;/td&gt;&lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/div&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/can.i.do.web/aikd" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題3：チームC</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;table border="1"&gt;
    &lt;thead&gt;
        &lt;th&gt;&lt;/th&gt;
        &lt;th&gt;2012/3&lt;/th&gt;
        &lt;th&gt;2013/3&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;

        &lt;tr&gt;&lt;th colspan="3"&gt;連結経営成績&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;

        &lt;tr&gt;&lt;th colspan="3"&gt;連結財政状態&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;

        &lt;tr&gt;&lt;th colspan="3"&gt;キャッシュフローの状況&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th&gt;AAA&lt;/th&gt;
            &lt;td&gt;123,456&lt;/td&gt;
            &lt;td&gt;7,890&lt;/td&gt;
        &lt;/tr&gt;

    &lt;/tbody&gt;
&lt;/table&gt;</pre><p></p>

<ul>
<li><a href="http://jsdo.it/ahiru_x/etfT" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">お題3：チームD</a></li>
</ul>

<p></p><pre class="crayon-plain-tag">&lt;table border="1"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;&lt;/th&gt;
            &lt;th id="year2012" scope="col"&gt;2012年3月&lt;/th&gt;
            &lt;th id="year2013" scope="col"&gt;2013年3月&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th colspan="3" scope="col" class="title"&gt;連結経営成績&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th colspan="3" scope="col" class="title"&gt;連結経営成績&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th colspan="3" scope="col" class="title"&gt;連結経営成績&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th colspan="3" scope="col" class="title"&gt;連結経営成績&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;th scope="row"&gt;営業収益&lt;/th&gt;
            &lt;td headers="year2012"&gt;2000円&lt;/td&gt;
            &lt;td headers="year2013"&gt;2000円&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</pre><p></p>

<h3>みんなが悩んだscope属性</h3>

<p>参加者を大いに悩ませたのは右上にある年月の表示です。年月の見出しはデータ的に列方向のセルに掛かっています。しかし先頭に空行の見出しセルがあったり、&#8221;連結経営成績&#8221;などのカラム全体にまたがるセルが存在してたりと、見出しとセルの関連付けが一見してやりづらそうな見た目です。</p>

<p>こういった単純ではない表で有効とされているのがscope属性の指定です。<br>
&#8220;年月&#8221;の見出しには <pre class="crayon-plain-tag">scope="col"</pre> として列方向の見出しであることを、&#8221;営業収益&#8221;などの見出しは <pre class="crayon-plain-tag">scope="row"</pre> として行方向の見出しであることを明示します。<br>
scope属性の指定によってデータ的に曖昧だった見出しの対象範囲を指定することができます。</p>

<p>また、scope属性を指定することでユーザーエージェントに見出しの方向を正しく伝えることができるので、データをよりアクセシブルにするために有効であるという見方もできます。データの関係性をしっかりとマークアップすることで、アクセシビリティ的にもより良いマークアップにすることができると考えられます。</p>

<h3>CSS is Power !?</h3>

<p>チームBはこのデザインを3つの表の集まりとして捉えてマークアップしています。「年月の見出しなどで一つの表に見えるだけで、それぞれ独立した表である」と考えてのことでした。3つの表では見出しセルとしてtheadに年月を入れていますが、CSSによって1つ目の表の見出しだけを表示するようにしています。</p>

<p><strong>見た目と構造の分離</strong>という観点から見ると、スタイリングによって解決することも一つの手法なのではと筆者は考えます。</p>

<h3>部長はこう書く！</h3>

<p></p><pre class="crayon-plain-tag">&lt;section&gt;
    &lt;table border="1"&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;&lt;/th&gt;
                &lt;th scope="col"&gt;2012年3月&lt;/th&gt;
                &lt;th scope="col"&gt;2013年3月&lt;/th&gt;
            &lt;/tr&gt;        
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;th scope="rowgroup" colspan="3" class="group"&gt;
                    連結経営成績
                &lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr &gt;
                &lt;th scope="row"&gt;営業収益&lt;/th&gt;
                &lt;td&gt;237,409&lt;/td&gt;
                &lt;td&gt;203,423&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;営業利益&lt;/th&gt;
                &lt;td&gt;15,530&lt;/td&gt;
                &lt;td&gt;14,577&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;税引前利益&lt;/th&gt;
                &lt;td&gt;13,600&lt;/td&gt;
                &lt;td&gt;10,213&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;当期利益&lt;/th&gt;
                &lt;td&gt;2,562&lt;/td&gt;
                &lt;td&gt;7,962&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="rowgroup" colspan="3"&gt;
                    連結財政状態
                &lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr &gt;
                &lt;th scope="row"&gt;資産合計&lt;/th&gt;
                &lt;td&gt;2,455,368&lt;/td&gt;
                &lt;td&gt;7,793,387&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;資本合計&lt;/th&gt;
                &lt;td&gt;320,905&lt;/td&gt;
                &lt;td&gt;330,535&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;帰属持分比率（％）&lt;/th&gt;
                &lt;td&gt;17.9&lt;/td&gt;
                &lt;td&gt;12.2&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="rowgroup" colspan="3"&gt;
                    キャッシュフローの状況
                &lt;/th&gt;
            &lt;/tr&gt;
            &lt;tr &gt;
                &lt;th scope="row"&gt;営業活動によるキャッシュフロー&lt;/th&gt;
                &lt;td&gt;9,618&lt;/td&gt;
                &lt;td&gt;△32,954&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;投資活動によるキャッシュフロー&lt;/th&gt;
                &lt;td&gt;△13,021&lt;/td&gt;
                &lt;td&gt;△16,160&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;財務活動によるキャッシュフロー&lt;/th&gt;
                &lt;td&gt;7,487&lt;/td&gt;
                &lt;td&gt;23,699&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;th scope="row"&gt;現金および現金同等物&lt;br&gt;期末残高&lt;/th&gt;
                &lt;td&gt;129,833&lt;/td&gt;
                &lt;td&gt;110,362&lt;/td&gt;
            &lt;/tr&gt;        
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/section&gt;</pre><p></p>

<p>table要素に <pre class="crayon-plain-tag">border="1"</pre> を指定しています。これは<strong>このtable要素がレイアウト目的で使われているものではないと明示したい</strong>という意図での指定です。</p>

<p>テーブルレイアウトは一般的に推奨されていませんが、レイアウト目的でtable要素を使いたい場合には <pre class="crayon-plain-tag">role="presentation"</pre> といった属性を指定して、ユーザーエージェントにこの表がレイアウト目的で使用されているということを明示すべきだとされています。合わせて<pre class="crayon-plain-tag">border="0"</pre>や<pre class="crayon-plain-tag">cellspacing="0" cellpadding="0"</pre>を指定することでも、その表がレイアウト目的だと伝えるための手がかりとすることができます。</p>

<h2>マークアップの奥深さ</h2>

<p><img src="/wp-content/uploads/2013/11/IMG_4834-300x199.png" alt="IMG_4834" width="300" height="199" class="alignright size-medium wp-image-3227" srcset="/wp-content/uploads/2013/11/IMG_4834-300x199.png 300w, /wp-content/uploads/2013/11/IMG_4834-207x137.png 207w, /wp-content/uploads/2013/11/IMG_4834.png 640w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>前回同様に今回のイベントでも各お題に対して30分の考察時間が設けられましたが、どのお題も30分ではまとめられないほどの議論がありました。<br>
いろいろな考えがありますが、人それぞれに違ったマークアップがあり、どれが一番といった答えはありません。</p>

<p>要素の使い方や属性への理解など、より良いマークアップをする際には相応の知識が求められます。また、知識だけでなくユーザビリティやアクセシビリティといったことも考慮する必要があると思います。</p>

<p>誰にとって、何にとって良いマークアップなのか、マークアップをする際に考えてみてください。</p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>よくある3つのデザインから考える、マークアップの最適解</title>
		<link>/nakajmg/2502/</link>
		<pubDate>Tue, 24 Sep 2013 22:00:54 +0000</pubDate>
		<dc:creator><![CDATA[中島 直博]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[html5j]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=2502</guid>
		<description><![CDATA[連載： イベントレポート (2) Web制作においてHTMLのマークアップには絶対の正解というものがありません。ページを制作しているとき、特にセマンティクスを意識したとき「このマークアップで正しいのだろうか」と悩むことが...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (2)</div><p><a href="https://html5experts.jp/wp-content/uploads/2013/09/mu1.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/mu1-300x200.jpg" alt="mu1" width="300" height="200" class="alignright size-medium wp-image-2636" srcset="/wp-content/uploads/2013/09/mu1-300x200.jpg 300w, /wp-content/uploads/2013/09/mu1-207x138.jpg 207w, /wp-content/uploads/2013/09/mu1.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a>
Web制作においてHTMLのマークアップには絶対の正解というものがありません。ページを制作しているとき、特にセマンティクスを意識したとき「このマークアップで正しいのだろうか」と悩むことがあると思います。</p>

<p>そんなマークアップについて考えるイベント「MarkupCafe」がhtml5jマークアップ部の主催のもと開催されました。「MarkupCafe」では参加者同士がチームに分かれ、お題となるデザインに対して議論し、自分たちならこうマークアップするといった考えを発表し合いました。</p>

<p>本記事では「MarkupCafe」で出された&#8221;フッター&#8221;、&#8221;パンくずリスト&#8221;、&#8221;求人情報&#8221;の3つのお題をもとに、Web制作におけるマークアップの捉え方、誤った使い方をしがちな要素などについて考え、マークアップの最適解を探ります。</p>

<p>※html5jは、HTML5などのWebプラットフォーム技術を使った「ものづくり」に関わる、すべての人々を応援する非営利・中立のコミュニティです。</p>

<p><span id="more-2502"></span></p>

<h2>1.フッターの要素が持つそれぞれの意味は？</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/q_1.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/q_1.png" alt="q_1" width="668" height="149" class="aligncenter size-full wp-image-2504" srcset="/wp-content/uploads/2013/09/q_1.png 640w, /wp-content/uploads/2013/09/q_1-300x67.png 300w, /wp-content/uploads/2013/09/q_1-207x46.png 207w" sizes="(max-width: 668px) 100vw, 668px" /></a></p>

<p>最初のお題として出されたのはページ最下部によくある、フッター部分のデザインからのマークアップです。お題で使われた画像には、筆者が印象から決めたパーツの構成がわかるようにキャプションをつけています。筆者はAからFの6つのパーツに分解してマークアップを考えました。パーツをいくつかピックアップして、参加者のマークアップを見ていきます。</p>

<h3>パンくずリスト？ナビゲーション？</h3>

<p>意見が分かれるところだと思いますが、Aのパーツはパンくずリストにもナビゲーションにもとれるパーツです。実際に各チームのマークアップは、大きく分類してリストを使うか、使わないかに二分されました。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;&lt;!-- nav要素で囲むチームもいれば --&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a href=""&gt;HOME ＞&lt;/a&gt;&lt;!-- リンクにしないチームも --&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>リストにしたチームの中でもnav要素で囲んでいたり、li要素の中をリンクにしたりといった差異がありました。リストにしなかったチームのマークアップはp要素一つというもので、「意味をもたせるほど重要な情報ではない」と判断してのもの。捉え方の違いでマークアップは大きく変わる、ということ象徴していると思います。</p>

<h3>水平線に潜む罠？</h3>

<p>Bのパーツの水平線は、一見hr要素を使って線が引けそうですが、どのチームもhr要素は使っていません。hr要素は話題の区切りなどを表す際に使う要素なので、この場合のマークアップには適さないという判断でした。見た目的な水平線を引きたい場合は、スタイルシートで行うべきだとされています。</p>

<h3>address要素から考える&#8221;良いマークアップ&#8221;とは？</h3>

<p>このお題の中で、どのチームも一番時間をかけたのがDとEのパーツです。電話番号やメールアドレス、住所といった情報に意味をもたせようと思ったとき、一番に浮かぶのはaddress要素です。どのチームもaddress要素を使用しましたが、その使い方はバラバラでした。</p>

<p></p><pre class="crayon-plain-tag">&lt;address&gt;
    &lt;p&gt;
        &lt;span&gt;&lt;a&gt;お問い合わせ：0120-0000-0000&lt;/a&gt;, &lt;a&gt;infomation[at]bathtimeshoji.com&lt;/a&gt;&lt;/span&gt;
    &lt;/p&gt;
&lt;/address&gt;
&lt;dl&gt;
    &lt;dt&gt;神戸本社：&lt;/dt&gt;
    &lt;dd&gt;兵庫県神戸市◯◯◯◯◯ 11-11-11 ◯◯ビル 11&lt;/dd&gt;
    &lt;dt&gt;東京本社：&lt;/dt&gt;
    &lt;dd&gt;東京都渋谷区◯◯◯◯◯ 22-22-22 ◯◯ビル 22&lt;/dd&gt;
&lt;/dl&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;p&gt;
    &lt;span&gt;お問い合わせ：&lt;/span&gt;
    &lt;address itemprop="telephone"&gt;0120-0000-0000&lt;/address&gt;
    &lt;address itemprop="email"&gt;infomation[at]bathtimeshoji.com&lt;/address&gt;
&lt;/p&gt;
&lt;dl&gt;
    &lt;dt&gt;神戸本社：&lt;/dt&gt;
    &lt;dd&gt;兵庫県神戸市◯◯◯◯◯ 11-11-11 ◯◯ビル 11&lt;/dd&gt;
    &lt;dt&gt;東京本社：&lt;/dt&gt;
    &lt;dd&gt;東京都渋谷区◯◯◯◯◯ 22-22-22 ◯◯ビル 22&lt;/dd&gt;
&lt;/dl&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;address&gt;
    &lt;p&gt;お問い合わせ：&lt;span&gt;0120-0000-0000&lt;/span&gt; &lt;span&gt;infomation［at］bathtimeshoji.com&lt;/span&gt;&lt;/p&gt;
    &lt;p&gt;神戸本社：&lt;span&gt;兵庫県神戸市◯◯◯◯◯ 11-11-11 ◯◯ビル 11&lt;/span&gt;&lt;/p&gt;
    &lt;p&gt;東京本社：&lt;span&gt;東京都渋谷区◯◯◯◯◯ 22-22-22 ◯◯ビル 22&lt;/span&gt;&lt;/p&gt;
&lt;/address&gt;</pre><p></p>

<p>お問い合せの部分だけをaddress要素にするチームもあれば、Microdataを使った上で電話番号とメールアドレスを分けてaddress要素を使う、住所も含めてaddress要素にする、といったようにaddress要素の使い方はバラバラになりました。</p>

<p>address要素は特に誤った使われ方をされる要素の一つですが、仕様をざっくりと意訳すると”そのドキュメントの問い合わせを受ける人に関する情報に用いる”とされています。このお題の場合、ドキュメントの問い合わせ先として適していそうなのは電話番号とメールアドレスの2種類だと捉え、所在地の情報は適していないと考えることができます。
要素の名前がもっていそうな意味からマークアップするのではなく、仕様に基づいて正しい使い方をすることが良いマークアップのためには必要です。</p>

<h2>2.パンくずリストに正解はあるのか</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/q_21.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/q_21.png" alt="q_2" width="713" height="42" class="aligncenter size-full wp-image-2527" srcset="/wp-content/uploads/2013/09/q_21.png 640w, /wp-content/uploads/2013/09/q_21-300x17.png 300w, /wp-content/uploads/2013/09/q_21-207x11.png 207w" sizes="(max-width: 713px) 100vw, 713px" /></a></p>

<p>次のお題に出されたのはパンくずリストです。先のお題の中にもパンくずリストとして扱える要素がありましたが、このお題では明確にパンくずリストとしてマークアップします。</p>

<p>ほとんどのチームが要素にメタデータを付与して、細かく意味付けをしていました。パンくずリストというシンプルなお題なだけに、同じようなマークアップになるのではと思いましたが、それぞれのマークアップからは様々な部分に思考を巡らせたのが見えてきます。</p>

<h3>メタデータはだれのため？</h3>

<p>このマークアップでは、Microdataで各要素にメタデータで意味付けをしています。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav&gt;
    &lt;ol itemscope itemtype="http://data-vocabulary.org/Breadcrumb"&gt;
        &lt;li itemprop="child"&gt;
            &lt;a itemprop="url" href=""&gt;
                &lt;span itemprop="title"&gt;Markup Cafe トップページ&lt;/span&gt;
            &lt;/a&gt;
        &lt;/li&gt;
        &lt;li itemprop="child"&gt;
            &lt;a itemprop="url" href=""&gt;
                &lt;span itemprop="title"&gt;店舗情報&lt;/span&gt;
            &lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;ドリンク・フード&lt;/li&gt;
    &lt;/ol&gt;
&lt;/nav&gt;</pre><p></p>

<p>Microdataを使った理由としては、Googleなどの検索エンジンに対して優位なマークアップにしたいといった意図からです。</p>

<p>ここではol要素を使っていますが、パンくずリストを順序ありリストとするか順序なしリストとするか、この点だけを取っても意見が分かれると思います。</p>

<h3>これからはRDFaがくるかも</h3>

<p>このマークアップではMicrodataではなくRDFa Liteで意味付けをしています。</p>

<p></p><pre class="crayon-plain-tag">&lt;nav vocab="http://rdf.data-vocabulary.org/" typeof="Breadcrumb"&gt;
  &lt;h1&gt;ページ階層&lt;/h1&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a property="url" href=""&gt;
                &lt;span property="title"&gt;Markup Cafe トップページ&lt;/span&gt;
            &lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a property="url" href=""&gt;
                &lt;span property="title"&gt;店舗情報&lt;/span&gt;
            &lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a property="url" href=""&gt;
                &lt;span property="title"&gt;ドリンク・フード&lt;/span&gt;
            &lt;/a&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/nav&gt;</pre><p></p>

<p>先日W3Cより勧告されたRDFa 1.1では、HTML5への対応やRDFa Liteで簡潔なマークアップが可能になったこともあり、RDFaの利用が増えていくかもしれません。</p>

<p>先のマークアップとの他の違いとして、h1要素を使ってる箇所があります。nav要素はセクショニング・コンテンツなので、見出し要素を使うことでアウトラインを意識したマークアップにできる、と考えることもできます。</p>

<h3>リストってなんだろう</h3>

<p>このマークアップはMicrodataを使っていますが、リスト要素を使っていません。</p>

<p></p><pre class="crayon-plain-tag">&lt;div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"&gt;
    &lt;a itemprop="url" href=""&gt;
        &lt;span itemprop="title"&gt;Markup Cafe トップページ&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"&gt;
    &lt;a itemprop="url" href=""&gt;
        &lt;span itemprop="title"&gt;店舗情報&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"&gt;
    &lt;a itemprop="url" href=""&gt;
        &lt;span itemprop="title"&gt;ドリンク・フード&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;</pre><p></p>

<p>これは「パンくずリストはリストではない」という解釈からでした。階層構造を表すためにリスト要素を使うのが本当に正しいのかどうか、非常に考えさせられるマークアップです。</p>

<h3>意味付けだけに囚われることなかれ</h3>

<p>このマークアップは、メタデータを使わず非常に簡素なマークアップです。</p>

<p></p><pre class="crayon-plain-tag">&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=""&gt;Markup Cafe トップページ&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href=""&gt;店舗情報&lt;/a&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href=""&gt;ドリンク・フード&lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;</pre><p></p>

<p>同じようにリスト要素を使っている他のチームと比べるとnav要素を使っていません。これはnav要素の”重要なナビゲーションブロックからなるセクションだけがnav要素に適している”という仕様を意識し、パンくずリストはそこまで重要ではないと判断してのものでした。</p>

<p>また、nav要素を使わなかったもう一つの理由として「スクリーンリーダなどでアクセスしたときに重要なリンクを見失わないように」という意図も込められています。セマンティクスを与えてマシンが意味を理解できるようにすることも大事ですが、その先を考える必要もあるのかもしれません。</p>

<h3>Microdata VS RDFa、決着か？</h3>

<p>MicrodataとRDFaはどちらもメタデータを付与して意味づけを行うための仕様ですが、Microdataが<a href="http://lists.w3.org/Archives/Public/public-html-admin/2013Jul/0041.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">7月にW3C HTML WGによってHTML5.0の勧告候補から削除されてしまいました</a>。(詳しい理由と顛末は<a href="https://html5experts.jp/shumpei-shiraishi/1710/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">白石編集長の記事でふれています</a>のでそちらをご覧ください)
Microdataがこの先どう落ち着くのか、先にふれたRDFa 1.1が勧告されたという点からもこれからの動向に要注目です。</p>

<h2>3.求人情報は独立した記事か</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/q_3.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/q_3.png" alt="q_3" width="734" height="690" class="aligncenter size-full wp-image-2544" srcset="/wp-content/uploads/2013/09/q_3.png 640w, /wp-content/uploads/2013/09/q_3-300x282.png 300w, /wp-content/uploads/2013/09/q_3-207x194.png 207w" sizes="(max-width: 734px) 100vw, 734px" /></a></p>

<p>最後のお題は、よくある求人情報のデザインからのマークアップです。このお題では4つのパーツに分解して考えました。中でもAの”求人情報全体”については特に意見が分かれ、多くの議論が交わされました。</p>

<h3>tableの出番？いやいやdlでしょ</h3>

<p>Dの求人内容の部分は、table要素とdl要素とでマークアップが分かれました。</p>

<p></p><pre class="crayon-plain-tag">&lt;dl&gt;
    &lt;dt&gt;給与&lt;/dt&gt;&lt;dd&gt;時給1500円&lt;/dd&gt;
    &lt;dd&gt;月額20.3万円〜22.3万円＋残業代&lt;/dd&gt;
    &lt;!-- 略 --&gt;
&lt;/dl&gt;</pre><p></p>

<p>給与や勤務時間といった情報を定義と解釈するか、表の項目の一つとして解釈するかで使用する要素も変わってきます。どちらを使うのが正しいのか決められることではないですが、その情報が何を表したいのか考えることは良いマークアップへと繋がります。</p>

<h3>文章構造は視覚的に決まる？</h3>

<p>Cの”その他の情報”部分のマークアップですが、チームごとにバラバラになっていたのがとても興味深いです。</p>

<p></p><pre class="crayon-plain-tag">&lt;p&gt;&lt;img src="" alt=""&gt;&lt;/p&gt;
&lt;p&gt;未経験！派遣初めてさん！大歓迎！&lt;br&gt;
★履歴書不要！らくらく登録！&lt;br&gt;
★正社員のような待遇！嬉しい「月給制＋交通費支給 」&lt;br&gt;
★IT・美容・マスコミ・金融など業界も様々&lt;br&gt;
★正社員を目指す！紹介予定派遣のお仕事多数
&lt;/p&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;p&gt;&lt;img src="" alt=""&gt;未経験！派遣初めてさん！大歓迎！&lt;/p&gt;
&lt;p&gt;★履歴書不要！らくらく登録！&lt;/p&gt;
&lt;p&gt;★正社員のような待遇！嬉しい「月給制＋交通費支給 」&lt;/p&gt;
&lt;p&gt;★IT・美容・マスコミ・金融など業界も様々&lt;/p&gt;
&lt;p&gt;★正社員を目指す！紹介予定派遣のお仕事多数&lt;/p&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;img src="" alt=""&gt;
&lt;p&gt;未経験！派遣初めてさん！大歓迎！&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;★履歴書不要！らくらく登録！&lt;/li&gt;
    &lt;li&gt;★正社員のような待遇！嬉しい「月給制＋交通費支給 」&lt;/li&gt;
    &lt;li&gt;★IT・美容・マスコミ・金融など業界も様々&lt;/li&gt;
    &lt;li&gt;★正社員を目指す！紹介予定派遣のお仕事多数&lt;/li&gt;
&lt;/ul&gt;</pre><p></p>

<p>p要素の中でbr要素で改行してるものもあれば、全てp要素にしたり、リストを使ってるマークアップもあります。一行目に星マークがついていないテキストがあるから箇条書き、という解釈もできますし、一行目以外は星マークがついているからリスト、という解釈もできます。</p>

<p>では、もしこの一行目のテキストにも星マークがついていたらどうでしょうか。それぞれ似たようなマークアップになっていたかもしれません。これらのマークアップから「構造が曖昧な文章への意味付けは、整った文章への意味付けよりも解釈の仕方が多様になる」と筆者は考えます。</p>

<h3>articleという名の迷宮</h3>

<p>HTML5で定義された要素の中でも、特にarticle要素の使いどころについてはさまざまな意見があると思います。article要素を使ったチーム、article要素ではなくsection要素を使ったチーム、2つのマークアップを比較します。</p>

<p></p><pre class="crayon-plain-tag">&lt;article&gt;
    &lt;h1&gt;&lt;!-- 見出し --&gt;&lt;/h1&gt;
    &lt;div&gt;&lt;!-- その他の情報+求人内容 --&gt;&lt;/div&gt;
    &lt;aside&gt;&lt;!-- 関連する求人 --&gt;&lt;/aside&gt;
&lt;/article&gt;</pre><p></p>

<p></p><pre class="crayon-plain-tag">&lt;section&gt;
    &lt;h1&gt;&lt;!-- 見出し --&gt;&lt;/h1&gt;
    &lt;div&gt;&lt;!-- その他の情報+求人内容 --&gt;&lt;/div&gt;
    &lt;div&gt;&lt;!-- 関連する求人 --&gt;&lt;/div&gt;
&lt;/section&gt;</pre><p></p>

<p>この2つのマークアップはaside要素を使っているという違いこそあるものの、文書構造的にはとても似ています。article要素をどこで使えばいいか悩んだときは、「RSSとして配信されたときに単独の記事として成り立つかどうかを意識すると良い」と言われていますが、それも見る人や状況によって違ってきます。article要素とsection要素のどちらを使うかは、前後の文章構造によっても変わりますが、主観による部分が大きいのではないでしょうか。構造の解釈は一緒なのに意味の解釈は違うものになる、マークアップの奥深さが垣間見えます。</p>

<h2>MarkupCafeから見えたもの</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/mu6.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/mu6-300x200.jpg" alt="mu6" width="300" height="200" class="alignright size-medium wp-image-2641" srcset="/wp-content/uploads/2013/09/mu6-300x200.jpg 300w, /wp-content/uploads/2013/09/mu6-207x138.jpg 207w, /wp-content/uploads/2013/09/mu6.jpg 640w" sizes="(max-width: 300px) 100vw, 300px" /></a>
今回筆者が参加したMarkupCafeでは一つのマークアップについて、30分間考える時間がありました。自分自身でマークアップに向き合えたのもよい体験でしたが、同じデザインから自分と違うマークアップをした理由を直接聞ける機会はなかなかないと思います。解釈の仕方でマークアップが変わる、というのを実感できたイベントでした。</p>

<p>この記事で紹介したマークアップや要素の使い方も、すべて考え方の一つでしかありません。答えを決めることはできないかもしれませんが、良いマークアップを作っていくことはできるはずです。</p>

<p>最後に「MarkupCafe」主催の村岡正和氏の言葉を引用して、記事を締めくくりたいと思います。</p>

<p>
「HTMLのマークアップには決まった答えがありません。
どんなウェブページを作りたいか。アクセスした人になにを伝えたいか。どういう気持で伝えたいか。
それがページごとに違うから、それぞれのページにそれぞれのマークアップがあるのです」
</p>

<p><strong> ＜MarkupCafe Tokyo Vol.2 開催のお知らせ＞</strong>
10月19日（土）13:00～17:00に「MarkupCafe Tokyo Vol.2」を開催します。
プロのWebデザイナーから初心者まで、みんなで気軽に会話しながらイマドキのHTMLマークアップの知識を深めましょう！
詳細は<a href="http://atnd.org/events/43774" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">こちら</a>から。</p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>HTML5のSEO－マークアップで注意すべき３つのポイント</title>
		<link>/tsuj/2333/</link>
		<pubDate>Wed, 11 Sep 2013 03:00:25 +0000</pubDate>
		<dc:creator><![CDATA[辻 正浩]]></dc:creator>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=2333</guid>
		<description><![CDATA[HTML5を採用したWebサイト構築をする際に、SEOはどのようなポイントを考慮すべきなのか？　HTML5でのマークアップ、リッチ表現、SEO効果のあるh要素の使い方、HTML5で追加・削除・復活された要素などについて解...]]></description>
				<content:encoded><![CDATA[<p>HTML5を採用したWebサイト構築をする際に、SEOはどのようなポイントを考慮すべきなのか？　HTML5でのマークアップ、リッチ表現、SEO効果のあるh要素の使い方、HTML5で追加・削除・復活された要素などについて解説します。</p>

<!-- more -->

<h2>HTML5化によるSEO効果の影響はあるか</h2>

<p>WebサイトをHTML5でマークアップをする際、特にHTML4などからHTML5にリニューアルする場合に、それによって検索エンジンによる評価が変化するのかどうかは非常に気になる問題です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/09/dtl_thm_016.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/09/dtl_thm_016.png" alt="dtl_thm_016" width="207" height="156" class="alignright size-full wp-image-2368" /></a></p>

<p>各検索エンジンでは、この疑問について公式に説明しています。GoogleはHTML5化することでプラスにもマイナスにもならないと度々<a href="https://productforums.google.com/forum/#!searchin/webmasters/authorname:johnmu|sort:date/webmasters/ihmDyu5ykrs/Kq0VngOh71oJ" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式に言及</a>していますし、Bingは「<a href="http://www.bing.com/blogs/site_blogs/b/webmaster/archive/2013/08/23/list-of-things-you-really-ought-to-know-as-an-seo-today.aspx" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">List of things you really ought to know as an SEO today</a>(今SEOとして本当に知っておきたいこと)」と題した記事の中で、HTML5について言及しています。こうした情報を併せて考えると、主要な検索エンジンは、HTML5化は問題ない、もしくは推奨しているとさえ言っても良いでしょう。</p>

<p>しかし、本当にHTML5化することでSEO上の問題は起きないものでしょうか。
私はSEOの専門家として、HTML5のWebサイトに多く関わってきました。お客様のWebサイトでのHTML4からHTML5への変更も何度か経験しましたが、実際HTML5化で検索流入が伸びたことも減ったこともありません。しかし過去に数度、HTML5化を含むリニューアルの結果、大幅に検索流入を落としたWebサイトの話を聞いたことがあります。</p>

<p>「問題ない形のHTML5化」であれば、検索エンジンはその評価を変えることはないと私は考えています。しかし、SEOの知識を一切持たずにHTML5化すると、犯しがちなミスもあります。
本稿では、SEO上の問題を起こさずにHTML5化するために注意すべきポイントを説明しましょう。</p>

<h2>HTML5のマークアップをする際の注意点</h2>

<h3>FlashからHTML5へ。リッチな表現のSEO手法</h3>

<p>ほんの1～2年前までWebでリッチな表現をするには主にFlashが使われていましたが、FlashコンテンツのSEOには明確なベストプラクティスがありました。それは、FlashコンテンツはJavaScriptを使って呼び出すようにし、JavaScriptを扱えない環境向けにテキスト情報を追加するという方法です。noscript要素やSWFObject等を使った代替要素としてのテキスト情報を加えることや、それに加えてページ分割やSWFAddressを併用することで、Flashであっても非常に高いレベルの検索エンジン対応が行うことが可能でした(この詳細は4年前の拙筆ですが<a href="http://japan.internet.com/busnews/20090825/8.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">この記事</a>に詳細を記してあります)。</p>

<p>FlashコンテンツのSEOは、このように代替要素を使用する方法が一般的でした。その手法を検索エンジンも公式に推奨する場合もありましたし、検索エンジンのアルゴリズムとしても、Flashを認識するようになっていきました。その結果、Flashを活用したリッチなコンテンツを検索できる状態にする方法が確立したのです。しかしそのようなFlashの登場から、そのSEOのベストプラクティスが確立するまでには、長い期間を必要としました。</p>

<p>さて現在ではFlashを使う機会は減り、同じニーズに対してHTML5を使うシーンが多くなりました。HTML5では様々な描画を行うcanvas要素や、動画を再生するvideo要素、音声を再生するaudio要素などが追加されています。それらの新要素を中心としたWebページを制作する場合、どのように検索エンジンに認識させるべきか、という議論はほぼ行われていません。</p>

<p>この方法として、いくつかの方法が考えられます。例えばcanvas要素は、要素内にフォールバック・コンテンツとして、テキスト情報を組込むことができます。2013年9月1日現在、このテキスト情報はGoogle、Bingの検索エンジンでは認識しています。しかし一部の検索エンジンでは、canvas要素のフォールバック・コンテンツを認識しませんし、サイト内検索等で使われるシステムでは認識しないことがありました。対応されている検索エンジンにおいても、検索エンジンが公式にサポートしているものではありません。今後扱いがどのように変わっていくかも不透明でしょう。フォールバック・コンテンツだけに頼ることは不安があります。</p>

<p>Flashコンテンツが一般化することで、検索エンジンに認識させる様々な方法が試されて検索エンジンも対応を始めたように、今後HTML5が一般化した後にリッチコンテンツを検索エンジンに認識させるためのベストプラクティスが出てくるものでしょう。しかしそれが確立していない現状では、いろいろと試す必要があるのです。</p>

<p>さて、実際に現段階ではどのようにするべきでしょうか。まず考えられるのは別ページを作ることです。Flashが一般化する前は、Flashを中心としたページとは別に同じ内容をテキスト中心で知らせるWebページが作られていたように、テキスト中心の別ページを作ることが確実でしょう。ただそれが困難な場合には、何らかの方法でテキストでの代替要素を配置するしかありません。FlashはJavaScriptで呼び出すことが多かったため、代替要素が配置しやすかったのですが、JavaScriptを使わないHTML5の新要素では別の方法を考える必要があります。</p>

<p>代替要素を作るためには、CSSを利用した切り替えを用意しておくことが、現段階では一番お勧めできる方法です。ユーザへの適切な情報提供を目的としてテキストを切り替える形で配置することは問題がないと、Googleは<a href="http://www.youtube.com/watch?v=EsW8E4dOtRY" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">公式に説明しています</a>ので、Canvas等のリッチな表現を使いたくない人向けの情報も同ページで提供した上で、切り替えて使用できるようにするのが最も適切でしょう。</p>

<p>canvas要素の場合にはフォールバック・コンテンツとしてのテキスト情報追加も選択肢の一つです。先にも書きました通り、一部検索エンジンは対応していませんし、今後の扱いは不透明です。しかし日本で圧倒的なシェアを持つGoogleは現段階では対応していますし、今後についても、HTML5の公式仕様に基づいたマークアップを大きく不利にする可能性は低いものです。対応しなくてはならない検索エンジンがGoogleだけなのであれば、フォールバック・コンテンツは良い選択肢でしょう。</p>

<p>ここまで、リッチな表現のSEO手法について書いてきましたが、本来リッチな表現を検索させる上で、最も重要な事は技術的な要件ではありません。そもそもの話ですが、検索される必要がある情報をリッチコンテンツを中心として制作するのが誤りでしょう。そのWebページで伝える事を表現するのに適切な手法は何なのか、ということから考えてみることをお勧めします。</p>

<h3>SEO効果があるh要素の使い方</h3>

<p>HTML5とSEOを考える上で、よく言及されるのはhx要素をどうするかということです。</p>

<p>HTML5ではh1要素を複数設置できるようになりました。しかしh1要素の扱いはSEOの観点で極めて重要です。Googleが公式に配布しているSEO初級者向けの「<a href="https://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.co.jp/ja/jp/webmasters/docs/search-engine-optimization-starter-guide-ja.pdf" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">検索エンジン最適化スターターガイド</a>」でも「見出しタグを適切に使おう」として、1ページ丸々を費やしてユーザに説明をしています。実際、数年前のように、h1要素とするだけで順位アップといった単純な効果はありませんが、hx要素をうまく使って文書を整理することは、検索エンジンもその文書の構造を把握しやすくなり、様々な面でプラスとなります。</p>

<p>h要素のSEO要件が語られる際に必ず言われることとして、「h1要素はそのページのテーマを示す内容として、1ページに1つのみにする」があります。しかしHTML5では、h1要素を複数使用することは、仕様として推奨されています。では、HTML5の仕様どおりにh1要素を複数でマークアップすることは、SEOにとって不利になるものでしょうか？</p>

<p>これは不利になる場合もあるし、ならない場合もあるというのが私の考えです。実際にWebページによって、hx要素の番号がどうなっていても検索エンジンの評価に影響を与えないような場合もあれば、甚大な影響を与えるケースも確認しています。</p>

<p>有力な検索エンジンは。ページ内のどこが重要な情報かを識別しようとしています。サイドバーやフッターなどに記された情報は、あまり検索結果に表示されづらいですし、メインカラムの情報は表示されやすいということは、少し注意して検索エンジンを利用しているとわかることでしょう。これはサイドバーなどに共通の情報が記載されがちなことが原因である場合もありますが、例えそのページにしかない情報がサイドバーに記載されていても、検索結果には表示されづらいものです。</p>

<p>どこの部分が重要かという検索エンジンの判別は、一つの要因だけで行うものではありません。様々な要因を使って判定していると考えられますが、私はその要因の一つとしてhx要素の番号が使われていると考えています。hx要素の番号がその判別に重要な役割を果たしているようなWebページでは、hx要素を全てh1要素とすると流入の減少につながりますし、他の要因が重要なページでは大きな影響が出ないことでしょう。</p>

<p>そのため、必ずしも全サイトで必須とは言い切れませんが、SEOを考えるとやはりh1要素は1つで、h2要素以後もうまく使って文書構造を示しておくのが安全と考えられます。</p>

<p>先に述べたとおり、HTML5化したサイトではh1要素を複数使うことが一般的です。hx要素は全てh1要素にした上で、section要素の入れ子構造で文書構造を示すのはHTML5の仕様上正しいとされていますが、h1要素は1つとしてh2要素を中見出し、h3要素を小見出し……と使っていっても問題はないとされています。どちらでもよいのであれば、SEOには確実に問題がない後者の方法を使うべきでしょう。</p>

<p>とは言え、大規模サイトでページ内のパーツを様々なページで流用する場合に、hの番号の整合性が取りづらいため、全てh1要素にするWebサイトも多くあります。そのような場合もページのテーマとなる部分一箇所だけにh1要素を適用して、流用するパーツにはh1要素を使わずにh2要素から始めるようにしておくだけで大きなSEO上の問題は避けられるでしょう。流用する部分は全てh2要素から始めておくことは全ての使用ケースで問題がないわけではないかもしれません。しかし、全てh1要素にすることで発生するSEO上のリスクを考えると、どちらかというと問題は小さいと考えます。</p>

<p>HTML5の把握でレベルが高いGoogleの検索システムは、日本では圧倒的なシェアを持っています。しかし、100%ではありません。Google以外の検索エンジンでは、まだHTML5をうまく扱えないものがあります。その際に一番大きな問題となるのはこのhx要素です。実際、HTML5化した際にある検索エンジンでは、h1要素が複数あることで大きな問題となっている事象を確認しています。h1要素は検索エンジンスパムにもよく使われるため、非常に問題を起こしやすいものでもあるのです。</p>

<p>ご存知の通り、HTML5は普及したといえる段階ではありません。現状ではHTML5に対応していない環境のことを考える必要があります。そのためにもh1要素は1つにしておくべきでしょう。</p>

<h3>HTML5で追加・削除・復活した要素</h3>

<p>HTML5では、いくつかの要素が追加・削除・復活しました。</p>

<p>まず気になるのは、nav要素やfooter要素などの意味を持った要素でしょう。これらの要素は、現段階での私の観測の範囲では、検索エンジンからはこれまでのdiv要素と同じ扱いを受けているようです。しかし今後HTML5が普及した際には、様々な形で検索エンジンも活用し出すことが考えられます。</p>

<p>今後を考えれば、ページの情報を正しいHTML5でマークアップをしておくことが、唯一の対策となるでしょう。検索エンジンは正しいHTMLしか評価しないわけではありません。インターネット上で公開されているWebページのほとんどは、マークアップ上のミスを含んでいますので、主要検索エンジンはそのミスを織り込んでWebページを認識しようとしています。HTML5は、現段階では人によって使い方に大きなブレがあります。そのため必ずしも正しいHTML5しか評価できないように、アルゴリズムを組んでくるはずはないと考えられます。しかし今後どのような評価を行ってくるかはわかりませんし、全ての検索エンジンが、HTMLのミスを織り込めるほどの技術を持っているとは限りません。やはり最大限仕様上は、正しい形でのマークアップをお勧めします。</p>

<p>次に注意するべきポイントとして、これまでは推奨から外れていたものの復活した要素です。</p>

<p>特に注意するべきはiframe要素でしょう。XHTMLで非推奨とされていたiframe要素も、HTML5で復活したことで、使用するWebサイトも増えているようです。しかし、検索エンジンはiframe要素の扱いが得意ではありません。検索エンジンは、iframe要素を呼び出すURLへのa要素と同様に扱うのが通常ですが、iframe要素で呼び出すコンテンツをそのページのコンテンツとして認識している例もあります。</p>

<p>iframe要素に関わるアルゴリズムも進化を続けていますが、現段階では「iframe要素内のコンテンツは、ページ内のコンテンツとして認識されることもあれば、されないこともある」という非常に微妙な状態です。そのためiframe要素で呼び出されるコンテンツは「検索対象になるかもしれないしならないかもしれない」ものとして扱う必要があります。検索されるコンテンツを作る上では非常に使いづらいものですので、HTML5で復活したといっても、SEOを考える必要があるWebページでは使用しないことをお勧めします。</p>

<p>b要素やi要素など、スタイルを使いながら目立たせるために使われることが多いものの、セマンティクス上、重要という意味を持たない要素があります。それとは違い、strong要素については「他の部分に比べて重要」という意味を持ちます。SEOの知識としてstrong要素は「他に比べて重要」という意味であり多く使うと意味が薄れるため、限定的に使うべきとご存知の方もいるかもしれません。</p>

<p>ではHTML5で復活したb要素などは、無制限に使ってもいいのでしょうか。私はそれを勧めません。それは過去の期間において、b要素もstrong要素と同様に「他に比べて重要」という意味を検索エンジンが認識していたことがあります。現段階の認識が変わっているか確認できていませんが、継続している可能性もあります。その場合は、b要素・i要素が大量にあることで、strong要素も意味がなくなる可能性はあります。</p>

<p>HTML4では、b要素やi要素は使わずにCSSで表現するのがWeb制作の常識でした。HTML5でb要素が復活しましたが、使うことが義務づけられたわけではありません。これまで通りのspan要素とCSSを使ったマークアップをしておくことが無難と考えられます。</p>

<h2>SEOを考えるとHTML5を使うべきか？</h2>

<p>SEO観点でのHTML5でのマークアップにおいて注意するべきポイントを説明してきました。</p>

<p>現段階ではHTML5は普及しきっていませんので、検索エンジンの対応も中途半端です。その状況で何も考えずにサイトをHTML5化した場合、SEOに悪影響を及ぼす可能性はあります。</p>

<p>では、SEOのためにはHTML5は選択すべきではないのでしょうか。それは違います。今後の長期的なWebサイト運営を考えると、私はHTML5化を強くお勧めします。今後、HTML5を採用したWebサイトにはSEO観点でも何らかの利点が出る可能性が高いと考えます。ページの論理構造を作りやすいマークアップや、セマンテックウェブとの適合性は、今後のSEOで利点が出てくると考えられますし、様々な拡張性はより魅力的なコンテンツを作るのにも有益になります。それはSEOには極めて重要なポイントです。通常のWebサイトでは、HTML5を採用するかどうかという選択が行えるタイミングは、数年に一度しかないでしょう。選択できるタイミングでHTML5を選択しなければ、次に変更できるのは数年後かもしれません。その頃にはすでに、HTML5のSEO観点での利点は発生している可能性は否定できません。</p>

<p>冒頭でHTML5化を含むリニューアルで、大幅に検索流入を落としたWebサイトの実例があると述べました。それは詳細を調査すると、必ずしもHTML5が悪いわけではありませんでした。あるWebサイトでは、テキストでの代替コンテンツを含んだFlashコンテンツを全廃して代替コンテンツを含まないCanvasに置き換えたり、iframeを使い始めて検索流入を落としたということもありました。この問題についても、HTML5が悪いわけではありません。SEOの基礎知識がないことと、HTML5の正しい知識が少なかったことが問題です。その二つの知識があれば、HTML5はSEO観点で怖いものではありません。</p>

<p>まずは、今回ご紹介した3つのポイントに注意していれば、大きな問題になることはないでしょう。さらにHTML5を活用するために、SEOも少し配慮してWebサイト構築を進められることをお勧めします。</p>
]]></content:encoded>
			</item>
		<item>
		<title>Web ComponentsベースのUIライブラリ「Brick」をMozillaが公開</title>
		<link>/shumpei-shiraishi/1873/</link>
		<pubDate>Wed, 28 Aug 2013 03:36:13 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[W3C仕様]]></category>
		<category><![CDATA[Web Components]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=1873</guid>
		<description><![CDATA[Web開発のあり方を大きく変えると期待されている、Web Components仕様に準拠した新たなUIコンポーネントライブラリをMozillaが開発していることが明らかになりました（今回のネタ元になった記事はこちら）。 ...]]></description>
				<content:encoded><![CDATA[<p>Web開発のあり方を大きく変えると期待されている、Web Components仕様に準拠した新たなUIコンポーネントライブラリをMozillaが開発していることが明らかになりました（<a href="https://hacks.mozilla.org/2013/08/introducing-brick-minimal-markup-web-components-for-faster-app-development/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">今回のネタ元になった記事はこちら</a>）。
その名も<a href="http://mozilla.github.io/brick/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Brick</a>です。
<span id="more-1873"></span></p>

<p>Brickは、Brickは、<a href="http://www.x-tags.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">X-Tag</a>というフレームワークの上で構築されています。
X-Tagは、Web Components仕様に準拠したカスタムコンポーネントを容易に作ることができるようにするフレームワークです。
また、X-Tagは<a href="http://www.polymer-project.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Polymer</a>というライブラリが提供するPolyfillを使用しており、IE9を含むモダンブラウザ上でWeb Componentsを利用可能にします。</p>

<h2>そもそもWeb Componentsってなに？</h2>

<p>Web Components仕様は様々な機能を提供しますが、その最も大きなものは、「カスタム要素を作れる」というものです。
例えば、Web Componentsを使用すると、以下の様なタグを記述するだけでその場にカレンダーを貼り付けることができるようになるというわけです。</p>

<pre><code>:html:
&lt;x-calendar&gt;&lt;/x-calendar&gt;
</code></pre>

<p>これだけでも、Web制作/開発に大きな影響を及ぼすということを感じていただけるのではないでしょうか。
その他、コンポーネントの内部をカプセル化する仕組み（<a href="http://www.w3.org/TR/shadow-dom/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Shadow DOM</a>）や、外部のコンポーネントをlink要素で参照する仕組み（<a href="https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTMLインポート</a>）などもWeb Componentsは規定しており、HTMLそのものをUIコンポーネント基盤として再構築しようとする、大胆な試みだと言っても過言ではないでしょう。</p>

<h2>Brickを試す</h2>

<p>繰り返しになりますが、BrickはX-Tag上で構築されたUIコンポーネントライブラリです。
それらのコンポーネントは、お使いのブラウザ上（IE9含む）で簡単に試すことができます。</p>

<p>・・・と言いたいところなのですが、現在のBrickにはバグがあるようで、うまく動かないコンポーネントもいくつかありました。
とりあえず、現在Brickが提供している14のコンポーネントのうち、一部を以下に紹介します。
以下の解説は、<a href="http://mozilla.github.io/brick/docs.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Brickのドキュメント</a>上のサンプルを、Google Chrome 29上で動作させたものになります。</p>

<h4>アプリケーションバー</h4>

<p>スマホアプリの上部に表示されるナビゲーションバーを簡単に作ることができます。</p>

<pre><code>    :html:
&lt;x-appbar&gt;
    &lt;div&gt;=&lt;/div&gt;
    &lt;header&gt;Title&lt;/header&gt;
    &lt;div&gt;+&lt;/div&gt;
    &lt;div&gt;?&lt;/div&gt;
&lt;/x-appbar&gt;
</code></pre>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/appbar.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/appbar.png" alt="appbar" width="241" height="150" class="aligncenter size-full wp-image-1874" srcset="/wp-content/uploads/2013/08/appbar.png 241w, /wp-content/uploads/2013/08/appbar-207x128.png 207w" sizes="(max-width: 241px) 100vw, 241px" /></a></p>

<h4>カレンダー</h4>

<p>カレンダーを貼り付けることができます。うまく動作しなかったので、画像は<a href="https://hacks.mozilla.org/2013/08/introducing-brick-minimal-markup-web-components-for-faster-app-development/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらのページ</a>に貼り付けてあったものを拝借しました。</p>

<pre><code>    :html:
&lt;x-calendar&gt;&lt;/x-calendar&gt;
</code></pre>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/calendar.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/calendar.png" alt="calendar" width="251" height="235" class="aligncenter size-full wp-image-1875" srcset="/wp-content/uploads/2013/08/calendar.png 251w, /wp-content/uploads/2013/08/calendar-207x193.png 207w" sizes="(max-width: 251px) 100vw, 251px" /></a></p>

<h4>アイコンボタン</h4>

<p>アイコン付きのボタンを簡単に作ることができます。src属性に、アイコン画像のURLを指定します。しかし、現在のバージョンではアイコンがうまく描画されませんでした。</p>

<pre><code>    :html:
&lt;x-iconbutton src="firefox.png"&gt;
  アイコンボタンには＜code＞どんなマークアップでも＜/code＞書けます
&lt;/x-iconbutton&gt;
</code></pre>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/iconbutton.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/iconbutton.png" alt="iconbutton" width="242" height="48" class="aligncenter size-full wp-image-1876" srcset="/wp-content/uploads/2013/08/iconbutton.png 242w, /wp-content/uploads/2013/08/iconbutton-207x41.png 207w" sizes="(max-width: 242px) 100vw, 242px" /></a></p>

<h4>レイアウト</h4>

<p>ヘッダー・ボディ・フッターというレイアウトを簡単に構築できます。ボディ部分は、コンテンツの高さに応じて自動的にスクロール領域となります。</p>

<pre><code>:html:
&lt;x-layout&gt;
    &lt;header&gt;
        I'm the header!
    &lt;/header&gt;
    &lt;section&gt;
        I'm the main body! &lt;p&gt;(I will automatically overflow if necessary.)&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;&lt;p&gt;Filler text&lt;/p&gt;
    &lt;/section&gt;
    &lt;footer&gt;
        I'm the footer!
    &lt;/footer&gt;
&lt;/x-layout&gt;
</code></pre>

<p><a href="https://html5experts.jp/wp-content/uploads/2013/08/layout.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2013/08/layout-200x300.png" alt="layout" width="200" height="300" class="aligncenter size-medium wp-image-1877" srcset="/wp-content/uploads/2013/08/layout-200x300.png 200w, /wp-content/uploads/2013/08/layout-138x207.png 138w, /wp-content/uploads/2013/08/layout.png 242w" sizes="(max-width: 200px) 100vw, 200px" /></a></p>

<h2>カスタムコンポーネントを自作する</h2>

<p>こうしたコンポーネントを自作することもできます。
X-Tagフレームワークを用いると、コンポーネントを簡単に作ることができます。
例えば以下に、前述した<a href="https://github.com/x-tag/appbar/blob/master/src/appbar.js" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">アプリケーションバーのソースコード</a>に、日本語でコメントを付与したものを示します。コンポーネントを容易に自作できるという雰囲気を感じ取って頂ければと思います。</p>

<pre><code>:javascript:
(function(){
  // カスタムタグの定義
  xtag.register('x-appbar', {
    // タグのライフサイクルメソッド
    lifecycle: {
      // タグが生成された時に呼び出されるコールバック
      created: function(){
        // 入れ子になったheader要素を取得する
        var header = xtag.queryChildren(this, 'header')[0];
        if (!header){
          header = document.createElement('header');
          this.appendChild(header);
        }
        this.xtag.data.header = header;
        this.subheading = this.subheading;
      }
    },
    // 要素の属性にアクセスする手段を提供する
    accessors: {
      heading: {
        // 属性の設定
        attribute: {},
        // 属性に値をセット
        get: function(){
          return this.xtag.data.header.innerHTML;
        },
        // 属性に値をセット
        set: function(value){
          this.xtag.data.header.innerHTML = value;
        }
      },
      subheading: {
        attribute: {},
        get: function(){
          return this.getAttribute('subheading') || "";
        },
        set: function(value){
          this.xtag.data.header.setAttribute('subheading', value);
        }
      }
    }
  });
})();
</code></pre>

<h2>まとめ</h2>

<p>Brickはまだ正式公開前ということもあり、バグも多く、デザインも洗練されていないのは仕方のないところです。今後に期待といったところでしょうか。</p>

<p>しかし、Web Componentsに関するライブラリをMozillaが公開したというところに、筆者は大きな意義を感じます。
Google主導で進められていると思われていたWeb Componentsに、Mozillaも強くコミットしていくということの現れとも言えるからです（実際Firefoxは、カスタム要素を作るための<code>document.register</code> APIを実装しています）。</p>

<p><a href="https://html5experts.jp/agektmr/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エキスパートNo32のえーじさん</a>に昔教えていただいた情報によれば、Web Components仕様にはMicrosoftも強く関心を示しているとのこと。
そうなると、Microsoft, Mozilla, GoogleがWeb Componentsに前向きということになりますし、ChromiumをベースとしているOperaはもちろん、以前はGoogleが大きくコミットしていたWebKitにもWeb Componentsの一部は実装されているはずですので、SafariでもそのうちWeb Componentsを使えるようになる可能性があります。</p>

<p>Web Componentsによるマークアップ作業の大変革が起こるのは、意外とそう遠くない未来なのかもしれませんね。</p>
]]></content:encoded>
			</item>
		<item>
		<title>RDFa関連の3仕様が勧告に！その時Microdataは……？</title>
		<link>/shumpei-shiraishi/1710/</link>
		<pubDate>Fri, 23 Aug 2013 00:28:01 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Microdata]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[W3C仕様]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=1710</guid>
		<description><![CDATA[W3Cは本日2013/08/23、RDFaに関連する3つの仕様を勧告しました。勧告といえば、W3Cにおける仕様成熟度の最終段階。仕様はこれにて一旦完成です。 HTML+RDFa 1.1 RDFa 1.1 Core – S...]]></description>
				<content:encoded><![CDATA[<p>W3Cは本日2013/08/23、RDFaに関連する3つの仕様を勧告しました。勧告といえば、W3Cにおける仕様成熟度の最終段階。仕様はこれにて一旦完成です。</p>

<ul>
    <li><a href="http://www.w3.org/TR/2013/REC-html-rdfa-20130822/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML+RDFa 1.1</a>

</li>
    <li><a href="http://www.w3.org/TR/2013/REC-rdfa-core-20130822/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">RDFa 1.1 Core – Second Edition</a>

</li>
    <li><a href="http://www.w3.org/TR/2013/REC-xhtml-rdfa-20130822/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">XHTML+RDFa 1.1 – Second Edition</a>

</li>
</ul>

<p>RDFaとは、コンテンツのメタデータを記述するためのフォーマットであるRDF (Resource Definition Framework) を、要素の属性（attribute）で指定できるようにした仕様です。<a href="http://www.w3.org/TR/microdata/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML Microdata</a>と競合する仕様ですが、Microdataと異なり、RDFaは（もともとXML由来の技術であった）RDFの流れを組むため、XHTMLをはじめとするXML文書全般でも利用が可能であるなどの違いがあります（その代わりMicrodataのような、JavaScriptによるDOM APIは持ちません）。</p>

<p>例えば、RDFaを使用したマークアップは以下のようになります。</p>

<pre><code>:html:
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Example Document&lt;/title&gt;
  &lt;/head&gt;
  &lt;body vocab="http://schema.org/"&gt;
    &lt;p typeof="Blog"&gt;
      Welcome to my &lt;a property="url" href="http://example.org/"&gt;blog&lt;/a&gt;.
    &lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>同じメタデータを、Microdataを使用してマークアップすると以下のようになります。マークアップの手間はあまり変わらないように思います。</p>

<pre><code>:html:
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Example Document&lt;/title&gt;
  &lt;/head&gt;
  &lt;body itemscope itemtype="http://schema.org/Blog"&gt;
    &lt;p&gt;
      Welcome to my &lt;a itemprop="url" href="http://example.org/"&gt;blog&lt;/a&gt;.
    &lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>ちなみに、RDFaのもろもろが勧告に至ったのに比べ、Microdataは未だにワーキングドラフト。仕様の成熟度で言うと、少しMicrodataに分が悪いか、というところ。</p>

<p>その他のサービスによる対応状況ですが、<a href="https://support.google.com/webmasters/answer/146898?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google</a>も<a href="http://www.bing.com/webmaster/help/marking-up-your-site-with-structured-data-3a93e731" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Bing</a>も、MicrodataとRDFaの双方をサポートしています。また、<a href="http://hyper-text.org/archives/2013/04/google_ogp_or_microdata.shtml" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">OGPよりもMicrodataを優先することで知られているGoogle+</a>が、RDFaに対応しているかどうかは、ちょっと調べきれませんでした。</p>

<p>少なくとも、Microdataもここまで普及している以上、RDFa勢に押されてすぐに駆逐されるということはあり得ません。
当面、安心して使えるテクノロジーと言ってよいのではないでしょうか。</p>

<h3>追記（2013/9/2）</h3>

<p>[エキスパートNo.18 矢倉 眞隆さん]から、この件に関して有用な追加情報をいただきましたので、以下に追記します。</p>

<p>Microdataについては、W3C HTML WGにより、<a href="http://lists.w3.org/Archives/Public/public-html-admin/2013Jul/0041.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">7月23日に以下のような決定が下されています</a>。</p>

<ul>
<li>HTML5.0の勧告候補から、Microdataへの参照を全て削除する</li>
<li>MicrodataのJavaScript APIを仕様から削除する</li>
<li>HTML Microdataという拡張仕様として公開し直す</li>
</ul>

<p>JavaScript APIが削除されるに至った主な理由は、実装の欠如です。具体的には、FirefoxとOpera (Presto)が一度は実装したものの、OperaがChromiumに移行したため実装例が減ってしまい、勧告の条件（二つ以上の相互運用可能な実装が存在すること）を満たせるか怪しくなったというもの。
<a href="https://chromium.googlesource.com/chromium/blink/+/88e7fb9f921306929788b79bdbfca85d727f589b" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Blinkからはすでに実装が削除</a>されており、<a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=23080" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firefoxでも削除を検討中</a>、WebKitからもMicrodataのAPIに関連するコードは<a href="http://trac.webkit.org/changeset/153772" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">削除された</a>そうで、MicrodataのJavaScript APIは実質上「終わった」と言っても良いかもしれません（ただし、<a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=23082" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WHATWG仕様</a>においては、「代替案がない」という理由で仕様が残されることが決定しています）。</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
