path_providerパッケージを理解する

# path_providerパッケージとは

`path_provider` パッケージとは、簡単に言うと、**デバイス上のファイルのパスを
取得する**ために使用する便利なパッケージです。

このパッケージを使用すると、アプリが実行されている
プラットフォーム（AndroidやiOSなど）に応じて、ディレクトリのパスを取得できます。

一時的なファイルや永続的なファイルなど保存形態に関わらず、
保存するためのパスを取得できるのが特徴です。

https://pub.dev/packages/path_provider

# 主な特徴

- **ドキュメントディレクトリのパス取得**: ユーザーが作成したファイルなどを保存するためのドキュメントディレクトリのパスを取得します

- **一時ディレクトリのパス取得**: 一時的なデータを保存するための一時ディレクトリのパスを取得します

- **アプリケーションディレクトリのパス取得**: アプリケーションのデータを保存するためのディレクトリのパスを取得します

- **キャッシュディレクトリのパス取得**: キャッシュデータを保存するためのキャッシュディレクトリのパスを取得します

## ドキュメントディレクトリの取得
アプリケーションのドキュメントファイルを保存するための
ディレクトリパスを取得できます。

```dart
Directory docDir = await getApplicationDocumentsDirectory();
String docPath = docDir.path;
```

## 一時ディレクトリの取得

`getTemporaryDirectory`　メソッドを使用することで、
アプリケーションの一時ファイルを保存するためのディレクトリパスを取得できます。

```dart
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
```

## 外部ストレージディレクトリの取得 (Androidのみ)
外部ストレージ (SDカードなど) のディレクトリパスを取得できます。

```dart
Directory extDir = await getExternalStorageDirectory();
String extPath = extDir.path;
```

## キャッシュディレクトリの取得 
外部ストレージのキャッシュディレクトリパスを取得できます。

```dart
Directory cacheDir = await getExternalCacheDirectories();
String cachePath = cacheDir.path;
```

### 使用例

```dart: path_provider メソッド
import 'package:path_provider/path_provider.dart';

Future<void> getApplicationDocumentsDirectory() async {
  final directory = await getApplicationDocumentsDirectory();
  print('Application Documents Directory: ${directory.path}');
}

Future<void> getTemporaryDirectory() async {
  final directory = await getTemporaryDirectory();
  print('Temporary Directory: ${directory.path}');
}

Future<void> getExternalStorageDirectory() async {
  final directory = await getExternalStorageDirectory();
  print('External Storage Directory: ${directory.path}');
}

Future<void> getExternalCacheDirectories() async {
  final directories = await getExternalCacheDirectories();
  directories.forEach((directory) {
    print('External Cache Directory: ${directory.path}');
  });
}
```
このコードは、 `path_provider` パッケージを使用して、アプリケーションのデータディレクトリや一時ディレクトリ、外部ストレージディレクトリ、外部キャッシュディレクトリのパスを取得しています。

これらの関数を呼び出すことで、アプリケーションが実行されている環境に応じて、ディレクトリのパスを取得し、そのディレクトリにファイルを保存したり、一時的なデータを操作したりすることができるようになります。

### 解説

- **getApplicationDocumentsDirectory():** この関数は、アプリケーションのドキュメントディレクトリのパスを取得します。このディレクトリは、アプリが作成した永続的なデータを保存するために使用されます。

- **getTemporaryDirectory():** この関数は、一時ディレクトリのパスを取得します。一時的なデータを保存するために使用され、アプリが再起動するとデータが消去されます。

- **getExternalStorageDirectory():** この関数は、外部ストレージ（SDカードなど）のルートディレクトリのパスを取得します。このディレクトリは `Android` アプリでのみ利用可能であり、外部ストレージにファイルを保存するために使用されます。

- **getExternalCacheDirectories():** この関数は、外部キャッシュディレクトリのリストを取得します。外部ストレージ上のキャッシュディレクトリを取得するために使用されます。

## 注意事項
:::note warn
- AndroidとiOSでそれぞれパス取得の動作が異なることに注意してください。
- Androidで外部ストレージにアクセスする場合、Androidマニフェストファイル（AndroidManifest.xml）にpermissionを追加する必要があります。
:::


## まとめ
`path_provider` は、データを保存する際に使用する
**デバイス上のファイルパスを取得する**ためのパッケージです。

一時ディレクトリ、ドキュメントディレクトリ、外部ストレージディレクトリなどの
取得が可能で、ファイルを保存したり、一時的なデータを取得したりすることができます。

アプリケーションデータの永続化においてデバイス上のファイルシステムに
アクセスする必要があるアプリでは `path_provider` パッケージは非常に有効なツールになっています。ぜひこれを機に使用してみてください。

## 参考資料

https://pub.dev/packages/path_provider

## 告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。

https://eda-inc.jp/recruit/

みなさまからのご応募をお待ちしております。