Swift(スウィフト)とは2014年にApple社が発表した、iPhoneアプリなどを開発するための言語です。iPhoneアプリ開発においてなぜ主流な言語となったのか?具体的にどんな文法で記述するのか?Swiftのメリット・デメリットは何か?などSwiftについて初級エンジニア向けにわかりやすく解説します。
1. 【初心者向け】Swiftとは何か?
iOSアプリ開発でよく採用されるSwiftとは一体どんな言語なのでしょうか。なぜiOSアプリ開発で主流なのか、どのような文法なのかなどを知りたい初級エンジニア向けに簡単にわかりやすく解説します。
1.1 主にiOS・Mac向けのアプリ開発に採用されるApple製プログラミング言語
Swift(スウィフト)とは、Apple社が開発したオープンソースのプログラミング言語です。
主にiOS・Mac向けのアプリ開発のために開発された言語で、iOS 7以降、OS X version 10.9以降のOS搭載のアプリケーションは全てSwiftで開発することができます。
これまでiOS・Macのアプリ開発には、同じくApple社開発のObjective-Cというプログラミング言語が使用されていましたが、コードの記述法が独特なため、複雑で習得が難しい言語となっていました。そんな悩みを解決すべく、誕生したのがこのSwiftという言語です。
1.1.1 iOS
iOSとは、iPhoneでおなじみのOS(オペレーティングシステム)です。
iPhone以外のスマホには搭載されていないOSで、アプリのサイドローディングができないなど柔軟性には欠けますが、Androidに比べ非常にシンプルな構造になっているのが特徴です。
■ 最新OSのバージョン:iOS 14(2020年11月時点)
■ 公式サイト:https://www.apple.com/jp/ios/ios-14/
1.1.2 Mac
macOSとは、Mac用のOSです。iOS同様にシンプルなデザインで、直感的に扱いやすいGUIを導入していることが特徴です。Windowsと違ってOSの種類が少なく、ユーザにとっては扱いやすいOSといえるでしょう。
■ 最新OSのバージョン:macOS v11.0 Big Sur(2020年11月時点)
■ 公式サイト:https://www.apple.com/jp/macos/big-sur/
1.1.3 Apple TV
tvOSは、2015年にApple TV(appleが販売するメディアストリーミング端末)向けに開発されたOSです。専用のAppStoreが開設されているため、動画の視聴のみならず、アプリのインストールも可能となっています。
■ 最新OSのバージョン:tvOS14.2(2020年11月時点)
■ 公式サイト:https://www.apple.com/jp/tv/
1.1.4 Apple Watch
watchOSは、Apple Watch専用のOSです。iOSをベースとして開発されており、iOSと共通の機能が多いのが特徴。iPhoneとApple Watchをペアリングさせることによって、iPhone側で処理を行い、Apple Watchに画面表示させるということもできます。
■ 最新OSのバージョン:watchOS 7(2020年11月時点)
■ 公式サイト:https://www.apple.com/jp/watchos/watchos-7/
1.2 2014年のWWDCにて発表
Swiftは、2014年のWWDC(Apple World Wide Developers Conference)※ にて、これまでOS X、iOSの開発言語であったObjective-Cに置き換わる形で発表されました。実はSwiftが注目されている理由には"置き換わる" 形で発表されたというところにあります。Objective-Cに替わるものを提供するという意味では、Apple社はこれまでもXcodeにおけるJavaサポートをはじめ様々なサポートを加えてきました。しかし、どれもObjective-Cを残したまま別言語での開発を可能にする程度に留まっていたため、新たな言語Swiftの誕生はかなりのインパクトを与えました。よりモダンでパフォーマンス向上も期待できる言語のため、当初から多くのデベロッパーが好意的に受け入れられています。
※WWDC:Appleが年に1回サンフランシスコで開催する開発社向けのイベント
1.2.1 サーバーサイドでのSwiftの採用も進む
2014年に発表された翌年には、Swiftはオープンソース化されたため、世界中のデベロッパーがサーバーサイドでも使用可能にするために検証が繰り返されました。そして、一番最初に登場したサーバーサイドのフレームワークはIBM社のKituraです。かつてNode.jsがWebベースのデベロッパーをクラウドの開発者として引き込んだように、モバイルのデベロッパーをクラウドに引きつけることを指向され開発されました。現在IBM社はサーバーサイドSwiftの開発を行わないと発表していますが、今もなおサーバーサイドSwiftの開発自体は業界で広がっています。近年サーバーサイドフレームワークでは、Vaporが採用される場合が多く人気です。
2. Swiftの特徴
それでは、具体的にSwiftとはどんな特徴を持ったプログラミング言語なんでしょうか?
従来のObjective-Cと比較しながら見てきましょう。
2.1 モダン
モダンなプログラミング言語のコードは書きやすく・読みやすいというのが特徴です。Swiftでのコーディング作業はインタラクティブで楽しいのが特徴。開発ツールであるXcodeのPlayground機能を使用すれば、まるでインプリンタ言語のようにコードが即時実行され、リアルタイムで実行結果が表示されます。
また、構文も非常にシンプルで、文末のセミコロンが不要であったり、型推測が行われたりと、快適にコードの記述が可能です。Objective-Cでのクラス定義に必要だったヘッダファイル(.hファイル)の作成もSwiftでは不要になりました。
2.2 軽量な動作
Swift は日本語で「速い、迅速な」という意味があり、Swiftで開発されたアプリケーションは、名前通り高いパフォーマンスを発揮します。
Apple社の公式発表によると、深さ優先探索アルゴリズムを使って1つのグラフ内で10,000個の整数を検索した場合、Python2.7より最大8.4倍のスピードで処理することが可能です。
2.2.1 Objective-Cとの処理速度の違い
先ほどのPythonと同条件で処理速度を比較した場合、Objective-Cよりも最大2.6倍高速で処理が可能です。iOSアプリの開発は、動画や音声など大量のデータを扱うため、Swiftの方がより快適に作業することが出来ます。
ただし、全ての処理においてSwiftが優れているというわけではなく、コンパイルの処理速度はObjective-Cの方が優れている場合もあります。
参考:https://www.apple.com/jp/swift/
2.3 SwiftとObjective-Cの違い
まず、Objective-CとSwiftでは言語思想が大きく違います。
Objective-CはC言語の記述を残したまま拡張したような言語のため、「マクロ的である」とか「メタ言語的である」といわれ、非常にマニアックで特殊な言語です。昔のiOSアプリケーションはシンプルかつ単機能な点が評価されていたため、Objective-Cでの開発が行われていましが、スクリーンの大画面化など、徐々にアプリケーションが複雑になっていき、よりシンプルで高速に動く言語が求められるようになったため、Swiftが誕生したというわけです。
3. Swiftのメリット・デメリット
次に、Swiftのメリット・デメリットについて紹介します。
【メリット】
- 学習コストが低い
PythonやRubyなどのモダンな言語を参考にしているため、文法がシンプルで初心者にも分かりやすい。また、学習用のチュートリアルも充実している。
- 処理速度が早く軽量
先ほど紹介したように、Python2.7の8.4倍、Objective-Cの2.6倍高速で処理が可能。
- エラーに気づきやすい
スクリプト言語ではなく、コンパイル言語のため、ビルド時にエラーに気づくことが出来る。
- 複雑な動作も実現可能
スマホの端末性能をフル活用し、複雑なアプリも快適に実行可能。
【デメリット】
- コンパイルに時間がかかる
コンパイル言語のため、コンパイルに時間がかかる。作業の待ち時間が増えるため、快適に開発を行いたいエンジニアにとっては不向き。
- メインはiOSアプリの開発
Swiftの開発の幅を広げるため、サーバーサイドのフレームワークが登場してきているが、まだ活用の幅が狭い。
- 基本的な開発環境はMac
基本的にMacのXcodeという開発環境で開発を行う。2020年9月にWindows向けのSwiftツールチェーンイメージのリリースが発表されたが、ツールチェーンインストーラーと統合開発環境(IDE)「Visual Studio 2019」とともに各種コンポーネントの準備が必要なため、Macと比較すると環境構築コストはやや高い。
4. Swiftの活用事例
Swiftの登場により、Objective-Cで作られていたアプリをSwiftへ移行する企業が増えてきています。ここでは、Swiftを採用した企業の事例をいくつか紹介します。
4.1 メルカリ
フリマアプリで知られるメルカリもObjective-CからSwiftへ移行しているサービスの一つです。JP版メルカリでは、従来のObjective-Cを一気に書き換えるのではなく、部分リニューアルという形でSwiftへ移行。リニューアル後に問題が生じてもすぐに旧画面へに戻せるように、A/Bテストの機能を使った開発を行っています。
また、現状は、MVVMとReactiveSwiftを採用。さらに、JP版メルカリの複雑な画面をシンプルに保つためにMicroViewControllerも検討されています。
参考:Objective-CからSwiftへ、4つの移行ポイント~メルカリの実践例から最適な手法を学ぶ|エンジニアHub
4.2 NewsPicks
NewsPicksはソーシャル経済メディア「NewsPicks」を提供している会社です。求人サイト「Wantedly」において、NewsPicksのプラットフォームを支えるiOSエンジニアを募集しており、開発言語としてSwift5.0(一部Objective-C)を挙げています。
参考:NewsPicksプロダクト|アプリをさらなる高みへ!iOSエンジニア募集|Wantedly
4.3 Wantedly
Wantedlyは、求人掲載サイト「Wantedly Visit」や名刺管理アプリ「Wantedly People」などのサービスを提供する会社です。Wantedlyは自社求人サイト内でiOS開発者を募集しており、求める技術スタックとして、Swiftを挙げています。
参考:仕様通りの実装だけでなく分析・仮説検証・実装まで携わるiOS開発しませんか|Wantedly
5. 【基本編】Swiftの使い方・サンプルコード
ここからは、これからSwiftの学習を始めようと思っている方に向けて、Swiftはどんな書き方をするのか、基本的なサンプルコードをご紹介します。
5.1 基本文法を覚える
まずは、次のような基本文法は必ず押さえておきましょう。
5.1.1 出力
//「こんにちは」と出力
print("こんにちは")
5.1.2 変数
//変数に値を代入
var name = "taro"
//型を明示することも可能
var name:String = "taro"
//後から値を変更可能
name = "hanako"
print(name) //hanakoが出力
5.1.3 定数
//定数に値を代入
let age = 18
//型を明示することも可能
let age:Int = 18
//後から値を変更不可
age = 25 //エラーが発生
5.1.4 配列
//配列の定義
var 配列名: [型名] = [配列の要素]
//String型の空配列
var emptyArray: [String] = []
var emptyArray = [String]() //省略構文
//要素あり配列
var friendList = ["tanaka","yamada","suzuki"]
//新しい要素追加
friendList.append("yamamoto") // ["tanaka","yamada","suzuki","yamamoto"]
5.1.5 if
//初期値の設定
var color = "red"
//基本文法
if(color == "red") {
print("赤色です")
} else if(color == "blue") {
print("青色です")
} else {
print("その他の色です")
}
5.1.6 class
//クラスの定義
class IntroductionClass {
//プロパティの定義
var name:String
var age:Int
//イニシャライザ
init(name:String, age:Int) {
self.name = name
self.age = age
}
//メソッドの定義
func introduction() {
print("私の名前は" + name + "です。年齢は" + age + "歳です。")
}
}
//インスタンスを生成
let sample = IntroductionClass(name:"次郎", age:25)
//クラスのッメソッドを参照
sample.introduction()
5.1.7 Enum
//enum(列挙体)の定義
enum Fruits {
case apple
case orange
case melon
case banana
case grape
}
//enum(列挙体)の要素を取得
let basket = Fruits.apple
print(basket) //apple
6. Swiftで使える代表的なフレームワーク
サーバーサイドで使用できるフレームワークも登場してきているため、いくつか紹介します。
6.1 Vapor
Vator(ベイパー)とは、Swiftのフレームワークの中で、最も人気のあるオープンソースWebフレームワークの一つです。公式でも発表があるように、PHPのフレームワークである「Laravel」をインスパイアし、非常に効率的に開発ができる設計となっています。
Vatorの動作環境は、MacOSとLinuxのUbuntu上。ORMやJSON・Validateなどの充実したパッケージが標準搭載されています。Webアプリケーション、API、リアルタイムアプリケーションなどの開発を中心に利用されることが多いです。
■ 最新のバージョン:v4.x系(2020年11月時点)
■ 公式サイト:https://vapor.codes/
6.2 Perfect
Perfectは、Swiftの発表とほぼ同時期にリリースされたWebフレームワークです。
フロントエンドとバックエンドの両方で活躍できるのが特徴です。
■ 最新のバージョン:Version 1.0(2020年11月時点)
■ 公式サイト:https://www.perfect.org/
6.3 Kitura
2016年にIBM社によって開発されたフレームワークです。開発を高速、柔軟、簡単に実現するためをテーマに人気を集めていましたが、2019年12月、開発元であるIBM社は、今後サーバー側Swift開発への関与を中止すると発表を行っています。2020年9月の時点で、Kituraはコミュニティが運営するプロジェクトに移行されました。
7. まとめ
複雑な動作の実現を可能にしたSwiftの登場により、iOSアプリ開発はさらに加速していくことでしょう。またiOSアプリ開発に留まらず、サーバーサイドSwiftの開発もどんどん進んでいます。そして、従来のObjective-Cを比較すると非常にモダンな言語となったため、初心者にとって学習コストが低くなりました。これから学習を始める人はぜひSwiftに挑戦してみて下さい。