esa.ioに他のWikiツールから移行するやつをつくった

技術

2020-1-3-13-48-52.png

usagiga/migrant: Migrate to esa.io from your wiki tool.

渡り鳥ヤローが来やがったな。

発端

ぼくは esa.io をよく使います。もともとメモ魔なので、紙に書いたりWebサービス使ったりしてたんですが、試行錯誤の結果、自分でデプロイするサービスより信頼できるという点でここに落ち着きました。

ただ、esaに行きつくまでのさまざまな方法で記録した膨大なデータが散らばったままになっていて、どうにかしないとぼくは手の運動をするために記録したひとになってしまう。オタクファッションを受け入れてくれる自動手記人形の会社とかありませんか?

不幸にもそんなものはなく、しかし幸いにもesa.ioのAPIを叩けば1分あたり5記事とゆっくりではあるものの自動的に記事を移行できそうでした。そういうことでつくったのがこれ。

書いた

細かいことは レポジトリ に書いたので読むとわかる。 これにて記事は終了です!お疲れさまでした~~~

毎回言ってる読むとわかる系はマジで読むとわかるしこれ以上わかりやすい話なんかなくて、ファイルをイテレータで取り出してレートリミットに気を配りながらAPI叩くだけのことなので、読むとわかるって感じですね。

flag パッケージってなんで args パッケージじゃないん?

var teamName string
var apiKey string
var maxPostsPerWindowSize int
var postsWindowSize int

// Read flag
flag.StringVar(&teamName,"team", "", "team name")
flag.StringVar(&apiKey,"key", "", "personal access token")
flag.IntVar(&maxPostsPerWindowSize, "max-posts", 70, "The number of posts within window size")
flag.IntVar(&postsWindowSize, "window-size", 15, "rate limits window size")

flag.Parse()

設定の読み込みには flag を使いました。 コマンドラインツールだし引数でお手軽に使えたほうがよかろうという気持ちだったのと、引数を読むのにargsを解読するロジックを書くのが面倒だったためです。で、なんでお前 args って名前じゃないの?

ただ flag には些細な問題があって、機能拡張していくにつれて引数が増えていくとつらい。 シェルは文明の利器なのでhistoryがあります。つまり引数はめっちゃ手軽にガチャプレイできるんですが、引数が長くなるとカーソル動かすのが大変になってしまう。 Goだと flag のほかにJSONとか環境変数使うのが実装の上では楽なのですが、ユーザーとしては何が楽になるのか? git config みたいに、あまり変わらない値は永続化しておいて、 git push origin hoge みたいに都度変える値だけ使う時に指定するとかやるのがコマンドラインでは楽なように思うんですが、実装考えるのめんどくさいですね。

開発ロードマップ

migrantは現状ではesa.ioからエクスポートしたデータをそのままアップロードする機能しかありません。今後ぼくの移行作業が進むにつれて機能が増えます。非常にわかりやすい開発ロードマップですね。いきあたりばったり。

まとめ

ぼくがメインで触っているのはGoやC#なのですが、マルチプラットフォームかつシンプルな開発環境がいろいろ整ってきていて時代の変化を感じますね。 特にGoは配布から自前でビルドするまでがめちゃめちゃ楽でバイナリも小さいので、色んなツールで使われているのもわかるな~という感覚でした。

いま記事に書いてないことまとめに書きました?