Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

Swiftはほかの言語と何が違うの? どこが注目点なの?

著者: 千種菊理

Swiftはほかの言語と何が違うの? どこが注目点なの?

プログラミング言語の新星

「スウィフト(Swift)」は、WWDC2014で発表された、OS X、iOSといったアップル製品でのソフト/アプリの開発に利用できる新しいプログラミング言語です。2015年にはスウィフト2.0が発表され、若干の仕様変更とオープンソースでの公開がなされました。

登場以降、スウィフトは爆発的な人気を得ています。産業調査会社Redmonkが掲載するプログラミング言語の人気ランキングを見てみると、2014年の第三四半期には46位だったのが、2015年1月には22位、2016年1月には並みいる著名言語を押しのけ17位に食い込んできているのです。この人気はどこから来ているのでしょうか。

プログラミング言語ランキング

産業調査会社Redmonkが発表した2016年1月時点のプログラミング言語ランキング。横軸は「GitHub」においてその言語を用いたプロジェクト数、縦軸はナレッジコミュニティ「StackOverflow」での質問数です。さまざなソフトウェアで利用され、コミュニティでの質疑も旺盛な言語ほど上位ランクとなるわけです。【URL】http://redmonk.com/sogrady/2016/02/19/language-rankings-1-16/

世が変われば言語も変わる

今も昔も、コンピュータが理解できるのは「機械語」と呼ばれる数字の集まりでしかありません。機械語を直接入力してプログラミングを行うこともできますが、機械語の文字列は人間に理解できるものではありません。そこで「プログラミング言語」を使って「よりわかりやすい言葉」で人間がプログラムを書けるようにするわけです。

この「よりわかりやすい」という意味合いは、時代につれ変わってきます。たとえば、初期の言語には1行の文字数が80文字程度までの制限がついているものが多いのですが、これはパンチカード(厚手の紙に穴を開け、その位置や有無から情報を記録するメディア)の文字数いっぱいに合わせたことからでした。70年代初頭に生まれたプログラミング言語である「C」は、当時としては使い勝手のいい文法と、あまり複雑な機能がなくむしろ小回りがきくシンプルさが受けて、Cで書かれたOSであるUNIXとともに一気に普及しました。80年代に生まれた「C++」は、当時最新の「オブジェクト指向」という考え方を実現できるようCをリファインしたものとして生まれました。その後、オブジェクト指向以外のさまざまな考え方を取り込み、「C++はC++」としかいいようのないものに育っていくのです。拡張を繰り返した結果、とかく仕様が大きく、使いこなせるまでに時間がかかるものでした。

WEBの時代になるとジャバスクリプト(JavaScript)という言語が生まれてきます。さまざまな場面で使えるオールマイティさと、その表現力ゆえの危険性をも併せ持つジャバスクリプトですが、WEBブラウザとの連携の相性が良く、先述の人気ランキングでは今なお1位に君臨しています。

どのような記述ができるといいのか、機能があるといいのか、コンピュータの発達に合わせプログラミング言語についても研究が進みました。そして、今となっては言語によっての機能の差は極めて少なく、ある言語でできることがほかの言語でできない、ということはほとんどありません。ただ、パンチカードのコンピュータとWEBブラウザの上では、やるべきことも考えるべきこともまったく違います。ブラウザの上ではジャバスクリプトを使うほうが便利なように、環境に応じて使い勝手のいい言語を使うほうが生産性が良くなります。そうしたことから新しい言語というのは時代に応じて今も生まれています。

これまでの資産とフレームワーク

もちろん、新しい言語だから良いというわけではありません。古い言語にはそれまで書かれ、使われ、デバッグされ、チューニングされた数多のライブラリやフレームワーク(プログラミングでよく使われるコードやユーティリティをまとめ、簡潔に呼び出せるようにした機能のかたまり)があります。

また、新しい言語がいかに便利でも、使えるようになるにはそれなりの時間がかかります。一方、慣れた言語は不便でも手になじんでいるので、こちらのほうが手早くプログラムが書けたりします。フレームワークのような資産やこれまで経験のといった蓄積の有無が、生産効率からプログラミング言語の人気まで大きく関わってきます。

同ランキング5位の「ルビー(Ruby)」という言語は発表直後よりエンジニアには注目されていましたが、当初はどちらかというと知る人ぞ知る存在でした。それが一気にメジャーになったのは、「ルビー・オン・レイルズ(Ruby on Rails)というWEBアプリケーションを作るのに便利なフレームワークが登場したためといっても過言ではありません。

オブジェクティブCの功罪

期待されるゆえ多くの人が喧々囂々とするC++とは別に、同じ80年代に密やかに生まれたのが「オブジェクティブC(Objective-C)」です。Cをそのままに、オブジェクト指向として必要な機能を最低限追加したというだけの言語でした。Cを使えるならそれまでの経験を活かしつつ追加部分だけを覚えることで効率的に学習ができました。

そのシンプルさと、オブジェクト指向からくるより良い機能が、当時新しいコンピュータを作ろうとしていたスティーブ・ジョブスの目に留まり、主力言語として採用されたのです。後にココア(Cocoa)と呼ばれることになるフレームワークに使用され、OS Xの普及、そしてiOSアプリの開発言語という立ち位置を得て、日陰の生まれはどこへやら、今や先述のランキングでは10位の人気を得るほど、一気にスターダムにのし上がりました。

一方で、Cとオブジェクト指向拡張のハイブリッドのため、一貫性については乏しいものがありました。2007年頃にオブジェクティブC2.0という形で言語仕様の変更が行われましたが、それでもこの一貫性のなさは消えることがありませんでした。

ココアだけ利用して別の言語(たとえばジャバなど)を使うのはどうか?という考えもありましたが、これもうまくいきませんでした。ココアがオブジェクティブCで記述されたオブジェクティブCのためのフレームワークであることが障害になったのです。フレームワークなど外部に用意された機能の呼び出しについては言語とその実装(処理系)やOSごとに決まりごとがあります。ココアはオブジェクティブCの呼び出し方に依存して作られているので、オブジェクティブC以外の言語から呼ぶためには異なる決まりごとと決まりごとの間を取り持つ仕組みが必要となります。そうなると、手間がかかるうえに性能が出にくい構造になってしまうわけです。ジャバやルビー、アップルスクリプトなどの言語で、ココアを呼べるようになりましたが、いずれも広く使われるには遠い状態でした。

資産を受け継ぐスウィフト

ここまでくるとなぜスウィフトが注目されるかがわかると思います。そう、スウィフトはモダンな言語で今風の機能を持ちつつ、オブジェクティブCと同じ呼び出し方をサポートしているので、ココアなどオブジェクティブCで記述されたAPIを直接呼び出すことが可能なのです。もちろん、手慣れている言語を使うほうが手っ取り早いことから、今もなおオブジェクティブCで書かれたプログラムは生まれ続けています。しかし、スウィフトになってもそれらをフレームワークなどの「部品」の形で残しておき、呼び出すことで資産を受け継ぐことができます。

これまでの資産を受け継ぎ、これからの文法を持つ。これがスウィフトが注目される大きな理由です。

Swiftのオープンソース化

スウィフトはオープンソースとして公開されており、活発に開発が進められています。【URL】https://swift.org/

【 .NET】

.NETはマイクロソフトが開発、提供しているフレームワークです。複数の言語から同じように使えるというのが大きなポイント。注意深く作られた仕組みで、処理系によって機能の呼び出し方が異なるという制約を緩和し、ブリッジを通じた低速さを回避できるものです。C#という.NETに対応しモダンな文法を持つ言語もありますが、C++やVB、ルビー、パイソン(Python)、パワーシェル(PowerShell)など多くの言語からも利用ができます。2015年には.NETのオープンソース化も発表され、Linux、OS Xへの移植も快調に進んでいます。将来的には.NETアプリが広まることも大いに考えられます。

【 CocoaとJava(JavaBridge)】

1990年代末から2000年代初期にかけて、ジャバ+ココアという組み合わせが何度か試みられました。たとえばオブジェクティブCにモダンシンタックス(Modern Syntax)というジャバに似せた文法を追加してみたり、ジャバからココアを呼ぶためのブリッジを作ったり、ウェブオブジェクト(WebObjects)5.0という派生製品ではココアのファンデーション部分だけですが、すべてをジャバに書き直し(PureJava)もしました。しかし、ただでさえ遅いジャバでブリッジを経由することでさらに効率が悪くなり、OS Xでしか動かないココアアプリを書くことに利点を見い出せなかったため、いずれも滅んでしまう結果となりました。

【新言語】

プログラミング言語を新造しているのはアップルだけではありません。マイクロソフトのC#もあれば、グーグルはGoというインターネットでのサービスを書きやすい新言語を開発しています。

【Android】

アンドロイドのアプリケーションは主にジャバで記述されますが、このジャバは一般的なジャバとは少々異なります。これが原因でジャバを擁するオラクルはグーグルを訴訟し、グーグルは敗訴しています。

文●千種菊理

本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。