はじめに
swiftの学習を開始して、メインスレッドの重要さについて学びました。今回は前回の記事と重複になる部分はあるかもしれませんが、他の用語も含めて、今後の現場で役立てそうな知識を整理しました。今後も都度仕入れた用語はまとめておこうと考えています。
1. 開発フローと構造の用語まとめ
開発をスムーズに進めるために、まずは「どこで何をしているのか」の用語と流れをまとめました。
🛠️ コードを「管理」するためのツール
-
GitHub
- 世界中のエンジニアがコードを保存・共有する「クラウド上の保管庫」です。チーム開発や、自分のコードのバックアップに使います。
-
SourceTree
- Gitの操作(保存や送信)を、コマンドではなくボタン操作で直感的に行うためのツールです。
-
リポジトリ (Repository)
- プロジェクトごとの「貯蔵庫」のこと。ここに変更履歴がすべて記録されていきます。
📂 Xcodeプロジェクトの構造
今回はViewとControllerを使用しました。アプリ設計の基本である「MVC」の理解も深めるために整理します。※今回はModelまでは使用していませんが、今後のための復讐になるかと考えて記載。
-
Main.storyboard 【View / 見た目】
- ボタンや画像を配置する場所。
-
WeatherViewController.swift 【Controller / 制御】
- ユーザーの入力を受け取り、適切なデータ処理を指示して画面を更新する。
-
WeatherModel.swift 【Model / データ】
- 情報を保持したり、サーバーからデータを取ってきたりする。
💡 豆知識:MVCモデルとは⁇
アプリの設計図である MVCモデル は、機能を以下の3つの役割に分割して管理する考え方です。
-
Model(モデル):データの処理担当
- データベース(DB)とのやり取りや、データの計算・保存など、アプリの「中身」の処理を専門に行います。
-
View(ビュー):画面の入出力担当
- ユーザーが目にする画面の表示や、ボタン入力などの「見た目」と「操作」を受け持ちます。
-
Controller(コントローラー):司令塔・仲介担当
- ユーザーの操作を受けて、処理を Model に振り分けたり、処理結果を適切な View に返したりする「交通整理」の役割を果たします。
なぜ3つに分けるのか?
それぞれの役割を独立させることで、今回のような「画面の背景だけを変えたい(Viewの変更)」ときや「(将来的に)データの保存先を変えたい(Modelの変更)」ときに、他の部分に影響を与えずに修正が可能となります。
2. 見た目とコードをつなぐ「IBOutlet」
Storyboardに配置した画像をコードで操作するためには、**IBOutlet(アイビー・アウトレット)**という窓口を作る必要があります。
『Controller』>『XxxxViewController.swift』の上段に記載する必要があります。
import UIKit
import CoreLocation
class WeatherViewController: UIViewController {
@IBOutlet weak var backgroundImageView: UIImageView!
3. iOS開発の絶対ルール:メインスレッド
ここが最も重要なポイントです。
マルチスレッドとは?
1つの処理(通信など)をしている間に、別の処理(アニメーションなど)を並行して進める仕組みです。複数の作業員が分担して仕事をするイメージです。
なぜ「Mainスレッド」が重要か
iOSでは、**「画面(UI)の更新は必ずMainスレッドで行う」**という鉄則があります。
- Mainスレッド: ユーザーの操作や画面描画のみを扱う。
- Backgroundスレッド: 重い処理や通信を裏で行う。
※デッドロックになる状況を避けることに繋がります。
4. 他用語について
- データフェッチ (Data Fetching)
- ネットワークを介してデータを「取ってくる」処理のことです。状況によって時間がかかる『重い処理』となるため、メインスレッドを止めないように非同期(バックグラウンド)**で行う。
- スレッド安全
- 複数のスレッドが同時に動いても、プログラムの動作が保証される状態。
- デッドロック
- 複数のスレッドが互いの動きが終わるまで待っており、結果的にどちらも動けなくなる状態。