tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのユーザーマクロの作り方

バージョンは3系です。4系にも通じるところは多々あるかと思います。
WikiWorksというConfluenceからHTMLマニュアルとかなどを出力する製品を作ってて、Confluenceの方で編集作業をする時に必要だったので色々作り方を調べてみました。


参考:
ログイン - アトラシアン日本語ドキュメント

各パラメータの解説

こんな登録画面です。

マクロ名

マクロを使用するときに使う名前です。日本語も使えますが、半角英数にした方が無難な気がします。上記の場合

{mymacro}ここにマクロに書かれた場合です{mymacro}

というマクロで使うことになります。

マクロ本文

マクロ本文があるとは、マクロとマクロのタグ内に囲まれた文章があるかどうかです。一番単純な場合は

  • マクロ本文あり

{mymacro}ここにマクロに書かれた場合です{mymacro}

  • マクロ本文なし

{mymacro}

ということになります。

その下の選択肢ですが、これは先ほどの
Atrassianの資料からのコピペ。

  • 未処理のマクロ本文を使用 (Use unprocessed macro body)
    マクロの本文は、HTML マークアップも含めて入力したとおりに出力されます。たとえば、マクロ本文が <body> の場合、ページには body と表示されます。
  • マクロ本文の HTML をエスケープ (Escape HTML in macro body)
    マクロの本文は HTML マークアップがエスケープされた状態で出力されます。たとえば、マクロ本文が <body> の場合、ページには <body> と表示されます。
  • マクロ本文の Wiki マークアップを HTML に変換 (Convert macro body wiki markup to HTML)
    マクロの本文は wiki テキストから HTML マークアップに変換されます。たとえば、マクロ本文が *body* の場合、ページには body と表示されます。
出力

これも先ほどの
Atrassianの資料からのコピペ。

テンプレート

これは例示を示した方が分かりやすいかと思います。要は、マクロ内の変数がどのように割り当てられるかを認識で切れば簡単です。

以下の例示ではマクロ名は全部mymacroとします。

  • マクロの本文を割り当てる場合:$bodyを使う

・テンプレート

これはエラーです。<br>
<div class="errorbox">$body</div>

・Confluence入力

{mymacro}閉じタグが無いために、エラーになります{mymacro}

・出力結果

これはエラーです。<br>
<div class="errorbox">閉じタグが無いために、エラーになります</div>
      • -
  • パラメータを取りたい場合

パラメータをマクロ内で使用したい場合、$param0〜$param9が使えます。

・テンプレート

<div class="$param0" id="$param1">$body</div>

・Confluence入力

{mymacro:myclass|myid}ここにclassとIDを指定したブロックができました{mymacro}

・出力結果

<div class="myclass" id="myid">ここにclassとIDを指定したブロックができました</div>
        • -
  • パラメータを取りたい場合(その2)

パラメータ名をFIXしたい場合は以下のようにします。

・テンプレート

<div class="$paramclass" id="$paramid">$body</div>

・Confluence入力

{mymacro:class=myclass|id=myid}ここにclassとIDを指定したブロックができました{mymacro}

・出力結果

<div class="myclass" id="myid">ここにclassとIDを指定したブロックができました</div>
      • -
  • マクロの本文を割り当てない場合:こんな使い方ができます。場当たり的な局所的Styleを当てたい場合など。

・テンプレート

<style>
span.black{
    font-size: $param0px
}
</style>

・Confluence入力

{mymacro:20}

・出力結果

<style>
span.black{
    font-size: 20px;
}
</style>


Altassianのページをみると他にも使える変数はたくさんありますが、とりあえずパラメータが使えればかなりの応用範囲が出来そうです。