ファイル操作とデータの保存

Swiftにおける「ファイル操作とデータの保存」は、アプリケーションのデータをローカルファイルシステムに保存し、後で再利用できるようにする技術です。主に以下の用途で使われます:

  • ユーザー設定の保存

  • キャッシュデータの一時保存

  • JSONや画像などのファイル書き出し・読み込み

以下に詳しく説明します。


1. 保存先ディレクトリの取得

iOSアプリでは、サンドボックス環境内の特定のディレクトリにのみアクセス可能です。特によく使うのが次の2つです。

swift
// ドキュメントディレクトリ(ユーザーデータの保存先) let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! // キャッシュディレクトリ(一時ファイルの保存先) let cachesURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!

2. テキストデータの保存と読み込み

保存

swift
let text = "保存する内容" let fileURL = documentsURL.appendingPathComponent("example.txt") do { try text.write(to: fileURL, atomically: true, encoding: .utf8) print("保存成功") } catch { print("保存失敗: \(error)") }

読み込み

swift
do { let loadedText = try String(contentsOf: fileURL, encoding: .utf8) print("読み込んだ内容: \(loadedText)") } catch { print("読み込み失敗: \(error)") }

3. バイナリデータ(画像など)の保存と読み込み

保存

swift
if let image = UIImage(named: "exampleImage"), let data = image.pngData() { let imageURL = documentsURL.appendingPathComponent("image.png") try? data.write(to: imageURL) }

読み込み

swift
let imageURL = documentsURL.appendingPathComponent("image.png") if let data = try? Data(contentsOf: imageURL), let image = UIImage(data: data) { // imageを表示や加工に使用 }

4. JSONデータの保存と読み込み(Codable活用)

swift
struct Person: Codable { let name: String let age: Int } let person = Person(name: "山田", age: 30) let jsonURL = documentsURL.appendingPathComponent("person.json") // 保存 do { let data = try JSONEncoder().encode(person) try data.write(to: jsonURL) } catch { print("JSON保存失敗: \(error)") } // 読み込み do { let data = try Data(contentsOf: jsonURL) let decoded = try JSONDecoder().decode(Person.self, from: data) print("読み込んだ人物: \(decoded)") } catch { print("JSON読み込み失敗: \(error)") }

5. 補足:ファイルの存在確認や削除

swift
if FileManager.default.fileExists(atPath: fileURL.path) { print("ファイルは存在します") } do { try FileManager.default.removeItem(at: fileURL) print("ファイルを削除しました") } catch { print("削除失敗: \(error)") }

まとめ

Swiftでは、標準ライブラリを使って次のようなファイル操作が可能です:

  • String.write() や Data.write() による保存

  • String(contentsOf:) や Data(contentsOf:) による読み込み

  • Codable による構造化データ(JSONなど)の保存・復元

  • FileManager によるファイルやディレクトリの操作

ファイル保存はCoreDataやUserDefaultsよりも柔軟で軽量な方法として、場面に応じて有効に活用されます。

生成日:2025/05/04