---
title: ファイルマネージャーのファイルを自動で削除する
description: ファイル操作系のSmartyプラグインを利用して、一定期間前のファイルマネージャのファイルを自動で削除する方法について説明します。
---

## 概要

ファイル操作系のSmartyプラグインを利用して、ファイルマネージャのファイルを自動で削除する方法について説明します。

今回は、以下のようなバッチ処理を実装します。
1. 特定ディレクトリの配下に存在するファイルの一覧を取得する
2. 最終更新日時が一週間以上前のファイルを削除する
3. 削除したファイル一覧のログをCSV形式で出力し、ファイルマネージャに配置する

### 学べること

以下のファイル操作を行う方法について学ぶことができます。
- 特定ディレクトリ内のファイル情報を取得する
- ファイルを削除する
- ファイルを追加する
- テキストファイルに値を書き込む

### 前提条件

- [Smarty v2](https://www.smarty.net/docsv2/ja/)の基本的な構文がわかること
- [バッチ処理](/ja/docs/management/batch/)の使い方がわかること

## 対象のディレクトリを準備する
[ファイルマネージャー](/ja/docs/management/file-manager/)に以下の構成でディレクトリを作成します。

```
files/ltd
`-- file_plugins_tutorial
    |-- assets # 削除対象のファイルを配置するディレクトリ
    `-- logs   # 削除ログファイル(CSV)を配置するディレクトリ
```

![Image from Gyazo](https://t.gyazo.com/teams/diverta/e04d84e00f42d8d0fd17d289c5248060.png)

## ファイルの削除処理を実装する
### バッチ処理を新規作成する
[バッチ処理](/ja/docs/management/batch/)を新規作成します。  
まずはファイルの削除処理を実装していきます。  

[オペレーション] -> [バッチ処理]をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/2d7157130e402e302a1555ed76cab1eb.png)

[追加]をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/040171bcbc0837f310ac4cd096ee244b.png)

バッチ処理の編集画面が開くので、以下を設定します。  

|項目|値|
|:--|:--|
|タイトル|file_plugins_tutorial|
|識別子|file_plugins_tutorial|
|タイプ|毎日 02:00|
|処理|以下のコード|

```smarty title="file_plugins_tutorial"
{* Set the timestamp for comparison *}
{assign var='timestamp_to_compare' value='-1 week'|strtotime}

{* Read each file in the directory *}
{read_dir name='files_user' path='/files/ltd/file_plugins_tutorial/assets' file_var='file_info' type='file' recursive=true}
    {* Get the file's update timestamp *}
    {assign var='timestamp_updated_at' value=$file_info.mtime}
    {* Compare the timestamps *}
    {if $timestamp_updated_at < $timestamp_to_compare}
        {* If the update timestamp is over a week ago, delete the file *}
        {remove_file status_var='status' path=$file_info.path}
    {/if}
{/read_dir}
```

![Image from Gyazo](https://t.gyazo.com/teams/diverta/38f1da2a367028f005a55a4cab96b5ee.png)

設定ができたら[追加する]をクリックしてバッチ処理を追加します。  

:::info
read_dirプラグインのパラメータ詳細は[Smartyプラグイン](/ja/docs/reference/smarty-plugin/#read_dir)のドキュメントを参照してください。
:::

### ファイルの削除処理を動作確認する
バッチ処理の準備ができたら早速動作の確認をします。  
バッチ処理の編集画面から[すぐに実行する]をクリックします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/259c0befb3fe39a294f20239fd092f65.png)

バッチ処理が実行され最終更新日時が一週間以上前のファイルが削除されます。  

:::tip
すぐに確認がしたい場合は以下の`'-1 week'`部分を`'-1 hour'`や`'now'`等に変更して確認してください。  
`{assign var='timestamp_to_compare' value='-1 week'|strtotime}`
:::

## ログファイルの出力処理を追加する
次に、ファイルを削除した際にログファイルを保存する記述を追加します。  

### バッチ処理を更新する
バッチ一覧のページでタイトルをクリックし、先ほど追加したバッチ処理を開きます。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/89b8c1f1c9f3176f1e6b8f1b7a24ffbb.png)

処理にログファイルの出力処理を追記します。  
処理の全体は以下のようになります。  

```smarty reference title="file_plugins_tutorial"
https://github.com/diverta/kuroco-documents/blob/main/sample_code/batch_processing/automatically_delete_files_older_than_one_week.txt
```

設定ができたら[更新する]をクリックし、更新を反映します。

:::info
write_file, date, put_fileの詳細は[Smartyプラグイン](/ja/docs/reference/smarty-plugin/)を参照してください。
:::

### ログファイルの出力処理を動作確認する
バッチ処理の編集画面から[すぐに実行する]をクリックします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/259c0befb3fe39a294f20239fd092f65.png)

バッチ処理が実行され最終更新日時が一週間以上前のファイルが削除され、ログがlogsディレクトリに残ります。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/36808c786df498c67018050a502e291c.png)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/9a1d2f6f55096771defc0f6ac757c719.png)

:::tip
すぐに確認がしたい場合は以下の`'-1 week'`部分を`'-1 hour'`や`'now'`等に変更して確認してください。  
`{assign var='timestamp_to_compare' value='-1 week'|strtotime}`
:::

以上で、設定と確認が完了しました。  
ファイル容量の管理に是非ご利用ください。

## 関連ドキュメント
- [Smartyプラグイン](/ja/docs/reference/smarty-plugin/)