リックソフトブログ

2022年12月22日

Cloud 版の Confluence(コンフルエンス) で子ページを一気に消す方法 2022 年冬

Author

道場秀三郎 douba.shusaburo

道場秀三郎</mt:Var>

  

Server (サーバー、オンプレミス)版 Confluence から Cloud 版に移行された方からのお悩みに回答します。

==この記事はアトラシアン・ユーザーズグループ・アドベントカレンダー22日目の記事です==

りっくまさん、質問ありがとうございます。

ユーザー社員さんのおっしゃるとおり、Server 版では Confluence の子ページを含めた一括削除が可能でした。Confluence Cloud では、2022 年 12 月現在、実現できていません。

機能要望はアトラシアン社に CONFCLOUD-5974 - Need ability to delete multiple child pages from the parent page で報告されています。是非とも Vote & Watch していただければ幸いです。

製品機能として用意はされていないものの、実現する回避策を 3 つ教えますので、ユーザー社員さんにご案内ください。

1. 削除用のスペースを作成し、そこに移動する

アトラシアン社のドキュメントに記載されている方法です。

ページを削除、復元、完全に削除する | Confluence Cloud | アトラシアン サポート  の通り、一時的に削除用の新しいスペースを作成します。消したい階層ごとそのスペースへページ移動したあと、作成した削除用のスペースごと削除します。

非常にシンプルです。

但し、この操作をするにはいくつかの権限が必要になるのでご留意ください。

スペースを作成するためには、グローバル権限を管理する | Confluence Cloud | アトラシアン サポート の通りグローバル権限で設定されています。各環境でこの権限設定は異なりますので、スペース作成方法がわからない場合は Confluence 管理者 にご相談をお願いします。

ページを移動するためには、ページを移動、コピー、非表示にする | Confluence Cloud | アトラシアン製品ドキュメント の通り、実行者が適切なスペース権限を持っているかを確認をお願いします。

スペースを削除するためには、スペースを削除する | Confluence Cloud | アトラシアン サポート  の通りスペース管理者権限が必要です。

この方法の注意点は3つ

  1. 新しくスペースを作成するため、環境によっては申請が必要かもしれません。大規模な環境になるとより簡単ではなくなってしまいます。
  2. ページの制限により移動を実行したユーザーが表示・編集できないページがあった場合、そのページは移動元のスペースに残り続け、隠されたページとなります。
  3. スペース削除は即座に削除になります。

2. アプリを使用する

次はアトラシアン製品の強みである、アプリによる機能追加方法です。 

Atlassian Marketplace には Page Tree Eraser (delete page tree) のようなページツリー一括削除アプリが存在しています。このようなものを活用してみてください。

例えば Page Tree Eraser (delete page tree) を導入した場合、ページのメニューに「Delete Page Tree」が新規に表示されるようになります。

削除したいページからこのメニューを選択してください。

そのページの階層が一覧で表示されるので、「Submit」から削除を実行してください。

削除中...

削除が完了し、Confluence のページが表示されます。

Server 版とほぼ同じ機能操作で実現できてシンプルです。

削除されたページは、通常通りスペースのごみ箱に移動されます。

誤って削除してしまった場合は ページを削除、復元、完全に削除する | Confluence Cloud | アトラシアン サポート  の通り、スペース管理者であれば復元できます。但し、削除前のページ階層に戻らないことがあるのでご注意ください。

この方法の注意点は2つ

  1. 有償アプリのため費用がかかります。
  2. ページの制限により削除を実行したユーザーが表示・編集できないページがあった場合、そのページは一つ上のページの子ページとして残ります。

3. REST API を使用する

このためにわざわざスペース作成するのも...このためにアプリを導入するのも...と躊躇しますよね。最後に技術者ならではの方法をご紹介します。

Confluence Cloud で豊富に提供されている REST API を使用し、プログラムから子孫ページを一括で削除する方法です。

Get content descendants by type や Delete content といったメソッドが用意されているので、こちらを使用して子孫ページを含めたページ削除をしてみようと思います。

削除したい親のページを Web ブラウザーで開き、開発者ツール の「コンソール」から後に記載の JavaScript を実行してみてください。

表示しているページを含めた階層ごと削除することができます。

Enter 押下後、少し待って "Finish." が出力されれば完了です。

実行する JavaScript はこちらになります。

(async () => {
  const contentId = Confluence.getContentId();
 
  const sleep = async ms => new Promise((resolve) => { setTimeout(resolve, ms) });
 
  const getDescendants = async contentId => {
    const limit = 100;
    let start = 0;
    let allResults = [];
    while (true) {
      const res = await fetch(`/wiki/rest/api/content/${contentId}/descendant/page?next=true&limit=${limit}&start=${start}`);
      if (!res.ok) {
        if (res.status === 429) {
          await sleep(5000);
        } else {
          return null;
        }
      } else {
        const json = await res.json();
        const results = json.results;
        allResults = allResults.concat(results);
        if (results.length === limit) {
          start += limit;
        } else {
          return allResults;
        }
      }
    }
  };
 
  const deleteContent = async contentId => {
    const res = await fetch(`/wiki/rest/api/content/${contentId}`, {
      method: 'DELETE'
    });
    if (!res.ok) {
      const status = res.status;
      if (status === 429) {
        await sleep(5000);
        deleteContent(contentId);
      } else {
        console.log(`Could not delete content. [${contentId}]`);
      }
    }
  }
 
 
  const descendants = await getDescendants(contentId);
  // console.log(descendants);
  if (!descendants) {
    console.log('Could not retrieve descendant pages correctly.');
    return;
  }
  for (const content of descendants) {
    await deleteContent(content.id);
  }
  await deleteContent(contentId);
 
  console.log('Finish.');
})();

こちらを使用すれば、皆さんが普段 Confluence で使用している Web ブラウザーからユーザーが必要なときに実行できます。

1 ページごとの逐次処理になっているのと、REST API のレート制限を考慮して 5 秒程度停止する処理を入れていますので、削除したいページの量にもよりますが時間がかかる場合もあります。

また実行中は "Finish." が表示されるまでタブやブラウザーを閉じないようにご注意ください。万が一ブラウザーが停止した場合は、子ページが部分的に削除された状況になります。

削除されたページは、通常通りスペースのごみ箱に移動されます。

誤って削除してしまった場合は ページを削除、復元、完全に削除する | Confluence Cloud | アトラシアン サポート の通り、スペース管理者であれば復元できます。但し、削除前のページ階層に戻らないことがあるのでご注意ください。

この方法の注意点は2つ

  1. ページの制限により削除を実行したユーザーが表示・編集できないページがあった場合、そのページは一つ上のページの子ページとして残ります。
  2. 実行中は、タブやブラウザーを閉じないようにします。

免責事項

  • 上記の JavaScript は一例になります。この方法に関して、リックソフトおよびアトラシアン社ではサポート対象外となります。
  • 環境によって期待通りに動作しない場合も、弊社は一切責任を負いません。
  • この方法を使用することによって生じたいかなる損害に対して、弊社は一切責任を負いません。
              
                                                       

本情報はブログを公開した時点の情報となります。
ご不明な点はお問い合わせください。

        

お問い合わせ         

  
本ブログのカテゴリ: Confluence
  

アトラシアン製品の導入と活用を
成功させたいなら
リックソフトのサポートが
必要です。

サードパーティ製のアドオンもサポート

サードパーティ製のアドオンもサポート

サポート

アトラシアン社ではサポート範囲外となっているサードパーティ製のアドオンをリックソフトのサポートではサポートします。

  • アトラシアン製品とサードパーティ製のアドオンとの事象の切り分け
  • 海外のアドオンベンダーとのやり取りを代行(日→英/英→日)

リックソフトのサポートは開発元が提供するサポート以上の価値があります。

サポートについて

ツールの活用を促進するアイテム

ツールの活用を促進するアイテム

各種ガイドブック

ツールを導入しただけでは成功とはいえません。利用者が効果を感じていただくことが大切です。独自で制作した各種ガイドブックはツール活用を促進します。

リックソフトからライセンス購入を頂いたお客様にはガイドブックを無料進呈いたします。

ガイドブックについて

価値あるツールの使い方

価値あるツールの使い方

研修・トレーニング

ツール操作の研修だけでなく「ウォータフォール型開発」「アジャイル型開発」のシミュレーション研修も提供。

日本随一の生産性向上にも効果のある研修サービスです。

リックソフトからライセンス購入を頂いたお客様には無料招待や割引特典がございます。

研修について

PAGE TOP