LoginSignup
1
0

Qiita CLIを始めてみた

Posted at

今更感はありますが、Qiita CLIがリリースされたということだったので、もう何年も記事などまったく投稿していないというのになぜか使ってみようと思い立ちました。

少し検索してみればいろいろな方が関連する記事を上げてくれているのでインストール自体は問題なく完了。早速記事を書いてみようかと思って、記事作成のコマンドを確認するとこんな感じ。

npx qiita new 記事のファイルのベース名

「こんな時、記事のファイルのベース名とかって考えるの面倒くさいよな」などとふと考えてベース名を作るスクリプトを作ることにしました。

といっても非常に簡単な作りで、実行時のシステム日付を取得してそこからMD5ハッシュを求めればいいかなと安易に考えたのが次のスクリプトです。ベース名を考えるだけではなくサブプロセスで記事作成コマンドも実行します。

import hashlib
import datetime
import subprocess


def newid():
    now = datetime.datetime.now()
    timestamp = now.strftime('%Y%m%d%H%M%S')
    md5 = hashlib.md5(timestamp.encode('utf-8')).hexdigest()
    return md5


def main():
    id = newid()
    cmd = "npx qiita new %s" % id

    result = subprocess.run(
        cmd,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True
    )
    print(result.returncode)
    print(result.stdout)


if __name__ == "__main__":
    main()

スクリプトを実行すると次のようなFrontmatterが含まれるマークダウンファイルが作成されました。どうやら指定したベース名がtitleに書かれるみたいです。

ファイル名: f60698f78b6b0468c60eddc1a5cfa1b4.md

---
title: f60698f78b6b0468c60eddc1a5cfa1b4
tags:
  - ''
private: false
updated_at: ''
id: null
organization_url_name: null
slide: false
ignorePublish: false
---
# new article body

しかし、いざ使ってみるとMD5ハッシュなのでファイル名は32文字と長いし並び順もわかりにくいのではないかと考え直して修正したのが次のスクリプトです(ID生成部のみ抜粋)。

def newid():
    now = datetime.datetime.now()
    timestamp = now.strftime('%Y%m%d%H%M%S')
    return '{:x}'.format(int(timestamp))

タイムスタンプを数値とみなして16進数に変換したものをベース名にしてみました。これならファイルは作成した順序で並ぶはずだから前述のMD5ハッシュを使った時よりわかりやすいのではないでしょうか。

ということでしばらくこれを使ってみようかなと考えています。

ファイル名: 126672b0a357.md

---
title: 126672b0a357
tags:
  - ''
private: false
updated_at: ''
id: null
organization_url_name: null
slide: false
ignorePublish: false
---
# new article body

まあ、「タイムスタンプをそのままベース名として使えばいいのでは」というご意見はもっともだなと素直に受け入れたいと思います。

1
0
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
1
0