スイスイSwift!第1回Objective-Cの歴史から紐解くSwiftへの変遷
skill

スイスイSwift!第1回
Objective-Cの歴史から紐解くSwiftへの変遷

2014.10.14

ent67_img01.jpg

2014年6月、WWDC 基調講演にて彗星のごとく現れた新言語 "Swift"は、デベロッパープレビュー版のバージョンアップを重ね、2014年9月18日iOS 8 のリリースと同時にめでたくバージョン1.0に到達した。
今回よりこの Apple 社の新言語について、従来までの iOS 開発がどう変わるのかといった内容で連載をお送りしたい。誕生したばかりの言語という事もあり、連載中も細かな仕様変更などが見られると思うが、その変化も含めた成長を綴っていくことが出来ると嬉しい。
繁田 卓二

従来まで、iOS アプリ開発のネイティブ言語と言えば Objective-C 一択であった。Java や Ruby などモダンな文法を持つ言語の開発者からすると、C言語の拡張として生まれた Objective-C の文法はとっつきにくいところがあり「変態言語」と揶揄される事もあった。この Objective-C という言語の歴史は意外と古く、今から30年以上も昔に誕生しており、 Java の誕生にも影響を与えたと言われている。Swift の話題に入る前に今回は少し Objective-C の歴史を振り返ってみよう。

■ 誕生

Objective-C は1983年、ブラッド・コックスとトム・ラブらにより作られた。C言語の誕生からおよそ10年。サン・マイクロシステムズ社が Java を発表する12年前といった時代である。また、同年には C++ も誕生している。当時彼らは「C言語のメモリ安全性と SmallTalk のスピードを合わせた言語」(this language has all the memory safety of C combined with all the blazing speed of Smalltalk.) と宣言していた。C言語のマクロ的拡張でありながら、元祖オブジェクト指向言語 Smalltalk の文法を取り込んでいる。Objective-C という名の所以である。

■ Objective-CとAppleの出会い

Objective-C はその後 Apple を追われたスティーブ・ジョブズが設立する NeXT 社によって NeXTSTEP と呼ばれる Objective-C を基盤としたオペレーティングシステムに採用される。NeXT 社のコンピューターと言うごく限られた環境ではあるが、オブジェクト指向ベースのオペレーティングシステムは当時まだ珍しく、サン・マイクロシステムズやディズニーなど大企業に提供されることになった。この成功はジョブズを追放した Apple にとっても無視できないものとなる。NeXT 設立から10年の後、Apple 社は NeXT 社の買収を決定。その背景には当時Appleの主力商品であったMac System 7の停滞があった。当時既に飽和状態であったテクノロジーの底上げのためObjective-Cに白羽の矢が立ったのである。この後、6年の歳月を重ねた2002年、NeXTSTEP をベースとしたオペレーティングシステム、Mac OS X が誕生した。Objective-Cは誕生から約20年の歳月を経てようやく日の目を見ることになったのである。

Mac OS X のリリース後、Objective-C は Mac アプリ開発のネイティブ言語として徐々に開発者を増やしていくこととなる。当初の Objective-C の言語仕様としては乏しいものがあったが、Mac OS X の成長と共に、CoreData や Cocoa バインディングなど強力な機能をサポートして成長していった。さらに、Mac OS X 10.5 Leopard のリリース時には、Objective-C 2.0 とよばれる大幅な刷新を迎える。現在の iOS 開発の基礎となるプロパティやプロトコルが採用されたのもこの頃である。今となっては当時未発表であった iPhone を見据えた大幅なオーバーホールだったのかもしれない。

■ Objective-C と Appleの歩み

年代Objective-CApple関連
1983年 ブラッド・コックスとトム・ラブらにより
Objective-C が開発される。
1985年 スティーブ・ジョブズが Apple から解雇。
同年、NeXT 社を設立。
1988年 NeXT社がNeXTSTEP1.0リリース
1994年 NextSTEPからカーネル部分を切り離した
OPENSTEPが誕生
1995年 有志の手によりGNUStepがオープンソース
で公開
1996年 Mac OSへの採用が決定 Apple社がNeXTを買収。翌年ジョブズが
Apple CEOに復帰。
1999年 Mac OS 9 リリース。
2002年 Mac OS X開発言語として一般公開 Mac OS X 10.0リリース
2007年 Objective-C2.0リリース Mac OS X 10.5リリース
2008年 iOSアプリ開発言語に採用 iPhone発表iPhone OS SDK 2.0リリース
2010年 iPhone OS 改め iOS 4リリース
2014年 iOS 8 と同時に新言語 Swift を発表。

■ 進化と限界、そして次のステージへ

2008年の iOS リリース以降、爆発的に開発者が増えた Objective-C は、iPhone というデバイスの進化も相乗効果となり、加速度的に成長を遂げている。が、この裏には、後方互換の切り捨てや、バージョンごとの仕様の矛盾などがあった事は否めない。無理なドーピングは寿命を縮めるというわけではないが、急激な仕様変更、機能追加により、コードの保守性、可読性などは失われつつある。クロージャーの無い Objective-C に導入された Blocks 構文などが最たるものだろう。長年 Objective-C の開発に携わっている筆者も恥ずかしながら補完機能無しで Blocks の構文は書けない。http://fuckingblocksyntax.com/ という Blocks 構文のチートサイトが存在するくらいだ。

Blocks 構文の例。CとObjective-Cの記法が入り混じり、よくわからない事に。

__weak typeof(self) weakSelf = self;
void (^handler)(NSURLResponse *response, NSData *data, NSError *connectionError);
handler = ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
[weakSelf requestFinished:response];
};
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:handler];

既に Objective-C の成長は限界に近づいていたのであろう。かつての Mac System 7 の頃のような停滞感とまではいかないが、そこに至るのは時間の問題だったのかもしれない。より多くの新規開発者を獲得するためにもこれ以上言語仕様をカオスにはできない。だからと言って、これまでの遺産を捨て、既存の別言語に乗り換えるという選択肢は Apple には無かった。そこで出した答え "Swift" は実に Apple らしいものであったと言えよう。

2014年の WWDC 基調講演では冒頭から、Mac OS X Yosemite と iOS 8 の発表で盛り上がった。会場のボルテージが上がりきった直後、突然のキーノートに表示された Swift の発表。新しいテクノロジーの発表に胸踊ったObjective-C 経験者にとってはまさに青天の霹靂だっただろう。これまでの経験を捨て、新しい言語の習得に抵抗を持つ開発者も多かったのではないだろうか。

ent67_img02.jpg
WWDCでの突然の発表に会場はどよめく。ちなみに壇上のクレイグ・フェデリギは NeXT 社時代 WebObjects の開発担当であった。現在はアップルソフトウェアエンジニアリング担当上級副社長。
Apple WWDC 2014 のスクリーンショット

しかし、Apple は決して過去の歴史を切り捨てたわけではなく、また、これまで共に歩んできた Objective-C 開発者を見捨てたわけでもない。 iOS 8 以降も変わらず Objective-C での開発は行えるし、Swift と Objective-C のコードを混在してアプリをビルドすることもできる。さらには Swift から Objective-C のクラスへのアクセスも可能だ。これはつまり自分のペースで Swift に移行できるという事だ。実にうまいやり方である。

■ まとめ

今回は多少退屈な内容となったが、Swift は「Objective-C with out The C」というコンセプトが指し示す通り、ベースは Objective-C という視点から作られている。誕生についての経緯を知っておくことは無駄ではないし、何よりSwift の実装につまずいた場合には Objective-C の視点に戻る事も重要だろう。

次回は Swift の実行環境についての解説を予定している。

原稿:繁田 卓二
qnote最高技術責任者。猫とビールをこよなく愛するゆるキャラ系プログラマ。
Webアプリ開発からMacアプリ開発を経て現在はiOSアプリ開発に没頭。弱点はAndroid。

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW