はじめに
このガイドでは、Swift と SwiftUI を使って、初めての iOS アプリとなる基本的な ToDo リストアプリを開発する方法を解説します。タスクの追加、完了のマーク付け、削除ができる機能を実装していきます。初心者の方でも理解しやすいよう、各ステップを詳しく説明していきます。
まずは新しいプロジェクトを作成して、アプリ開発の土台を準備しましょう。
手順:
- Mac で Xcode を起動します
- 「Create a new Xcode project」をクリックします
- 「App」テンプレートを選択し、「Next」をクリックします
- 以下の項目を入力します:
- Product Name: ToDoApp
- Interface: SwiftUI
- Language: Swift
- 「Next」をクリックし、プロジェクトの保存場所を選んで「Create」をクリックします
新しいプロジェクトを作成すると、Xcode は自動的に必要なファイルを作成します。最初に表示されるのは ContentView.swift で、これがアプリの主要な画面となります。左側のナビゲーターには他のファイルも表示されています。
アプリでタスクを管理するためのデータモデルを作成します。これがアプリの「データ」部分となります。
手順:
- プロジェクトナビゲーター(左側のパネル)で右クリックし、「New File…」を選択します
- 「Swift File」を選択し、「Next」をクリックします
- ファイル名を「TodoItem.swift」と入力し、「Create」をクリックします
- 新しく作成されたファイルに以下のコードを入力します:
struct TodoItem: タスクを表現する構造体です
Identifiable: SwiftUI のリストで各アイテムを識別するためのプロトコル
Equatable: 2つのアイテムを比較するためのプロトコル
id: 各タスクの一意の識別子
title: タスクの名前
isCompleted: タスクが完了したかどうかのフラグ
次に、アプリのユーザーインターフェイスを構築します。これはユーザーがタスクを見たり操作したりする画面です。
手順:
- プロジェクトナビゲーターから「ContentView.swift」ファイルを開きます
- 既存のコードを全て削除し、以下のコードに置き換えます:
@State: 値が変更されたときにビューを更新するプロパティラッパー
NavigationStack: 画面上部にタイトルを表示するためのコンテナ
VStack: 要素を縦に並べるコンテナ
HStack: 要素を横に並べるコンテナ
TextField: ユーザーがテキストを入力するフィールド
Button: タップできるボタン
List: スクロール可能なリスト
ForEach: コレクションの各要素に対してビューを生成
ここでは、タスクの追加、完了のマーク付け、削除の機能を実装します。
手順:
ContentView.swift ファイルに、以下のメソッドを追加します(既存のコードの } の前に追加します):
addItem(): テキストフィールドの内容を使って新しいタスクを作成します
toggleItemCompletion(): タスクの完了状態を切り替えます
deleteItems(): 選択されたタスクを削除します
firstIndex(of:): 配列内の特定のアイテムの位置を探します
toggle(): 真偽値を反転させます(true → false、false → true)
ここまでの実装でアプリを実行し、基本機能をテストしましょう。
手順:
- Xcode ツールバーのデバイスセレクタから「iPhone 15」などのシミュレーターを選択します
- 再生ボタン(▶)をクリックするか、⌘+R キーを押してアプリを実行します
- アプリが起動したら、以下の操作をテストします:
- テキストフィールドにタスク名を入力し、+ ボタンをタップしてタスクを追加
- タスクの左側の丸をタップして完了状態に切り替え
- タスクを左にスワイプして削除
この時点では、アプリを閉じると追加したタスクは全て消えてしまいます。これは、データをまだ永続的に保存していないためです。次のステップでデータの保存機能を実装します。
アプリを閉じても、タスクが保存されるように機能を追加します。
手順:
- プロジェクトナビゲーターで右クリックし、「New File…」を選択します
- 「Swift File」を選択し、「Next」をクリックします
- ファイル名を「DataManager.swift」と入力し、「Create」をクリックします
- 新しく作成されたファイルに以下のコードを入力します:
次に、ContentView.swift ファイルを編集して、DataManager を使用するように変更します:
- todoItems の宣言を次のように変更します:
- 各メソッドの最後に以下のコードを追加して、データを保存するようにします:
DataManager: データの保存と読み込みを担当するクラス
static let shared: シングルトンパターンを実装(アプリ全体で1つのインスタンスを共有)
UserDefaults: 小さなデータを永続的に保存するための iOS の仕組み
map: 配列の各要素を変換する関数
compactMap: 配列の各要素を変換し、nil の結果を除外する関数
各ファイルの関係性
- タスク情報の構造体定義
- Identifiable に準拠 (リスト表示用)
- Equatable に準拠 (比較操作用)
- UIレイアウトの定義
- ユーザー操作の処理
- TodoItemの操作 (追加/完了/削除)
- DataManagerとの連携
- TodoItemの永続化
- UserDefaultsを使用したデータ保存
- 保存データの読み込み
- アプリケーションの起動処理
- 最初に表示するビューの指定
コメントを残す