2013年7月31日水曜日

Markdownよりはてな記法

先日、Bloggerではてな記法(のようなもの)を扱えるようにするブラウザ拡張、Extreme Markup Editor for Blogger™をリリースしました。

BloggerではWYSIWYGタイプかHTML直書きかどちらかでしか編集できないことに不満を持ちこのツールを作りましたが、構想、開発の過程ではどの軽量マークアップ言語を採用するかで相当悩みました。

現在世界でもっとも多く採用されており、認知度が高いマークアップ言語は、Markdownでしょう。GitHubやStackOverflowで採用されているほか、数多くのエディタやIDEが直接、またはプラグインという形でサポートしています。しかし、多くのユーザーに利用されているマークアップ言語はほかにもあります。textileは比較的多機能なマークアップ言語で、Redmineで採用されています。また、tracではWikiFormatting、WikipediaではWiki markup、PukiWikiにはPukiWikiの記法、はてなダイアリーやはてなブログでははてな記法といったように、サービスごとに独自のマークアップ言語が利用されているケースもたくさんあります。軽量マークアップ言語には、驚くほど種類があるのです。

数多くの候補からどれを選ぶか?

自分でまったく新たなマークアップ言語を作るという発想は、何もメリットを見いだせないので捨てました。既存のもの利用した方が、マークアップ言語の品質面でも、ユーザーの負担という面でも、ずっとメリットがあります。では、どのマークアップ言語を採用すべきでしょうか?

やはり、まず候補として思い浮かんだのは、もっとも認知度が高いMarkdownでした。そしてもうひとつは、ブログ向けの記法として実績のあるはてな記法。私も以前よく使っていました。

それ以外のマークアップ言語も調べましたが、機能が充実し過ぎていたり、入力が複雑すぎて導入する意味があまりなかったり、逆に特徴がなかったりで、いずれも採用は見送りということになりました。候補はMarkdownとはてな記法に絞られたわけです。

Markdownの特徴

では、現在もっとも支持を集めているMarkdownとはどんなマークアップ言語なのでしょうか?

Markdownは、基本的にはHTMLに変換するためのマークアップ言語ですが、公式サイトやWikipediaによると、次のような思想をベースにして設計されたそうです。

マークアップそのものが読みやすい

ツールやライブラリで変換した後のHTML文書だけではなく、変換前のマークアップそのものの可読性にも注意が払われています。

たとえば、見出し(hnタグ)を

This is an H1
=============

This is an H2
-------------

のように表記したり、blockquoteを

> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
> 
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.

のように表記したりするのは、Markdownならではといえるでしょう(より簡略な記法も用意されています)。

GitHubはMarkdownを採用しています。リポジトリ内のファイルは、コーディングの最中にテキストエディタで読むこともあるので、妥当な選択だと思います。

機能は必要最小限

Markdownは、それほど多くの機能はサポートしていません。

たとえば、定義リスト(dl, dt, ddタグ)、階層構造のリスト(ul, liタグ)、そしてテーブル(tableタグ)はサポートしていません。これらが必要なときは、HTMLタグを埋め込んで対処します。

HTMLを埋め込みやすい

この制限のため、HTMLの埋め込みは簡単に行えるようになっています。基本的には、タグを直接入力すればそのままHTMLタグとして解釈されます。

はてな記法の特徴

はてな記法は、はてなダイアリーのために開発されたマークアップ言語です。HTMLに変換を行うという点ではMarkdownと同じですが、異なる特徴を持った興味深い言語であることが分かります。

以下に、見つけた特徴を紹介します。

文字装飾の記法がない

この記事の中で紹介した6つのマークアップ言語の中で、強調、斜体などの文字装飾の記法が存在しないのははてな記法だけです。

これは、はてな記法が使用されるのははてなダイアリーのエディタ内だけだから、という事情が関係しているようです。エディタには強調や斜体のタグを入力するボタンがあるので、わざわざ記法を定義する必要がないわけです。

拡張しやすい

はてな記法は、ブラケットで囲うことでいくらでも新機能を追加できます。たとえば、TeX記法は

[tex:~~]

ウクレレ記法は

[uke:~~]

と表記します。変化の激しいブログサービスと密に関係していたからこその特徴です。

サービスとの連携

はてな記法で便利かつ面白いのは、

[http://www.hatena.ne.jp/:title]

と入力すると、 http://www.hatena.ne.jp/ にアクセスしてタイトルを取得し、記事に自動入力してくれる機能です。サービスとの連携を前提としているからこそ実現できる機能です。

必要十分な機能

文字装飾の記法こそ存在しないものの、それ以外については十分な機能を提供しています。

Markdownではサポートされていない定義リスト、階層構造のリスト、テーブルもサポートされています。脚注の機能もあります。

決定

これらを比較してみると、Markdownとはてな記法は明らかに方向性が違うことが分かります。

Markdownは、それが記述される環境はもちろん利用される環境すら何も前提にしない、とにかく汎用性にこだわった記法なのです。一方、その対極にあるのがはてな記法で、こちらは特定のサービスやエディタと密に結びついて、それらと協調しながら効率的な記事の執筆を実現する、サービスの一部としての記法という位置づけになっています。

今回、開発しようと思ったのはBloggerの管理画面で動作する拡張機能で、それ以外の場面での使用はまったく想定していません。ですから、はてな記法の方が適していると考え、採用することに決めました。

はてな記法は、どうも時代遅れというイメージがつきまとっているようですが、実際のところは用途が違うだけです。WikipediaでMarkdownが採用されることが絶対ないように、ブログ執筆用途としては、はてな記法がいつまでも最適なものであり続けると思います。