2009/08/23(日)元W3C原理主義者がはてな記法を擁護するよ

2009/08/23 9:34

もう遅すぎるような気がしますが、私の名前が挙がったので反応してみます。

QMA プレイヤーにはてなダイアラーが多いのは、単に最初有力プレイヤーの何人かがたまたまはてなだったからだと思う。もっと言えば、みりすさんとちぃといつさんがはてなだったから。

不定期更新競馬日記(第5版):2009-08-07

そういう面は確かにあったと思います。みりすさんのブログは人気サイトですし、私のブログも、自分で言うのもアレですが、QMA2時代はけっこう人気のあるブログだったと思います *1 。今では膝痛ブログなんだかシスプリブログなんだかライオンズの中継ぎ崩壊を楽しむブログなんだかよく分からない状態になっていますが、昔は自由になる時間も多く、わりと力を入れた文章を書く余裕もあったんですよね。ですから、私に影響を受けてブログを始めた方もいらっしゃるかもしれませんし、そうであれば非常に光栄なことです。

今では昔ほどの時間をブログに割くのは難しい状況ではありますが、ときどきは力を入れた文章を書いてみたいと思います。

ところで、引用元のエントリのコメント欄ではてな記法が叩かれていたので、元W3C原理主義者的に擁護してみようと思います。なぜなら、私ははてな記法が大好きだからです。はいはい、信者乙。

たかしおのさんのスタンスは去年のエントリに書かれているので、こちらを引用させてもらいます。

はてなの仕様で「改行を入れると段落区切りになる」つーのがあるんだが、多分これは相当よくないと思う。普通ブログ書くのに入力ルールをきちんと確認する人はあんまり居ないし、改行を入れた時にタイプライタ的な意味での「改行」以外のものを期待する人もやはり居ないだろう。加えて、デフォルトだと段落間の行間が比較的中途半端だから、普通に文章を書いて普通に改行しているだけでひどく見た目が悪くなってしまう。

不定期更新競馬日記(第5版):2008-02-08

まず、はてなダイアラー以外の方に簡単に説明しますと、はてな記法では改行までが1段落となります。例えば、ブラウザ上でこんな文章を書いて投稿したとします。

3年前、ウェアハウス南流山は赤の聖地と崇められていました。
今ではその面影はまったくなく、青の梁山泊と呼ばれています。

これが実際のHTMLでは以下のように出力されます。

<p>3年前、ウェアハウス南流山は赤の聖地と崇められていました。</p>
<p>今ではその面影はまったくなく、青の梁山泊と呼ばれています。</p>

もし利用者が単なる改行を意図して改行文字を入力していたとしたら、これは意図どおりのHTMLではありませんし、見た目も期待したものとは異なっているでしょう *2 。おそらくは以下のようなHTMLを出力して欲しいはずです。

<p>
3年前、ウェアハウス南流山は赤の聖地と崇められていました。<br>
今ではその面影はまったくなく、青の梁山泊と呼ばれています。
</p>

さて、それでは今挙げた二つの例のうち、どちらがより望ましい動作なのでしょうか。その答えを出すためには、改行とは何か、段落とは何か、ということから考えなければなりません。

この件については、一昔前のStrict大好きっ子な方々の日記でも議論はありましたし、2chのStricterスレでも何度も何度も繰り返し出てくる話題で、すでにある程度のコンセンサスは取れているような雰囲気です。ただ、このブログ読者にその界隈の方は少なそうなので、改めてここでまとめてみます。

ちなみに私の立場を明確にしておくと、昔は恥ずかしいくらいのW3C原理主義者でしたが、社会の荒波に揉まれた今ではすっかり丸くなり、「どっちかと言うと正しいほうがよくね?」程度の日和見野郎に成り下がっています。ただ、今でもQMA6のカードネームとしてシアンフロこ@ルキア、パグリアルよ@ヤンヤンとともに、W3Cこ@クララが候補になった程度にはW3C信者です。いや、それW3Cと直接関係ないじゃん。

閑話休題。

まず、単純に1行の文字数が長くなった場所で改行を入れるケースを考えて見ましょう。

<p>
長くなったから<br>
ここで切るよ!
</p>

この書き方は論外だと思います。昔はネットに繋ぐデバイスというとパソコンくらいのものでしたが、今では携帯電話があります。ネットブックがあります。あなたがお使いのマシンよりも1行の表示文字数が少ない、あるいは多い環境はいくらでもあるのです。あなたは親切のつもりで改行を入れたのかもしれませんが、そのせいでより一層読みづらくなることもあるのです。

私は最近のんびりネットを見る時間もなく、接続環境がiPhone中心になりつつあるので、この点を痛感するようになりました。どうしてもこのような途中改行をやりたいのであれば、ユーザーのブラウザや解像度に応じたHTMLを動的出力するべきでしょう。

さて、br要素のほかの使い方を考える前に、p要素について少し考えてみましょう。

p要素の「p」とは「paragraph」の頭文字です。つまり、p要素の中身はparagraphであるべき、ということです。paragraphは日本語に訳すと「段落」になりますので、それぞれの段落をpタグでマークアップすれば良いことになります。

しかし、ここで一つ問題が生じます。日本語には「形式段落」「意味段落」の二つの段落が存在するのです。そして、どちらの段落をp要素として扱うかによって、HTMLの書き方の違いを生み出してしまいます。

そして、どちらが正しいのか、こればかりはHTMLの仕様書をどれだけ読んでも分かりません。HTMLの仕様書の原文は英語であり、英語に形式段落、意味段落という区分は存在しないからです。困りました。

……と、これで終わってもアレなので、少し考えてみましょう。

まず、p要素が意味段落を表すとすると、形式段落を表す際にはbr要素で段落間に改行を挟むことになります。

<p>
形式段落1<br>
形式段落2<br>
形式段落3
</p>

改行を「段落の切れ目」として表現するわけですね。

一方、p要素が形式段落を表すとすると、単に形式段落をpタグでマークアップすれば良いことになります。

<p>形式段落1</p>
<p>形式段落2</p>
<p>形式段落3</p>

どうしても意味段落でまとめたければ、次のようにdiv要素で意味段落をまとめてやればいいでしょう。

<div class="section">
  <p>形式段落1</p>
  <p>形式段落2</p>
  <p>形式段落3</p>
</div>

この立場の場合、br要素に対するスタンスは明確になります。要するに「br要素はよほどのことがない限り必要ない」という立場になるわけです。よほどのこと、とは詩、俳句、短歌など、段落以外の場所で改行がある場合です。

さて、p要素を形式段落を表すという立場と、意味段落を表すという立場。このどちらがより正しいのでしょうか。先にも述べたように、この件については「仕様書にない以上答えはない」なのですが、私個人としては「p要素は形式段落を表す」という解釈法を支持します。

なぜなら、p要素が意味段落を表すとした場合、br要素で改行は表現できても、その前後が段落であるという表現がHTML的にできていないからです。

「意味段落」に対して「形式段落」と言っているので混乱を招いている面もありますが、形式段落であってもそこに全く意味のつながりがないわけではありません。意味段落ほどではありませんが、文章同士に何らかのゆるい繋がりを作者が認めたからこそ、複数の文が一つの形式段落にまとめられたはずです。

<p>
形式段落1<br>
形式段落2
</p>

この例では、p要素の中に「形式段落1」という文字列があり、その次にbr要素があり、その次に「形式段落2」という文字列が来る、という以上のことは表現できていません。つまり「形式段落1」や「形式段落2」という文章の塊が何であるか全く表現できていないのです。

HTMLをXMLとして定義しなおしたXHTMLの次期バージョンであるXHTML2では、line要素というものが検討されていたので、次のような書き方ができるようになる可能性がありました。

<p>
  <line>形式段落1</line>
  <line>形式段落2</line>
  <line>形式段落3</line>
</p>

このような書き方であれば、私は「p要素は意味段落である」という主張に対して何も文句を言いません。もっとも、実際にはXHTML2がHTML5に統合されることになったので、line要素自体が実装されない可能性が高いのですが……。

また、p要素の中にブロック要素を含むことができない、という理由もあります。DTD上、p要素の定義は下記のようになっています。

<!ELEMENT P - O (%inline;)*            -- paragraph -->
<!ATTLIST P
  %attrs;                              -- %coreattrs, %i18n, %events --
  %align;                              -- align, text alignment --
  >

p要素は開始タグ必須、終了タグ省略可能、そしてインライン要素しか含むことができません。つまり、下記のような書き方は認められません。

<p>
QMA6から、クイズの出題範囲が
  <ul>
    <li>アニメ&ゲーム</li>
    <li>スポーツ</li>
    <li>芸能</li>
    <li>ライフスタイル</li>
    <li>社会</li>
    <li>文系学問</li>
    <li>理系学問</li>
  </ul>
の7ジャンルに増えました。
</p>

p要素を意味段落であると考えると、上記の書き方はそれほど不自然ではないと思います。ただし、リストを表すul要素はブロック要素ですので、このような書き方は認められません。正しくは以下のようにします。

<p>QMA6から、クイズの出題範囲が</p>
<ul>
  <li>アニメ&ゲーム</li>
  <li>スポーツ</li>
  <li>芸能</li>
  <li>ライフスタイル</li>
  <li>社会</li>
  <li>文系学問</li>
  <li>理系学問</li>
</ul>
<p>の7ジャンルに増えました。</p>

例ではリストを上げましたが、これは表でも引用でも同じです。ほかのブロック要素が途中に出てきた場合、意味的につながりがあってもそこでp要素を切らなければなりません。p要素はより小さい段落である形式段落を指すと考えるほうが無理がないように思います。

さて、長々と書いてきましたが、最後にまとめたいと思います。tDiaryの作者であるただただしさんは次のようなことを書いています。

ようするに、改行したらそれは段落の変更であると。だからtDiaryでは、改行によって区切られた1行は、両端に自動的に<p>~</p>が付くのだ。日本語としてごくあたりまえの形式であり、それをねじ曲げて意図的な強制改行がしたければ少しは苦労してね(文中に<br>を入れてね)、ということだな。

tDiary: 記述フォーマットの話 [ただのにっき:2002-04-11

はてなダイアリーはtDiaryと直接の関係はないものの、tDiaryのテーマが使えるようなHTMLを吐くように設計されています。つまり、それをはてなダイアリーの設計者が意識しているかどうかは別として、tDiaryのHTMLの思想は間違いなくはてなダイアリーに受け継がれているのです。

この仕様が初心者に優しいのか、そうでないのかは私には分かりません。いや、優しくない仕様だとは思うのですが、考えようによっては「美しくないHTMLを書きづらい」というのはある意味ではとても初心者に優しいと思うのです。

意識せず、比較的まともな、どんなブラウザでも問題なく処理できる、機械での処理や蓄積もしやすいHTMLを生成できるというのは素晴らしいことだと思います。もっとも、それでも酷いHTMLは強引に書けてしまうわけですが。

<p>アタシ</p>
<p>小野寺のファン</p>
<p>だからさ</p>
<p>ねぇ</p>
<p>炎上しないでよ</p>
<p>みたいな</p>

それでも、意識せず、かなり酷い、視覚的ブラウザでしかまともに処理できない、機械での処理がしにくいHTMLを生成するブログサービスに比べればずいぶんマシなものではないでしょうか。

そして、2004年当時、ある程度安定したサービスを提供していたブログサービスの中から、私がはてなダイアリーを選んだ理由は、「無駄なbr要素が挿入されないから」でした。

……と、無理矢理ブログサービスの話に戻しておしまい。

*1:今はもうなくなってしまいましたが、ネットWatch板にQMAプレイヤーのブログヲチスレ「ボボボボルテックス」というスレがあり、そこで1ヶ月のカウンターの伸びに応じて「ボボボ賢○」という称号をつける集計人の方がいらっしゃいました。確か最後の集計では私は2位でボボボ賢帝だったはず。ちなみにボボボ賢神はぶどうさんだったかな。

*2:信者的に「CSSではなくHTMLの解釈結果としての見た目」の話をするのは大嫌いなのですが、ここでは我慢しますw