Swiftとは?特徴・Objective-Cとの違い・iOS開発を解説

プログラミング

iPhoneアプリやMacアプリを作りたいなら必須の言語「Swift」。2014年にAppleが開発し、古いObjective-Cに代わるiOS/macOS開発の標準言語です。この記事ではSwiftの特徴・開発環境・学習方法を解説します。

Swiftとは?

Swiftは、2014年にAppleがWWDC(世界開発者会議)で発表したiOS・macOS・watchOS・tvOS向けのプログラミング言語です。それまでAppleプラットフォームの開発言語だったObjective-Cは1980年代に設計された古い言語で、複雑な文法と低い安全性が課題でした。Swiftはこれらの課題を解決し、安全性・高速性・表現力を兼ね備えた現代的な言語として設計されました。

Swiftは2015年にオープンソース化され、現在ではAppleプラットフォーム以外にもLinux・Windowsで動作します。サーバーサイド(Vapor・Hummingbird)での利用も増えており、Web開発者がSwiftを使う場面も出てきています。

Swiftの主な特徴

型安全性とOptional
nilを扱う際に「Optional型(?)」を使う設計で、NullPointerExceptionに相当するクラッシュをコンパイル時に防ぐ。
高速な実行速度
AppleがObjective-Cより最大2.6倍高速と発表。LLVMコンパイラで最適化されたネイティブコードを生成。
Swift Concurrency
async/await・Actorによる現代的な並行処理。UIのフリーズなしにバックグラウンド処理が書ける。
SwiftUI
宣言的UIフレームワーク。少ないコードで美しいUIを構築でき、リアルタイムプレビューが便利。

よくある質問

iOSアプリ開発にはMacが必要?

XcodeはmacOS専用のため、iOSアプリの開発・リリースには原則としてMacが必要です。ただしSwift PlaygroundsというアプリをiPadで使えば、iPhoneやiPad上でコードを書いてApp Storeに公開することも可能になっています。クラウドサービス(GitHub CodespacesのmacOS環境等)を使う方法もありますが、本格的な開発にはMacが推奨されます。

KotlinとSwiftは似ている?

はい、文法的にかなり似ています。どちらもオブジェクト指向と関数型プログラミングを組み合わせた現代的な言語で、Optional型・データクラス・ラムダ式・拡張関数・null安全など類似した概念を持ちます。Swiftを習得した後にKotlinを学ぶ(またはその逆)のは比較的スムーズだと言われています。

まとめ

SwiftはAppleプラットフォームの標準開発言語です。iPhoneやMacアプリを開発したいなら必須の言語で、安全性と高速性を兼ね備えた現代的な設計が魅力です。SwiftUIの登場でUI開発も以前より簡単になりました。

次の記事を読む
Android開発の標準言語「Kotlin」について学ぼう
次の記事を読む

SwiftUI詳解(宣言的UIの書き方)

SwiftUIはAppleが2019年に発表した宣言的UIフレームワークです。従来のUIKit(命令型:どのように表示するかを書く)と異なり、SwiftUI(宣言型:どのように見えるかを書く)は状態(@State・@Binding・@ObservedObject)の変化に応じてUIが自動更新されます。「Body」プロパティにコンポーネントを積み重ねる書き方で、Xcode Previewsでリアルタイムにプレビューしながら開発できます。SwiftUIのコードはマルチプラットフォーム対応で、iOS・macOS・watchOS・tvOS向けのUIを共通コードで書けます。2024年以降はSwiftUIが実務でも主流になりつつあります。

iOSエンジニアのキャリアと年収

iOSエンジニアはスマートフォンアプリ開発の主要なキャリアです。日本のApp Store市場は世界トップ3の規模があり、国内外の企業から安定した需要があります。年収は経験3〜5年で500〜750万円、シニアで750〜1,000万円程度です。大手IT企業(ヤフー・LINE・メルカリ・PayPay等)ではより高い水準も見られます。フリーランスのiOSアプリ開発案件も豊富で、月単価60〜100万円以上の案件も珍しくありません。SwiftとSwiftUIに加えてReact NativeやFlutterのクロスプラットフォーム開発も学ぶことで守備範囲が広がります。

Swiftの関数型プログラミング機能

SwiftはPure関数型言語ではありませんが、関数型プログラミングのコンセプトを取り入れています。高階関数(map・filter・reduce・flatMap・compactMap)を使ったコレクション操作・クロージャ(無名関数)・値型(struct・enum)の活用がSwiftらしい書き方です。特にOptional型(T?)はnullを安全に扱うための言語機能で、Swift Concurrency(async/await・Actor)は並行処理のバグを型システムで防ぎます。Result型(.success/.failure)でエラーを値として扱う設計も関数型プログラミングの影響を受けています。

iOS開発の必須知識(ARKit・CoreML・Vision)

iOSはAppleが豊富なフレームワークを提供しており、ARKit(拡張現実)・CoreML(機械学習モデルの実行)・Vision(画像認識・テキスト認識)・Core Bluetooth(Bluetooth制御)・HealthKit(健康データ)・StoreKit(アプリ内課金)などが使えます。CoreMLを使うとTensorFlowやCreate MLで訓練したモデルをiPhone上でオフラインで実行できます。ARKitはLiDARセンサー(iPhone 12 Pro以降)と組み合わせて精度の高いAR体験を実現でき、産業用途(家具配置シミュレーション・建設現場支援等)での活用が広がっています。

Apple DeveloperプログラムとApp Storeへの公開

iOS・macOSアプリをApp Storeに公開するにはApple Developer Program(年額約13,800円)への登録が必要です。Xcodeでアーカイブビルドを作成し、App Store Connect(developer.apple.com)にアップロードします。Appleの審査(通常1〜3日)を通過するとApp Storeで公開されます。アプリ内課金(サブスクリプション・消耗品等)を実装する場合はStoreKit 2(iOS 15+)が推奨です。TestFlightを使うと最大10,000人のベータテスターにアプリを配布できます。

SwiftUIコード例(ステート管理)

SwiftUIの宣言的UIとステート管理を実際のコードで確認しましょう。

# SwiftUI @State と Binding
import SwiftUI

struct CounterView: View {
    @State private var count = 0

    var body: some View {
        VStack(spacing: 20) {
            Text("カウント: \(count)")
                .font(.largeTitle)
                .fontWeight(.bold)

            HStack(spacing: 16) {
                Button("-") { count -= 1 }
                    .buttonStyle(.bordered)

                Button("+") { count += 1 }
                    .buttonStyle(.borderedProminent)
            }

            if count > 10 {
                Text("10を超えました!")
                    .foregroundColor(.red)
            }
        }
        .padding()
    }
}

SwiftのObjective-Cとの相互運用

既存のiOSアプリはObjective-Cで書かれているケースが多く、SwiftとObjective-Cの混在プロジェクトが実務では一般的です。Swiftからは@objcアノテーションでObjective-CのAPIを呼び出せます。Objective-CからはSwiftのクラスを@objc互換にする必要があります。新規アプリ開発ではSwiftのみで書くのが推奨ですが、既存プロジェクトのSwift移行では段階的な書き換えが現実的です。SwiftのABIが安定したSwift 5以降、バイナリ互換性が保証されています。

iOS開発のTestingとXcode活用

Xcodeには強力なデバッグ・テストツールが統合されています。XCTest(UIテスト・ユニットテスト)はXcode標準のテストフレームワークです。Instrumentsアプリでメモリ・CPU・ネットワークのパフォーマンスプロファイリングができます。Simulatorで様々なiPhone・iPadモデルをエミュレートしてテストできます。Swift Testingはios17以降のAppleの新しいテストフレームワークで、マクロベースの簡潔な記法でテストが書けます。

Swiftのサーバーサイド開発(Vapor・Hummingbird)

SwiftはAppleプラットフォームだけでなくLinuxでも動作するため、サーバーサイド開発にも使えます。VaporはSwift製のWebフレームワークで、FluentというORMとLeafというテンプレートエンジンが付属します。HummingbirdはモダンなSwift Concurrencyに対応した軽量フレームワークです。AppleのSwift Server Workgroup(SSWG)が継続的にサーバーサイドSwiftエコシステムを整備しており、将来性は高いです。

iOSアプリ開発の全体フロー

iOSアプリ開発の全体フローを把握しておきましょう。①Xcode(統合開発環境)のインストール(macOS必須)→②新規プロジェクト作成(SwiftUI or UIKit選択)→③UI設計(SwiftUIはコード・UIKitはStoryboardまたはコード)→④ビジネスロジック実装(ViewModelなど)→⑤データ管理(UserDefaults・Core Data・SwiftData等)→⑥APIとの通信(URLSession・Alamofire・async/await)→⑦テスト(XCTest・XCUITest)→⑧プロファイリング・パフォーマンス最適化(Instruments)→⑨TestFlightでベータテスト→⑩App Store申請・リリース という流れです。

SwiftデータフレームワークSwiftDataとCore Data

SwiftDataはAppleが2023年に発表したSwiftネイティブな永続化フレームワークで、Core Dataの後継として位置づけられています。@Model アノテーション付きクラスが自動的に永続化対象になり、@Query プロパティラッパーでデータを宣言的に取得できます。SwiftUIとの統合が非常にスムーズで、従来のCore Data(設定が複雑)に比べて大幅に開発が簡単になりました。iCloud同期(CloudKit連携)も簡単に追加できます。ただしSwiftDataはiOS 17+以降のみのサポートで、iOS 16以前もターゲットにする場合はCore Dataが必要です。

Swiftの並行処理(Swift Concurrency)

Swift 5.5(iOS 15+)で導入されたSwift Concurrencyはasync/await・Actor・Taskによる現代的な並行処理システムです。MainActorでUIスレッドでの処理を保証し、背景スレッドでの重い処理はdetached Taskで実行します。Sendableプロトコルで並行処理に安全な型を明示し、コンパイラが並行処理のバグ(データ競合等)を静的に検出します。AsyncSequence・AsyncStream でリアルタイムのデータストリーム処理も書けます。URLSessionの非同期APIもasync/awaitで簡潔に書けるようになり、コールバック地獄が解消されました。

コメント