<?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="/nakajmg/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>Googleのベストプラクティスに沿ったモダンな製作の出発点「Web Starter Kit」</title>
		<link>/nakajmg/8931/</link>
		<pubDate>Thu, 07 Aug 2014 00:00:20 +0000</pubDate>
		<dc:creator><![CDATA[中島 直博]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Web Starter Kit]]></category>

		<guid isPermaLink="false">/?p=8931</guid>
		<description><![CDATA[Web Starter Kitが提供するもの Web Starter Kitは、Googleが提供するマルチデバイスでのWeb開発をサポートするボイラープレート(HTMLのひな形)と、開発を補助するツール群です。 特に注...]]></description>
				<content:encoded><![CDATA[<h2>Web Starter Kitが提供するもの</h2>

<p><a href="https://developers.google.com/web/starter-kit/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Starter Kit</a>は、Googleが提供するマルチデバイスでのWeb開発をサポートするボイラープレート(HTMLのひな形)と、開発を補助するツール群です。<br>
特に注目したいのが開発を補助するツール群で、このツールを使えば今どきのWeb開発のワークフローをすぐに取り入れることができます。</p>

<p><img src="/wp-content/uploads/2014/08/wsk_0.png" alt="wsk_0" width="1000" height="349" class="aligncenter size-full wp-image-9467" srcset="/wp-content/uploads/2014/08/wsk_0.png 640w, /wp-content/uploads/2014/08/wsk_0-300x104.png 300w, /wp-content/uploads/2014/08/wsk_0-207x72.png 207w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>

<p>Web Starter Kitを開発の出発点とすることで、<a href="https://developers.google.com/web/fundamentals/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Fundamentals</a>にあるWeb開発のベストプラクティスを取り入れられるながらスムーズ制作に入れるとともに、より効率的な開発を可能にします。</p>

<p>本記事では導入方法と機能の説明を中心に、Web Starter Kitの紹介をしていきます。</p>

<h2>Web Starter Kitの導入</h2>

<h3>入手方法</h3>

<p>Web Starter Kitの入手には2つの方法があります。一つは<a href="https://github.com/google/web-starter-kit" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Starter Kitのリポジトリ</a>からクローンする方法、もう一つは、<a href="https://developers.google.com/web/starter-kit/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Starter Kitのサイト</a>からダウンロードする方法があります。</p>

<p>Web Starter Kitは現在Beta版で、アップデートが頻繁に行われています。リリースサイクルが早いため、Webページからのダウンロードの場合最新のバージョンではない可能性もあるのでリポジトリからのクローンをオススメします。</p>

<p>※ 執筆時点でのバージョンは <code>0.4.0</code> です。アップデートの変更点を把握するためにも<a href="https://github.com/google/web-starter-kit/releases" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Starter KitのReleases</a>を定期的にチェックするといいでしょう。</p>

<h3>フォルダとファイルの構成</h3>

<p>フォルダ構成は以下のようになっています。</p>

<p></p><pre class="crayon-plain-tag">/
└── app
    ├── fonts
    ├── images
    ├── scripts
    ├── styleguide
    └── styles</pre><p></p>

<p>Web Starter Kitのドキュメントルートとなるフォルダには、各種の設定ファイルが含まれています。開発する際の中心となるのは <code>app</code> フォルダ以下で、デフォルトでHTMLのひな形やWebフォントなど、いくつかのリソースが含まれています。</p>

<p>各フォルダの役目は以下のようになっています。</p>

<table>
<thead>
<tr>
  <th></th>
  <th></th>
</tr>
</thead>
<tbody>
<tr>
  <td>/</td>
  <td>ドキュメントルート。 <code>gulpfile.js</code> や <code>package.json</code> 、エディタの挙動を設定する <code>.editorconfig</code> や Gitで使う <code>.gitignore</code> などの設定ファイルが入っている。</td>
</tr>
<tr>
  <td>app</td>
  <td>リソースを入れるフォルダ。開発はこのフォルダ内で行う。</td>
</tr>
<tr>
  <td>fonts</td>
  <td>Webフォントを入れるフォルダ。<a href="http://developer.android.com/design/style/typography.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Robotoフォント</a>が含まれている。</td>
</tr>
<tr>
  <td>images</td>
  <td>画像を入れるフォルダ。アイコンフォントも含まれている。</td>
</tr>
<tr>
  <td>scripts</td>
  <td>JavaScriptファイルを入れるフォルダ。ドロワーメニュー用のJavaScrpitファイルが含まれている。</td>
</tr>
<tr>
  <td>styleguide</td>
  <td>スタイルガイド用のHTMLファイルが含まれている。</td>
</tr>
<tr>
  <td>styles</td>
  <td>CSSファイルを入れるフォルダ。UI Component用のCSSファイルなどが含まれている</td>
</tr>
</tbody>
</table>

<p>Web Starter Kitで用意されている各種の設定ファイルなどは、そのまま使うのではなく、各自が自分のスタイルに合わせてカスタマイズするとよいでしょう。ファビコンやスマートフォンでサイトをホーム画面に追加した際に表示されるアイコンなど、各自で差し替える必要があります。
<code>humans.txt</code>や<code>robots.txt</code>なども使用する場合には適宜編集する必要があります。</p>

<h2>動作環境の構築</h2>

<p>Web Starter Kitに用意されたツールを使用するためには、以下の言語の環境が必要となります。</p>

<ul>
<li><a href="http://nodejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Node.js</a> (v0.10.x以上)</li>
<li><a href="https://www.ruby-lang.org/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ruby</a> (1.8.7以上)</li>
</ul>

<p>これに加えて、以下のツールのインストールが必要になります。</p>

<ul>
<li>Nore.js上で動くタスクランナーの<a href="http://gulpjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">gulp</a> (3.5.x以上)</li>
<li><a href="http://sass-lang.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Sass</a>のコンパイルを行う<a href="https://rubygems.org/gems/sass" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Rubyのgem</a> (3.3.x以上)</li>
</ul>

<p>それぞれのインストール方法について、簡単に紹介していきます。</p>

<p>※ これらを既にインストール済みの場合は、このセクションは飛ばしてください。</p>

<h3>Node.jsのインストール</h3>

<p>Node.jsのバージョンは <code>v0.10.x</code> 以上が必要になります。すでにインストールしている場合は、<code>$ node -v</code>で現在のバージョンを確認してください。Node.jsのインストールは<a href="http://nodejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">http://nodejs.org/</a>にあるインストーラーを使うのが簡単です。</p>

<p>※ 「Node.jsのバージョンを管理したい」という場合には、<a href="https://github.com/hokaccha/nodebrew" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">nodebrew</a>がオススメです。</p>

<h3>Rubyのインストール</h3>

<p>Macを利用している場合は、デフォルトでRubyがインストールされているので、そのまま利用することができます。（ただしその場合でも動作には <code>1.8.7</code> 以上のバージョンが必要となりますので <code>$ ruby -v</code> で現在のバージョンを確認してください）</p>

<p>Windowsの場合には<a href="https://www.ruby-lang.org/ja/downloads/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Rubyの公式サイト</a>か<a href="http://www.rubyinstaller.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ruby Installer</a>などからインストーラーを入手してインストールしてください。</p>

<h3>Sassのインストール</h3>

<p>Rubyのインストール後にSassのコンパイラをインストールします。インストールはRubyのパッケージマネージャのRubyGemsから行います。
コマンドラインツールから以下のコマンドを実行します。</p>

<p><code>$ gem install sass</code></p>

<p>※ もし権限に関するエラーが出た場合は、<code>sudo</code>をつけて実行してください。</p>

<p>インストール後、下記コマンドを実行してバージョン番号が表示されることを確認します。</p>

<p><code>$ sass -v</code></p>

<h3>gulpのインストール</h3>

<p>gulpは、Node.jsのパッケージマネージャであるnpmでインストールします。
インストールには、下記のコマンドを実行します。</p>

<p><code>$ npm install -g gulp</code></p>

<p>※ もし権限に関するエラーが出た場合は、<code>sudo</code>をつけて実行してください。</p>

<h3>モジュールのインストール</h3>

<p>最後に、タスクの実行に必要なモジュールをインストールします。Web Starter Kitをクローン(展開)したフォルダに移動して、下記のコマンドを実行します。</p>

<p><code>$ npm install</code>
※ もし権限に関するエラーが出た場合は、<code>sudo</code>をつけて実行してください。</p>

<p>このコマンドを実行することで、動作に必要なモジュールがインストールされます。インストールされるモジュールは、同じフォルダにある <code>package.json</code>に書かれています。</p>

<p>以上で環境構築はおしまいです。</p>

<h2>制作・開発</h2>

<p>環境が揃えば制作に入れます。制作はひな形とするHTMLを選択することから始めます。</p>

<h3>ひな形とするHTMLの選択</h3>

<p>Web Starter Kitで用意されているひな形のHTMLは、<code>index.html</code>と<code>basic.html</code>の2つがあります。</p>

<p>2つのHTMLの主な違いは以下の点です。</p>

<ul>
<li>マルチデバイス向けメニューの有無</li>
<li>Web Starter Kitが用意しているCSSとJSファイルの読み込み</li>
</ul>

<p><code>index.html</code>には、マルチデバイス向けのドロワーメニュー用のリソース読み込みが指定されていて、初めからメニューのHTMLが書かれています。メニューをそのまま使う場合に、<code>index.html</code>を。プレーンな状態のHTMLから始めたい場合には、<code>basic.html</code>を使って制作を進めましょう。</p>

<h3>UI Component</h3>

<p>Web Starter Kitにはマルチデバイス向けのメニューのほかに、いくつかのUI Componentが用意されています。ボタンやアイコン、テーブルといったComponentのほかにGridシステムもあります。いずれのComponentもマルチデバイス向けに書かれており、レスポンシブ対応されています。Componentの一覧は、<code>app/styleguide/index.html</code>で確認することができます。</p>

<p><img src="/wp-content/uploads/2014/07/wsk_04.png" alt="wsk_04" width="1000" height="528" class="aligncenter size-full wp-image-9324" srcset="/wp-content/uploads/2014/07/wsk_04.png 640w, /wp-content/uploads/2014/07/wsk_04-300x158.png 300w, /wp-content/uploads/2014/07/wsk_04-207x108.png 207w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>

<p>このComponent群は、<a href="https://developers.google.com/web/fundamentals/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web Fundamentals</a>で使用されているComponentをまとめたもので、Googleのベストプラクティスが詰め込まれています。</p>

<p>UI Componentが用意されているWeb Starter Kitですが、GoogleはこれらのComponentを使うことを必ずしも推奨しているわけではありません。Web Starter Kitをベースに独自のスタイルを開発し、自分のStarter Kitを作っていきましょう。</p>

<h2>gulpによる作業の自動化</h2>

<p>Web Starter Kitには開発を補助するツールとして、<a href="http://gulpjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">gulp</a>(Node.js製のタスクランナー)を採用しています。gulpを使えば様々な作業をタスク化し、自動化することができます。</p>

<p>用意されているタスクは以下の様なものです。</p>

<ul>
<li>ローカルサーバ</li>
<li>マルチデバイスでのオートリロード</li>
<li>Sassのコンパイル</li>
<li>ベンダープレフィックスの付与</li>
<li>HTML、CSS、JavaScriptの最適化とminify</li>
<li>画像の最適化</li>
<li>PageSpeed Insightsによるパフォーマンス測定</li>
</ul>

<p>これらのタスクを活用することでより効率的に開発を進めることができるでしょう。</p>

<h3>タスクの実行</h3>

<p>gulpのタスクを実行してみましょう。</p>

<p>gulpのタスクは、<code>gulpfile.js</code>に書かれています。デフォルトで10数個のタスクが記述されていますが、主に使うのは4つです。それぞれを実行して試してみましょう。</p>

<h3>ローカルサーバとファイルの監視</h3>

<p>ローカルサーバを立ち上げ、各種ファイルの変更を監視してそれぞれのタスクを実行してくれます。 
開発中はこのコマンドを実行しておくことになります。</p>

<p><code>$ gulp serve</code></p>

<p>コマンドを実行するとブラウザが立ち上がり、<code>app</code> フォルダをドキュメンルートとして、<code>index.html</code>が開かれます。</p>

<p><img src="/wp-content/uploads/2014/07/wsk_01.png" alt="wsk_01" width="1000" height="593" class="aligncenter size-full wp-image-8941" srcset="/wp-content/uploads/2014/07/wsk_01.png 640w, /wp-content/uploads/2014/07/wsk_01-300x177.png 300w, /wp-content/uploads/2014/07/wsk_01-207x122.png 207w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>

<p>ローカルファイルに変更があった場合、<a href="http://www.browsersync.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BrowserSync</a>によって、変更がブラウザに反映されます。試しにトップページ(app/index.html)を編集して保存してみると、自動的にブラウザがリロードされ、最新の内容が反映されるのが確認できます。</p>

<p><img src="/wp-content/uploads/2014/07/wsk_02.png" alt="wsk_02" width="1000" height="593" class="aligncenter size-full wp-image-8942" srcset="/wp-content/uploads/2014/07/wsk_02.png 640w, /wp-content/uploads/2014/07/wsk_02-300x177.png 300w, /wp-content/uploads/2014/07/wsk_02-207x122.png 207w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>

<h3>ビルドして成果物を生成する</h3>

<p>Sassのコンパイルや各種ファイルのminify、画像の最適化などを行うコマンドです。生成したファイルは<code>dist</code>フォルダに格納されます。</p>

<p><code>$ gulp</code></p>

<p>このコマンドは以下のようなタスクを含んでいます。</p>

<ul>
<li>CSSファイルの生成

<ul>
<li>Sassのコンパイル</li>
<li>ベンダープレフィックスの付与</li>
<li>未使用セレクタの削除</li>
<li>結合と縮小</li>
</ul></li>
<li>JSファイルの生成

<ul>
<li>結合と難読化と縮小</li>
</ul></li>
<li>HTMLの縮小</li>
<li>画像の最適化</li>
</ul>

<h3>ビルドしたファイルをローカルサーバで確認する</h3>

<p><code>serve</code>タスクで、開発中のファイル(appフォルダ以下)をローカルサーバで確認しましたが、ビルドした結果を確認する場合には、以下のコマンドを使います。</p>

<p><code>$ gulp serve:dist</code></p>

<p>ビルドが行われた後に<code>dist</code>フォルダをドキュメントルートとしたローカルサーバが立ち上がります。</p>

<h3>ページのパフォーマンスを確認する</h3>

<p>Googleが提供するパフォーマンス診断ツールの<a href="https://developers.google.com/speed/pagespeed/insights/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PageSpeed Insights</a>で、Webページのパフォーマンスを測ることができます。</p>

<p><code>$ gulp pagespeed</code></p>

<p><img src="/wp-content/uploads/2014/07/wsk_03.png" alt="wsk_03" width="1000" height="723" class="aligncenter size-full wp-image-8943" srcset="/wp-content/uploads/2014/07/wsk_03.png 640w, /wp-content/uploads/2014/07/wsk_03-300x216.png 300w, /wp-content/uploads/2014/07/wsk_03-207x149.png 207w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>

<p>このタスクではコマンドラインからPageSpeed Insightsの結果を取得できる<a href="https://www.npmjs.org/package/psi" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">psi(PageSpped Insights for Node)</a>が使われています。</p>

<p>注意したい点として、PageSpeed Insightsはパブリックなサイトしか測定できません。ページのパフォーマンス測定を行いたい場合には、ビルドした成果物をサーバにアップロードして公開状態にしておく必要があります。</p>

<p>測定するURLは<code>gulpfie.js</code>にて設定することができます。</p>

<h3>gulpタスク一覧</h3>

<p>このほかにも、いくつかのタスクが用意されています。タスク一覧は以下の通りです。カスタマイズして使う場合には、これら既存のタスクを参考にすると良いでしょう。</p>

<table>
<thead>
<tr>
  <th>タスク名</th>
  <th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
  <td>jshint</td>
  <td><a href="http://www.jshint.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JSHint</a>を使ってapp/scripts以下のJavaScriptファイルに対して構文チェックを行います。.jshintrcでJSHintの設定を行うことができます</td>
</tr>
<tr>
  <td>images</td>
  <td>imageminによる画像の最適化を行います。Gif/JPEG/PNG/SVGに対応しています。</td>
</tr>
<tr>
  <td>copy</td>
  <td>appフォルダ配下のファイルをdistフォルダにコピーします。appフォルダ直下のHTMLファイルは除外されます</td>
</tr>
<tr>
  <td>fonts</td>
  <td>app/fontsフォルダのファイルをdist/fontsにコピーします</td>
</tr>
<tr>
  <td>styles:css</td>
  <td>app/stylesフォルダ以下のCSSファイルに対して、<a href="https://github.com/ai/autoprefixer" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Autoprefixer</a>によるベンダープレフィックスの付与を行います。対象とするブラウザはgulpfile.jsのAUTOPREFIXER_BROWSERSで設定します。</td>
</tr>
<tr>
  <td>styles:components</td>
  <td>UI ComponentのSassファイルをコンパイルし、app/styles/componentsに出力します。</td>
</tr>
<tr>
  <td>styles:scss</td>
  <td>app/styles配下のSassファイルをコンパイルし、Autoprefixerによるベンダープレフィックスの付与を行います。</td>
</tr>
<tr>
  <td>styles</td>
  <td>上記3つのstylesタスクをまとめて実行します。</td>
</tr>
<tr>
  <td>html</td>
  <td>appフォルダ配下のHTMLファイルをMinifyし、HTMLファイル内で読み込まれているJavaScriptファイルをuglifyによって結合してMinifyします。また、HTMLファイルで読み込まれているCSSファイルから、HTML内で使われていないスタイルの記述をuncssによって削除します。一連の処理が終了した後distフォルダに出力します。</td>
</tr>
<tr>
  <td>clean</td>
  <td>distフォルダと、一時ファイルを格納している.tmpフォルダを削除します。</td>
</tr>
<tr>
  <td>serve</td>
  <td>appフォルダをベースにローカルサーバを立て、各種ファイルの変更を監視します。監視しているファイルに変更があった場合、それぞれに設定されたタスクを実行し、borwserSyncによって自動リロードされます。</td>
</tr>
<tr>
  <td>serve:dist</td>
  <td>下記defaultタスクを実行した後、distフォルダをベースにローカルサーバを立てます。最終的な成果物の確認に使用します。</td>
</tr>
<tr>
  <td>default</td>
  <td>cleanとstylesのタスクを順に実行した後、jshint, html, images, fonts, copyのタスクを並列で実行します。</td>
</tr>
<tr>
  <td>pagespeed</td>
  <td><a href="https://developers.google.com/speed/pagespeed/insights/?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PageSpeed Insights</a>でページのパフォーマンスを測定します。</td>
</tr>
</tbody>
</table>

<p>それぞれのタスクは、<code>$ gulp タスク名</code> という形式のコマンドで個別に実行することができます。</p>

<h2>おわりに</h2>

<p>今回は、Web Starter Kitの概要、機能などについて紹介しました。Web Starter Kitをうまく自身のワークフローに取り入れ、開発の出発点にすれば、開発を始める際の準備が軽減されるかもしれません。</p>

<p>ただし、プリプロセッサやAltJSなど、開発に使用するものは人によって様々です。そういった場合にはWeb Starter Kitをそのまま使うのではなく、カスタマイズしたり、一部だけを参考にしたりするだけでもよいでしょう。</p>

<p>Web Starter Kitはまだ始まったばかりのプロジェクトなので、多くの人にフィットするようになるにはまだ時間がかかるかもしれません。ですが頻繁に更新はされていて、今後は<a href="https://github.com/google/web-starter-kit/tree/material-layout" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Material Designなどが取り込まれていく動き</a>もありますので、要注目のプロジェクトです。</p>
]]></content:encoded>
			</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>
	</channel>
</rss>
