この度のウェブログ移行の際に重宝しており、変換せずにメモの書き方として使うのもおすすめ。
Markdownについて
MarkdownはHTML文書を効率良く記述するのに役立つ “記法” [1]で、それ自体も(書式情報を持たない)テキストとして意味を理解しやすい形をとっている。そのため、ツールを用いてHTMLに変換する以外にもメモ用途のテキストファイルとして記述する(変換はしない)使い方もある。
記法には同じ出力結果を得るのに幾つかの書き方があるため、以下で紹介している例には他の書き方で書くことができるものもある。
記法の一覧はDaring Fireball: Markdown Syntax Documentation(英語)にある。
Markdownには幾つかのツール依存の拡張や変換処理のフラグが存在し、ツール/ライブラリによってはHTMLへの変換の際に個別に有効/無効を指定してその挙動を変えることができる。また、ツール/Webサービスによっては独自の “拡張記法” も存在し、これを処理するかどうかも指定できる場合がある。
Markdown記法で記述された文書は “Markdown文書” と呼ばれることがあり、 “.md” もしくは “.markdown” という拡張子が付けられる場合がある。
一部の記法例
以下、Markdown記法と変換後のHTMLを並べて例を紹介するが、これらは “Sundown” と呼ばれる実装を用いた出力結果となる。
見出し
行頭に見出しレベルの数だけ “#” を付ける。HTMLと同様、6段階まである。下は3段階目までの例。
Markdown | 変換後のHTML |
---|---|
|
|
段落
空行を段落の区切りとして自動的に段落が区切られる。
複数行で記述した段落は、Webブラウザでは改行部分がスペースになって続けて表示される。
Markdown | 変換後のHTML |
---|---|
|
|
リスト
順序無し(箇条書き)リストは “*” “+” “-” のいずれかと半角スペースの後ろに項目を1行1つずつ記述する。
順序付きリストは任意の数字[2]に “.” を付けたものと半角スペースの後ろに同様に記述する。
Markdown | 変換後のHTML |
---|---|
|
|
複数のスペース(4つ単位)で字下げされた項目は入れ子になったリストの項目になる。
Markdown | 変換後のHTML |
---|---|
|
|
強調
強調したい部分の前後に1つもしくは2つの “*” もしくは “_” を付けると、その部分が強調される。
強調される部分は、記号を付けた数が1つの場合はem
要素に、2つの場合はstrong
要素になる。
Markdown | 変換後のHTML(p要素のタグは省略) |
---|---|
|
|
リンク
リンクは角括弧で囲まれたリンク文字列と丸括弧で囲まれたリンク先URLを続けて記述して表現する。
リンク先部分にはa
要素のtitle
属性となる文字列を付けることもできる。
Markdown | 変換後のHTML(p要素のタグは省略) |
---|---|
|
|
Smartypants
一部の文字を特殊な文字に変換する拡張記法とこれを扱う拡張機能で、HTMLに変換してWebブラウザで見る場合に役立つ。
クォート文字の見た目を変えたり、 “.” “-” といった文字を連続で記述したときに別のひとまとめの形をした文字に変換したりする。前後に半角スペースを入れないとうまく動かない文字もある。
実装によってはこれ以外の “½” などの文字を変換することもできる(例:Sundownとその言語バインディング)。
下はSundownでの例。
Markdown | 変換後のHTML(p要素のタグは省略) |
---|---|
|
|
HTMLのコード
Markdown文書にはHTMLのコードをそのままの形で含めることができ、Markdownでの書き方よりもHTMLのコードを直接書くほうが書きやすい部分があればそのまま記述すればよい。
プログラム内でHTMLに変換するためのライブラリ等
Markdownを扱うためのソフトウェア(実装)は多数存在し、基本的な部分の処理についてはどれを選択しても同じように動作するが、拡張機能はそれぞれの実装によって異なる。
処理速度については、基本的に速いほうから
- C言語による実装 (最も高速)
- C言語によるライブラリの言語バインディング
- スクリプト言語による実装 (最も低速)
となる。
実装の一覧表はMarkdownImplementations - Markdown Community Group(英語)などにある。
(2015/3/10)以下の一覧表の項目を一部整理, 一部の名前を修正C言語による実装
- Discount
- libsoldout(旧libupskirt)
- Sundown(派生バージョン)
- peg-markdown[3]
いずれもライブラリ(共有オブジェクトとヘッダファイル)としての形と変換コマンドとの組み合わせで提供されているが、Debian/Ubuntuの “libmarkdown2” パッケージは “Discount” のライブラリ部分を用いている。
スクリプト言語向けの言語バインディング
名前 (括弧内は Debian/Ubuntu のパッケージ) | 対象言語 | 対象ライブラリ |
---|---|---|
Misaka (python-misaka, python3-misaka) | Python | Sundown |
lua-discount (lua-discount, lua-discount-dev) | Lua | Discount |
Redcarpet (ruby-redcarpet) | Ruby | Sundown |
RDiscount (ruby-rdiscount) | Ruby | Discount |
DR-SunDown (libdr-sundown-perl) | Perl | Sundown |
スクリプト言語による実装のライブラリ
名前 (括弧内は Debian/Ubuntu のパッケージ) | 対象/実装言語 |
---|---|
Python-Markdown (python-markdown, python3-markdown) | Python |
markdown.lua (lua-markdown) | Lua |
変換コマンド
個別のコマンドの使い方については扱わない。
名前 (括弧内は Debian/Ubuntu のパッケージ) | コマンド名 | 実装言語 |
---|---|---|
Discount (discount) | markdown, mkd2html, makepage, theme | C |
Sundown (なし) | sundown, smartypants | C |
libsoldout (なし) | mkd2html, mkd2latex, mkd2man | C |
peg-markdown (なし) | markdown | C |
Misaka (python3-misaka) | misaka | C(バインディング), Python(コマンド) |
Redcarpet (ruby-redcarpet) | redcarpet | C(バインディング), Ruby(コマンド) |
RDiscount (ruby-rdiscount) | rdiscount | C(バインディング), Ruby(コマンド) |
Markdown / Markdown.pl (markdown) | markdown | Perl |
markdown
やmkd2html
といったコマンド名は複数の実装によって用いられており、使い方や動作はその実装によって異なる。
テキストエディタによる支援
- Geanyの “Markdown” プラグイン(Debian/Ubuntuの “geany-plugin-markdown” パッケージ)をインストールして有効化すると、エディタ内でHTMLとしてのプレビューがMarkdown文書と同時に表示できたり、見出しが一覧表示されてその行へジャンプできたりする
- ReText(Debian/Ubuntuの “retext” パッケージ)というテキストエディタでもHTMLとしてのプレビューが行える(“ライブプレビュー” と呼ばれる機能で同時表示ができる)
- StackEditと呼ばれるサービスをWebブラウザで利用することでMarkdown文書の編集が行え、MarkdownとHTMLのスクロールが同期される点も便利
- Mac OSやWindowsなどではエンジニアならトコトンこだわりたい!Markdownエディタ20選【Mac, iPhone他】という記事が参考になるかもしれない(対象読者はエンジニアなので注意)
個人的には、Bloggerへの投稿で使う上では既存のエディタやサービスを使うとやりにくい部分[4]があるため、 Python/Misaka/PyGI/GTK+ 3/WebKitを利用した自作のプレビュー/編集ツールを用いて記事の作成を行っている。[5]
静的サイトの作成支援系ツール
- Blogofile
- Jekyll
- Nikola
といったツールは静的なサイトを効率良く構築する上で有用なものだが、これらはMarkdownがサポートされており、HTMLコンテンツの記述の生産性向上に役立っている。