💬

Drupalのコンテンツの一括削除の方法

2023/04/14に公開

概要

Drupalのコンテンツの一括削除の方法を調べたので、その備忘録です。以下の記事が参考になりました。

https://www.webwash.net/how-to-bulk-delete-content-in-drupal/

以下の3つの方法が紹介されていました。

  • Drupal コア UI の使用 (Using Drupal Core UI)
  • Drush の使用 (Using Drush)
  • ビューの一括操作 (VBO) の使用 (Using Drupal Views Bulk Operations (VBO))

Drupal コア UI の使用

以下、日本語訳です。

小さな Drupal サイトがあり、削除するノードが約 300 未満の場合は、この方法を使用する必要があります。これは、Drupal コアの UI を使用すると、デフォルトで一度に 50 ノードしか削除できないためです。サイトが大きくなると、これは面倒になります。

Drush の使用

以下、日本語訳です。

コマンド ラインを使用すると、Drush を使用できます。これが推奨される方法です。

例えば以下では、記事コンテンツ タイプのすべてのノードを削除します。

drush entity:delete node --bundle=article

ただ、上記のサイトにも記載がありましたが、PHP メモリ制限にひっかかることがあるようです。Amazon Lightsail上に立てた512MBメモリの環境において、5,000件のコンテンツの一括削除を試みたところ、以下のように制限に引っかかってしまいました。ただし、再度同じコマンドを実行することで、無事に一括削除ができました。

drush entity:delete node --bundle=article
 2550/5057 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░]  50%
 
PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes) in /opt/bitnami/drupal/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php on line 76
PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 32768 bytes) in /opt/bitnami/drupal/vendor/symfony/http-foundation/Response.php on line 895

specify the chunk/batch size

デフォルトでは50件ずつ処理されますが、--chunks=100のように引数を加えることで、バッチサイズを変更できました。

ビューの一括操作 (VBO) の使用

以下のモジュールを使用するようです。今回は試しませんでしたが、いずれ試してみたいと思います。

https://www.drupal.org/project/views_bulk_operations

まとめ

当たり前かもしれませんが、今回の一括削除操作によって、「Elasticsearch Connector」でつながっているElasticsearch(具体的にはAmazon OpenSearch Service)上のアイテムも削除されました。

Drushのような機能が使えるのは、OmekaなどのCMSと比較して、便利だと思いました。

Discussion