LoginSignup
65
33

More than 3 years have passed since last update.

QiitaにCLIで投稿や更新できるツールを作った

Last updated at Posted at 2020-04-26

概要

Qiita に CLI で投稿/更新するクライアントツールを作りました。

Qiita は一般公開/限定公開記事問わず、よく利用しています。記事をちょっと直して、投稿し直すこともままあるのですが、いちいち Qiita のエディタから投稿するのが面倒だったので、CLI で更新できると便利なんじゃないかと思い、2, 3日で作りました。

Qiisync

以下に置いてあります。

logo.png

どんなことができるか

Qiisync では以下の 3 つの操作をサポートしています。

  • Qiita から記事のダウンロード
  • Qiita へ記事を投稿
  • Qiita へ記事を更新

記事のダウンロード (qiisync pull)

$ qiisync pull

Qiita の記事を設定ファイルで指定したディレクトリ配下に日付別にダウンロードできます。ローカルファイルを更新していて、Qiita の記事に比べて、ローカルのファイルが新しくなっている場合はファイルが更新されないなどの機能も備えています。

$ ./qiisync pull
     fresh remote=2020-04-14 11:26:38 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /mnt/c/Users/dramt/go/src/github.com/d-tsuji/qiisync/testdata/output/pull/20200413/改行コードって難しいっ.md
     ...
     fresh remote=2019-12-05 07:01:29 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /mnt/c/Users/dramt/go/src/github.com/d-tsuji/qiisync/testdata/output/pull/20191124/GoでシンプルなHTTPサーバを自作する.md
     fresh remote=2019-12-10 07:00:25 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /mnt/c/Users/dramt/go/src/github.com/d-tsuji/qiisync/testdata/output/pull/20191118/GoのFormatterの書式における'+'フラグと独自実装.md
     fresh remote=2019-11-20 10:33:03 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     ...

記事の投稿 (qiisync post)

$ qiisync post <filepath>

任意のファイルパスを指定して、Qiita に記事を投稿します。とても簡単です。
投稿に成功するとメタデータが付与されたファイルが base_dir で指定したディレクトリ配下にダウンロードされます。以降はダウンロードされたファイルを更新し、qiisync update を実行することで Qiita に変更内容を反映することができます。

qiisync post を実行したときの実行例を記載します。投稿時に、タイトル、タグ、限定公開にするかどうかを入力します。

$ ./qiisync post ./testdata/qiita/post/test_article.md

Please enter the "title" of the article you want to post.
はじめてのGo

Please enter the "tag" of the article you want to post.
Tag is like "React,redux,TypeScript" or "Go" or "Python:3.7". To specify more than one, separate them with ",".
Go:1.14

Do you make the article you post private? "true" is private, "false" is public.
true
      post article ---> https://qiita.com/tutuz/items/private/1234567890abcdefghij
     store /mnt/c/Users/dramt/go/src/github.com/d-tsuji/qiisync/testdata/output/pull/20200423/はじめてのGo.md

記事の更新 (qiisync update)

$ qiisync update <filepath>

ローカルにダウンロードした記事を更新して、CLI から Qiita の記事を更新できます。

$ qiisync update ./testdata/output/pull/20200423/はじめてのGo.md
      post fresh article ---> https://qiita.com/tutuz/private/1234567890abcdefghij

ローカルにあるファイルがリモートの記事よりも新しくない場合は、更新は行われません。ローカルファイルの更新日時と Qiita 上の記事の更新日時を比較して判定しています。

$ qiisync update ./testdata/output/pull/20200423/はじめてのGo.md
           article is not updated. remote=2020-04-23 13:34:50 +0900 JST > local=2020-04-23 13:33:10.8990083 +0900 JST

使い方

Qiisync を使うためには Qiita の API トークンが必要です。こちらから取得できます。

次に設定ファイルを書きます。ホームディレクトリ配下の ~/.config/qiisync/config に、以下のような TOML ファイルを置いてください。

[qiita]
api_token = "1234567890abcdefghijklmnopqrstuvwxyz1234"

[local]
base_dir = "./testdata/output"
filename_mode = "title"

Windows でも一応動作するのですが、TOML ファイルに指定するディレクトリパスの ".\\testdata\\output" というように \ をエスケープしないといけないのがちょっと面倒です。あとは読み込むファイルの改行コードは LF しか対応していません。

インストール

各種 OS でインストールできます。詳しくは README をご覧ください。

おわりに

Qiita に CLI で投稿/更新するクライアントツールを作りました。Qiita のエディタを開かずとも、ローカルの使い慣れたエディタで記事を書けて、投稿できます。

開発にあたり、インターフェースなどは blogsync を参考にしました。HTTP クライアントまわりのテストは go-github を参考にしています。

CLI から Qiita に投稿/更新したい方には便利だと思うので、使ってみて下さい!
qiisync に star もつけてくださると開発の励みになりますっ!

65
33
2

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
65
33