
「ローカルで文字数を数えたい」
WordPressでブログを書き始めてから文字数が気になることが多くなりました。SEOタイトルは多くても33文字以内に収めないと、はみ出るからです。
自分はMarkdownで下書きを作ってから、それをGutenbergの「カスタムHTML」に貼り付け「ブロックに変換」し記事を作成しています。その際に、その場で文字数を知りたいと考えるようになりました。
そこで、クリップボードを読み込み、ターミナルに文字数を出力するCUIツール「clipcount」をPythonで作りました。
この記事では、下記のサイトを参考に「clipcount」について解説します。
「clipcount」とは?
clipcountとは、Pythonで作成したオープンソースのCUIツールです。
clipcountとターミナル上で入力すると、その時に保存しているクリップボードの最新の文章を読み込んで、その文字数を出力してくれます。
簡単な使い方は、Qiitaでまとめています。


インストール方法
pipでインストールします。
pip install clipcountWindowsで上記を実行した際に"WARNING: The script clipcount.exe is installed in 'ファイルパス' which is not on PATH." という警告が表示されたなら、以下の記事をご参照ください。


また、WARNING: Failed to write executable - trying to use .deleteme logicという警告が表示されpip install出来ない場合は以下の記事をご参照ください。


使い方
clipcountは、ターミナルで直接実行することもできます。
clipcount [オプション]また、Pythonファイル上でインポートすることも出来ます。
from clipcount import clipcount
x = clipcount({オプション})| オプション | 説明 |
|---|---|
| clipcount -h | ヘルプ画面を表示します。 |
| clipcount –help_jp | ヘルプ画面を日本語で表示します。 |
| clipcount -b | 改行コード(\nか\r\n)を削除した文字数を出力します。 |
| clipcount -s | 半角空白を削除した文字数を出力します。 |
| clipcount -S | 全角空白を削除した文字数を出力します。 |
| clipcount -t | タブコード(\t)を削除した文字数を出力します。 |
| clipcount –split | 空白文字(改行、半角空白、全角空白、タブ)を削除した文字数を出力します。 |
| clipcount -m | 半角英数を0.5文字として換算して、文字数を出力します。 |
「clipcount」の開発動機
WordPressでブログを書き始めてから1ヶ月経ちました。 始めは色々と慣れないことばかりで大変でしたが、ようやく作り方の環境も整ってきました。
記事は、Markdownで作ってからWordpressに貼り付けるというスタイルを今のところ取っています。
そこで、本文はもちろん、タイトルやメタディスクリプションも考えるのですが、文字数がとにかく気になります。多すぎると、はみ出してしまうからです。
いくら伝えたい事があっても、表示されないなら意味がありません。そこで、タイトルを考えたらすぐに文字数を知りたいと思うようになりました。
文字数を計測できるWEBサービスは数多くあるのですが、それらの殆どが「計測したい文字をコピーする」「それを貼り付ける」という手順を踏みます。
- 計測したい文字列をコピーする
- それらを貼り付けて文字数を計測する
自分は、これを文字をコピーしただけで計測したいと思うようになりました。
そこで、以前の開発でクリップボードを読み込むモジュールがPythonにはある[1]ことを知っっていたので、それを組み込んでOSSを作ってみようと思ったのが開発動機です。
また、WordPressは半角英数を0.5文字として計算するのですが、この需要に対応しているサービスが中々見つからず、それなら自分で作ろうと思ったことも、動機の一つです。
まとめると、clipcountを使うことで
- 「貼り付ける作業を省略できる」
- 「半角英数を0.5文字として換算して文字数を出力する」
といった事が可能となります。
他にも改行コードを削除したり、空白を削除したり、あるいは残すこともできます。
「clipcount」の特徴
デフォルトでは、空白文字(改行コード、半角空白、全角空白、タブコード)全てを含めた状態で文字数を出力します。さらに、半角文字と全角文字のどちらも「同じ1文字」として換算されています。
-m: 半角英数が0.5文字換算となる-b: 改行コードを数えない-s: 半角空白を数えない-S: 全角空白を数えない-t: タブを数えない--split: 空白文字を全て数えない
そのため、Wordpressのタイトルやメタディスクリプションの計測で用いるならば、-mオプションを使用してください。半角英数が0.5文字換算となります。
また、文中にある空白は文字数に換算されるため純粋な文字数がわかりません。
半角空白を削除するなら-sオプションを、全角空白を削除したいならば-Sオプションをご使用ください。また、タブコード(\t)は-tオプションで削除できます。改行コード(\nか\r\n)も必要ないと思われるので-bオプションをご使用ください。
オプションは組み合わせる事ができます。例えば、「タブコードと改行コードだけ削除したい」方は-tbとしてください。
空白文字(改行コード、半角空白、全角空白、タブコード)全て数えない方は-bsStとするか、もしくは--splitとしてください。
このような自由度の高さがclipcountの魅力でもあります。
「clipcount」開発過程
1.pyperclipを知る
clipcountの骨子となっているモジュールが「pyperclip」です。 import pyperclipとして、x = pyperclip.paste()と記述するだけで、変数にクリップボードが格納されます。非常に便利なモジュールです。
以前の開発で存在を知り、今回の開発に繋がりました。


2.「clipcount」を作る
やるべきことは単純だったので、あっという間に出来ました。
ポイントはsplit()メソッドです。文字列.split("削除したい文字")とするだけで任意の文字を削除できます。
改行コードだけは、Windowsとそれ以外で異なっているため難儀しましたが、.splitlines()メソッドを使うと、それがどの改行コードであれ削除してくれるので、助かりました。
3.半角英数を区別する機能の実装
残りの問題は半角英数を0.5文字に換算する方法です。 この問題の解決には、こちらの記事が参考になりました。
結論から述べると、unicodedataという標準搭載されているモジュールを使用すると、簡単に半角英数とそれ以外を分ける事ができます。
記事では、半角英数を1文字、全角英数を2文字として計算していましたが、自分はそれぞれ0.5文字、1文字に変えました。
4.PyPIにアップロードする
PyPIへのアップロード方法は、以下をご参照ください。


これで、pip install clipcountとするだけで、どのOSでも「clipcount」が使えるようになりました。
まとめ
この記事では、「clipcount」という、クリップボードを読み取り文字数を計測できるツールの解説と開発過程をまとめました。
WordPressでは、タイトルやメタディスクリプションなどで文字数に気を配る必要があります。さらに、半角英数は0.5文字換算されるため、自分で計算するのは少々手間がかかります。
こうした場面で、clipcount -mが便利であると考えられます。ぜひご利用いただき、お役に立てれば幸いです。

