0
1

Qiita-CLIで作ったmdファイルを整理するpart1

Last updated at Posted at 2024-02-01

はじめに

Qiita-CLI を使っていると md ファイルが多くなりすぎて管理ができなくなってしまう.
もちろん,後に編集はできるようにしたいのですべて public フォルダにおいておきたい.(md ファイルが public フォルダにないとプレビューがみれない)

そのため,ファイル名を正規化して,ツリー構造を作成することでどのような記事があるかを一目でわかるようにする.

part2 でよりアップデートしているので,そちらも参照してください.

最終的に

ファイル構造

public
│  00_HowTo.md
│  math_Fourie.md
│  _aws_ec2.md
│  _aws_vpc.md
│  _eng_AM.md
│  _eng_equLowRangeSystem.md
│  _eng_FMPM.md
│  _llm_Bard_Bard.md
│  _llm_chatGPT_IphoneShortcut.md
│  _llm_GithubCopilot_noAnswer.md
│  _math_Laplace.md
│  _programming_mock.md
│  _py_qiitafile.md
│  __docs.md
│
└─.remote
        11111111111111111111.md
        22222222222222222222.md

.remote フォルダは公開している記事のものなので無視

この時出力は

├─
│   └─ *docs.md---title: memo
├─ 00
│   └─ HowTo.md---title: How To Write Blogs with Qiita-CLI
├─ aws
│   ├─ *ec2.md---title: About AWS EC2
│   └─ *vpc.md---title: About AWS VPC
├─ eng
│   ├─ *AM.md---title: 等価低域系
│   └─ *FMPM.md---title: 角度変調(FM・PM)
├─ llm
│   ├─ *bard.md---title: Bard
│   └─ chatGPT
│       └─ *IphoneShortcut.md---title: Use ChatGPT with Iphone Shortcut App
├─ math
│   ├─ *Laplace.md---title: ラプラス変換
│   └─ Fourie.md---title: フーリエ変換を信号処理の観点から理解する
├─ programming
│   └─ *mock.md---title: Test with Mock or Stub
└─ py
    └─ *qiitafile.md---title: Qiita-CLIで作ったmdファイルを整理する

出力のポイントは以下の通り

  • ディレクトリはブログのジャンル

  • タイトルも書いてあるとわかりやすいのでタイトルも---に続けて出力

タイトルは各 md ファイルの 2 行目としている.
タイトルなどを書いていないとプレビューでエラーが出るので 2 行目にタイトルがあることは前提とする

  • ファイル名の前に * があるのは未投稿のファイル

ファイル名の付け方

まず,ファイル名を正規化する
ポイントは

  • はじめに _ とつけていたら,未投稿
    :::note info
    _ とつけると VSCode ではファイルが上にくる
    :::
  • _ でジャンル(フォルダ)をわける
  • ジャンルは大きい順に書く
    :::note info
    aws の ec2 の startup という記事であればaws_ec2_startup.md
    :::

python コードを書く

結果はこちら

import glob
import os
import numpy as np

def print_tree(folder_files):
    tree = {}
    for file in folder_files:
        parts = file.split('_')
        node = tree
        for part in parts:
            node = node.setdefault(part, {})
    return tree

def print_second_line(file):
    with open(file, 'r') as f:
        return f.readlines()[1].rstrip('\n')

def print_tree_structure(tree, indent='', is_last=False):
    nodes = sorted(tree)
    output = ''
    for i, node in enumerate(nodes):
        if i == len(nodes) - 1:
            output += indent + '└─ ' + node + '\n'
            if tree[node]:
                output += print_tree_structure(tree[node], indent + '    ', is_last=True)
        else:
            output += indent + '├─ ' + node + '\n'
            if tree[node]:
                output += print_tree_structure(tree[node], indent + '│   ')
    return output


md_files = glob.glob('public/*.md')

folder_files = []
for file in md_files:
    file_name = os.path.basename(file)
    if file_name.startswith('_'):
        file_name = file_name[1:]
        file_name = file_name.rsplit('_', 1)[0] + '_*' + file_name.rsplit('_', 1)[1] if '_' in file_name else file_name
    folder_structure = os.path.dirname(file_name)
    tmp = os.path.join(folder_structure, os.path.basename(file_name))
    title = print_second_line(file)
    if title is not None:
        folder_files = np.append(folder_files, tmp + '---' + title)
    else:
        folder_files = np.append(folder_files, tmp)

tree = print_tree(folder_files)

print(print_tree_structure(tree))

これで出力結果が出る.
もう少し楽に書けそうだが,できていればなんでもいいのでこのままでいいでしょう
この出力結果をファイルに書き込んだり追記したりすることで管理がより楽になりそうかも

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1