Developer's Blog

GitHub のように、Markdown ファイルを HTML として表示したい

こんにちはこんにちは! エンジニア川端です。

プログラマのみなさん。

プログラミング、好きですか?
もちろん好きですよね。

ドキュメント作るの、好きですか?
ふがふがんがぐぐ

そういう気持ちを知ってか知らずか、GitHub の仕組みはよくできてますね。

今日は、GitHub 以外のサーバで同じような環境を手軽に用意する方法をお届けします。

やりたいこと

Apache の特定のディレクトリに Markdown 形式で記述したファイルを設置するだけで、HTML で表示してくれる環境を用意する

http://example.jp/markdown/readme.md
にアクセスすると、
生 Markdown
ではなく
HTML化
と表示される

結論から書く

  1. markdown.php をダウンロードして、markdown/ 以下に設置
  2. .htaccess 作成して、markdown/ 以下に設置
    AddType text/markdown md
    Action text/markdown /markdown/md.php
    
  3. md.php 作成して、markdown/ 以下に設置
    <?php
    require_once 'markdown.php';
    
    if ( isset($_SERVER&#91;'PATH_TRANSLATED'&#93;) ) {
        $file = realpath($_SERVER&#91;'PATH_TRANSLATED'&#93;);
        $ext = substr($file, strrpos($file, '.') + 1);
    }
    
    if ( $file and is_readable($file) and $ext === 'md')
        $body = Markdown(file_get_contents($file));
    else
        $body = '<p>cannot read file</p>';
    
    header('Content-Type: text/html;');
    echo '<html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>Markdown Test</title>
      </head>
      <body>
    ' .
    $body
    . '  </body>
    </html>
    ';
    

以上!

あとは、markdown/ 以下に拡張子 .md のファイルをおいてアクセスするだけです。
ローカル環境で自分しか使わないので、細かいことは気にしない。

軽く説明

  1. readme.md にアクセス
  2. 拡張子 md のファイルは、コンテントタイプ text/markdown にマップする
    AddType text/markdown md
  3. コンテントタイプ text/markdown の場合、md.php を実行する
    Action text/markdown /markdown/md.php
  4. md.php は、環境変数 PATH_INFO / PATH_TRANSLATED を元にreadme.md を取得し、markdown.php で html 化する

Apache の Action ディレクティブと環境変数 PATH_TRANSLATED の組み合わせでお手軽に実現してみました。

  • 英語/日本語など、多言語対応
  • Markdown 以外のいろんな書式に対応
  • 拡張子だけじゃなく他の制限も
  • 拡張子 md なのがイヤ
  • カテゴリ分けしたい
  • タグつけたい
  • 検索したい

などなど色々やりたいことが出てきたら、アプリ導入や開発を検討すればよいかなと。

ドキュメントを作るのが嫌いなわけではなくて、ドキュメントを作るのに時間をかけたくないだけ、というエンジニアはたくさんいると思います。
その数推定 1,000 万人。
そういう方向けに「こんなこともできますよ」という一つのケースとしてお届けしました。お役に立てれば幸いです。

Copyright © 2019 Fenrir Inc. All rights reserved.