markdown_section_numbering gemをアップデート
昔こんなのを作ったわけだけど、本当に少しだけ足りないなと思うところがあったのでアップデートしました。
上の記事で、「Automatorと連携して選択中のテキストを変換する」っていう使い方について書いたのだけれど、それをやるには標準入力を受け取ってgemのクラスに渡して標準出力するっていうスクリプトをわざわざgem外で用意する必要があったわけです。
そのときは気が回っていなかったんだけど、そんな機能はgemに実行ファイルとして含めればいいということにようやく気がついたので今回のアプデに至りました。
markdown_section_numbering | RubyGems.org | your community gem host
バージョン1.1をインストールするとmarkdown-section-numbering
というコマンドが使えるようになります。このコマンドにMarkdown形式のテキストを与えると番号付きのマークダウンが標準出力に返ってきます。
中身は単純でこんな感じ。
#!/usr/bin/env ruby begin require 'markdown_section_numbering' rescue LoadError require 'rubygems' require 'markdown_section_numbering' end $stdout.write MarkdownSectionNumbering.convert($stdin.read)

- 作者: Peter J. Jones,arton,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
- この商品を含むブログ (11件) を見る
CSVテキストをMarkdown形式のテーブルに変換するgem作った
markdown_section_numberingに続いて単発のテキスト変換gemを作ってRubygemsで公開した。
今回作ったのはコンマ区切りで書いたテキストをマークダウン形式のテーブルに変換するメソッドを提供するモジュールで、基本的には自分がAutomator経由で呼び出すことを想定している。
ブログや資料をMarkdown形式で書くことが多いんだけど、これまではMarkdown Tables generatorを使っていた。このサイトはこのサイトでかなり素晴らしいが、どうせならエディタ内で簡単に済ませたい。Markdownのテーブルは人間が手作業で書けるものではないので人間でも書きやすいCSV形式を取ることにした。
リンク
使いかた
READMEからそのまんま持ってきた。
基本
require "csvtomd" csv = <<CSV head1, head2, head3, head4 line1-1, line1-2, line1-3, line1-4 line2-1, line2-2, line2-3, line2-4 line3-1, line3-2, line3-3, line3-4 CSV puts CsvToMd.convert(csv)
上のコードで次の出力が得られる。
|head1|head2|head3|head4| |---|---|---|---| |line1-1|line1-2|line1-3|line1-4| |line2-1|line2-2|line2-3|line2-4| |line3-1|line3-2|line3-3|line3-4|
実際に表にしてみるとこんな感じ。
head1 | head2 | head3 | head4 |
---|---|---|---|
line1-1 | line1-2 | line1-3 | line1-4 |
line2-1 | line2-2 | line2-3 | line2-4 |
line3-1 | line3-2 | line3-3 | line3-4 |
応用
空のセルがあっても大丈夫。勝手に補うようにしている。
require "csvtomd" csv = <<CSV , , , head, , , , CSV puts CsvToMd.convert(csv)
上のコードではこんな出力になる。
||||head|| |---|---|---|---|---| |||||| ||||||
スカスカの表になる。
head | |||
---|---|---|---|
| | |||
| |
※はてなブログではMarkdownの解釈が若干異なるようで5列目が潰れてしまっているが、KobitoやGitHubでは空の5列目はそのまま残って表示される。
Automatorと連携
このあたりに同じようなことが書いてあるので参考にしてもらえると良いっす。
マークダウンに見出し番号をつけるRuby Gem書いた - PILOG テキスト欄に書いたRubyのコードをAutomatorで評価する - PILOG
Markdown生活がまた便利になった。
マークダウンに見出し番号をつけるRuby Gem書いた
マークダウンでメモを書いたりブログを書いたりしていたけど、kobito-cliでPDF化すると見た目もなかなか良いということもあって、そこそこしっかりしたドキュメントもKobitoでマークダウンするのが最近自分の中での流行りになってきた。
ただそこそこ量がある報告書っぽい文書となると見出し番号があったほうがわかりやすいというのが正直なところ。見出し番号はマークダウン自身の仕様ではカバーされていない(はず)なので、マークダウンを使うのであれば別の方法と組み合わせる必要がある。
- pandoc
- CSS
- 手動で番号をつける
- 自動で番号をつける
pandocを使っていたこともあったが、使い勝手がそんなに良くない(お手軽じゃない)し、見た目もいまいちになりがちなのでトータルでKobitoに劣る。
CSSを使うという手は十分にありえる。kobito-cliからブラウザで開いたときに指定されているCSSに追記するなり差し替えるなりして、見出しに番号を振るようにするのは有り。
手動/自動で番号をつける、というのは、## ◯◯について
となっているところを## 2.1 ◯◯について
などと数字を直接書いてしまう方法だけど、手動でこれをやるのはかなり辛いため現実的ではない。
今回は以上の4種類の方法の中から自動で番号を振るという方法を取ることにしてみた。もっといい方法があったら知りたい。
Gem
そのライブラリをRubyで書いてGemとして配布するようにした。
markdown_section_numbering | RubyGems.org | your community gem host
ちなみにGitHubはこちら。
xoyip/markdown_section_numbering
使い方
% gem install markdown_section_numbering
でインストールできる。
require "markdown_section_numbering" markdown = <<MD # a ## b foo bar ## c - list - list - list MD puts MarkdownSectionNumbering.convert(markdown)
このコードを実行すると、↓のように変換されたマークダウンが得られる。
# 1 a ## 1.1 b foo bar ## 1.2 c - list - list - list
見出し番号の付け直しにも対応していて、すでに見出し番号がついているこのようなマークダウンを渡すと、
# foo # 1 a ## 1.1 b ## bar ## 1.2 c
新しい見出し番号が付いたマークダウンが返ってくるようになっている。
# 1 foo # 2 a ## 2.1 b ## 2.2 bar ## 2.3 c
これによって編集中でもとりあえずの見出し番号をつけて見やすくすることができるし、変更があれば再び見出し番号を付け直せばいいだけだから割と使い勝手も悪くないんじゃないかと個人的には思っている。
現実的な使い方
ライブラリ化をしたはいいが、毎回コマンドを叩くというもの現実的ではない。そんな面倒なプロセスであれば使わなくなってしまう。僕の場合はAutomatorで作ったサービスと連携して、ショートカット一発で呼び出せるようにしていて、流れとしてはこんな感じになっている。
- マークダウンの文書を全選択
- 指定したショートカットキーでサービス起動
- 選択中の文字列が結果で置き換わる
スクリプトを書く
Automatorからこのライブラリを呼び出すためのスクリプトを書いておく。
require "markdown_section_numbering" input = $stdin.read puts MarkdownSectionNumbering.convert(input)
標準出力を受け取ってライブラリに渡し、結果を出力するだけのコード。
サービスを作る
Automator.appを起動し、サービスを作る。
左側のアクション一覧のライブラリ→ユーティリティから「シェルスクリプトを実行」を右側にドラッグ&ドロップする。そしてシェルスクリプトのところにさっき作ったスクリプトを呼び出すように書いてあげればよい。
他の設定も含めると最終的にはこのような感じになる。
これで保存して終了すればOK。
テキストを選択した状態でメニューバーからサービスを起動すると、選択中のマークダウンを見出し番号つきのものに変換した上で元のテキストを置き換えてくれるというわけだ。
ショートカットをアサインする
システム環境設定→キーボード→ショートカットからサービスにショートカットを割り当てることができるようになる。メニューから選ぶよりかは楽になる。
Gemを書いたお話と、Automatorで便利に使う方法を紹介しました。