Confluence

ドキュメント作成ツール

Confluence

概要

Confluenceはアトラシアン社が開発したエンタープライズ向けwikiプラットフォームです。Jira完全連携、チーム協働機能、プロジェクト文書化を統合し、組織全体のナレッジ管理を最適化します。

詳細

Confluence(コンフルエンス)は2004年にAtlassian社によって開発され、企業向けコラボレーションwikiのパイオニアとして成長してきました。Webベースのプラットフォームにより、ドキュメント作成、ナレッジ共有、プロジェクト管理を統合的に提供します。Jiraとのネイティブ統合により、プロジェクト管理とドキュメント作成のワークフローを完全に連携させることができます。リアルタイム協働編集機能により、複数のチームメンバーが同時に文書を編集・コメント可能です。マクロシステムにより、動的コンテンツ、外部システム連携、カスタム機能を実現できます。エンタープライズ機能として、SAML SSO、2段階認証、自動ユーザープロビジョニング、高度な管理コントロールを提供します。ホワイトボード機能により、ブレインストーミングや図解作成をリアルタイムで行えます。2025年現在、Docker、Dropbox、Robloxなど多くのエンタープライズ企業で採用され、組織の情報基盤として機能しています。Atlassian Forgeプラットフォームにより、カスタムアプリ開発とサードパーティ統合も可能です。

メリット・デメリット

メリット

  • Jiraネイティブ統合: プロジェクト管理と文書化の完全連携による一元管理
  • エンタープライズ級セキュリティ: SAML SSO、強制2段階認証、アクセス制御の完備
  • リアルタイム協働: 同時編集、コメント、通知による効率的なチーム作業
  • 豊富なマクロ機能: Jira課題、カレンダー、外部コンテンツの動的埋め込み
  • スケーラビリティ: 大規模組織対応の管理機能とパフォーマンス
  • アトラシアンエコシステム: Bitbucket、Trelloなど他製品との統合
  • カスタマイズ性: Forgeプラットフォームによるアプリ開発とAPI連携

デメリット

  • 学習コスト: 豊富な機能により初期習得に時間が必要
  • ライセンス費用: エンタープライズ機能利用時の高額なライセンス料
  • パフォーマンス: 大量データや複雑ページでの動作速度低下
  • UI複雑性: 管理画面や設定項目の複雑さ
  • ベンダーロックイン: アトラシアンエコシステムへの依存度
  • エクスポート制限: 他プラットフォームへの移行時の制約

主要リンク

書き方の例

基本的なページ構造

# プロジェクト計画書

## プロジェクト概要
**開始日**: 2025年7月1日  
**終了予定日**: 2025年12月31日  
**プロジェクトマネージャー**: 田中太郎

## Jira課題の統合表示
{jira}project = "PROJ" AND status = "進行中"{jira}

## タスクリスト
- [x] 要件定義完了
- [x] 設計書作成
- [ ] 実装開始
- [ ] テスト実施

## チーム情報
| 役割 | 担当者 | 連絡先 |
|------|--------|--------|
| PM | 田中太郎 | [email protected] |
| 開発リーダー | 佐藤花子 | [email protected] |
| QA | 鈴木次郎 | [email protected] |

## 添付ファイル
- [設計書.pdf]
- [要件定義書.docx]

Jira課題マクロの活用

<!-- 特定プロジェクトの課題一覧 -->
{jira:url=https://company.atlassian.net|project=PROJ}

<!-- 自分にアサインされた課題 -->
{jira}assignee = currentUser() AND status != Done{jira}

<!-- 特定のJQLクエリ結果 -->
{jira}project = "WEB" AND component = "Frontend" AND fixVersion = "2.0"{jira}

<!-- 単一課題の詳細表示 -->
{jira:PROJ-123}

<!-- 課題作成フォーム -->
{jira:project=PROJ|type=Task|priority=High}create{jira}

ページテンプレートの作成

<!-- 会議議事録テンプレート -->
<h1>会議議事録 - {日付}</h1>

<table>
<tr><th>項目</th><th>内容</th></tr>
<tr><td>日時</td><td>{日時を記入}</td></tr>
<tr><td>参加者</td><td>{参加者一覧}</td></tr>
<tr><td>場所</td><td>{会議室またはオンライン}</td></tr>
</table>

<h2>議題</h2>
<ol>
<li>{議題1}</li>
<li>{議題2}</li>
<li>{議題3}</li>
</ol>

<h2>討議内容</h2>
{討議内容を記録}

<h2>決定事項</h2>
{decisions}
<table>
<tr><th>決定事項</th><th>担当者</th><th>期限</th><th>Jira課題</th></tr>
<tr><td>{決定内容1}</td><td>{担当者}</td><td>{期限}</td><td>{jira:課題キー}</td></tr>
</table>
{decisions}

<h2>次回までのアクション</h2>
{tasks}
- [ ] {アクション1} - {担当者} - {期限}
- [ ] {アクション2} - {担当者} - {期限}
{tasks}

Atlassian Forgeアプリの開発

# manifest.yml - Confluenceアプリ設定
modules:
  confluence:contentAction:
    - key: page-enhancer
      resource: main
      resolver:
        function: resolver
      render: native
      title: ページ強化ツール

  confluence:macro:
    - key: custom-chart
      resource: chart-macro
      resolver:
        function: chart-resolver
      render: native
      title: カスタムチャート

  function:
    - key: resolver
      handler: index.handler
    - key: chart-resolver
      handler: chart.handler

resources:
  - key: main
    path: src/frontend/index.jsx
  - key: chart-macro
    path: src/chart/index.jsx

permissions:
  scopes:
    - read:confluence-content.summary
    - write:confluence-content
    - read:confluence-space.summary
    - read:jira-work
  external:
    fetch:
      backend:
        - https://api.example.com

app:
  runtime:
    name: nodejs22.x
  id: ari:cloud:ecosystem::app/your-app-id

Confluence REST APIの活用

// Forge アプリでのConfluence API使用例
import { requestConfluence, route } from '@forge/api';

// ページコンテンツの取得
async function getPageContent(pageId) {
  const response = await requestConfluence(route("/wiki/api/v2/pages/" + pageId + "?body-format=atlas_doc_format"), {
    headers: {
      'Accept': 'application/json'
    }
  });
  
  if (!response.ok) {
    throw new Error(`ページ取得エラー: ${response.status}`);
  }
  
  return await response.json();
}

// ページの作成
async function createPage(spaceId, title, content) {
  const pageData = {
    spaceId: spaceId,
    status: 'current',
    title: title,
    body: {
      representation: 'atlas_doc_format',
      value: content
    }
  };
  
  const response = await requestConfluence(route("/wiki/api/v2/pages"), {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(pageData)
  });
  
  return await response.json();
}

// ページラベルの追加
async function addLabelsToPage(pageId, labels) {
  const labelData = labels.map(label => ({
    prefix: 'global',
    name: label
  }));
  
  const response = await requestConfluence(route("/wiki/api/v2/pages/" + pageId + "/labels"), {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ results: labelData })
  });
  
  return await response.json();
}

スペース設定とアクセス管理

// Forge UIによるスペース設定画面
import ForgeUI, { render, SpaceSettings, Text, Select, Option, Button, useState } from '@forge/ui';

const SpaceConfigApp = () => {
  const [accessLevel, setAccessLevel] = useState('team');
  const [notifications, setNotifications] = useState(true);
  
  const handleSaveSettings = async () => {
    // スペース設定の保存処理
    await saveSpaceConfiguration({
      accessLevel,
      notifications
    });
  };
  
  return (
    <SpaceSettings>
      <Text>スペース設定</Text>
      
      <Select 
        label="アクセスレベル"
        value={accessLevel}
        onChange={setAccessLevel}
      >
        <Option label="チームのみ" value="team" />
        <Option label="部門全体" value="department" />
        <Option label="全社" value="company" />
      </Select>
      
      <Button
        text="設定を保存"
        onClick={handleSaveSettings}
      />
    </SpaceSettings>
  );
};

export const run = render(<SpaceConfigApp />);

自動化とワークフロー

// Confluence自動化ルール(Automation)
{
  "name": "新規ページ作成時の自動処理",
  "trigger": {
    "type": "page.created",
    "spaceKey": "PROJ"
  },
  "conditions": [
    {
      "type": "page.hasLabel",
      "label": "meeting-notes"
    }
  ],
  "actions": [
    {
      "type": "create.jira.issue",
      "project": "PROJ",
      "issueType": "Task",
      "summary": "会議フォローアップ: {{page.title}}",
      "description": "会議議事録に基づくフォローアップタスク\n\nページリンク: {{page.tinyUrl}}"
    },
    {
      "type": "notify.user",
      "users": ["@project-manager"],
      "message": "新しい会議議事録が作成されました: {{page.title}}"
    }
  ]
}

ホワイトボードとコラボレーション

<!-- ホワイトボードマクロの使用 -->
{whiteboard:title=プロジェクト設計|template=user-journey}

<!-- コメント機能の活用 -->
<ac:structured-macro ac:name="info">
  <ac:rich-text-body>
    <p>このセクションについて質問がある場合は、
    <ac:link>
      <ri:user ri:account-id="user-123" />
    </ac:link>
    にコメントで連絡してください。</p>
  </ac:rich-text-body>
</ac:structured-macro>

<!-- タスクリストの共有 -->
{task-list}
- [ ] UI設計レビュー (@designer, 2025-07-15)
- [ ] APIエンドポイント実装 (@backend-dev, 2025-07-20)
- [x] データベース設計完了 (@database-admin, 2025-07-10)
{task-list}