MacでSwift 5を使ってアプリを開発する方法【初心者向け完全ガイド】
Swiftは、iPhone、iPad、Mac、Apple Watchなど向けのアプリやゲームを開発するために使われるプログラミング言語です。Appleはデバイスから最高のパフォーマンスを引き出すことを目的としてSwiftを設計しており、Swift 5ではその優れた機能セットがさらに拡張されました。本記事では、Swift 5の使い方、採用すべき理由、そしてこのバージョンで追加された新機能について詳しく解説します。
すぐに開発を始めたい方は「Swift 5の始め方」のセクションへ進んでください。より広い視点で知りたい場合は、macOSで使えるさまざまなプログラミング言語を紹介した「Macプログラミング完全ガイド」も参考になります。
Swift 5の概要
Swift 5はAppleが開発したプログラミング言語で、iOS、macOS、tvOS、watchOS向けのアプリを構築できます。
第5版は2019年3月にXcode 10.2とともにリリースされました(新機能の詳細は後述します)。ただし、Swift言語自体の歴史はそれ以前から続いており、Swift 1.0は2014年9月に登場しています。Appleによると、SwiftはObjective-Cの最大2.6倍、Pythonの最大8.4倍の速度で動作するとされています。
なぜSwift 5でコーディングすべきなのか?
1) オープンソースである
オープンソースとは、通常、プログラムやプログラミング言語のソースコードが一般に公開されていることを意味します。開発者はそのコードを自由に閲覧、修正、展開できます。
Appleのオープンソースページには次のように記載されています。「Appleは、オープンソースの手法を採用することで、macOSの中核コンポーネントが数十年にわたるピアレビューという試練に晒されてきたため、より堅牢で安全なOSになると考えています。」
2) 学びやすい
Appleはこの言語を使いやすく設計しました。シンタックスがシンプルで理解しやすいため、初心者が最初に学ぶのに理想的な言語です。ソフトウェア開発の経験があれば、Swiftの構文や概念が既存の知識とよく似ていることに気づくでしょう。
3) 高速である
Appleによれば、Swiftの検索アルゴリズムはObjective-Cの最大2.6倍、Pythonの最大8.4倍の速さで処理を完了します。
4) 安全である
Swiftで作業する際には、安全でないコードに遭遇することはなく、モダンプログラミングの規約を活用してアプリに必要なセキュリティを確保できます。
5) Playgroundが使える
Xcodeには「Playgrounds」という機能があり、Swift 5のコードを書きながら結果を即座に確認できます。Swift Playgroundsの使い方については別記事で解説しています。
6) 将来性がある
Swift 5は複数のプラットフォーム(iOS、macOS、watchOS、tvOS)向けの開発に対応しており、将来にわたって安心して使えます。
7) 継続的に改善されている
Swiftはアップデートごとに進化し続けています。Swift 5では待望のABI安定化が実現しました。これにより、今後のSwiftコンパイラはSwift 5以降で書かれたコードをコンパイルでき、新しいバージョンのSwiftへの移行も格段に楽になります。さらに、OSベンダーがSwift標準ライブラリをOSに組み込めるようになり、Swift 5以降でビルドされたすべてのアプリとの互換性が保たれます。
WWDC 2019でもさらなるSwiftの発展が発表されることが期待されていました。
Swift 5の始め方
iOSアプリを開発するには、Mac(MacBook、iMac、Mac mini)と「Xcode」(バージョン10.2以降)という無料ソフトウェアが必要です。以下の手順で始めましょう:
- デスクトップでMac App Storeを開きます。
- 検索バーで「Xcode」を検索します。
- Xcodeアイコンの横にある「入手」をクリックします。
- ブラウザからMac App StoreにアクセスしてXcodeを見つけることも可能です。

オンラインコンパイラ
アプリを実際に公開する予定がない場合は、Swiftのオンラインコンパイラを利用するのもよいでしょう。学習とコード実行に最適な方法です。
- Online Swift Playground:Swift 5に対応しており、コードのテストと実行ができます。
- Repl.it:執筆時点(2019年5月)ではSwift 4.2に対応したオンラインコンパイラを提供していますが、アップデートが間もなく予定されています。
Swiftでシンプルなアプリを作る方法
Xcodeを開き、File > New > Projectを選択します。テンプレート一覧からSingle View Appを選びましょう。

アプリ名とOrganization名(会社名または自分の名前)を入力します。Organization Identifierは通常、会社のURLを逆順に並べたものです。例:com.mycompany.myapp
言語としてSwiftを選択し、Nextをクリックします。最後に、Xcodeにプロジェクトを作成させたいMac上の場所を選択します。

プロジェクトが作成されると、次のような画面が表示されます。

ここでは、ユーザーがテキストフィールドに名前を入力し、ボタンを押すと簡単な挨拶が表示される、シンプルなアプリを作成します。
まず、左ペインのMain.storyboardファイルを開きます。空のViewが表示されるので、右上の丸いボタンをクリックしてオブジェクトライブラリを開きましょう。Text Field、Label、ButtonをView上にドラッグします。


View階層でButtonを選択し、右側のユーティリティエリアでタイトルを「挨拶を生成」に設定します。

ViewController.swiftファイルをダブルクリックすると、別ウィンドウで開きます。
次に、View内のText Fieldを選択し、Ctrlキーを押しながらViewControllerクラスの上部までドラッグします。Text Field用のIBOutletを作成するよう求められるので、「textField」という名前を付けましょう。

同じ手順でLabelにもIBOutletを作成し、「label」と名付けます。Buttonについても同様ですが、こちらはViewControllerの上部ではなく下部にドラッグしてIBActionメソッドを作成します。メソッド名は「buttonTapped」としてください。
IBOutletはストーリーボード上のコントロールをコードから操作するために使われ、IBActionメソッドはタップなどのボタンイベントへの反応に使われます。
ViewControllerクラスのbuttonTappedメソッドに、以下のコードを追加します:
if let name = textField.text {
self.label.text = "Hello " + name
}
これらの変更後のViewController.swiftファイルは次のようになります。

これでアプリを実行する準備が整いました。実行ボタンを押すと、シミュレータ上でアプリが起動します。
ユーザーがText Fieldに名前を入力してButtonをタップすると、下部のLabelに「Hello」と入力された名前が表示されます。

Swift 5の基本・応用概念
シンプルなアプリが完成しました。次に、自分のアプリプロジェクトで活用できるメソッドやコードスニペットを見ていきましょう。
テキストの出力
print("Hello, world!")
変数の定義
定数には「let」、変数には「var」を使用します。定数の値は代入後に変更できませんが、変数の値は変更可能です。型を明示的に書く必要は必ずしもありません。定数や変数の作成時に値を指定すれば、コンパイラが型を推論してくれます。
let constVar = 42
var numberVar = 27
開発者が型を明示することもできます。以下の例では整数型を宣言しています。
var numberVar: Int = 27
コメント
Swiftのコメントには2種類あります。
単一行コメント:
//これはコメントです
複数行コメント:
/* これは
複数行コメント */
条件分岐(if文)
Swiftにおけるif文の構文は以下の通りです。
if boolean_expression {
/* ブール式がtrueの場合に実行されるステートメント */
}
例:

Swift 5におけるif...else文の構文は以下の通りです。
if boolean_expression {
/* ブール式がtrueの場合に実行されるステートメント */
} else {
/* ブール式がfalseの場合に実行されるステートメント */
}
例:

Swift 5におけるif...else if...else文の構文は以下の通りです。
if boolean_expression_1 {
/* 式1がtrueの場合に実行 */
} else if boolean_expression_2 {
/* 式2がtrueの場合に実行 */
} else if boolean_expression_3 {
/* 式3がtrueの場合に実行 */
} else {
/* 上記のいずれの条件もtrueでない場合に実行 */
}
例:

Switch文
Swift 5で利用できるswitch文の一般的な構文は以下の通りです。「fallthrough」を使うと、次のcaseの実行を継続してからswitch文を抜けます。
switch expression {
case expression1:
statement(s)
fallthrough /* 任意 */
case expression2, expression3:
statement(s)
fallthrough /* 任意 */
default: /* 任意 */
statement(s)
}
例:

配列(Arrays)
配列や辞書は角括弧([ と ])で作成し、括弧内にインデックスやキーを書いて要素にアクセスします。以下のコードは配列を作成します。
var arrayList = ["Swift", "JavaScript", "Java", "PHP"]
配列の要素にアクセスして変更するには、次のように直接書けます。
arrayList[2] = "React Native"
空の配列を作るには、イニシャライザ構文を使います。
var emptyArray = [String]()
emptyArray = []
辞書(Dictionaries)
var occupations = ["Steve": "Developer", "Kate": "Designer"]
辞書の値にアクセスして変更するには、次のように直接書けます。
occupations["Steve"] = "CTO"
空の辞書を作るには、イニシャライザ構文を使います。
occupations = [:]
セット(Sets)
Swiftのセットは配列に似ていますが、重複しない一意の値のみを保持します。
var a : Set = [1,2,3,4,5,6,7,8,9,0]
Swiftには値の不在を扱うOptional(オプショナル)型もあります。Optionalは「値が存在し、それはxである」か「そもそも値が存在しない」のどちらかを表します。Optionalは「?」または「!」で定義できます。
var myString: String?
「?」は値が存在してもしなくてもよいことを意味します。
「!」は初期状態ではnilであってもよいが、将来使用する際には必ず値を持っている必要があることを意味します。そうでなければランタイムエラーが発生します。
記号なしの場合、変数はオプショナルではなく、必ず値を代入する必要があります。さもなければコンパイルエラーになります。
関数
Swiftで関数を作成する構文は以下の通りです。「inputNum」はパラメータ名とデータ型、「createStr」は関数名、「-> String」は戻り値の型を表します。この関数は整数を入力として受け取り、文字列に変換して返します。
func createStr(Number inputNum : Int) -> String {
return "\(inputNum)"
}
関数は以下の構文で呼び出せます。
createStr(Number: 345)
クラス
以下はCarクラスを作成する構文です。オプショナルのメンバ変数numOfPersonsと、関数displayDetails()を持っています。
class Car {
var numOfPersons : Int?
func displayDetails() {
}
}
クラスのインスタンスは次のように作成できます。
var myCar : Car = Car()
「numOfPersons」変数は次のように初期化できます。
myCar.numOfPersons = 5
クロージャ(Closures)
クロージャは、CやObjective-Cと同様に、ブロックとしてまとめられた匿名関数で、どこからでも呼び出せます。クロージャは変数に代入することも可能です。Swiftでのクロージャの構文は以下の通りです。
{
(parameters) -> return type in
statements
}
以下はシンプルな例です。ここではクロージャを変数scnameに代入し、次の行で変数名を呼び出すことでクロージャを実行しています。

拡張(Extensions)
Swiftでは、拡張(Extension)を使って既存のクラス、構造体、列挙型の機能を追加できます。拡張によって型に機能を追加することはできますが、既存機能のオーバーライドはできません。
以下の例では、carクラスに対して拡張を追加し、新たなプロパティを加えています。speedプロパティには、あたかもクラス本来のメンバであるかのように直接アクセスできます。

タプル(Tuples)
タプル型は、複数の値をひとつの複合値としてグループ化するために使われます。タプル宣言の構文は以下の通りです。
var TupleName = (Value1, value2,… 任意の数の値)
タプル宣言の例:
var error501 = (501, "Not implemented")
Swift 5の新機能
Swift 5の新しい要素について、より詳しく見ていきましょう。
Raw Strings(生文字列)
Swift 5ではRaw Strings(生文字列)が導入されました。これにより、従来のSwiftバージョンではエスケープシーケンスが必要だった引用符やバックスラッシュを含む文字列を、より簡単に作成できるようになりました。Raw Stringsでは、引用符やバックスラッシュは文字列の終端やエスケープ文字として解釈されず、そのままの記号として扱われます。
Raw Stringsを使うには、文字列の先頭と末尾に#を付けるだけです。

Raw Stringsではバックスラッシュがそのままの記号として解釈されるため、文字列補間を行うにはバックスラッシュの後にもう一つ#を追加する必要があります。

Raw Stringsの中で"#という並びを一緒に使いたい場合は、文字列の先頭と末尾に##を付けます。

整数の倍数判定
Swift 4.2以前では、ある数が別の数の倍数かどうかを調べるには剰余演算子(%)を使う必要がありました。Swift 5では専用のメソッドが用意され、コードが格段に読みやすくなりました。

将来のenumケースへの対応
Swiftのswitch文は常に網羅的(exhaustive)でなければなりません。つまり、すべてのenumケースを処理するか、特定のケースのみを処理して残りをすべて扱うdefaultケースを追加する必要があります。

このアプローチの問題点は、将来開発者がenumに新しいケースを追加しても、コンパイラから警告が出ないことです。そのため、新しいケースはdefaultケースで処理されることになり、必ずしも望ましい動作とは限りません。
この問題に対処するため、Swift 5では新しい@unknown属性が追加されました。この属性はdefaultケースと併せて使用します。

switch文で@unknown defaultケースを使うと、将来enumに新しいケースが追加された際にコンパイラが警告を発します。これにより、開発者は新しいケースを処理するかどうかを判断できるようになります。
ネストされたオプショナルのフラット化
ネストされたオプショナルは、try?を使ったエラー処理によって生じることがあります。Swift 5では、ネストされたオプショナルが通常のオプショナルにフラット化されるようになりました。これは条件付き型キャストやオプショナルチェーンの挙動と一致します。

上記の例では、model変数の型が、Swift 4.2当時のString??ではなくString?になっていることが分かります。
標準ライブラリへのResult型の追加
Swift 5ではResult型が標準ライブラリに追加されました。Result型は、非同期コードにおけるエラー処理を簡潔かつ明快に行う方法を提供します。successとfailureのケースを持つenumとして実装されており、両方のケースはジェネリクスで実装されています。successケースは任意の型の関連値を持てる一方、failureケースはErrorプロトコルに準拠した関連値を持たなければなりません。以下はResult型の使用例です。

上記の例では、URLから名前を取得するシンプルなApiClientを実装しています。fetchNames関数の第2引数がResult型を受け取る完了クロージャであることに注目してください。この例のResult型は、successケースに[String]、failureケースにApiErrorを使用しています。
このコードは次のように使えます。

Swiftのその他の機能
最新バージョンの新機能を見てきましたが、旧バージョンから受け継がれている機能も知っておく価値があります。ここではSwift 4で追加された主なハイライトを紹介します。
文字列(Strings)
Swift 4以降、StringはCollectionプロトコルに準拠しており、Stringを直接反復処理できるようになりました。これは、count、isEmpty、map()、filter()、index(of:)など、あらゆるCollectionのメソッドやプロパティをStringに対して使えることも意味します。

また、Swiftでは三重引用符を使った複数行文字列という全く異なるアプローチを採用しているため、二重引用符をエスケープする必要がなくなりました。

JSONのエンコードとデコード
Swift 4では、Swift 3でおなじみだったJSONのアーカイブおよびシリアライズ処理全体が簡素化されました。カスタム型にCodableプロトコル(EncodableとDecodableを組み合わせたもの)を実装するだけでよくなりました。

スマートなキーパス(Key Paths)
Swift 4では、キーパスを使ったオブジェクトのプロパティへのアクセスが容易になりました。

クラスとプロトコルの混合
Swift 3では、定数や変数の作成時にプロトコルを組み合わせることができました。Swift 4はさらに一歩進んで、同じ構文でクラスも組み合わせられるようにしました。Objective-Cと同じように、特定のオブジェクトをクラスとプロトコルの両方で一度に制約できます。
swap vs swapAt
Swift 3のswap(_:_:)ミューテーティングメソッドは、配列の2つの要素を受け取ってその場で入れ替えます。しかしこのソリューションには大きな欠点がありました。入れ替える要素が関数に入力パラメータとして渡されるため、関数がそれらに直接アクセスできてしまうのです。
Swift 4では全く異なるアプローチを採り、このメソッドをswapAt(_:_:)に置き換えました。こちらは2つの要素に対応するインデックスを受け取り、従来と同じように要素を入れ替えます。
辞書とセット
辞書のinit(uniqueKeysWithValues:)イニシャライザを使えば、タプルの配列から新しい辞書を作成できます。

Swift 5プログラミングを学べるおすすめの場所
Swift 5を使ったアプリ開発を始めるのに役立つリソースは多数あります。特におすすめの選択肢を以下に挙げます。
Apple公式ドキュメント:Swift 5を学ぶのに最適なのは、Appleの公式Swiftドキュメントです。
eBook:Appleは最新のeBook「The Swift Programming Language (Swift 5.0)」を公開しており、Swift 5の学習に非常に役立ちます。
Udemy:最大級のオンライン動画学習サービスには、各バージョンのSwiftをカバーする複数のコースがあります。Swift 5を扱うコースの例は以下の通りです。
- Swift 5 Programming for Beginners
- iOS 12 & Swift 5: Build a To Do List App
Swift programming in easy steps(iOS 12とSwift 5対応):この記事の著者による書籍で、Swift 5を使ったiOSアプリ開発をゼロから学べる内容で、図解も充実しています。Amazonで購入できます。
Hacking with Swift:Swiftによる開発を学ぶ素晴らしい方法として、Hacking with Swiftサイトの書籍シリーズがあります。優れたSwift開発者であり愛好家でもあるPaul Hudson氏によって運営されています。
その他のリソースについては、別記事「Swiftの学び方」をご覧ください。
-
Parallels Desktop 15でMacにWindowsをインストールする方法【初心者向け完全ガイド】
仮想マシン(Virtual Machine)とは、あるオペレーティングシステム(OS)の中に、別のOSの環境を作り出して実行できるようにするソフトウェアのことです(例:macOS 10.15上でWindows 10を動かすなど)。MacでWindowsを使う方法は仮想マシンだけではありません。Mac純正の「Boot Camp」という選択肢もあります。しかしBoot Campと異なり、仮想マシンの最大のメリットは2つのOSを同時に起動できることです。 中でもParallels Desktopは、macOS向け仮想化ソフトウェアとして最も人気のある製品の一つです。特別な専門知識がなくても、少ない
-
Macで削除できないアプリを完全にアンインストールする方法
Macへの新しいアプリのインストールはとても簡単で、不要になったらアンインストールすれば済む話のはずです。しかし実際には、頑固なアプリやその残存データが正しく削除されないケースがあります。こうしたデータはシステム内に残り続け、気づかないうちに貴重なストレージ容量を占有してしまうのです。 このような問題に直面している場合は、まずMacを再起動してから、もう一度アプリの削除を試みてください。それでも削除できない場合は、以下の方法を順番に試してみましょう。 手動でMacのアプリを削除する基本の方法 最も基本的な方法は、アプリをゴミ箱にドラッグして削除することです。ここでは、正しい手順を確認するために