iOS開発の勉強を始めると、必ず一度は出会う言語があります。角括弧だらけの見慣れない構文や、NSStringのような謎めいたプレフィックスです。
それがObjective-Cです。
レガシーコードで初めてこの言語に出会うと、「この構文はいったいどこから来たのだろう」と思いがちです。しかし歴史を知ると、コードの見え方が変わります。
まず要点を言うと、Objective-Cは1980年代初頭に、CへSmalltalkのオブジェクト概念を加えて作られた言語です。
そして有名なNSプレフィックスは、スティーブ・ジョブズが設立したNeXTのOS、NeXTSTEPに由来します。
この記事で分かることは次のとおりです。
- Objective-Cが生まれた背景(C + Smalltalk)
- NSプレフィックスの由来と技術的な理由
- iPhoneとともに迎えた全盛期
- Swift時代にも生き残った理由
Objective-Cはどのように生まれたのか?
1980年代初頭、Brad CoxとTom Loveという2人のエンジニアがいました。彼らが求めたものは2つです。
- C:高速だが、オブジェクト指向の概念がない
- Smalltalk:洗練されたオブジェクト指向言語だが、遅すぎる
そこで生まれた答えがObjective-Cです。Cの上に非常に薄いオブジェクト指向レイヤーを重ね、Cには一切手を加えないという原則でした。
Objective-CはCの厳密なスーパーセットです。
世の中のCコードはすべて、修正せずそのままObjective-Cコードとして有効です。
実際の形を短いコードで見てみましょう。
// 普通の C コードであり、そのまま有効な Objective-C コードでもあります
int sum = 1 + 2;
// Objective-C追加された: Smalltalk形式のメッセージ送信(角括弧)
NSString *text = [NSString stringWithFormat:@"合計 %d", sum];
上の2行はCの構文そのもので、下の角括弧の1行がObjective-Cが新たに加えたすべてです。
体はCから、魂(オブジェクトモデルとメッセージ送信)はSmalltalkから来ています。角括弧構文[receiver message]はSmalltalkから受け継いだ遺産です。
C++とほぼ同じ時期に、同じ材料(C + オブジェクト指向)でまったく違う料理を作った、と考えると分かりやすいでしょう。
NSプレフィックスにはどんな意味があるのか?
1985年、スティーブ・ジョブズは自ら設立したAppleを追われます。
その後NeXTを設立し、この会社のOSであるNeXTSTEPの公式開発言語がObjective-Cでした。
NSStringとNSArrayのNSは、NeXTSTEPの略です。2026年の最新iPhoneアプリのコードにも、1980年代末のジョブズの会社名が化石のように刻まれています。
では、なぜわざわざプレフィックスを付けたのでしょうか。技術的な理由があります。
- Objective-Cには名前空間がない
- クラス名はグローバルに一意でなければならず、同じ名前が出会うと衝突する
- そこで会社名やプロジェクト名のイニシャルを付ける慣例が生まれた(AppleはNS、AFNetworkingはAF)
Appleは「2文字のプレフィックスはAppleが予約し、サードパーティは3文字を使うように」と公式に案内までしました。言語の穴を文化で埋めた例です。
Swiftではモジュール単位の名前空間が導入され、この慣例は不要になりました。NSのないStringやArrayがSwift時代の象徴となった理由です。
iPhoneとともに迎えた全盛期
1996年、AppleはNeXTを4億ドルで買収し、ジョブズは12年ぶりに復帰します。
NeXTSTEPはMac OS Xの基盤となり、Objective-CはAppleの公式言語になります。
そして2008年にApp Storeが開設されました。iPhoneアプリを作れる言語は1つ、Objective-Cだけでした。
世界中の開発者が集まり、20年以上マイナーだったこの言語は一気に最も注目される言語になりました。
言語の人気指標であるTIOBEインデックスでは、2012年と2014年の2度「今年の言語」に選ばれ、一時はC、Javaに次ぐ3位まで上昇しました。
Objective-Cは今も使われているのか?
2014年にAppleがSwiftを発表すると、Objective-Cの時代は終わるように見えました。しかし10年以上たった今も、この言語は死んでいません。理由は3つあります。
- Appleのシステムフレームワーク:UIKitとFoundationの基盤は今もObjective-Cなので、Swiftコードもブリッジングを通じてこれらと連携します。
- レガシーコードベース:数百万行規模の大規模アプリを一夜で書き直すことはできず、保守開発者の需要が続いています。
- ランタイムの動的性質:実行中にメソッドを置き換えるメソッドスウィズリングが可能なため、分析SDKは今もこのランタイムに依存しています。
Q. 今からObjective-Cを学ぶべきですか?
新規プロジェクトをこの言語で始めることはほとんどありません。ただしiOS開発者として古いコードベースを扱うなら、読めるだけでも大きな武器になります。
Q. Swiftだけ分かれば十分ですか?
新規開発はSwiftだけで十分です。ただ、NSの由来や角括弧が生まれた理由を知れば、Appleのフレームワークをより深く理解できます。
まとめ
Objective-Cは死んだ言語ではなく、引退を準備するベテランに近い存在です。ジョブズとともにAppleの外で成長し、ジョブズとともに戻って、世界で最も価値のある会社の心臓になった言語だからです。
古いコードでNSStringに出会ったら、これからは親しみを込めて見てください。その2文字には40年の歴史が詰まっています。
参考資料

