自宅のwikiをBitbucketのwikiに移行した
書くまでもないですが、自宅でwiki運用をすると外出先で編集どころか閲覧すらできないというデメリットがあります。いずれ解決したいなーと思っていたのですが、せっかくの休みなので片付けることにしました。
自宅WikiはMediaWikiを利用しているので、MediaWikiの形式からMarkdown形式に変換してやる必要があったり、変換がうまくいかなかったりで少し苦労しました。
MediaWiki形式からMarkdown形式に変換
幸い、Pandocという変換ツールがあったのでコレを利用しました。Haskellで作られたコマンドらしく、Haskellをインストールしてから、cabalコマンドでインストールします。
wget http://sherkin.justhub.org/el6/RPMS/x86_64/justhub-release-2.0-4.0.el6.x86_64.rpm
rpm -ivh justhub-release-2.0-4.0.el6.x86_64.rpm
yum install haskell
cabal update
cabal install pandoc
CentOSにHaskellをインストール - Qiitaを参考にPandocをインストール。なお、cabal install pandocだと~/.cabal/bin/以下にインストールされます。システムにインストールするには--globalオプションを付ける必要があるようです(Haskell パッケージのインストール方法 | サイト運営の私的メモ)。
その後、mediawikiフォーマットのファイルをin.mediawikiとして保存しておいて下記のコマンドを実行することでout.markdownファイルにmarkdown形式で出力されます。
pandoc -f mediawiki -t markdown_github in.mediawiki -o out.markdown
-tオプションにはmarkdown_githubを指定します。BitbucketはGithubの方言にも対応しているみたいです(どれぐらい対応しているのかは知りませんが)。ただし、これでスルッとうまくいくかというと、やはりうまくいきません。
いくつかの問題
テーブル関係
{| class='wikitable'
| rowspan='2' | Japan || HOGE
|-
| PIYO
|-
| rowspan='2' | USA || FOO
|-
| BAR
|}
テーブル関係の問題は特に酷く、上記のMediaWiki形式で書いたテーブルを例に説明します。
class='wikitable'と記述している部分ですが、このままだと下記のようなエラーが発生して変換がうまくいきません。class="wikitable"に直す必要があります。消してしまっても構いません。
pandoc:
Error:
"source" (line 733, column 10):
unexpected "'"
expecting "\""
つぎに、列見出しがないため、Markdownのフォーマットに合わず、変換結果をBitbucketのwikiに登録してもうまくパースしてくれません。列見出しをつける必要があります。
最後に、rowspan='2'を認識せずにセルの値としてPandocが変換してしまい、テーブルがガタガタになってしまうため、rowspan='2'を消して空白セルを追加するなど、整形しておく必要があります。修正内容を適用すると下記のような感じになります。
{| class="wikitable"
! Country !! メタ構文変数
|-
| Japan || HOGE
|-
| || PIYO
|-
| USA || FOO
|-
| || BAR
|}
ヘッダ
テーブルの問題に比べれば可愛い問題ですが、下記のようにヘッダに=が含まれている場合は、MediaWiki構文がそのまま出力されてしまうため、手作業で直す必要があります。
=== --color[=WHEN] ===
ひとまず、これで問題なさそうでした。
pandocコマンドについてはここらへんを参考にしました:HTML - 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita、Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association
追記
その後、プレビューなどの表示でHTMLに変換されずにそのままテキストが表示されてしまう問題に遭遇しました。再現性がなく、同じテキストでもうまく変換されるときがあったりなかったり、登録時には変換されても数時間後に表示するとテキストになったりという具合でした。今回の移行データがテキストのみで260KBなのでまあ、パースに時間がかかってしまい、途中でタイムアウトしてテキストそのまま表示するという感じなんでしょう。