レタスのかわをぜんぶむく

ぜんぶむきます

Qiita/Qiita:Teamの投稿を一括置換するツールをGoで作った

経緯

社で運用している複数のQiita:Teamを統合することになった。
統合にあたり、投稿やプロジェクト自体は問題なく移行できるが記事内のURL参照は自動で置換されないことがわかった。

そのままだと他の投稿への参照が切れてしまうので修正が必要だが膨大な量の投稿を手動でやるのは面倒、というか無理。

作った

github.com

Qiita, Qiita:Teamのトークン、置換前文字列、置換後文字列、所属Qiita:Teamドメインを設定すると
これまで自分が書いた全ての投稿の本文内の文字列を置換する。

試したけどできなかったこと

管理者アカウントでの全ユーザー全投稿の一括置換。作業工数的には一番これが理想だったけど無理そう。
もしかするとAPIドキュメントで見落としがあるかもしれないけど、見つけられなかった。

実装メモ

  • github管理しているプロジェクトは、$GOPATH/src/github.com/{user}/{repo}として置いた方がよい
    • 更新かけるたびに毎回 go getするハメになって何かおかしいと気づく
      • これまでプロジェクト内で他のパッケージを作ったことがなかった
  • Goをすごい便利でモダンなBetter Cと思ってたのでAPIアクセス大変そうに思ってたけどそうでもなかった
    • リクエスト/レスポンスの定義はAPIリファレンスのサンプルオブジェクトをjson-to-goに貼って終わり
      • 便利!!!
  • type hogehoge []structで定義した型の要素でハマった。具体的にはトップレベルが配列のjson
    • hogehogeをパースした後別メソッドにhogehoge[0]を渡したいときどうすれば…
      • 配列を内包するオブジェクトを作ってそれをUnmarshalした
      • 言語仕様をふわっとしか理解してない弊害が
  • Qiita API v2の PATCH /api/v2/items/:item_idでハマる
    • エラーメッセージは特になくて、"forbidden"みたいなログしか出ない
    • 記事によってtagがある無しでハマってた…?更新対象をtitleとbodyだけにすると解決。

オチ

統合後、Qiita記事同士のリンクはいい感じに対応されていて必要なかった。無念。
それはそうだよね…

どこかで使うことがあれば使おうと思う。多分ない。