記事投稿を楽に管理したいんじゃ!
やりたいこと
Qiita と Zenn に記事を投稿しているが、管理が別々になって大変なので共通して管理できるようします。
方針
- ベースは Zenn
- リポジトリを Zenn と連携させる必要があり、ディレクトリ構成も仕様に合わせる必要があるため
- Zenn 用に作成した記事を Qiita 用の記事に変換する
- 作成するのは Zenn 用の記事のみ
- Markdown の先頭に記事のメタデータを設定する箇所がそれぞれにあるが、差があるのでスクリプトで変換する
- Qiita への投稿は GitHub Actions 上で行う
ディレクトリ構成
以下のようなディレクトリ構成。
Zenn の構成に基づいて、Qiita 用のディレクトリを作成している。
├── README.md
├── articles
├── books
├── create_qiita_article.sh
└── qiita
Prerequisites
- Node.js
- 18.0.0 以上 (Zenn CLI では14以上ですが、Qiita CLI では18以上が必要)
Zenn CLI
以下のページを参考にインストールする。
Zenn CLI の場合は、記事投稿を行うために GitHub のリポジトリと事前に連携させておく必要がある。上記のリンクを参考に行う。
インストール後、以下コマンドでリポジトリの初期化を行う。articles
や books
のディレクトリが作成される。
npx zenn init
Qiita CLI
以下作業は qiita
ディレクトリで行う。 以下のページを参考にインストールする。
qiita
ディレクトリでインストール完了後、以下コマンドで初期化を行う。
cd qiita # qiita ディレクトリで行う
npx qiita init
Qiita CLI の場合は、記事投稿を行うために Qiita のアクセストークンを事前に取得しておく必要がある。上記のリンクを参考に行う。
Qiita の記事は GitHub Actions を使用して行う。そのため、発行したアクセストークンは GitHub Secrets に登録しておく。GitHub のシークレット設定から QIITA_TOKEN
という名前で発行したトークンを登録しておく。.github/workflows/publish.yml
で Qiita への投稿が行われる。
記事の作成
Zenn CLI を使用して記事を作成する。以下のコマンドで記事を作成する。
npx zenn new:article
以下の項目は必須。
title
-
type
-
tech
またはidea
-
-
topics
- 1つ以上指定する
-
published
-
true
またはfalse
-
true
の場合は公開状態で投稿される -
false
の場合は下書き状態で投稿される
-
- 記事の本文
[!NOTE]
記事の削除については、Zenn・Qiita ともに CLI では対応していないので、Web 上で行う必要がある。
Qiita 用に記事を変換
Zenn 用の記事に設定されている Front Matter を Qiita 用に変換するために以下のようなスクリプトを作成した。
(必要に応じて変更してください)
#!/bin/bash
INPUT_FILE="$1"
FILE_NAME=$(basename $INPUT_FILE)
QIITA_ARTICLE_DIR="qiita/public"
QIITA_FILE_PATH="$QIITA_ARTICLE_DIR/$FILE_NAME"
# convert to Qiita article format
awk '
BEGIN { in_block=0 }
/^---/ {
in_block++
if (in_block==2) exit
next
}
in_block==1 { print }
' "$INPUT_FILE" | \
yq eval '
.tags=.topics |
.private=( .published | not ) |
del(.emoji, .type, .topics, .published) |
.updated_at= "" |
.id= "" |
.organization_url_name= null |
.slide= false |
.ignorePublish= false
' - | awk 'BEGIN {print "---"} {print} END {print "---"}' > $QIITA_FILE_PATH
sed -n '8,$p' "$INPUT_FILE" >> $QIITA_FILE_PATH
記事の公開
Zenn は対象のリポジトリと連携しているので、リポジトリに PUSH すると記事が公開される。
Qiita は GitHub Actions 上で行う。公式で workflow を用意してくれているので、それを使う。
その他、ワークフロー全体の処理はお好みで。
ということで
今回は、Zenn と Qiita の記事投稿を楽に管理する方法について紹介しました。今までは Qiita がメインだったのですが会社として Zenn が推しているようなので、そちらでも書いていこうかと思ったときに管理が面倒だったので、1つの記事を2つのサービスに投稿できるようにしました。
Organization 向けにはレビュープロセスがある企業も多い思うので、そのあたりも改善していきたいところです。
以上です!
Discussion