Swift & Objective-C

Swift誕生の背景、クリス・ラットナーはなぜObjective-Cを捨てたのか

iOS開発を始めると、誰もが一度は疑問に思います。「Appleは使い慣れたObjective-Cを置いて、なぜわざわざSwiftを新しく作ったのだろう?」と。

読了 6 分
Swift誕生の背景、クリス・ラットナーはなぜObjective-Cを捨てたのかのカバー画像

iOS開発を始めると、誰もが一度は疑問に思います。「Appleは使い慣れたObjective-Cを置いて、なぜわざわざSwiftを新しく作ったのだろう?」と。

私もSwiftで最初のアプリを作ったとき、文法がとてもきれいだと思いました。そこに至る背景を掘り下げてみると、なかなか興味深い物語があったのです。

結論から言うと、Swiftはクリス・ラットナー(Chris Lattner)という一人のエンジニアが、2010年からほぼ一人で秘密裏に作り始めた言語です。30年以上ほとんど変わらなかったObjective-Cの安全性の問題を、根本から作り直すためでした。

今日は、このSwiftがどのように世に出たのか、その背景を気軽にひも解いていきます。


Swiftはいつ、誰が作ったのですか?

Swiftの開発は2010年7月に始まりました。

主人公はクリス・ラットナーです。聞き慣れない名前かもしれませんが、開発者なら実は毎日彼の成果物を使っています。

それがLLVMClangコンパイラです。Appleの開発ツールの基盤を支える中核技術ですね。

初期のSwiftは、本当にラットナー一人のプロジェクトだったそうです。仕事の後や週末に時間を見つけて、静かに設計を磨いていたという話は有名です。

2011年ごろからApple社内の他のエンジニアも加わり、本格的なチームプロジェクトへと成長しました。

そしてついに2014年6月のWWDCで世に公開されました。当日会場にいた開発者たちが驚いたという反応は、今でも語り継がれています。誰も予想していない発表だったからです。

同年9月、Xcode 6とともに正式にリリースされ、誰でも使えるようになりました。


クリス・ラットナーはなぜObjective-Cを置き換えたのか?

最大の理由は、たった一つです。

Objective-Cは1980年代初頭に設計された言語で、現代的な安全機構が不足していました。

Objective-Cを簡単に言えば、「C言語にメッセージ送信機能を加えた」構造です。Cの柔軟性をそのまま受け継いでいましたが、その柔軟性は同時に危険性でもありました。

代表的なのがnil(空の値)の処理の問題です。

Objective-Cでは、nilのオブジェクトにメッセージを送ってもアプリはクラッシュしません。何も起こらず、そのまま処理が進みます。

一見便利そうですが、ここが落とし穴です。値がないことで発生したバグが静かに埋もれてしまうからです。そして後になって、思いもよらない場所で問題が発生します。

ラットナーはLLVMとClangを作りながら、Objective-Cのメモリ安全性と長年向き合ってきました。そして、次のような結論にたどり着いたそうです。

「既存の言語を継ぎはぎし続けるのではなく、そもそもミスを起こせない言語を新しく作ろう。」

ミスを検出するだけでなく、ミスそのものを起こせなくするという発想でした。


Swiftは何がどのように変わったのですか?

Swiftがもたらした変化の中で、最も象徴的なのが**オプショナル(Optional)**という概念です。

「この値は空かもしれない」ということを、文法レベルで強制的に示す仕組みです。開発者が値のない状態を必ず処理するようにするためです。

次のコードを見ると、二つの言語の設計思想の違いがはっきり分かります。

まずObjective-Cでは、nilでもそのまま処理が続きます。

// nameこれ nilなら?何も起こらず、静かに処理が続く
NSString *name = [user fetchName];
NSUInteger len = [name length];  // 結果は 0, バグを見落としやすい

一方、Swiftは値がない可能性を開発者に明確に問いかけます。

// nameは String? 型 — 値がない可能性を型が明示する
let name: String? = user.fetchName()
if let name = name {   // 値がある場合にだけ安全に使用する
    print(name.count)
}

短いコードですが、「ミスを放置するか、ミスを防ぐか」の違いがそのまま表れています。

このほかSwiftは、型推論、簡潔な文法、速い実行速度も備え、人気を高めました。ちなみにSwiftはObjective-Cだけでなく、Rust、Haskell、Python、Rubyなど、さまざまな言語の長所も参考にして設計されたそうです。


Swiftはその後どうなったのでしょうか?

Swiftは発表後、急速に定着しました。

主な流れを簡単にまとめると、次のとおりです。

時期 出来事
2010年7月 クリス・ラットナー、開発開始
2014年6月 WWDCで正式発表
2014年9月 Xcode 6とともに正式リリース
2015年12月 オープンソースとして公開(Apache 2.0)
2017年1月 ラットナー、Appleを離れてTeslaへ移籍

興味深いのは、言語の父であるラットナーが2017年にAppleを離れたことです。その後、Swiftプロジェクトのリードはテッド・クレメネクが引き継ぎました。

それでもSwiftは現在まで、Appleエコシステムの中心的な言語として確固たる地位を築いています。オープンソース化によって、Linuxやサーバーサイドへも領域を広げました。

ラットナーが去った後もSwiftは成長を続けています
ラットナーが去った後もSwiftは成長を続けています

一人のエンジニアが週末に静かに始めたプロジェクトが、10年以上にわたって世界中の開発者に使われる言語になったという事実が、私はとても印象に残りました。

「なぜ?」という一つの疑問から生まれた言語だからこそ、背景を知るとSwiftの文法一つひとつが違って見えてきます。

背景を知ってから見直すと、コード1行の読み方も変わります
背景を知ってから見直すと、コード1行の読み方も変わります

Swiftを始めたばかりなら、オプショナルを一つきちんと理解するだけでも、この言語がなぜこのように設計されたのかが見えてくるでしょう。この記事が、その第一歩になれば幸いです。


参考資料

あわせて読みたい