✨
Zenn CLI のSlug 動作を改良するCLIを作った
概要
Zenn における slug は記事や本に割り当てられるユニークな ID で、URL やファイル名に使用されます。
Zenn CLI を使って記事を作成すると、特に指定しない限りはランダムな値となります。しかし、ファイル名がランダムになってしまうと、どのファイルがどの記事なのかが分かりにくくなってしまいます。
常に slug を指定して記事を作成すればよいのですが、slug は Zenn 全体でユニークな ID となっているため、衝突すると Zenn へのデプロイに失敗します。失敗するタイミングが遅いため、最初から重複しない slug を考える必要があります。
そこで、Zenn CLI から記事作成部分を抜き出して再構築した CLI を作成しました。
できること
Zenn CLI の new:article を引き継ぎ
基本機能は Zenn CLI から継承していますので、
- slug を指定しない場合は、ランダムに slug を生成し記事を作成
- slug を指定した場合は、指定した slug で記事を作成
はそのまま使用できます。他のオプションも同じ仕様となっています。
$ zenn-create article
created: articles/d3786564c79ebd.md
$ zenn-create article --slug this-is-enable-slug
created: articles/this-is-enable-slug.md
slug の衝突チェック
slug を指定する場合、Zenn で既に使用されている slug かどうかの衝突判定を行うことができます。衝突していたら別の slug を考えるというユースケースを想定しています。
$ zenn-create article --slug what-is-slug
error: slugの値(what-is-slug)が不正です。このslugは既に使われています。
slug のランダム挿入
ファイルに人間が読める名前を付けつつ衝突も避けたい場合、slug 指定時にアスタリスクを指定することで、ランダム文字列を挿入し衝突を避けることができます。
$ zenn-create article --slug zenn-create-*
created: articles/zenn-create-96644c4bc7a0fd.md.md
インストール
npm install zenn-create
Zenn CLI との依存関係はありませんが、プレビュー等の機能はありませんので、Zenn CLI はインストールされていることが前提となります。
以下のような形で Zenn CLI と共存できます。
{
"name": "zenn.dev",
"scripts": {
"dev": "zenn preview",
"article": "zenn-create article"
},
"dependencies": {
"zenn-cli": "^0.1.154",
"zenn-create": "^0.1.0"
}
}
最後に
本の作成はまだ対応していませんが、近いうちに対応します。
ぜひ使ってみてください。
Discussion