2014年2月22日土曜日

HTML を Markdown としてペーストできる MarkdownPastr

Test を書く練習ついでにバージョンアップしたのでご紹介。クリップボードにコピーしたリッチテキストを Markdown としてペーストできる Chrome Extension: MarkdownPastr の新バージョンを公開しました。

開発者の方ならご存知とは思いますが、Markdown は最近人気のある Wiki 的記法です。GitHub での採用で、爆発的に人気が出ました。プレインテキストとして見てもそれなりに把握しやすいということも、普及の理由のひとつと思われます。最近では Jekyll などを使ってブログを Markdown で書く人も出てきました。

そんな Markdown ですが、個人的に Google Docs で書いたテーブルを含む文章を Markdown 化したいケースが結構あり、そんな時に不便な思いをしていました。そこで作ったのが MarkdownPastr です。使い方は単純で、Markdown 化したい HTML をウェブページ上でコピー、textarea にペーストで貼り付けるだけ。

これが

こうなります。


Google Docs の場合、Courier New フォントで記述した部分が code として認識されます。また、行が丸々 Courier New フォントの場合はコードブロックとして認識されます。

Markdown ではなくシンプルテキストでペーストしたい場合は、Shift キーを押しながらペーストすれば OK。ウェブページ上で textarea にペーストをしない限りプロセスは止まってますので、余計なリソースを食わないところもポイントです (新しい Chrome Extension ではこれが推奨される動作です)。

ちなみに、個人的におすすめの Markdown 記述環境は


辺りです。

コードは GitHub で公開しています。一般的なフィードバックはこちらへどうぞ。

ぜひお試し下さい。

2014年2月11日火曜日

jsdocをbootstrapできれいに生成する

検索してもあまり日本語の情報が出てこなかったのでメモを残しておきます。

JSDoc

JSDoc は言うまでもないですが、JavaScript のソースコードに残したコメントから自動的にリファレンスドキュメントを生成してくれるコマンドラインツール。例えばこんな感じでソースにコメントを書いておくと

/**
 * Resolve url from `srcset` syntax http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/
 * @param  {string}           src    Default URL
 * @param  {string}           srcset `srcset` argument
 * @param  {number|undefined} dpr    Device pixel ratio
 * @param  {number|undefined} width  Viewport width
 * @return {string} Parsed and resolved URL
 * @private
 */
var resolveSrcset = function(src, srcset, dpr, width) {
  if (srcset === null) return src;
  ...
};

下記のような HTML を出力してくれます。


便利ですね。

Grunt

詳しくは公式ドキュメントを参考にして頂ければと思いますが、今時は Grunt を使って、これを自分のワークフローに手軽に組み込むことができます。例えば僕は Grunt でこんなことをしています。

ここに「JSDoc でリファレンスドキュメントを生成する (grunt-jsdoc)」も追加することができます。

この grunt-jsdoc ですが、見ての通り、そのまま出力してしまうと、かなりプレーンで寂しい感じになってしまうわけですが、ひと工夫加えると、下記のように素敵なデザインにすることができます。


docstrap

実は grunt-jsdoc には docstrap というものが dependency として含まれているのですが、これを使うことで、見た目を簡単に bootstrap を使ったコジャレたものにすることができるのです。デザインは bootswatch.com で提供されているものから選べます。

で、その使い方なのですが、ドキュメントも分かりづらいし検索してもあまり情報がなかったのでここに残しておきます。

まずは Gruntfile.js の記述ですが

    jsdoc: {
      dist: {
        src: ['src/*.js', 'README.md'], // JSDoc化したいソースコードへのパス
        options: {
          destination: 'doc', // 出力先パス
          configure: 'jsdoc-config.json' // docstrapの設定ファイル
        }
      }
    }
    ...
    grunt.loadNpmTasks('grunt-jsdoc');

こんな感じにします (Grunt の作法が分からない方は、まずはその辺りを先に修得する必要があります) 。ポイントは configure: 'jsdoc-config.json' の部分で、別のファイルに詳細を記述する必要があります。これは grunt-jsdoc の設定自体は Gruntfile.js に記述できるのですが、docstrap の設定は別ファイルにせざるを得ないためです。

ここでは、jsdoc-config.json というファイルを指定しているので、そういう名前のファイルを作りましょう。中身はこんな感じ。

{
  "plugins": [
    "plugins/markdown" // Markdownプラグインを入れるとコメントがMarkdownで書けます!
  ],
  "templates" : {
    "cleverLinks"     : false,
    "monospaceLinks"  : false,
    "default"         : {
      "outputSourceFiles" : true
    },
    "systemName"      : "PortableCache",
    "footer"          : "",
    "copyright"       : "Developed by Eiji Kitamura",
    "navType"         : "vertical",
    "theme"           : "united", // bootswatch.comのデザイン名を小文字で指定
    "linenums"        : true,
    "collapseSymbols" : false,
    "inverseNav"      : true
  },
  "markdown"  : {
    "parser"   : "gfm",
    "hardwrap" : true
  },
  "opts": {
    // ここがポイント
    "template": "node_modules/grunt-jsdoc/node_modules/ink-docstrap/template"
  }
}

ポイントは opts.template の部分で、これをそのまま記述する必要があります。そして、templates.themebootswatch.com で気に入ったデザインの名前を小文字で入力。後はタスクを走らせれば OK。のはず。

おまけ

実は JSDoc は README.md などの markdown で書かれたファイルをトップページに組み込むことができます。使い方は、上記の通り変換するソースの一覧に加えるだけ。
また、これも JSDoc 自体が持つ機能ですが、プラグインで markdown を入れておくとコメントにも markdown 記法が使えて大変便利です。