Swift VS Objective-C
こんにちは!APP業務担当の新人Mです。
今回はiOSアプリの開発言語についてです。
iOSアプリを開発するときは、主にSwiftかObjective-Cを使用することになるかと思います。(マルチプラットフォームの言語でXcode向けにビルドしたり、C++でコンパイルしたりなどの例外はありますが…)
そこで今回はどっちの言語で開発すれば良いの?何が違うの?という方向けに、「Swift VS Objective-C」と題しまして、それぞれの特徴を比較してみました。
Objective-Cの利点
・Objective-Cは記法が完成している!
比較的新しく更新の多いSwiftに比べて、Objective-Cは完成された言語と言えます。Appleのライブラリの更新で非推奨になるものはあっても、大幅な書き換えが少なくて済みます。
それに対して、SwiftはSwift自体のバージョンアップが多々行われています。Swiftには、旧バージョンから新バージョンへのコンバーターがあります。ですが、コンバーターは万能ではなく、コンバートしてもエラーが出たり手動での書き換えが一部必要になってきます。更新頻度が高いiOSアプリではこうした手間が省けるのは大きい利点だと言えます(Swift2からSwift3への移行は大変だった方も多いはず…)。
・ライブラリが多い!
Objective-CはiOS開発初期から使用されている言語です。Swiftに比べると歴史が長く、それだけ多くのライブラリがあります。また、同様の理由から技術情報が多いです。(最近はSwiftもかなり増えてきましたが…)
SwiftもObjective-Cのライブラリを利用できますが、実装には一手間かかります。また、Swiftのライブラリもあるものの、前述の通りSwift自体の更新があるため、ライブラリが更新されないと自身のアプリも新バージョンに更新できない…などということも多々あります。
Swiftの利点
・処理が早い!
Swiftはその名の通り高速化を目的として開発された言語です。Appleの発表ではObjective-Cの最大2.6倍、Pythonの最大8.4倍の速度※1となるそうです。
画像や動画、音声処理などは、大量のデータを扱うため、速度が重要になってきます。こうした速度が重要となるiOSアプリを開発する際にはSwiftを利用するのが良いでしょう。もちろんコードの書き方や環境にも影響するので、このパフォーマンスが常に出る訳ではありませんが、Swiftのバージョンアップを経てさらに最適化されていくでしょう。
・不具合に対応しやすい!
Objective-Cでは、変数に何も入っていなくても、アプリとしては何も起こりません。 Swiftでは何も入っていない状態を許可する必要あります。許可をせずに空の変数を利用した場合、アプリが強制終了します。
一見、アプリが落ちない方がいいんじゃ?と思われる方もいるかもしれませんが、アプリが何も反応しなければ、開発者にとっては不具合の発見がしにくく、予測できない動作に繋がります。逆に、アプリが落ちてくれれば、その箇所を見に行けば良いので、開発者は不具合の修正が容易になります。
・可読性高くコードが少なくて済む!
Objective-Cはメソッド呼び出しに[]を使用することから、結果的に大量の[]に囲まれてしまいます。例をあげてみましょう。
例: 【Objective-C】文字列ma、e、beを合成したいとき
NSString *str = [[@“ma” stringByAppendingString:@”e”] stringByAppendingString:@”be”]; //maebe
メソッド呼び出しで[]に囲まれていますね。単純なメソッドの読み出しならば、まだ問題はなさそうですが、複数のメソッドが組み合わさると非常に読みにくくなってきます。
また、1つのクラスに対して、ファイルが2つ必要など、ファイル数が多くなるのも欠点の一つです。
その点、Swiftは人気のプログラミング言語に近く、JavaScript、Java、Python、C#、C++などを触ったことのある方にはかなり取っ付きやすい言語となっています。さらに、Objective-Cと比べるとSwiftのコードは少なくて済みます。例をあげてみましょう。
例: 【Swift】文字列ma、e、beを合成したいとき
let str = “ma”+”e”+”be” //maebe
先ほどのObjective-Cと比べて、Swiftはとてもわかりやすいですね。またif let文のようにif文内でnil判定と変数代入が可能だったり、文末の「;」が不必要だったりと、コード量の削減と可読性に優れています。
開発者は、コードを書く時間よりも、不具合の修正や別の人の書いたプログラムを読むことに多く時間を割きます。そのため、よりコードが少なく読みやすいプログラムは、開発時間の短縮につながり、不具合の抑制にもつながります。
Objective-CからSwiftへの移行
特徴を軽くまとめましたが、現時点では一長一短なものの、Swift4の情報が出始めたりと、今後の展開ではSwiftはさらに発展していくものと思われます。最近ではObjective-Cで開発されたアプリを、Swiftに移行する動きも要所要所で見られます。
Objective-CとSwiftはプロジェクト内で共存することができますので、様子を見つつ徐々に移行していくのも良いかもしれません。
まとめ
私はSwiftでの開発を行ってからObjective-Cを学びました。私がSwiftを学び始めた頃は、Objective-Cのライブラリや技術情報が多かったのですが、Swift自体は馴染み安く思った通りに開発を行うことができました。 やはり既存の言語に文法が近いというのは、大きな利点だと思います。
Objective-Cを初めて触ったのが描画処理などの複雑な処理が必要なアプリの改修でした。
処理を把握するのが困難で、不具合の調査にも時間がかかり、処理速度も気になり…と本当に苦労しました。このような複雑なアプリは、描画処理の高速化・不具合の改修・可読性の向上などの面からSwiftで作るべきだと実感しました。
安定しているObjective-Cは、更新などの手間は少ないものの、発展の少ない言語です。
Swiftは更新頻度が高く、まだまだ安定していない言語ではありますが、それだけ進化の可能性を秘めている言語でもあります。
次世代のiOSアプリを開発を担っていくために、Swiftでの開発にいち早く着手して、流行を追っていくのもいいかもしれません。
参考
※1 http://www.apple.com/jp/swift/
記事作成日:2017年2月20日