【パソコン,スマホ,家電】プログラミング言語がそこで使われる理由

program-platform

今の時代、プログラムは、いろいろな場所で活躍しています。

パソコンスマホ。家庭にあるゲーム機。エアコンや冷蔵庫などの家電

工場にあるロボットにも、外を走る自動車にも、あなたが持つキャッシュカードの中にさえ、プログラムが入っています。

そんなプログラムの開発に使うのが、プログラミング言語。Java,Python,PHP、いろいろあります。

お好みの言語で開発しよう…と思いきや、実は、どこでも何の言語でも使えるわけじゃありません

動く場所によって、使えるプログラミング言語は、限定されてしまいます。WindowsパソコンならC#、iPhoneならSwift、家電にはC言語、といった具合。

コンピューターを動かすことは同じなのに、なぜ、場所によって言語の制限がかかるのか?

それには、きれいごとだけではない理由があるのです。考察していきましょう。

目次

プログラムが動くプラットフォームいろいろ

プログラムは、どこで、どのように動いているのか、整理します。

  • プログラムにより作られた一式を「アプリケーション(略称:アプリ)
  • アプリケーションが動く場所のことを「プラットフォーム

と呼びます。アプリとプラットフォームには、このような組み合わせがあります。

アプリ種類プラットフォーム種類
デスクトップアプリパソコン
(WindowsやMac)
スマホアプリスマートフォン
(iPhoneやAndroid)
Webアプリ[フロントエンド]
ブラウザ
(ChromeやEdgeなど)
[バックエンド]
サーバ、クラウド
ゲームコンシューマーゲーム機
(SwitchやPlayStation)
組み込みアプリエアコンや冷蔵庫といった家電
ロボットなどの産業機械
自動車や鉄道などの交通機関
キャッシュカードやSuicaなどのICカード
アプリとプラットフォーム

アプリやプラットフォームの種別が、プログラミング言語に及ぼす影響を考えます。

使えるプログラミング言語が決まる理由

プログラミング言語は、使いやすさや安全さを追求し、様々なものが生まれ進化しました。

  • 安全性を高めたJava
  • シンプルさを追求するPython
  • 書きやすさ読みやすさを重視するRuby

プログラミング時は、それぞれの言語の特徴をみて、使いやすい言語を使えば良いように思えます。

でも実際のところ、プログラムが動く場所により、使えるプログラミング言語は限定されます。

そしてその理由は、言語自身の特徴とは、別のところにあったりします。

プラットフォームでプログラミング言語が限定される理由は、大きく次の2つ。

プログラミング言語が決まる2つの理由
  • プラットフォーム側の企業戦略
  • 性能による制限

順番に見ていきましょう。

企業戦略とひもづくプログラミング言語

Windows,Mac,Android,iPhone…。おなじみのプラットフォームです。

デスクトップアプリスマホアプリでは、プログラミング言語の選択が、企業戦略に深く結びついています

パソコンやスマホで推奨される開発言語

パソコンやスマホの胴元は、Microsoft、Apple、Googleなど、言わずと知れた巨大テック企業。それぞれの企業思惑が、プログラム開発にも色濃く反映されます。

各プラットフォームでは、提供元の企業が、開発に推奨する言語を定めています。一覧化して見てみましょう。

スクロールできます
種別プラット
フォーム
企業推奨
開発言語
推奨
フレームワーク
パソコンWindowsMicrosoftC#.NET
MacAppleSwiftSwiftUI
スマホAndroidGoogleKotlinAndroid Jetpack
iPhoneAppleSwiftSwiftUI
パソコンおよびスマホの推奨開発言語

独自路線を行くMicrosoftとApple

MicrosoftとApple。長年ライバルとしてしのぎを削る両者。そのプログラミング言語戦略は、

  • Windowsの推奨開発言語は、C#。C#は、Microsoftが開発した言語
  • MaciPhoneの推奨開発言語は、Swift。Swiftは、Appleが開発した言語

そう、MicrosoftとAppleは、開発に使うプログラミング言語の規格も、自分で定めているのです。プラットフォームの進化に伴い、言語自体も自身で改良しているというわけです。

推奨開発言語でなくとも、開発に使えないことはありません。

ただ、プラットフォームの能力をフルに引き出すなら、推奨開発言語を使うのが、最適解と言えるでしょう。

オープンな立場のGoogle

一方、Androidを擁するGoogleは、ちょっと立ち位置が違います。

  • 推奨開発言語はKotlinですが、Googleが開発したものではない(JetBrains社が開発)
  • そもそもAndroid自体、Linuxというオープン規格のOSがベース

Googleは、比較的オープンな規格でプラットフォームを構成している、と言えます。

オープン規格ということは、ブラックボックスがないので、カスタマイズしやすい。このカスタマイズ性が、Androidの支持者が好む理由のひとつと言えます。

クロスプラットフォーム開発を目指すプログラミング言語

巨大企業の思惑が影響する。デスクトップアプリスマホアプリ。アプリ開発側からすると、ちょっと悩ましい。

  • WindowsとMacどちらにも、リリースしたい
  • AndroidとiPhoneどちらにも、リリースしたい

このような場合、推奨開発言語が違うから、同じアプリを、複数の異なる言語で開発しないとなりません

これが非常に手間。それぞれの言語の技術者が必要だし、開発時間も倍かかる。

ひとつの開発言語で、複数のプラットフォームに対応したい

これが実現するのが、クロスプラットフォーム開発です。

プラットフォームから独立するWebアプリ

クロスプラットフォームの最も強力な方法が、Webアプリです。

まずは、Webアプリとは何かおさらい。大きく2つの機能で実現されます。

  • Webフロントエンド ユーザーが直接操作する画面。ブラウザで動作する。
  • Webバックエンド フロントエンドからの要求を受け付けて処理する。サーバーで動作する。

中身はこのような技術が使われます。

  • Webフロントエンド ブラウザ(HTML、CSS、JavaScriptを表示する)
  • Webバックエンド HTTPサーバー(リクエストに応答してテキストを返すプロトコル)

ブラウザやHTTPなどの技術、規格を制定しているのは、特定企業と異なる第三者機関

だから、Webアプリは、特定企業の思惑に左右されずに開発できる、という利点があります。

フロントエンドの規格

フロントエンド側の事情はこの通り。

  • Webブラウザがあればどこでも動作する
  • WindowsにもMacにも、AndrondにもiPhoneにも、Webブラウザは搭載されている
  • ブラウザで動く言語は、HTML,CSS,JavaScriptと定められている
  • HTML,CSS,JavaScriptのいずれも、国際規格で制定されている

フロントエンドは、言語選択に悩む必要はないですね。

バックエンドの規格

一方バックエンドでは、様々な選択肢があります。

  • テキストを送信するHTTPプロトコルを実現できればよい
  • やることは単純なので、実はどの言語でもほぼ実現可能
  • 言語の選択は、Webアプリケーションフレームワークや、その背後で行う処理、に依る

以下は、よく使用される言語とフレームワークです。

言語主なフレームワーク
JavaSpringFramework
PythonDjango
JavaScriptNode.js、Express
PHPLaravel
RubyRuby on Rails
GoGin
Webバックエンドで使われる言語とフレームワーク

スマホ独自のクロスプラットフォーム開発

強力な汎用性を持つWebアプリ。

ただ、スマホの場合、Webアプリでは不十分なことが多々あります。スマホアプリの、他と異なる特徴は、このような点。

  • タッチやスワイプなど、スマホ独自の操作に対応が必要
  • カメラ、マイク、GPSなど、さまざま固有機能へのアクセスが必要

これらは、Webアプリの標準規格では、対応しきれないのが実情。

そのためスマホアプリでは、クロスプラットフォームフレームワークを使う方法も、よく採られます。

これはつまり、Android用とiPhone用の両方のアプリを、同じ言語で開発する、ということです。よく使われるのはこの2つ。

フレームワーク開発言語
React NativeJavaScript
FlutterDart
スマホ用クロスプラットフォームフレームワーク

React Nativeは、WebフロントエンドフレームワークであるReactと同様の手法で、スマホアプリも開発できるというものです。使う言語はJavaScript。フロントエンド開発の経験が活かせます。

Flutterは、開発にDartという言語を使います。FlutterもDartもGoogleが開発したもので、この2つは事実上一体として使われます。言語仕様はJavaScriptに似ています。

速度性能で選ばれるプログラミング言語

企業戦略でどうだこうだと、そんな話をしていられないのが、ゲーム組み込みアプリです。

これらのアプリに共通するのが、処理速度が必要であること

もっと言えば、処理時間より応答処理速度。リアルタイム性が求められるのが、これらのアプリ。

ゲームアプリで重要なリアルタイム性

ゲームは、応答(レスポンス)を素早く行うことが要求されます。

  • コントローラーからの入力
  • グラフィックのアニメーション
  • オンラインでの通信

処理の応答が遅れると「ラグ」という問題になってしまいます。

このような、素早い応答が必要な処理を、リアルタイム処理と言います。その応答は、ミリ秒やマイクロ秒のオーダーでのレスポンスが必要になります。

そして、リアルタイム処理が必要な言語で、筆頭に上がるのが“C++” です。

C++の原則は「ゼロオーバーヘッド」。必要ないことは処理しない。この原則が、リアルタイム性を支えています。

SwitchやPlayStationなど、コンシューマーゲーム機では、その開発に使えるライブラリが提供されています。そのようなライブラリは、C++ベースのものが多いです。

組み込みアプリの厳しいリソース制約

プログラムが存在するのは、パソコンやゲームだけではありません。

  • 家電
  • 産業用ロボット
  • 乗物
  • 医療機器
  • ICカード

いろいろなところに、プログラムが存在します。上記のような、機械や装置に組み込まれるシステムを、

「組み込みシステム」または「エンベデッドシステム(embedded system)」

と呼びます。

これらのシステム、リアルタイム性が必要なことは、容易にイメージできるでしょう。自動車のエンジン制御にタイムラグなんてあったら、大変です。

加えて、組み込みシステムの特徴がもうひとつ。メモリやストレージなどのリソース制約が厳しい

例えばICカード。あんな薄いカードの中に、ICチップが埋め込まれ、その中でプログラムが動きます。

昨今のスマホのスペックなら、メモリ8GB、ストレージ512GBくらいは、当たり前。

それと比べ、ICチップのメモリは数KB程度。スマホで撮った写真1枚さえ入らない容量です。

そんな状態だから、もうプログラム自体のサイズも小さくしないといけない。なのでこの世界では、“C言語”が今でも多く使われています。

C言語は”低級言語”という呼ばれかたもします。例えるなら、いろいろな安全装置がついてない代わりに軽量なクラシックカーのイメージ。だから、C言語でないとプログラムサイズが収まらない、ということも多々あるのです。

C,C++の危険性を克服するRust

CやC++は、軽量かつ高速な点から、今でも組み込み分野において高い需要があります。

しかし、C/C++には、大きな弱点があります。メモリ安全性の欠如です。

メモリ安全性の欠如は、領域外読み取りやメモリ漏えいなどを引き起こし、セキュリティ脆弱性につながります。実際、サイバー攻撃の多くはメモリ脆弱性を狙っていると言われます。

ここで近年登場したのが、Rustです。Rustには「ゼロコスト抽象化」の思想があり、安全性を保ちつつ高速性を保つ言語です。

Rustは、コンパイルの時点で不正メモリアクセスを完全にガードし、コンパイルされたプログラムは高速な処理性能を有します。C/C++の代替として期待されている言語です。

13種言語の対応プラットフォーム一覧表

ここまでの話から、13種類のプログラミング言語と、それが使えるプラットフォームを一覧でまとめましょう。

スクロールできます
言語デスクトップ
アプリ
スマホ
アプリ
Web
フロント
Web
バック
ゲーム組み込み
C
C++WebAssembly
Java
C#WindowsUnity
Python
JavaScriptReactNative
DartFlutter
PHP
Ruby
SwiftMaciPhone
KotlinAndroid
GoWebAssembly
RustWebAssembly
プログラミング言語とプラットフォーム

注意として、上記組み合わせは、あくまで世の中一般的なもの。これ以外でも、できないことはありません。

ただ、よく使われるということは、当然メリットが多い組み合わせです。まず真っ先に検討すべきところでしょう。

まとめ

プログラミングの最終形のひとつが「どのプログラミングでも使える、究極のプログラミング言語」です。でも、そんな究極言語は、ここしばらく登場しそうもありません。

時と場合と場所によって、プログラミング言語を使い分ける。相変わらず重要であり続けるでしょう。

これが正解というのは難しい。でも少なくとも、大間違いの選択はしないよう、特性をしっかり掴んでおきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次