なぜ多くの開発者が今なお Swift よりも Objective-C を好むのか

Why many developers still prefer Objective-C to Swift

translated on

iOS SDK がアナウンスされてから数年間、アプリ開発ゴールドラッシュの恩恵を得ようと、開発者たちは Objective-C の世界に群がっていました。しかしその時代は去りました。Swift が我々の前に現れて3年以上、それは古い同種の言語を主役の座から押しやりました。

Objective-C - かつてはアプリ開発の世界で人気急上昇のスター的存在でしたが - は、Apple の開発環境の中では2級の扱いになっていきました。そうです、それは時おり WWDC にて1枚か2枚のスライドに引っ張り出されることはあるかもしれませんが、カンファレンスの大部分は Swift に関してです。Apple は Swift の教育を推進しており、主要な言語の機能はまず Swift に対応するようになっています。

しかし、まだ Objective-C を使ってるなら、あなたは一人ではありません。たくさんの開発者がいまだにそれなりの理由があって Swift より Objective-C を好んでいます。私は何人かの Objective-C の開発者に、なぜそれに戻ってきたのか、Objective-C の開発が非難されるようになったと感じているか、そしてさらに何か言いたいことはあるかを聞くために連絡をとってみました。

注: ここに記された見解は個人的なものであり、彼らの雇用者の意見を代表しているのではありません。回答者は発言順に並んでいます。いくつかの回答は長さの都合で編集しています。

主要な開発言語として Swift への移行をやめ、戻ってきた主な理由は何ですか?

Steve Troughton-Smith: Swift を避けるようになったのには様々な理由があります。まず第一に、使っていて楽しくなかったということです。それは読んだり解析するのが Objective-C よりはるかに難しいのです。特にループ中の if - let による変数割り当てと switch 文です(それは ARKit のように Apple のサンプルコードの中で雑然と使われすぎています)。
私は他の言語にも精通し、あらゆるプラットフォーム向けにプログラムを書いてきましたが、Swift は私にとって間違いなく最低の読みにくさです。

この言語に関してAppleがどのレベルまで関与しているのかはっきりしませんが、4年間、Swift は iOS、OS そしてフレームワークの重要な機能には使われていません(私は Twitter 上でアップルからの Swift アプリのリストを作成していますが、Swift を新機能に適用することに関して、macOS は間違いなく iOS よりも消極的です)。私にはなぜそうなのか理解しています(ABI 安定化その他)。しかし、もし Appleが Swift を全面的に採用しないなら、なぜ自分が代わりにベータテストをしなくてはならないのか分かりません。私は Swift が「利用可能」になるまで待っていても失うものはありませんし、当面は Objective-C から全てを得られます。

私が固く信じているのは、Appleが何かを構築し、それが前に進む道だと言っているからといってそれが正しい選択とは限らない、ということです。

ある逸話を聞いたのですが、最初の数年間、アップルは Swift をめぐって分断されていたそうです。 - Appleはもちろん Objective-C 開発者を大量に抱えており、Swift は彼らの多くにとっては我々と同じように大変な驚きだったのです。

そして、私が固く信じているのは、Appleが何かを構築し、それが前に進む道だと言っているからといってそれが正しい選択とは限らない、ということです。私たちは膨大な数の誤り(iOS7、iOS8 で発見)もしくは 「無関心」(macOS、Touch Bar)を過去数年間のアップルから見てきました。そしてそれをどのような結果になるのか様子をみているのです。

Michael Lauer: 動機がわかりません。私にとっては Objective-C が極めて生産的です。その言語はとても洗練されており、簡潔で、表現しやすいと思います。もし Swift でファーストクラス(非同期)の並列制御が実現していたら、すぐに飛びついたでしょう。それとは大違いで、コンパイルには時間がかかり、ランタイムライブラリは大量に重複していると聞いています。そして、未だにランタイムのパフォーマンスの大幅な向上を確認できていません。

Dan Leivers: プロトタイプや非常に小さなプロジェクト向けに、私は Objective-C を使うでしょう。長期間が経過した後(この種のクライアント向けにはよくあることです)での更新のしやすさからです。私はまた沢山のクライアント向けの Objective-C アプリをメンテナンスしていますが、単に時間がないのです(もしくはそれらを Swift に切り替える理由がない)。それらプロジェクトに Swift で新たなコードを混ぜ合わせると、プロトタイプに関して触れたこととしばしば同じことになってしまいます。

Peter Molnar: 正直に言って、バージョン 3.0 以前の障害はソースコードの互換性の欠如でした。そして、4.0 の後でさえ、私は未だに ABI の安定化を待っています。
それはひとつだけ残った問題で、個人的にはソースの互換性さえあればそれほど重要ではないと感じています。

Todd Thomas: Swift 向けの Xcode サポートは馬鹿げているように見えます。大規模プロジェクトでの腹立たしく長いコンパイル時間から、でたらめなリファクタリングとデバッギングまで。Mac 向けの Tweetbot はかなり大きいプロジェクトで、2012 Retina MBP でコンパイルするのに 44 秒かかります。それは1つのフレームワーク、一つのライブラリ、そしてアプリ自身を含みます。また、Swift は未だに ABI が安定していません。自分のアプリと一緒に Swift ライブラリを出荷する必要が無い時には、そのアプリの一部を Swift に変換しはじめるのはもっと遅くなるでしょう。

私たちのビルド時間がフルクリーンビルドで最大6時間かかりますが、さらに時間がかかるのは良いことではありません。

Ian McDowell: 私たちははビジネスロジック用の共有 C++ コードを大量に所有しています。それは Windows と Android で共有されています。

我々は、Objective-C のネイティブ UIKit/AppKit でUI を書いています。そしてその2つの言語を繋ぐ沢山の Objective-C ファイルがあります。今のところ、私たちはいくつかのスクリプトと内部ツール以外では Swift をそれほど採用していません。Swift を使っている他のチームの話では、コンパイル時間が Objective-C/C++ よりも長いようです。私たちには何百という Xcode のプロジェクトがあり、すべては最終的にアプリのバイナリそれぞれにリンクする巨大な静的ライブラリにコンパイルされます。これはアプリの起動時間を速くするためです。私たちのビルド時間がフルクリーンビルドで最大6時間かかりますが、さらに時間がかかるのは良いことではありません。

Simon Wolf: 私の主なコーディングプロジェクトはクライアント向けで、それは何年もかけて展開した大きなものです。それに Swift を導入すると、既存のコードを編集する膨大な作業が発生するため、Swift をあまり使わないことになります。コンサルタントとして、Swift の新しいメジャーバージョンが出るたびに、彼らが見ているもの(正確に!)の更新のために費用を請求するか、自分でやらなければならないことのどちらかということにも気付いています。どちらも理想的な計画ではありません。

Marco Arment: 私にとって、それは Swift それ自身についての判断ではなく、現実的な決定です。私は既に Objective-C のエキスパートで、とても効率的に使うことができます。そして Swift への移行の恩恵はそのコストを克服するほどのものではないのです。

Marcel Weiher: 多くの私のベストワークは、大きなメタプログラミングと動的メッセージングパート付きのObjective-C の C パーツの思慮深い組み合わせを含んでいます。これを例えば Swift で CoreData を書いたら、とても難しくなるでしょう。

Also churn: 私は Apple Pencil 向けのサンプルコードを見つけようとしていました。それは全て Swiftで書かれており、今日までどれもコンパイル出来ません。

あなたは 開発者が Objective-C を使用したために多少非難されると感じたことがある、もしくはそれについてソーシャルメディアで会話したことはありますか?

Steve Troughton-Smith: 多少?Objective-C を使ったり、それがSwift より好きだと言ったりするのは非常に不評です。Swiftは本当に巨大なごまかしがあります。あなたはそのやり方の側に立ちたくはないでしょう。

情熱的で全てを引き受けたファンが作るものなら何であれ、筋の通った議論の中で引きつけられるものはありません。私もそうですが、Swift ユーザーはその否定的側面に気がついています。しかし彼らは得であるとの認識から喜んで妥協しています。私はそうではありませんし、同じ利得を認識していません。

Michael Lauer: 全くその通りです。私は絶えず自身自身を守らなければならないと感じています、「時代遅れの恐竜でいる」ために。

私は、iOSDevUK での Amy Worrall の講演は Objective-C に関するものだったと思います。理解していない聴衆から不安の声もありましたが。

Dan Leivers: 確かに、新しく明るい方への推進力はあります。それは多分どれ位多くの iOS コミュニティがそこで終わってしまったかということです。なので、今だに最前線への後押しがあるのは驚きです。私は、iOSDevUK での Amy Worrall の講演は Objective-C に関するものだと思います。理解していない聴衆から不安の声もありましたが。

Peter Molnar: 私は仕事の肩書と職務記述書を読んでいるときにそれをより感じました。必ずしもソーシャルメディアの中とは限らないです。現在、誰もが上級 Swift 開発者を探しています。

Todd Thomas: 私はそれについてそれほど心配していません。アプリそれ自身が話すべきです。良いアプリであれば、利用者が何で書かれているかを気にしないで済むでしょう。

Ian McDowell: まだ Objective-C を使っていることにいくらかの不名誉は感じますが、それほど多くという訳でもありません。私は個人的なプロジェクトの全てに Swift を使っていて、それをとても気に入っています。そしてそれを業務で使わない理由を理解しています。

Simon Wolf: Swift が悪く Objective-C が本物の Cocoa 言語であるとは思わないので、私はSwift の賛否を巡る熱い議論を避けません。私はまた Objective-C 開発者に対しひどく無礼な人を見たことがありませんが、Mac の開発者としておそらくほとんどの衝突が発生する iOS コミュニティに付き合ってます。

Mac 開発者は最新かつ最大のものを使うことにこだわるとは思いません。
私達は今だに NSCell と奮闘しています。

Marco Arment: これは既に始まっています、しかし全ての移行でこのようなことは起こります。Objective-C の開発者は Caobon 開発者をからかっていました。自分の言語が現在「進化中の言語」ではなくなった時の自然な副作用にすぎません。しかし、それを現実的な理解からまだ使っているのです。ウェブ環境での PHP 開発者のように、私はこれに慣れています。

すべての時間ではないにしろ、カンファレンスの殆どの時間が Swift に費やされることについてどう思いますか?

Steve Troughton-Smith: Swift のみのカンファレンスは私には何の意味もありません。その言語が完全に形作られ、Apple がそれを大規模に使用する前に、Swift のベストプラクティスもしくはデザインパターンを気にしたくありません。私は何ダースものコミュニティ主導のデザインパターンを照合したくはありません。Apple がすることをやりたいのです。

Swift のみのカンファレンスは私にとって意味がありません。

Swift が Apple 開発のひとつだけの未来であることを知り、アプリ作成の意欲は完全になくなりました。Swift 移行における iOS 7 UI のワンツーパンチは、もはや自分が開発したいプラットフォームではないと感じさせるものでした。

Michael Lauer: それは悲しいことです。もちろん私は何でも変換できますが、以前よりも努力が必要です。そして、私は Swift でのサンプルを要求するいかなるカンファレンスへの参加も拒否します。ありがたいことに、まだ「残された」カンファレンスがあります。

Dan Leivers: 少なくともそれらはほぼ一貫しています!

Peter Molnar: それは進化の一部だと思います。しかし、Objective-C をめぐる世界もそれほど長くないのは事実です。Swift は新しく、絶え間ない更新のおかげで話すべき事柄もたくさんあります。そして明日までに大部分がすたれてしまうのは明らかです。

Todd Thomas: もし前向きに考えるなら、カンファレンスは Swift を使うべきだと思います。個人的には構いませんが、カンファレンスに過度の注意を払うことはないです。

Ian McDowell: すばらしい、それが未来です。

Simon Wolf: 私は気にしません。Swift は新しく輝いていることに気が付いています。十分理解できることを知っているので、本当に心配することはないです。

私は取り残されるかもしれないけど現実から目をそらし、Swift 習得から悩まされずにいました。しかし、そのアプローチが良い開発者であることに繋がるとは思いません。

Marco Arment: それは気になりません。ほとんどのカンファレンスの主催者と参加者は私よりも最前線に近いところにいます。なのでもちろん 彼らは Swift を使うべきです。Swift のスニペットをカンファレンス、チュートリアル、そして Stack Overflowから Objective-C に変換することは、Objective-C を使い続けるためのコストのひとつです。そして今のところ、それは特に手間のかかることではありません。時間とともに、負担は増えるでしょうが。

Marcel Weiher: 私は多くの Swift に関する話題がとても表面的で、ばかばかしいほどお粗末であることを認めなくてはなりません。なので、がっかりした気持ちです。
厳しく聞こえるのはわかっています、そして明らかな例外はありますが、なんてこった。

Swift の導入が Objective-C の開発を助けたか、それとも妨げていると思いますか?

Steve Troughton-Smith: Swift はObjective-C 開発者にとって本当に大変なことでした。新しい API にしても機能にしても、サンプルコードや WWDC のスライド、GitHub や StackOverflow といったものが全くないのです。この環境と知識のすべてへのアクセスの喪失は壊滅的です。プラス面といえば、Objective-C 言語それ自身は沢山の高品質の機能を獲得し、その全てが上手く機能していることです。

Swift はObjective-C 開発者にとって本当に大変なことでした。

私は Objective-C が Swift のために死ななければならないというのがどうしても嫌です。もしその2つの言語がそれぞれ独立して存続していければ、ある作業に適した言語をすぐ使えるよう手元に置いておきたい私のような開発者にとっては全てがうまくいくのです。Apple の開発者向けの Objective-C リソースの作成終了と同様、Swift の背後にある情熱的で巨大な動きはそれをほぼ不可能にしてしまいました。

Michael Lauer: 大部分が妨げでした。Swift のおかげで我々か得たのは lightweight generics とnullability、それだけです。もし同じ労力があれば、Objective-C はどのようになっただろうかと空想するしかありません。

Dan Leivers: 最初は役に立ったと思います。しかし、今ではほとんど重要ではないと感じざるを得ません。

Todd Thomas: 私は役に立ったと思います。沢山の便利な機能が Swift 向け言語に追加されました。ですので、私達はそれに関して不平を言うことができません。

Ian McDowell: Objective-C は 、@available 構文や nullability 指定子を含め、Swift からいくつかの素晴らしい機能を取得しています。それは安定した言語で、それか従来持っている以上の変化は期待していませんでした。

Swift を unwrap するは大変ですが、それは Objective-C をより実践的にするのに役立ちました。

Simon Wolf: Swift の結果として Objective-C にいくつかの変更や改善があったので、今のところは役立っています。加えて、Swift で多少書いてみることは、私の Objective-C コーディングの練習となり、nil オブジェクトをなかったことにすることが少なくなりました。Swift unwrap は苦労しますが、それは Objective-C をより実践的にするのに役立ちました。

Marco Arment: Swift は言語としての Objective-C の開発を効果的にストップさせました。これは驚くことでも理解できないことでもなく、幸いなことに Objective-C はかなり成熟しているということです。Swift が登場するまでの数年間、我々のほとんどが Swift に移行するまでは、Objective-C を使い続けられるように沢山の改善がなされました。

Marcel Weiher: 明らかに妨げになっています。さらに驚き、いくらか混乱するのは、如何に多くのライブラリ内の明らかな欠陥や新しい言語を導入することなしに修正されていたであろう「望ましいコーディングスタイル」が Swift が出てくるまでなく、今はSwiftに帰しているかということです。それはあたかもそれらの改善が、Swift を良く見せるために秘密にされていたかのようです。

しかしながら、1番のよくないインパクトは、実際の改善継続者の開発を妨げるだろうということです。私達はそのようなひどい人達を作り上げるのに十分な情報を持っています。そして Apple はそれを全て無視しました。それは犯罪です。

あなたはどう思いますか?

上記の全ての質問と共に、私はどのくらい長く Objective-C を使ってきたのか尋ねました。なぜなら、ある言語への親しみは、留まるか進むかを決めるに当たっては常に大事だと思うからです。

ほとんどの人が、iPhone SDK が最初に登場してからもしくはそのすぐ後に Objective-C を使っていた、何人かは10年以上、ある人は27年、そうです、27年というのを聞いても驚きではありませんでした。

ある1人の回答者は、自分達は Objective-C を比較的最近に始めた、なので恐らく老犬になるには人生まだ長いと言っていたことを付け加えておきます。

もうひとつ、昨年わたしは「Objective-C for Swift Developers」という本を書きました。そして、その前書きの中で、「私は Objective-C を愛しているか?」という章を入れました。こちらがその内容です。

この本の初稿を読んで、私は考えました。「おお、これは the Snark’s Guide to Objective-C のように読める」なぜならほとんど全ての章が何かへの不満のように感じたからです。
結果として、もう少し楽しくなるように修正しました。技術的な側面からではなく、Objective-C で仕事をすることが本当に好きだったからです。私はそれがアナウンスされた日に Swift に転向しました。そしてそれが可能となる初日に App Store に Swift アプリを掲載しました。

結果として、沢山の敬意の中で、Objective-C だけが良くなかったようです。なぜなら Swift の方がはるかに良かったからです。私は Swift と共にとても長い間働いてきました。それは Objective-C に戻るのがクリスマスに実家に帰るような感じになるほどです。

私が Objective-C を愛していたかどうかはわかりません、なぜなら私はストックホルム症候群だったか、もしくは Apple の API は全くパワフルだったからです。にもかかわらず、私は、あなたがその素晴らしいソフトウェアが Objective-C とそれを愛する人達とともに創造されたことに気づくことが重要だと思います。

この本の中であなたがうんざりするときは、紳士的になってください。それは古い言語で、長い道のりをやって来て、とても良く仕えてくれました。最後に、その引退は尊厳に値します!

この記事のために意見を表明するのに時間をいただき、どうもありがとう、Steve Troughton-Smith, Michael Lauer, Dan Leivers, Peter Molnar, Todd Thomas, Ian McDowell, Simon Wolf, Marco Arment, and Marcel Weiher

以上で終わりです。もしまだ Swift よりも Objective-C の方がよかったら、Twitter で教えてください