カテゴリ: Swift 更新日: 2025/11/20

Swiftのasync/awaitとエラーハンドリングを徹底解説!TaskとTaskGroupの使い方も初心者向けに紹介

Swift async/await とエラー処理|Task/TaskGroupの扱い方
Swift async/await とエラー処理|Task/TaskGroupの扱い方

先生と生徒の会話形式で理解しよう

生徒

「Swiftのプログラムで非同期処理っていう言葉を見たんですけど、どういう意味なんですか?」

先生

「非同期処理というのは、時間がかかる作業を待たずに、他の作業を同時に進める仕組みのことです。例えば料理をするときに、お湯を沸かしている間に野菜を切るようなイメージですね。」

生徒

「なるほど!じゃあSwiftで非同期処理をするにはどうしたらいいんですか?」

先生

「Swiftにはasync/awaitという便利な仕組みが用意されています。そして、その中でエラーが発生したときの処理方法もきちんと備わっているんです。」

生徒

「エラー処理っていうのは、予期せぬ失敗に備える方法のことですよね?」

先生

「そうです。今日はasync/awaitとエラーハンドリング、さらに複数のタスクをまとめて扱えるTaskTaskGroupの基本を見ていきましょう!」

1. Swiftのasync/awaitとは?

1. Swiftのasync/awaitとは?
1. Swiftのasync/awaitとは?

Swiftのasync/awaitは、非同期処理をシンプルに書ける機能です。非同期処理とは、ネットワークからデータを取得したり、大きなファイルを読み込んだりと、時間がかかる処理を待たずに進めるための仕組みです。

例えば、オンラインショッピングで「商品を検索しながら、同時にカートを更新する」ような場面を考えるとイメージしやすいでしょう。もし非同期処理がなければ、検索が終わるまでカートの更新が止まってしまいます。しかしasync/awaitを使えば、それぞれの作業を同時進行でき、プログラム全体がスムーズに動きます。

2. async関数とawaitの基本

2. async関数とawaitの基本
2. async関数とawaitの基本

asyncキーワードを付けると、その関数は非同期処理を行える関数になります。そして、その非同期関数を呼び出すときにはawaitを付けます。これは「処理が終わるのを待つ」という意味です。


func fetchData() async -> String {
    return "データ取得完了"
}

Task {
    let result = await fetchData()
    print(result)
}

データ取得完了

上記の例では、fetchData関数が非同期関数として定義され、Taskの中で呼び出すときにawaitを使っています。

3. Swiftでのエラーハンドリング

3. Swiftでのエラーハンドリング
3. Swiftでのエラーハンドリング

プログラムでは「ファイルが見つからない」「インターネットに接続できない」などのエラーが発生することがあります。Swiftではthrowtry、そしてdo-catch構文を使ってエラー処理をします。


enum NetworkError: Error {
    case noConnection
}

func getUserData() async throws -> String {
    throw NetworkError.noConnection
}

Task {
    do {
        let data = try await getUserData()
        print(data)
    } catch {
        print("エラーが発生しました: \(error)")
    }
}

エラーが発生しました: noConnection

try awaitを使うことで、非同期処理の中でもエラーを安全に扱えるようになります。

4. Taskを使った並行処理

4. Taskを使った並行処理
4. Taskを使った並行処理

Taskを使うと、複数の処理を同時に動かすことができます。例えば、画像をダウンロードしながら、別のデータも取得するといったことが可能です。


Task {
    async let image = fetchImage()
    async let text = fetchText()

    let result = await (image, text)
    print("画像とテキストの取得完了: \(result)")
}

この例ではasync letを使い、画像とテキストを並行して取得しています。両方が揃ったタイミングで結果をまとめています。

5. TaskGroupで複数のタスクをまとめる

5. TaskGroupで複数のタスクをまとめる
5. TaskGroupで複数のタスクをまとめる

もし複数の処理を一度にまとめたい場合は、TaskGroupを使います。これは「チーム作業」のようなもので、複数の仕事をグループ化して実行し、すべての結果をまとめて扱えます。


await withTaskGroup(of: String.self) { group in
    for i in 1...3 {
        group.addTask {
            return "タスク\(i)完了"
        }
    }

    for await result in group {
        print(result)
    }
}

タスク1完了
タスク2完了
タスク3完了

ここでは、3つのタスクを同時に動かし、それぞれの結果をまとめて取得しています。大量のデータ処理や並列作業が必要な場合にとても便利です。

6. エラーとTaskGroupの組み合わせ

6. エラーとTaskGroupの組み合わせ
6. エラーとTaskGroupの組み合わせ

TaskGroupでもエラーが発生することがあります。その場合はtrydo-catchを使って処理します。これにより、一部のタスクで失敗しても、他のタスクの結果をうまく扱うことができます。

例えば、「複数のサーバーに同時にデータを取りに行き、一部のサーバーが失敗しても成功したデータを集めたい」といったケースに有効です。

7. まとめて理解するポイント

7. まとめて理解するポイント
7. まとめて理解するポイント

初心者の方は、まずasync/awaitで非同期処理がどのようにシンプルに書けるのかを理解しましょう。その上で、do-catchを組み合わせてエラー処理を練習すると、実用的なコードが書けるようになります。さらにTaskTaskGroupを学べば、効率よく複数の処理を同時進行できるようになります。

非同期処理とエラーハンドリングは、Swiftの実践的なアプリ開発に欠かせない重要なスキルです。エラー処理を丁寧に行うことで、ユーザーにとって安心して使えるアプリを作ることができます。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎