Zennの記事をほんの少しだけ楽に作成できるVimコマンド

3 min読了の目安(約1800字TECH技術記事 7

Zennというプログラマーのための情報共有サイトが誕生したそうです.vim-jp SlackでもZennの話題でかなり盛り上がっています.
ローカルの好きなエディタで記事が簡単に書け,プレビューもできるというのは,Vimmerにとってはとても嬉しいことです.この記事もVim(正確にはNeovim)で書いています.楽しい!

記事をほんの少しだけ楽に作成できるVimコマンド

さて,Vim で少しでも快適にZennの記事を書き始められるようにするため,以下の ZennCreateArticle コマンドを作ってみました. Zenn CLI が導入済みであることを前提としています.

function! s:create_zenn_article(article_name) abort
  let date = strftime("%Y-%m-%d")
  let slug = date . "-" . a:article_name
  call system("npx zenn new:article --slug " . slug )
  let article_path = "articles/" . slug . ".md"
  exe "edit " . article_path
endfunction

command! -nargs=1 ZennCreateArticle call <SID>create_zenn_article("<args>")

これで,たとえば2020年9月17日にプロジェクトのルートからVimを開き,コマンドモードで ZennCreateArticle vim-zenn-command と打つと,2020-09-17-vim-zenn-command.md という名前のMarkdownファイルがarticles/ディレクトリ下に新規作成されます.
今までは

npx zenn new:article --slug 2020-09-18-vim-zenn-command

と打たなければならなかったものが, ZennCreateArticle vim-zenn-command だけでできるようになります!すごい!

実装はというと,ただ内部で npx zenn new:articleslug 指定付きで呼び出しているだけ.オプション等は何もなし.
呼び出しコマンドでエラーが起きたらどうするの?知りません.うーん,手抜き感がすごいですね.
まだVim scriptに全然慣れてないのに即興で作ったので…と言い訳させてください.後で色々改良するかもしれません.プラグイン化できればベストですが.

この記事のアイコンの 🆚 は,当然 Vim script のことを指しています.

なぜこんなスラッグ名にしたのか?

CLIで記事を作成すると,記事のURLの末尾のスラッグと呼ばれる文字列を自由に決められます.スラッグの役割や命名規則については公式の Zennのスラッグ(slug)とは を参照.

  • スラッグはファイル名になる
  • スラッグはユニークでなければならない
  • スラッグは /[-a-z0-9]{12,50}/ のパターンの範囲内でなければならない(半角英数字とハイフンで12〜50字)

従って,スラッグは以下のような工夫をしたほうがよさそうです.

  • 一覧性のため,内容が推測しやすい名前をつける
  • 重複を避ける仕組みがほしい

そこで,私は article については当面 yyyy-mm-dd-(内容) という命名規則を用いることにしました.
12文字以上という制約は yyyy-mm-dd- という接頭辞となかなか相性が良く,また記事作成日の日付を付けることで重複をある程度防ぐこともできます.
このあたりは好みもあると思いますし,今後仕様変更がある可能性も考えられるので,お好みで.