Qiita CLI 向けにリネーマースクリプトを書いたが無意味だった件

# Qiita CLI で pull すると

Qiita CLI の導入まで済ませてとりあえず `npx qiita pull` で既存の記事を `pull` してくると `public` ディレクトリに以下の様な感じで `<id>.md` という書式で降りてくる。

```
e3308b3dcc83ece119d3.md
e3a83eb8e2342e817290.md
e3d3831db7cc758446ee.md
e5da37cfa030a59eb6a2.md
e66353a799444183072a.md
e665b49b84ddfe4cf6e3.md
e67ddb91231109ff2160.md
e68483e65923b89605ca.md
...
```

好きなエディタで編集出来るという**ウリ**だがさすがにこれではどれが何の記事なのかさっぱり分からないので好きな markdown エディタ、特に Obsidian のようにタイトル = ファイル名のエディタで管理するのは難しいだろう。

## リネーマーを書いた

ということで、[リネーマースクリプト](https://gist.github.com/tettekete/123eefee8856f9ce2384c14cc83a3de7)を書いた。

記事のファイル名は好きにして良いと言うことだったので、ついでに手動である程度ディレクトリを分け、非公開記事は `private-on-qiita` に入れていざ `commit` && `push`！！

こんな感じ:

```
public
├── DB-SQL
│   └── SQL - ランダムに行を取得したい.md
├── SublimeText
│   └── SublimeText3 - バッククオートを自動ペア入力するコンフィグ.md
├── docker
│   └── Docker - OCI runtime create failed エラー.md
├── git
│   ├── ...
│   └── git - status 表示で untracked を無視させる.md
├── misc
│   └── Windows Subsystem for Linux + Docker for Windows を使えるようにするまでメモ.md
├── perl
│   ├── ...
│   └── perl - 動的 use lib 実装.md
├── private-on-qiita
│   ├── ...
│   └── コミットメッセージルールめも.md
└── sh
    └── bash - 隠しファイルのみ表示.md
```

## しかし元の木阿弥

GitHub Actions が終わった頃合いを見て `git pull` するとなぜかローカルにまたハッシュ値めいたファイル名がずらり！

```
e3308b3dcc83ece119d3.md
e3a83eb8e2342e817290.md
e3d3831db7cc758446ee.md
e5da37cfa030a59eb6a2.md
e66353a799444183072a.md
e665b49b84ddfe4cf6e3.md
e67ddb91231109ff2160.md
e68483e65923b89605ca.md
...
```

Oh...

どうやら、Qiita CLI がセットアップする GitHub Actions は GitHub 側で `qiita pull` を実行して `commit` する仕様の様だ・・・。


## 気を取り直して public ディレクトリに記事ファイルを置いてみる

まあ、この記事自身を `public/renamer-for-qiita-cli.md` として保存してみた。

そして `commit` && `push`！！

### が、GitHub Actions がコケる

GitHub Actions のログを見てみると以下の様なエラーが出ている。

```log
Run qiita publish --all --root .
renamer-for-qiita-cli: titleは文字列で入力してください
renamer-for-qiita-cli: tagsは配列で入力してください
renamer-for-qiita-cli: privateの設定はtrue/falseで入力してください
renamer-for-qiita-cli: updated_atは文字列で入力してください
renamer-for-qiita-cli: idは文字列で入力してください
renamer-for-qiita-cli: organization_url_nameは文字列で入力してください
renamer-for-qiita-cli: slideの設定はtrue/falseで入力してください（破壊的な変更がありました。詳しくはリリースをご確認ください https://github.com/increments/qiita-cli/releases/tag/v0.5.0）
Error: Process completed with exit code 1.
```

どうも自分で書いた記事も Forn Matter[^1] とやらを付けなくてはいけないようだが、さすがに `id` は分からんよなあ、、、という。


### なるほどならば `npx qiita new` だ

```sh
$ npx qiita new renamer-for-qiita-cli   
Error: 'renamer-for-qiita-cli.md' is already exist
```

・・・なるほどね、先に自分でファイルを作っちゃダメなのね、なるほどね。。。

削除して再び `npx qiita new` する。

```sh
$ git rm -f public/renamer-for-qiita-cli.md
rm 'public/renamer-for-qiita-cli.md'
$ npx qiita new renamer-for-qiita-cli      
created: renamer-for-qiita-cli.md
```

作成された `renamer-for-qiita-cli.md` の中身を見てみると以下の様な感じになっている。

```
---
title: renamer-for-qiita-cli
tags:
  - ''
private: false
updated_at: ''
id: null
organization_url_name: null
slide: false
ignorePublish: false
---
# new article body
```

なるほどね、これで Front Matter[^1] とやらが自動的に付与されるのね、なるほどね。。。

これを編集[^2] して今度こそ `commit` && `push` だ！！

## ようやく公開される

GitHub Actions の処理が終わったところでようやく Qiita に公開された。

# まとめ

GitHub Pages のような感じで記事を管理できると考えていたが、ちょっと違うものだった。

Qiita CLI を用いた記事作成のワークフローは以下の様になる。

1. `npx qiita new "記事名"` で `記事名.md` ファイルを作る（日本語ファイル名も大丈夫みたい）
2. `記事名.md` の Front Matter[^1] 部分にタイトルやタグを書く[^2]
3. 記事の本文を書く
4. プレビューを見たいなら `npx qiita preview` で立ち上がるプレビュー Web アプリで確認する
5. `記事名.md` を `commit` && `push`
6. GitHub Actions の処理が終わると Qiita に公開される。
7. Front Matter[^1] 部分が更新されているので `pull` しておく


つまりすでに `id` がファイル名として割り当てられている既存の記事のリネームには対応していないと思われる。

## Qiita Preview はどうなのか

[公式の説明](https://github.com/increments/qiita-cli?tab=readme-ov-file#%E8%A8%98%E4%BA%8B%E3%81%AE%E4%BD%9C%E6%88%90)では Qiita Preview から「新規記事」を作る事もできる、とあるのでやってみた。

結論としては:

1. ファイル名が `newArticle001` という感じで固定+連番になる模様
2. 記事内容の編集は一切出来無い

ので、最初から `npx qiita new "記事名"` で好きなファイル名を自分で付けた方が良さそう。

まあ、あくまで記事のプレビュー用アプリでオマケとして記事ファイルの作成（≠編集）機能がある、というものなんでしょうね。


## 追記: 日本語ファイル名とサブディレクトリ

その後、一応日本語ファイル名とサブディレクトリについても検証したところ以下の結果となった。

- 日本語ファイル名 → OK
- サブディレクトリ → 全て無視される

サブディレクトリが使えないのは手痛い。

大量の限定共有記事が HEX なファイル名でフラットに並んでいる状況でサブディレクトリも使えないのでは新規記事の整理もキビシイものがある。


[^1]: makrdown ファイルの冒頭に付く `---` で始まり `---` で終わる YAML 形式のメタ情報
[^2]: `title` 以外は弄らなくても OK だがタグに空文字(`''`)があるのは GitHub Actions でエラーの原因となるので注意。