Zenn CLI のSlug 動作を改良するCLIを作った

2024/07/29に公開

概要

Zenn における slug は記事や本に割り当てられるユニークな ID で、URL やファイル名に使用されます。

Zenn CLI を使って記事を作成すると、特に指定しない限りはランダムな値となります。しかし、ファイル名がランダムになってしまうと、どのファイルがどの記事なのかが分かりにくくなってしまいます。

常に slug を指定して記事を作成すればよいのですが、slug は Zenn 全体でユニークな ID となっているため、衝突すると Zenn へのデプロイに失敗します。失敗するタイミングが遅いため、最初から重複しない slug を考える必要があります。

そこで、Zenn CLI から記事作成部分を抜き出して再構築した CLI を作成しました。

https://github.com/soags/zenn-create

できること

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"
  }
}

最後に

本の作成はまだ対応していませんが、近いうちに対応します。

ぜひ使ってみてください。

GitHubで編集を提案

Discussion