Kibelaクライアントのkibelasyncを作った
https://github.com/Songmu/kibelasync
Natureでは、Kibelaをナレッジベースとして利用していますが、文章は書き慣れたエディタで書きたいという気持ちがあり、クライアントを作った。GraphQLの勉強にもなると思ったというのもある。
名前やコンセプトはblogsyncのオマージュです。手元にMarkdownをごそっと落としてきて、編集して更新するものです。
Install
% brew install Songmu/tap/homebrew
# or
% go get github.com/Songmu/kibelasync/cmd/kibelasync
https://github.com/Songmu/kibelasync/releases からバイナリ取得も可能です
Setup
KIBELA_TOKEN
とKIBELA_TEAM
環境変数を適宜設定してください。
Usage
記事を取得する
デフォルトでは ./notes
以下にごそっとMarkdownを取得します。これは KIBELA_DIR
環境変数や、-dir
オプションで変更可能です。
また、取得時にMarkdownファイルのmtimeがその記事の最終更新日時にセットされます。
# 全件一括取得(ローカルファイルのほうが新しい場合は更新されない)
% kibelasync pull
# 全件一括取得(問答無用で全てのファイルを上書き・高速)
% kibelasync pull -full
# limit指定(更新日時が新しいものから指定件数取得)
% kibelasync pull -limit 10
# folder指定
% kibelasync pull -folder=議事録
記事を更新する
落としてきたMarkdownを編集後、そのファイルを引数に指定して、push
サブコマンドを叩きます。
% kibelasync push notes/333.md
記事を作成する
サブコマンドpublish
に標準入力、もしくはMarkdownファイルを引数に指定することで新規記事を作成できます。
% kibelasync publish --title=こんにちは /path/to/draft.md
% kibelasync publish --title=kibelasync
さてかきはじめるか…
^D
% echo "# こんにちは\nさようなら" | kibelasync publish
この時、何らかの形でのタイトル指定が必須です。Markdownの冒頭にMarkdownのh1要素がある場合、それがタイトルだとみなされます。
# 共同編集を有効にする
% kibelasync publish -co-edit /path/to/draft.md
# 記事投稿後、当該記事のMarkdownをサーバーから取得して保存する
% kibelasync publish -save /path/to/draft.md
-save
オプションを利用した場合、元のMarkdownファイルは削除されます。
ということで
だいぶ便利だと思うのでご利用ください。開発にあたってはAPIの挙動に関してKibelaにいくつかフィードバックを送らせてもらい、爆速で対応してもらいました。ありがとうございました。
開発言語はGoですが、実装的に面白い点として、APIリミットに引っかからないように、http.Client.Transport
をカスタムして過剰なリクエストを送らないように工夫しています。このあたりは、先日のOpen Go Friday in Fukuokaでお話させてもらいましたが、別記事にまとめるかも知れません。興味がある方は、client/ratelimit.go
辺りの実装を見てみてください。