Confluence Serverにmarkdownドキュメントを同期したい
現在の勤め先ではオンプレミスのConfluence Serverを使用しています。
https://github.com/markdown-confluence/markdown-confluence を使用してGitHub上のドキュメントを同期したいと考えて調査しました。
Confluence Storage Format
Confluence 保存形式 | Confluence Data Center 9.4 | アトラシアン製品ドキュメント
Confluence Serverでは、Confluence Storage FormatというXHTMLベースのフォーマットで保存されます。
REST APIを使って、storage形式で出力することもできます。
body部分だけ抜き出したHTMLのような奇妙な形式になります。
curl -sL "$url/rest/api/content/$page_id?expand=body.storage" \
--header 'Accept: application/json' \
--header "Authorization: Bearer $token" \
>tmp.json
cat tmp.json | jq -r .body.storage.value
<p class="auto-cursor-target"><br /></p><table><tbody><tr><th><p>1</p></th><th><p>2</p></th><th><p>3</p></th></tr><tr><td><p>foo</p></td><td><p>bar</p></td><td><p><br /></p></td></tr></tbody></table><p class="auto-cursor-target"><br /></p>```
試してみたところ、microsoft/markitdown: Python tool for converting files and office documents to Markdown. を使うとmarkdownに変換できました。
❯ jq -r .body.storage.value <tmp.json |
uvx "markitdown[all]"
| 1 | 2 | 3 |
| --- | --- | --- |
| foo | bar | |
マークアップでの挿入
記事の編集画面でMacの場合はCmd + Shift + Dで「マークアップを挿入」が開きます。
markdownまたはConfluence Wiki形式で記事中に「マークアップを挿入」が可能です。
Confluence Wiki Markup | Confluence Data Center 9.4 | Atlassian Documentation
が、REST APIを使用してmarkdown形式でpage contentを作成する際、マークアップの方式を選択できません。
そのためか、markdown形式での作成ではテーブルなどが崩れてしまうため、Confluence Wiki形式での作成がオススメです。
Solved: Insert Confluence / Wiki Markdown via API
Shogobg/markdown2confluence: Tool to convert Markdown to Confluence wiki を使うと、markdownからconfluence Wikiへの変換が可能です。
ただ、テーブルの表示がやはり崩れてしまうため、renderer optionを指定しています。
以下のIssueを上げていますが対応してもらえるといいなぁ...。
Markdown table syntax little change · Issue #15 · Shogobg/markdown2confluence
ざっくりこんな感じで変換してpage作成ができます。
npx @shogobg/markdown2confluence test.md > test.txt
content=$(cat test.txt)
content_json=$(jq -n \
--arg title "$title" \
--arg content "$content" \
--arg space "$space" \
--arg id "$parent_page_id" \
'{
type: "page",
title: $title,
body: {
storage: {
value: $content,
representation: "wiki"
}
},
space: $space,
ancestors: [{"id": ($id | tonumber)}]
}')
curl -X POST -sL "$url/rest/api/content" \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
-d "$content_json"
ADF: Atlassian Document Format
Confluence CloudではADFというJSONを使用した形式で記事が保存されています。
On-Premise Confluence Server Support · Issue #91 · markdown-confluence/markdown-confluence によると、markdown-confluenceではADFのみに対応しているため、Confluence Serverでは利用できないようです。
悲しい...。Issueでは有志が対応しようとしているので期待していますが、以下の2つの問題があって未解決のようです。
- markdownからConfluence storage formatへの変換
- Personal Access Tokenでの認証方式がConfluence CloudとConfluence Serverで異なる
まとめ
Confluence Serverからダウンロードしてmarkdownに変換、はできましたし、markdownからConfluence Wiki形式に変換してアップロード、もできました。
が、GitHubでmarkdown形式のドキュメントを書いてConfluence Serverと同期したい、というところまではまだ何段階か課題が残っています。
この記事が同じ悩みを持つ方の参考になれば幸いです。
Discussion