こんにちは。アプリケーション共同開発部エンジニアの宇佐見です。
Fenrir Advent Calendar 2015 の3日目です。テーマは「2015年にグッときたコレ」 です。今年はやはり、WWDC 15 に参加して Swift 2 発表の瞬間に立ち会えたことが嬉しかったですね。
2014 年に Apple が発表した Swift は、2015 年に Swift 2 へと進化しました。言語仕様が改良されて使いやすくなり、また開発環境も強化されました。
フェンリルでは Swift 1 の頃から Swift を使った iOS アプリ開発に取り組んでいます。Swift を使って開発したアプリが実際にリリースされていますし、Swift を採用する案件は増えていっています。
ここでは、そんな Swift について改めて述べてみたいと思います。
Swift のバージョンの変遷
まず、Swift が発表されてから現在までの、バージョンの変遷をまとめてみます。
- 2014/06 : Swift 発表(WWDC 14)
- 2014/09 : Swift 1.0(Xcode 6.0)
- 2014/10 : Swift 1.1(Xcode 6.1)
- 2015/04 : Swift 1.2(Xcode 6.3)
- 2015/06 : Swift 2 発表(WWDC 15)
- 2015/09 : Swift 2.0(Xcode 7.0)
- 2015/10 : Swift 2.1(Xcode 7.1)
短い期間でどんどん進化していきました。Swift 2.0 に至るまでは非互換な仕様変更が多かったため、早期に Swift に取り組んだ人たちは(私たちも含めて)、変更についていくのが大変でした。ただ、今後は仕様変更は落ち着いてくるのではないかと感じています。
(追記:12/15)本記事の執筆時点では上記のように考えていましたが、その後 Swift が正式にオープンソースとなり、Apple から Swift のリポジトリが公開されました。そこで示された方針によると、今後も Swift には非互換な変更が入るそうです。今後の動向に目が離せない状況が続きますね。
Swift の特徴
Apple は Swift の特徴を4つの単語で述べています。「モダン」「安全」「高速」「対話的」の4つです。
特に目をひくのがモダンな言語仕様です。Swift はマルチパラダイムな言語ですが、とりわけ関数型言語のエッセンスをよく取り込んでいます。例えば map、flatMap、filter などの高階関数がそうです。また、Optional 型は Haskell で言えば Maybe モナドに近いものです。
他にも、クロージャ、タプル、ジェネリクスといった、モダンな言語であれば当然期待されるような仕様も入っています。また、値型である struct がメソッドやプロトコルをサポートしており、参照型である class と上手に使い分けることでより分かりやすく安全なコードが書けるようになっています。
Swift が対応する iOS のバージョン
Swift で iOS アプリ開発をする場合、iOS 8 以降を対象とすることを強くおすすめします。
Swift で開発したアプリはそもそも iOS 7 以降でしか動きません。さらに、外部ライブラリを使うには iOS 8 以降でなくてはなりません(Swift は静的リンクライブラリが使えず動的リンクライブラリのみが使えますが、iOS で動的リンクライブラリが使えるのは iOS 8 以降であるためです)。現在の iOS アプリ開発で外部ライブラリを使わないのは開発効率がたいへん悪いため、iOS 7 のサポートは諦めるのが無難です。
Swift ライブラリ紹介
私が Swift で開発するときに採用している外部ライブラリをいくつか紹介します。
XCGLogger
デバッグログ出力のためのライブラリです。ログ出力レベルの切り替えやログファイル出力が楽に行えます。他のログ出力ライブラリに比べて、コンパクトでありながら欲しい機能が入っている点が良いと思います。
APIKit
Web API クライアントのライブラリです。リクエストやレスポンスを分かりやすく記述できます。また Result 型(Haskell で言えば Either モナド)を利用して、成功時のレスポンスと失敗時のエラーとのハンドリングが分かりやすく記述できます。
Himotoki
JSON デコードを行うライブラリです。JSON を扱うモデル struct をシンプルで分かりやすい記述で作成できます。APIKit と相性が良く、組み合わせて使うとより便利です。
KeychainAccess
キーチェーンを扱うライブラリです。キーチェーンの扱いは案外面倒で間違いやすいですが、これを利用すると記述しやすく間違いにくくなります。
SnapKit
Auto Layout をコードで書きやすくするライブラリです。私は Auto Layout は Storyboard 上で行うようにしていますが、コードで Auto Layout の制約を記述する必要がある場合にはこのライブラリを使っています。
Socket.IO-Client-Swift
Socket.IO 1.0 クライアントのライブラリです。これまで Socket.IO の iOS クライアントは決め手を欠くものが多かったのですが、このライブラリが Socket.IO 公式クライアントとして登場して、安心して使えるようになってきました。
RxSwift
リアクティブプログラミングを行うライブラリで、ReactiveX ファミリーの Swift 版です。現在活発に開発されています。他の ReactiveX ファミリー(RxJava など)に馴染みがあれば使いやすいかと思います。
まとめ
Swift を取り巻く環境はより良くなってきています。今後も積極的に Swift での iOS アプリ開発に取り組んでいきたいと思います。
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!