🤔

Zennのスラッグ(slug)とは

2020/09/06に公開
19

slug(スラッグ)は、記事や本のユニークなIDのような文字列です。例えばslugがexample-articleの記事のURLは

https://zenn.dev/ユーザー名/articles/example-article

となります。

slugの指定

ウェブ上で記事や本を作成する場合、slugはランダムで作成されます。

コンテンツのGitHubリポジトリ管理を行っている場合は、slugを任意に指定できます。

  • 記事の場合はmarkdownファイル名をarticles/[slug].mdという形式にします
  • 本の場合はディレクトリ名をbooks/[:slug]という形式にします

Zenn CLIを使うとファイルの作成時にslugを指定することができます。たとえばwhat-is-slugというslugの記事を作成したい場合は以下のようなコマンドを実行します。

$ npx zenn new:article --slug what-is-slug
# => articles/what-is-slug.md`が作成される

詳しくはZenn CLIを使ったファイルの作成方法をご覧ください。

slug指定時の注意点

  1. slugはサイト全体で(記事や本などのコンテンツの種類ごとに)ユニークにする必要があります。他ユーザーの記事で使用済みのslugも使用できないのでご注意ください。
  2. slugは半角英小文字(a-z)、半角数字(0-9)、ハイフン(-)、アンダースコア(_)の12〜50字の組み合わせにする必要があります。
  3. slugは一度zenn.dev上で作成されたら変更できません(slugを変えると別の投稿として作成されます)。
GitHubで編集を提案

Discussion

TJTJ

質問です。
なぜ slug は12〜50字が必要ですか?

kenichiudakenichiuda

slugに大文字を含んでいると

不正なファイル名のマークダウンファイルのデプロイはスキップされました。slugは半角英数字(a-z0-9)とハイフン(-)の12〜50字の組み合わせにする必要があります

とエラーになったのですが、slugは小文字のみという制約があるのでしょうか?

kenichiudakenichiuda

了解しました。注意点に「小文字の」を追加してもらえると助かります。

kenichiudakenichiuda

すいません、「注意点」ではなく「エラーメッセージ」でした。

kenichiudakenichiuda

アンダースコア(_)を含んだslugで記事を公開できてしまったのですが、意図した仕様でしょうか?

shinsa82shinsa82

指定した slug が短いときに、ランダムに付け足して12字以上にしてくれる機能があると嬉しいな。
例えば --slug 'erc20-*' と指定できる、とか。
自分の検索容易性のため、先頭部分は好きなのを付けたい

canard0328canard0328

slugの具体的な指定方法をこのページに記載しておいていただきたいです。

Zenn公式Zenn公式

追記しました。

コンテンツのGitHubリポジトリ管理を行っている場合はslugを任意に指定できます。例えば、GitHubリポジトリから/articles/what-is-slug.mdという名前のファイルをデプロイすると、その記事のURLは以下のようになります。

https://zenn.dev/ユーザー名/articles/what-is-slug
canard0328canard0328

早速対応頂きありがとうございます。私のコメントの意図が不明瞭で申し訳ございません。私のコメントは、

npx zenn new:article --slug what-is-slug

のようにslugを指定できることがこのページに記載されていたほうがよいのでないか、というものでした。
「zenn slug 指定」と検索するとこのページがトップにヒットするため、
このページだけでslugの具体的な指定方法がわかるようになっているとよいと思います。

Kazuki HASEGAWAKazuki HASEGAWA

質問です
slugを用いると以下のルールでURLが発行されるわけですが、slugの名前空間がユーザーのリソースごとではなく、zenn全体なのは違和感があります。

https://zenn.dev/ユーザー名/articles/${slug}

このslugの仕様は改善できないものでしょうか?

https://zenn.dev/articles/${slug}

なら、slugがzenn全体で一意であることをユーザーに求めるのはまだ理解できるのですが・・・

teztez

同感です。
大いに違和感があります。
書いている本人がファイルを見ただけでは内容が判らないというのはとても困るので、可能なら判り易い名前が良いのですが、そういうのは競合し易い名前でしょう。
ですが、ユーザ名を名前空間に含んでいるなら全体が競合する事は考えなくても良いはずで...

質問が2か月も放置されているというのは、検討する気も無いって事でしょうかねぇ。

避けられない仕様なら受け入れるしかないのですが、競合した場合はどうなるのでしょうか?
また、競合している事を事前に察知する事は可能なのでしょうか?
この辺りに引っ掛かって、全然書き始める事が出来ないで居ます。

Zenn公式Zenn公式

お返事遅くなりすみません。
slugの仕様に関してはシステム設計の根幹に関わる部分なので変更する予定はありません。
GitHubでコンテンツを管理する場合、slugの衝突を事前に検知できないという課題はあると思っていますが、実際にはほぼ発生していないので対応を見送っている状況です。

teztez

slugの仕様に関してはシステム設計の根幹に関わる部分

多分「当初は」そうだったのかもしれないけれど、名前空間のほぼ先頭に、一意であるだろうユーザ名があるので、現在では冗長な仕様なんじゃないかという(質問者さんの)指摘だろうと思います。
僕も、仕様を見直しても良いのではないかと感じて、賛同しました。
それとも、管理上はユーザ名を含まないモノでフラットに並べているのでしょうか?

slugの衝突を事前に検知できないという課題はある

その場合はどうなるのかも質問したつもりですが?

書いている本人がファイルを見ただけでは内容が判らない

この件については、解決方法は無いと?
競合覚悟でやってみる(競合時の挙動は未回答)か、別の質問者さんみたいに先頭を意味のある文字列にして以降をランダムで埋めるか位でしょうか...

蒼凰【あお】蒼凰【あお】

新規でslugを設定した時に従来のidで記載されている記事を削除することはできないのでしょうか?
それぞれ旧ID,新slugの2種類ずつページができてしまい、GitHubでみてもGit確認しても404吐かれるのにZennだけ反映されている状況で手出しが出来ず、、