SwiftはObjective-Cを置き換えるか
2014年11月10日
アプリ開発をしているマツナガです。
弊社では年末から年明けに向けて、新しいiPhoneアプリをいくつか開発しています。iOSのアプリ開発には、Objective-Cという言語を使用します。このObjective-Cという言語、iOSアプリ開発がこんなに盛んになるまでは、Macで動作するアプリケーションを作る言語として存在していましたが(もともとはMac OS XのベースになったNeXTで使われていた言語)、一般的な開発者はふれることのない言語でした。
しかし現在では、iOSの登録開発者数は900万に達しており(WWDC 2014でのTim CookのKeynoteより)、ここに登録されている開発者の大半がObjective-Cを習得して開発を行っています。
そして、WWDC2014では開発者にとって衝撃的な発表がありました。iOS / OS X向けの新しい開発言語「Swift」の発表です。
iOSアプリを開発するために、Objective-Cを学んだ開発者達の悲鳴が聞こえてきそうです。もちろん、Objective-CでのiOSアプリの開発がすぐにできなくなるわけではなく、iOS 8になってもObjective-Cでアプリは開発できます。これまで習得した技術が無駄になるわけではないのですが、ギークな開発者は早々にSwiftに移行していくでしょう(今年WWDCに参加した友人の話では、発表されたばかりのSwiftを使ってプログラムを書き始めた開発者がいっぱいいたとのことです)。
そこで、今後のアプリ開発において、Swiftを採用するかどうかのポイントについて考えてみます。
既存のアプリはどうするか?
すでにObjective-Cで開発されたアプリをSwiftに移行するかどうかという問題です。そもそも、Objective-CのコードをボタンひとつでSwiftに変換する魔法のツールは今現在存在していません。もともと複雑怪奇な文法を持ったObjective-Cのコードをモダンかつシンプルな記述で書けるSwiftに置き換える作業は、結構骨の折れる作業です。一度、数百行程度のコードでトライしてみましたが、とっても辛かったです。すでに公開しているアプリケーションで、大きな改造もなく、保守メンテナンスフェーズにあるアプリに関しては、Swiftに置き換えるメリットはないように思います。また、Swiftで書かれたコードはiOS 7以降しか動作しません。iOS 6での動作保証がマストである場合は、Swiftは選択肢から外れることになります。
新規にアプリを開発する場合どうするか?
まったく新しいアプリを開発する場合、または、すでに公開しているObjective-Cで開発されたアプリを心機一転リニューアルする場合、Swiftを採用するかどうかのチェックポイントです。
1.既存のコードが再利用できるか
まったく新しいアプリを開発する場合でも、これまで開発したObjective-Cのコードを再利用はしたいものです。リニューアルする場合も同様です。これについては、Swiftは、Objective-Cとの互換性を保証していますので、問題ありません。SwiftからObjective-Cのコードを呼ぶこともできますし、Objective-CからSwiftのコードを呼ぶこともできます。
プロジェクト内にSwiftとObjective-Cのコードを共存させる場合には、以下のサイトが参考になります。
F60K - Objective0CとSwiftの組み合わせ方まとめ
また、iOSのライブラリーを管理できるCocoaPodsを使ってインストールできるライブラリーの大半もObctive-Cで書かれていますが、これについても、Swiftのコードから呼び出すことができ、問題なく利用することができました。
Qiita - SwiftでCocoaPodsを使う
2.言語の習得コスト
Swiftは学習しやすい言語かどうかというポイントです。Objective-Cは、C言語をベースにしていると言いながらも、C言語の開発者も戸惑ってしまう括弧[ ]の使い方が独特である点や、そもそも誕生から約30年経過していることもあり、モダンな記法ができるかと言えば、少し無理がある状況ではありました。Swiftはもちろんそういった反省点から生まれた言語ではありますし、今もっとも新しいプログラミング言語であることもあり、他のモダンな言語のいいとこ取りをしているプログラミング言語といっていいでしょう。「Pythonに似てる」、「Rubyに似てる」とか、はたまた「C言語に似ている」とか開発者のつぶやきがTwitterのタイムラインからも見て取れます。そういった意味では、言語としての習得コストは低いと思います。PythonやRubyあたりを使っている開発者であればさほど習得には時間はかからないでしょう。
しかし、言語自体を習得できてもそれだけでは、アプリは開発できません。これはSwiftに限ったことではないですが、アプリを開発するには、そのアプリ専用のフレームワークの使い方を習得することが必要だからです。iOSの場合は、まずは「UIKit」の使い方を覚える必要があります。UIKitは画面を構成するViewやTableViewやボタンなどユーザーインタフェイスに関わる機能を司るフレームワークです。また、画像処理を行うフレームワーク、位置情報を扱うフレームワークなどなど、高機能なアプリを作ろうとすればするほど、覚えなければならないフレームワークは増えていきます。これは、Objective-CでもSwiftであっても覚えなければなりません。ここの習得コストは両者ほぼ同じといえます。逆にいうと、これらフレームワークをObjective-Cを使って覚えた開発者は、この知識をそのままSwiftで使うことができます。これは大きなメリットです。あとは、Swiftの言語を覚えるだけでよいのですから。
では、これからアプリを開発する人は、どちらを選択すればよいでしょうか? フレームワークについての学習コストは両者同じであるとするならば、学習コストの低いSwiftを選択するのが賢明だと考えます。ただ、現段階では、Objectice-Cに関する参考図書やWebの情報も少ないかもしれません。Swiftをばりばり書いている先輩社員もそう多くはいないと思います。しかしそれは時間の問題です。Objective-Cをバリバリ書いている開発者は、またたく間にSwiftを習得してWebで情報をどんどん発信していくからです。
3.開発効率について
SwiftはObjective-Cよりも、記述を簡略化でき、見通しのよいコードが書ける印象を持ちました。Objective-Cはひとつのクラスを定義するには、ヘッダファイルと実装ファイルの2つのファイル構造になっていましたが、Swiftではひとつのファイルでひとつのクラスを記述することができます。ソースが増えてくると、結構、ヘッダファイルと実装ファイルをいちいち開いて行ったり来たりする時間が無駄だなと思っていたのですが、Swiftではこの作業が軽減できそうです。
言語仕様を習得しさえすれば、記述するコードはかなり減らすことができ、デバッグ工程の作業も減らせそうなので、開発効率は向上すると思います(一方で、iPhone開発は、iPhone 6から画面サイズが増えてしまったのでそのための開発コストといった問題があるのですが、それは別の話)。
いろいろ自問自答した結果、弊社で、年明け頃に公開予定のアプリは、Swiftで書くことに決めました。これまで、いくつもの言語が誕生してきましたが、Swiftは、これまで新たに誕生した言語とは少し違う起源を持ち、違う進化を遂げていく言語なのだと思います。
弊社では年末から年明けに向けて、新しいiPhoneアプリをいくつか開発しています。iOSのアプリ開発には、Objective-Cという言語を使用します。このObjective-Cという言語、iOSアプリ開発がこんなに盛んになるまでは、Macで動作するアプリケーションを作る言語として存在していましたが(もともとはMac OS XのベースになったNeXTで使われていた言語)、一般的な開発者はふれることのない言語でした。
しかし現在では、iOSの登録開発者数は900万に達しており(WWDC 2014でのTim CookのKeynoteより)、ここに登録されている開発者の大半がObjective-Cを習得して開発を行っています。
そして、WWDC2014では開発者にとって衝撃的な発表がありました。iOS / OS X向けの新しい開発言語「Swift」の発表です。
iOSアプリを開発するために、Objective-Cを学んだ開発者達の悲鳴が聞こえてきそうです。もちろん、Objective-CでのiOSアプリの開発がすぐにできなくなるわけではなく、iOS 8になってもObjective-Cでアプリは開発できます。これまで習得した技術が無駄になるわけではないのですが、ギークな開発者は早々にSwiftに移行していくでしょう(今年WWDCに参加した友人の話では、発表されたばかりのSwiftを使ってプログラムを書き始めた開発者がいっぱいいたとのことです)。
そこで、今後のアプリ開発において、Swiftを採用するかどうかのポイントについて考えてみます。
既存のアプリはどうするか?
すでにObjective-Cで開発されたアプリをSwiftに移行するかどうかという問題です。そもそも、Objective-CのコードをボタンひとつでSwiftに変換する魔法のツールは今現在存在していません。もともと複雑怪奇な文法を持ったObjective-Cのコードをモダンかつシンプルな記述で書けるSwiftに置き換える作業は、結構骨の折れる作業です。一度、数百行程度のコードでトライしてみましたが、とっても辛かったです。すでに公開しているアプリケーションで、大きな改造もなく、保守メンテナンスフェーズにあるアプリに関しては、Swiftに置き換えるメリットはないように思います。また、Swiftで書かれたコードはiOS 7以降しか動作しません。iOS 6での動作保証がマストである場合は、Swiftは選択肢から外れることになります。
新規にアプリを開発する場合どうするか?
まったく新しいアプリを開発する場合、または、すでに公開しているObjective-Cで開発されたアプリを心機一転リニューアルする場合、Swiftを採用するかどうかのチェックポイントです。
1.既存のコードが再利用できるか
まったく新しいアプリを開発する場合でも、これまで開発したObjective-Cのコードを再利用はしたいものです。リニューアルする場合も同様です。これについては、Swiftは、Objective-Cとの互換性を保証していますので、問題ありません。SwiftからObjective-Cのコードを呼ぶこともできますし、Objective-CからSwiftのコードを呼ぶこともできます。
プロジェクト内にSwiftとObjective-Cのコードを共存させる場合には、以下のサイトが参考になります。
F60K - Objective0CとSwiftの組み合わせ方まとめ
また、iOSのライブラリーを管理できるCocoaPodsを使ってインストールできるライブラリーの大半もObctive-Cで書かれていますが、これについても、Swiftのコードから呼び出すことができ、問題なく利用することができました。
Qiita - SwiftでCocoaPodsを使う
2.言語の習得コスト
Swiftは学習しやすい言語かどうかというポイントです。Objective-Cは、C言語をベースにしていると言いながらも、C言語の開発者も戸惑ってしまう括弧[ ]の使い方が独特である点や、そもそも誕生から約30年経過していることもあり、モダンな記法ができるかと言えば、少し無理がある状況ではありました。Swiftはもちろんそういった反省点から生まれた言語ではありますし、今もっとも新しいプログラミング言語であることもあり、他のモダンな言語のいいとこ取りをしているプログラミング言語といっていいでしょう。「Pythonに似てる」、「Rubyに似てる」とか、はたまた「C言語に似ている」とか開発者のつぶやきがTwitterのタイムラインからも見て取れます。そういった意味では、言語としての習得コストは低いと思います。PythonやRubyあたりを使っている開発者であればさほど習得には時間はかからないでしょう。
しかし、言語自体を習得できてもそれだけでは、アプリは開発できません。これはSwiftに限ったことではないですが、アプリを開発するには、そのアプリ専用のフレームワークの使い方を習得することが必要だからです。iOSの場合は、まずは「UIKit」の使い方を覚える必要があります。UIKitは画面を構成するViewやTableViewやボタンなどユーザーインタフェイスに関わる機能を司るフレームワークです。また、画像処理を行うフレームワーク、位置情報を扱うフレームワークなどなど、高機能なアプリを作ろうとすればするほど、覚えなければならないフレームワークは増えていきます。これは、Objective-CでもSwiftであっても覚えなければなりません。ここの習得コストは両者ほぼ同じといえます。逆にいうと、これらフレームワークをObjective-Cを使って覚えた開発者は、この知識をそのままSwiftで使うことができます。これは大きなメリットです。あとは、Swiftの言語を覚えるだけでよいのですから。
では、これからアプリを開発する人は、どちらを選択すればよいでしょうか? フレームワークについての学習コストは両者同じであるとするならば、学習コストの低いSwiftを選択するのが賢明だと考えます。ただ、現段階では、Objectice-Cに関する参考図書やWebの情報も少ないかもしれません。Swiftをばりばり書いている先輩社員もそう多くはいないと思います。しかしそれは時間の問題です。Objective-Cをバリバリ書いている開発者は、またたく間にSwiftを習得してWebで情報をどんどん発信していくからです。
3.開発効率について
SwiftはObjective-Cよりも、記述を簡略化でき、見通しのよいコードが書ける印象を持ちました。Objective-Cはひとつのクラスを定義するには、ヘッダファイルと実装ファイルの2つのファイル構造になっていましたが、Swiftではひとつのファイルでひとつのクラスを記述することができます。ソースが増えてくると、結構、ヘッダファイルと実装ファイルをいちいち開いて行ったり来たりする時間が無駄だなと思っていたのですが、Swiftではこの作業が軽減できそうです。
言語仕様を習得しさえすれば、記述するコードはかなり減らすことができ、デバッグ工程の作業も減らせそうなので、開発効率は向上すると思います(一方で、iPhone開発は、iPhone 6から画面サイズが増えてしまったのでそのための開発コストといった問題があるのですが、それは別の話)。
いろいろ自問自答した結果、弊社で、年明け頃に公開予定のアプリは、Swiftで書くことに決めました。これまで、いくつもの言語が誕生してきましたが、Swiftは、これまで新たに誕生した言語とは少し違う起源を持ち、違う進化を遂げていく言語なのだと思います。
アプリ開発の第一歩
スマートフォン アプリ市場について調べてみました。
まちぽアプリがApple Watchに対応した理由
静岡の情報誌を作っている出版社がニュースアプリを作りました
静岡の情報誌を作っている出版社が電子書籍アプリを作りました
iPhone 6に最適化されたアプリとは
スマートフォン アプリ市場について調べてみました。
まちぽアプリがApple Watchに対応した理由
静岡の情報誌を作っている出版社がニュースアプリを作りました
静岡の情報誌を作っている出版社が電子書籍アプリを作りました
iPhone 6に最適化されたアプリとは