お役立ち情報

【Objective-Cの求人・案件情報付き】需要や将来性、プログラマの開発単価など

Objective-C

MacやiPhoneなど、他のPCやスマートフォンとは一味違った統一性の高いデザインで有名なアップル社ですが、その設計思想はソフトウェアの開発部分にまで反映されていて、多くの場合、開発がしやすいように作られています。

さて、アップル社が中心となって提供しているプログラミング言語はObjective-CとSwiftが挙げられますが、今回はObjective-Cについて解説していきます。

Objective-Cでプログラムする人

Objective-Cとは?特徴は?

Objective-Cとは

Objective-Cは、C言語にSmalltalk方式のオブジェクト指向機能を取り込んだプログラミング言語です。

1983年にブラッド・コックスにより開発され、当初はStepstone社が主にサポートを行なっていましたが、当初は決して表舞台に出ることのないマイナーな言語でした。

その後、1985年にアップルコンピュータを事実上追放されたスティーブ・ジョブスが、NeXT社を創立、主力製品となるNeXT Computer及びNeXTSTEPを開発するときに、主力言語としてObjective-Cを採用したことで、やがて表舞台に出るようになりました。NeXT自体は商業的には成功したとは言えませんが、その先進的なシステムはIT業界に大きな影響を与えたと言われています。

1997年にNeXT社はアップル社に買収され、スティーブ・ジョブスは当初はコンサルタントとして、のちに暫定CEOとしてアップル社に復帰しました。Mac OSの後継OSとしてMac OS X(後にOS Xを経て、macOSに改称)が2001年に発売、これは技術的にはNeXTSTEPを発展させたものであることから、Mac OS Xの主力言語として使われるようになりました。

その後、2008年にはiPhone向けネイティブアプリ開発キットが登場したことにより、iOS向けアプリ開発にも使われるようになりました。2014年からはSwiftが登場したことにより、アプリ開発ではSwiftへ移行する一方で、現在においてもSwiftと共にmacOSやiOSなどを対象としたアプリ開発の主力言語として使われ続けています。

Objective-Cのメリット

わかりやすいメソッドルール

Objective-Cはラベルと引数からなる独特のメソッド呼び出し法則で、なんのための引数なのかをかなり判別しやすいという特徴があるため、コードがわかりやすくなる傾向があります。

コードが長くなる弊害こそあるものの、しっかりラベルが正しくされていれば、間違っているコードは間違っているように見えるようになるため、ミスを防ぎやすくなります。

C言語のノウハウをほぼ全てそのまま使える

C言語の上位互換言語という性質上、C言語で習得したノウハウはほぼ全てObjective-Cでもそのまま使うことができます。膨大なC言語の資産をほぼ全て使うこともできるため、開発の自由度は高いと言えます。

また、必要であればC言語のコードを書くことができるため、Objective-Cで書いている部分がパフォーマンス的に厳しいところでもC言語に書き直すことでパフォーマンスをあげるということもできます。

C++とも混在させることができる

Objective-CとC++はそれぞれ拡張させた部分が殆ど干渉しないため、それぞれのコードを混在させることができます。これによって、C++の遺産も使うことができます。

これによって、開発者はObjective-CとC++の機能を組み合わせて、コードを書き上げることが可能となり、高度な開発では気をつけるべきことが少なくないものの、自由度の高い開発を行うことができるといえます。

Objective-Cのデメリット

C言語のデメリットを全て引き継いでしまっている

まず、C言語の上位互換言語という性質上、C言語のデメリットを全て引き継いでしまっています。メモリー管理システムが複雑なこと、ポインターなどの問題が挙げられます。

そのほか、C言語のメモリー管理システムとObjective-Cのそれとでは全く違う手続きをしなければならないということもあり、戸惑いが発生する可能性が高まるものと考えられます。

オブジェクト指向部分の文法がかなり独特

いわばC言語にSmalltalk風のオブジェクト指向システムを載せたような形になっている性質上、オブジェクト指向システムの文法がかなり独特のものになっています。メソッドの定義とその呼び出し方がかなり独特で、C++やJavaといった他のオブジェクト指向言語とはかなり異質なものとなっていると言えます。このため、分かりやすさという点では決してマイナスではないものの、純粋に1行が長いコードになりがちになります。

定期的なメンテナンスの必要性が高い

アップル社の傾向として、レガシーな機能の互換性を確保することにこだわらない傾向があり、新しいバージョンのOS向けのSDKが出た時に古いAPI等を削除してしまう傾向があります。現在ではiOS/macOS共に概ね1年に1回メジャーアプデートが行われるため、それを見越したメンテナンスが強く求められます。

また、言語仕様でもObjective-C 2.0での変更のほか、Auto Reference CountingやModern Objective-C Syntaxの導入や、SwiftとのAPI互換性の改善が行われたなど、言語仕様の変更がしばしば行われています。

こういったこともあり、メンテナンスしやすいように開発する事が望まれます。

Objective-Cでプログラムする

Objective-CとSwiftの違い

Objective-CとSwiftは共に、macOS/iOSアプリ開発向けの主力言語として使われていて、Swiftの登場と発展とともに、その互換性が高められる形でObjective-Cにも改良が加えられているため、Objective-Cが使えるようになれば、Swiftも比較的容易に使えるようになるといえます。とはいえ、Objective-CとSwiftとでは言語仕様に違いが見られます。

Objective-Cでは言語仕様面での型/エラーチェックが甘い部分があり、安全性という面ではSwiftに負けるものの、Swiftでは4.0の段階では実現できていないバイナリーのABIの安定性が確保されているということもあって、フレームワークやライブラリー開発がしやすいという特報があります。特にソースコードを公開したくない場合においては有利となります。

依然としてObjective-CとSwiftではmacOS/iOS向けに特化しているため、どちらかを覚えていればもう片方も苦労せずに使える一方で、得意/苦手分野が大きく分かれているため、目的に応じて使い分けることが求められます。

なお、案件・エンジニアにおいては、ベンチャー系が積極的にSwiftを採用する傾向にある一方、ライブラリー開発に特化している場合や大手の場合はObjective-Cを好む傾向があるようです。

全体的に見れば、新規に展開されるプロジェクトではSwiftが採用されるようになりつつある一方で、既存の膨大なObjective-Cの遺産が多数あるということ、Objective-CとSwiftで得意分野が分かれていて棲み分けが進められているものと推測できます。

Objective-CとJavaの違い

Objective-CとJavaでは、ともにスマートフォンアプリ向けの開発言語として使われているという点では共通しているといえます。また、JavaがObjective-Cの影響を受けているということもあり、いくつかの点で似ている部分があります。

一方で、主なプラットフォームや歴史の違いもあり、違いがあり、比較が難しいところもあります。

  • Objective-Cはオブジェクトシステムにおける型チェックがかなり甘いが、Javaは幾分厳格。
  • nullチェックの扱い。Objective-Cではnullポインターにアクセスした時は無視するが、JavaではNullPointerExceptionが飛ぶ。
  • Objective-Cは主にiOSおよびmacOSのアプリ開発に使われている一方、JavaはAndroidアプリのほか、ウェブアプリやシステムなど多岐にわたる分野で開発が行われている。

このこともあり、案件の対応のしやすさではObjective-Cの方がやや軍配があがる一方で、事実上対応分野がiOS/macOSアプリ開発に限られるということもあり、分野を広げたい場合は他の言語を覚えることが必須となります。

Objective-Cを勉強する人

Objective-Cの勉強方法

Objective-Cは開発ツールの関係から、比較的学習しやすい一方、C言語の拡張であるという性質上、C言語を覚えることが必要であるという部分もあり、C言語を学習したことがない場合は、覚えなければならないことは多いといえます。実際に開発をする場合は実質的にMacが必要ですが、Xcodeをインストールして使いこなすことで、Objective-Cも比較的容易に使いこなせるようになると言えるでしょう。

近年ではpaiza.ioなどのウェブ上で利用可能なソースコード記述・コンパイル・実行ツールも登場しています。これについては、XcodeのObjective-Cとは仕様が異なるものの、気軽にObjective-Cのプログラミングの練習に使うことができます。

なお、Objective-Cは、C言語の拡張ということもあり、C言語の基本的なことを覚える必要があります。プロジェクトによっては、多様なC言語のライブラリーを使うことも想定されます。

Objective-Cを学習するにあたって、すでにC言語を習得しているという場合は、基本的にObjective-Cで追加された仕様を学習するということになります。一方、C言語を習得していない場合は、まずはC言語で最低限必要となることを習得したのち、Objective-Cで追加された仕様をC言語と並行して学習することになると考えられます。

学習するにあたってはそこまで苦労しないものの、C言語の経験有無で学習しなければならないことが大きく変わるという点もあり、根気よく学習し続けることが強く求められます。

Objective-Cの将来性

Objective-Cは、それ単体では今後は厳しくなっていくことが予想されます。というのは、ベンチャーを中心に新規のプロジェクトではSwiftを採用するというケースが増えており、Objective-Cを採用するケースが相対的に低くなっているということが挙げられます。従って、macOS/iOSアプリ開発においては、Swiftも併用する事が望ましいといえます。

また、事実上macOS/iOSに特化した言語に過ぎないという状況があり、マルチプラットフォーム展開に失敗し、さらにMacシリーズまたはiPhone/iPadシリーズの展開が終了または普及度が大幅に下がったときに壊滅的な影響を及ぼすことも考えられます。

とはいえ、Objective-CはC言語から発展してきた言語であるというのも事実であり、万一Objective-Cが廃れた場合でも、C言語や、さらにC++も使える場合はC++でつなぐことはできますが、分野が変わるので、macOS/iOSアプリ開発のプロジェクトとは勝手が違う可能性が高いといえます。

スティーブジョブス

まとめ

スティーブ・ジョブスがNeXTを立ち上げたときにメインの開発言語として使われるようになってそのポテンシャルが評価され、その後はmacOS、iOSとともに発展していったObjective-Cですが、Swiftの登場によって、これから先はObjective-Cのみでは厳しくなっていくことは避けられないものと考えられます。

一方で、依然としてSwiftが実現できていない機能がObjective-Cでは実現できているものも少なくなく、システム面ではObjective-Cに軍配があがる場面も少なくないということもあります。

当面の間はObjective-Cが必要で、Objective-CとSwiftでは得意分野が異なるということで、両者の住み分けが進むとこともあり、決して無視することはできないと考える事ができます。

macOS/iOSアプリの開発では、今後はSwiftに進むものと考えられる一方で、Objective-Cが求められるシチュエーションに備えて、Objective-Cも使えるようにできれば、かなり強みにはなるでしょう。

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ