前提

  • Gitbucket 4.2
  • nodejs

概要

結婚を決めてから結婚関連の色々を夫婦で管理するのにBacklogを使っていた。
最初こそチケット管理!とかバージョン管理!とか息巻いていたものの、非エンジニアの妻にそこまで求めるのは現実的じゃないので、結局Wikiだけを使っていた。
その後、結婚式関連やハネムーン関係で大変役立てたあと放置してました。
長らくログインもせずBacklogの運用の変化を追えるとも限らないので、自前のGitbucketへデータをコピーしておきたいと考えました。

Gitbucket

GitHubクローンを目指して作られているOSSで、デブロイが大変簡単。
自前のサーバでNginx/Jetty/PostgreSQLで運用中。
ここにmarrigeプロジェクトを作成して、そのWikiにデータを移す。
marrigeプロジェクト作成

GitbucketのWikiをローカルへコピー

GitbucketのWikiはGitで管理されているので、git cloneして編集できる。
Wikiのどこのページにも右下に Clone this wiki locally があるので、ここからURLを取得する。

WikiのURL表示部分

端末を立ち上げ、Wikiリポジトリをgit cloneする。

~$ git clone ssh://git@my.gitbucket.server:99999/toming/marriage.wiki.git
Cloning into 'marriage.wiki'...
remote: Counting objects: 3, done
remote: Finding sources: 100% (3/3)
remote: Getting sizes: 100% (2/2)
remote: Compressing objects: 100% (65/65)
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), 238 bytes | 0 bytes/s, done.
Checking connectivity... done.
~$

BacklogのAPIキー取得

Backlog APIを使用してデータを取得するので、APIキーを取得する必要がある。
Backlogにログイン後、”個人設定”->“API”と進んで”メモ”に名前を設定して”登録”すると下記の通りAPIキーが作成される。
このキーをコピーしておき、以降のBacklogアクセスでURLに設定する。
WikiのURL表示部分

Backlog API

使用するBacklog APIは下記2つ。

ファイル名制約

GitbucketではGitリポジトリにページを保存し、ファイル名をタイトルとしているため、ファイル名として使用できる文字の制約をそのまま受ける。 Gitbucketのソース上はおそらくここでバリデーションしている?

制約をまとめると以下の通りとなる。

  • \ / : * ? " < > |のいずれかの文字を含む
  • _ -のいずれかの文字で開始している
  • _Sidebar, _Footerのいずれかと一致する

後述するGistでは特定文字を含むパターンのみ変換し対応している。

Wikiページ取得からファイル保存まで

端的には環境変数を設定して下記Gistを実行することでBacklog用のファイル出力ができる。

実行時の記録

~/marriage.wiki$ export backlog_space=hoge
~/marriage.wiki$ export backlog_project=Hoge
~/marriage.wiki$ export backlog_apikey=hogeHOGEhogeHOGEhogeHOGEhogeHOGEhogeHOGE
~/marriage.wiki$ nodejs BacklogWikiToGitbucket.js
Save wiki: BGM.md
Save wiki: BGM(挙式&披露宴).md
Save wiki: Home.md
〜〜〜中略〜〜〜
~/marriage.wiki$

GitリポジトリにコミットしGitbucketへpush

~/marriage.wiki$ git add .
~/marriage.wiki$ git commit -m "BacklogWiki移行!!"
git commit -m "BacklogWiki移行git add ."
[master 41149d7] BacklogWiki移行git add .
 61 files changed, 4307 insertions(+), 1 deletion(-)
 create mode 100644 "BGM(\346\214\231\345\274\217\357\274\206\346\212\253\351\234\262\345\256\264).md"
 create mode 100644 BGM.md
 rewrite Home.md (100%)
 〜〜〜中略〜〜〜
 ~/marriage.wiki$ git push origin master
 Counting objects: 72, done.
 Delta compression using up to 6 threads.
 Compressing objects: 100% (72/72), done.
 Writing objects: 100% (72/72), 120.84 KiB | 0 bytes/s, done.
 Total 72 (delta 2), reused 0 (delta 0)
 remote: Resolving deltas: 100% (2/2)
 remote: Updating references: 100% (1/1)
 To ssh://git@my.gitbucket.server:99999/toming/marriage.wiki.git
    d402783..41149d7  master -> master
 ~/marriage.wiki$

記法の違いに関しては目的のWikiで使用している部分に関してはなんとなく変換を行っているが、各ページ見て修正は必要だろう。 いちいち1ページずつやるよりは楽にできた。