Confluenceのドキュメントをマークダウンで書きたい

今参加しているプロジェクトでは、Confluence が使われています。
ドキュメントを共有するという仕組みとしては、とてもよいサービスだと思います。
特に、非エンジニア視点で、さまざまな表現力で文書を書けるので、エンジニア側の都合を無理強いすることもなく、立ち位置の違う人たちが共有するものとして、適していると思います。

テキストエディタでドキュメントを書きたい

でも、以前、仕様書をマークダウンで書きたいという記事を書きましたが、エンジニアは、テキストエディタでドキュメントを書きたいので、しっくり来ない点も多々あるんです。

どの辺が不満かと言うと、まずは、 Confluence の wiki マークアップというのが、 textile の記法に近い感じで、マークダウンじゃないというところ。

Confluence のアドオン機能でマークダウンの記事も投稿できるのだけど、手元のエディタで書いたドキュメントを Confluence のマークダウン記事投稿画面に貼り付けないといけないので、なんだか心地よくないです。 git commit から push で投稿したいですよね。
ついでに、アドオン機能のマークダウンだと、マークダウンの文書間のリンクが、そのまま Confluence のページ間のリンクにならないんです。 Confluence のページが相対パスで指定するものじゃないので、そりゃそうなんだけど・・・、イマイチなんです。

Confluence と github wiki の同期

ユーザーと共有するドキュメントは、Confluence なんだけど、開発チーム内では、github の wiki で仕様書を書いているので、何か、同期するようなツールがないかなぁと、探してみたのだけど、ピッタリのツールは見つけられなかったです。ニッチすぎますからね、そりゃそうです。

それならば!ということで、ツールを作ることにしました。

ツールのポイントは、3つです。

  • オリジナルのドキュメントは、マークダウンで書いていて、github wikiでバージョン管理する
  • Confluence の画面を開いてテキストを貼り付ける的なことは止めたい
  • Confluence 上でも、ドキュメント間のリンクが再現されること

テキストの貼り付けを止めるには?

何ページも、この操作をするのは、やりたくないので、マークダウンを Confluence wiki マークアップに変換して、 Confluence API でコマンドラインから、投稿することにしました。
探してみると、使えそうなものがいくつか見つかりました。 さすがに要求ピッタリのツールは無かったので、足りない部分は、専用の cli を自作することにしました。

  • markdown2confluence-cws
    nodejs製のツールです。これで、マークダウンを Confluence wiki マークアップに変換します。

  • confluence-api
    Confluence の API のラッパーライブラリです。
    https://github.com/johnpduane/confluence-api から fork したものです。一部のAPIがエラーで動かなかったので、修正して使っています。

  • 専用cliツール
    上記の2つを使って、パラメータで指定されたmdファイルを変換して、APIで投稿するツールです。

ドキュメント間のリンクをどうするか?

Confluence のドキュメントは、ページタイトルがユニークになっているので、ページタイトルでリンクを張るようになっています。 wikiのリンクと言えば、この仕様の方が普通で、 redmine の wiki も backlog の wiki もこれです。
github wiki のmdファイルの相対パスでリンクを張る方が、wiki としては特殊なんだと思います。
また、Confluence の wiki の階層構造は、親ページを設定することで、表現しています。

いくつかやってみて、専用 cli の中でリンクを変換するやり方に落ち着きました。ついでにリンク切れチェックなんかもできました。
そして、Confluence 上のドキュメントは、ユーザー側でも、いろんな書類を作成しているので、開発側都合のページタイトルや階層をそのままにできないところもあり、マークダウンのドキュメントの中に、 Confluence 上でのページ名と親ページ名を Front-matter で持たせておくことにしました。

こんな感じです。

---
title: アカウント管理画面
parent: 画面仕様
---

**機能概要:**
アカウント管理画面の仕様について記載する。

**入力:** 
* パラメータ1
* パラメータ2
* パラメータ3

**処理詳細:** 

・・・・

Front-matter は、静的Webサイトジェネレータのjekyllでも使われていて、jekyllは、githubにblogを公開するツールなので、考え方としても、相性が良さそうです。

モヤモヤ解消

以上、 Confluence でプロジェクト全体の文書共有してるけど、開発チーム内ではマークダウンで文書を書いて git で管理したいんだよなぁ・・・とモヤモヤしたときには、開発側文書を専用のcliツールで Confluence に共有してみては・・・というお話でした。

実際に、文書を投稿するときの cli は、こんな感じです。

vi docs/hoge.md
git add docs/hoge.md
git commit -m "update hoge"
git push origin master
npm run md2c docs/hoge.md  # これが専用cliツール

Confluenceの投稿画面を開いて、テキストを貼り付けるっていう気持ち悪さも、少しは解消されるんじゃないでしょうか。

専用cliについては、githubで公開しているので、詳しくは、そちらも参照してみてください。
https://github.com/a5doc/md2confluence

\(^▽^*) 私たちと一緒に働いてみませんか? (*^▽^)/

少しでも興味をお持ちいただけたら、お気軽に、お問い合わせください。

採用応募受付へ

(採用応募じゃなく、ただ、会ってみたいという方も、大歓迎です。)