2022年12月22日
Cloud 版の Confluence(コンフルエンス) で子ページを一気に消す方法 2022 年冬道場秀三郎 douba.shusaburo
Server (サーバー、オンプレミス)版 Confluence から Cloud 版に移行された方からのお悩みに回答します。
こんにちは!ぼく、りっくま!またまた相談クマ。
前回の相談したとおり、Confluence(コンフルエンス) を使ったことがあるという経験者採用のユーザー社員の質問に答えられず困ってるクマ。
「前の会社の環境では、Confluence のページ階層を一気に消すことができたけど、この職場の Cloud(クラウド) 環境じゃできないみたい。裏技ないの?」「年末の大掃除に、間違って作っちゃった階層を消したいんだけど...」とのことクマ...。
今日は、アトラシアン製品の Cloud 移行の天才として知られる道場さんに話を伺いたいクマ!
==この記事はアトラシアン・ユーザーズグループ・アドベントカレンダー22日目の記事です==
りっくまさん、質問ありがとうございます。
ユーザー社員さんのおっしゃるとおり、Server 版では Confluence の子ページを含めた一括削除が可能でした。Confluence Cloud では、2022 年 12 月現在、実現できていません。
機能要望はアトラシアン社に CONFCLOUD-5974 - Need ability to delete multiple child pages from the parent page で報告されています。是非とも Vote & Watch していただければ幸いです。
製品機能として用意はされていないものの、実現する回避策を 3 つ教えますので、ユーザー社員さんにご案内ください。
アトラシアン社のドキュメントに記載されている方法です。
ページを削除、復元、完全に削除する | Confluence Cloud | アトラシアン サポート の通り、一時的に削除用の新しいスペースを作成します。消したい階層ごとそのスペースへページ移動したあと、作成した削除用のスペースごと削除します。
非常にシンプルです。
但し、この操作をするにはいくつかの権限が必要になるのでご留意ください。
スペースを作成するためには、グローバル権限を管理する | Confluence Cloud | アトラシアン サポート の通りグローバル権限で設定されています。各環境でこの権限設定は異なりますので、スペース作成方法がわからない場合は Confluence 管理者 にご相談をお願いします。
ページを移動するためには、ページを移動、コピー、非表示にする | Confluence Cloud | アトラシアン製品ドキュメント の通り、実行者が適切なスペース権限を持っているかを確認をお願いします。
スペースを削除するためには、スペースを削除する | Confluence Cloud | アトラシアン サポート の通りスペース管理者権限が必要です。
この方法の注意点は3つ
次はアトラシアン製品の強みである、アプリによる機能追加方法です。
Atlassian Marketplace には Page Tree Eraser (delete page tree) のようなページツリー一括削除アプリが存在しています。このようなものを活用してみてください。
例えば Page Tree Eraser (delete page tree) を導入した場合、ページのメニューに「Delete Page Tree」が新規に表示されるようになります。
削除したいページからこのメニューを選択してください。
そのページの階層が一覧で表示されるので、「Submit」から削除を実行してください。
削除中...
削除が完了し、Confluence のページが表示されます。
Server 版とほぼ同じ機能操作で実現できてシンプルです。
削除されたページは、通常通りスペースのごみ箱に移動されます。
誤って削除してしまった場合は ページを削除、復元、完全に削除する | Confluence Cloud | アトラシアン サポート の通り、スペース管理者であれば復元できます。但し、削除前のページ階層に戻らないことがあるのでご注意ください。
この方法の注意点は2つ
このためにわざわざスペース作成するのも...このためにアプリを導入するのも...と躊躇しますよね。最後に技術者ならではの方法をご紹介します。
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つ
免責事項
本情報はブログを公開した時点の情報となります。
ご不明な点はお問い合わせください。
アトラシアン社ではサポート範囲外となっているサードパーティ製のアドオンをリックソフトのサポートではサポートします。
リックソフトのサポートは開発元が提供するサポート以上の価値があります。
ツールを導入しただけでは成功とはいえません。利用者が効果を感じていただくことが大切です。独自で制作した各種ガイドブックはツール活用を促進します。
リックソフトからライセンス購入を頂いたお客様にはガイドブックを無料進呈いたします。
ツール操作の研修だけでなく「ウォータフォール型開発」「アジャイル型開発」のシミュレーション研修も提供。
日本随一の生産性向上にも効果のある研修サービスです。
リックソフトからライセンス購入を頂いたお客様には無料招待や割引特典がございます。