LoginSignup
7
7

More than 5 years have passed since last update.

markdownの文字数を、セクションごとに数えてくれるコマンドつくった

Posted at

ひさしぶりにコマンドラインツールをつくりました。名前は mdwc。文字数を数えるwcのmarkdown最適化版、という感じです。

なんのためのコマンドか

このごろ、markdownでけっこう長めの、しかも文字数をちゃんとチェックしなくちゃいけない文章を書いていて、
「かぞえるのめんどくさい!!」 となってつくったコマンドです。

最初は、マルチバイト文字(日本語)がちゃんと数えられて、よしなに余計な文字を無視してくれるくらいでいいかなーと思ってたんですが、
つくってるうちに、
「markdownなんだったら、見出しのフォーマットがはっきりしてるから、セクションごとの文字数とかも出せるじゃん!」
と気づいて、そのへんに特化したコマンドに調整しました。

インストール

node.js製ですので、npmつかってくださいませ。

npm -g install mdwc

つかいかた

例えば、こんな sample.mdというmarkdownファイルがあったとします。

sample.md
# もげもげ
> 引用部分なので
> このあたりはカウントしない
## 最初の項目
### 最初の項目1
ほげほげ
### 最初の項目2
ほげほげ
### 最初の項目3
ほげほげ
## 第2の項目
もげもげもげ
## 第3の項目
foo bar

これの文字数を数えたい! というときは、mdwc sample.md と叩いてください。こんなかんじの結果が出ます。

出力結果
 - root (24)
   - もげもげ (24)
     - 最初の項目 (12)
       - 最初の項目1 (4)
       - 最初の項目2 (4)
       - 最初の項目3 (4)
     - 第2の項目 (6)
     - 第3の項目 (6)

markdown中に含まれる見出しの一覧と、
その見出しに対応している範囲(セクション)の文字数(マルチバイト文字も1文字とカウント)が出ます。わーい。

階層構造をちゃんと把握して数えているので、
「最初の項目」の文字数は、ちゃんと「最初の項目1」「最初の項目2」「最初の項目3」の文字数の合計になっているのが分かるかと思います。
したがって、単純な全体の文字数も、最初の root という行の数字を見れば分かりますよー。

あとこの出力自体も、なんとなくmarkdownっぽくなってるので、そのまま目次として使うのもありですかね。

カウントしない行・文字

また、これはいま書いている文章の都合で付けた仕様なんですが、 >からはじまる行(引用)は文字数にカウントに入れません
同様に、見出しの中身・リストの-・半角空白などもカウントしないようになっています。
ちゃんと自分で書いた本文の文字数をカウントするって感じですね。

各行がそれぞれ何文字でカウントされているかを確認したい場合は、mdwc -l sample.mdと叩いてみてください。すると出力形式が変わります。

出力結果
(0) "# もげもげ"
(0) "> 引用部分なので"
(0) "> このあたりはカウントしない"
(0) "## 最初の項目"
(0) "### 最初の項目1"
(4) "ほげほげ"
(0) "### 最初の項目2"
(4) "ほげほげ"
(0) "### 最初の項目3"
(4) "ほげほげ"
(0) "## 第2の項目"
(6) "もげもげもげ"
(0) "## 第3の項目"
(6) "foo bar"
(0) ""

こんな感じで、今度は行ごとの文字数がでてきます。そして見出しの行や、
引用部分の行が「0文字」ということになっているのがわかると思います。

無視する文字種とかにご意見・ご要望ある場合は、githubのissuesあたりで突っ込んで頂けると幸いです。
コードブロックとかもカウントしない部分に含めたいなぁ。

まとめ

  • こまかく文字数が決まっている文章を書くときにも、markdownが使えるようになってうれしい。
  • 出力形式凝るとたのしい。
  • Kobito・Qiitaとの相性もばっちりですよ! ぜひご利用くださいー。
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7