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

program-platform

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

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

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

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

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

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

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

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

目次

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

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

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

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

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

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

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

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

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

プログラミング時は、使いやすい言語を使えば良いように思えます。

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

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

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

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

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

企業戦略とひもづく言語

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

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

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

パソコンやスマホの胴元は、Microsoft、Apple、Googleなど、言わずと知れた巨大テック企業。

各プラットフォームでは、提供元の企業が、開発に推奨する言語を定めています

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

独自路線を行くMicrosoftとApple

Windows vs Macの構図で、長年のライバルとして存在する、MicrosoftとApple。

MicrosoftとAppleは、開発に使うプログラミング言語の規格も、自身で定めています。

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

そして、プラットフォームの進化に伴い、言語自体も自身で改良しています。

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

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

オープンな立場のGoogle

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

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

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

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

クロスプラットフォームを目指すWeb系言語

巨大企業の思惑があるわけですが、アプリ開発側からすれば、

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

と普通に考えるわけです。すると、同じアプリを、複数の異なる言語で開発しないとなりません

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

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

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

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

クロスプラットフォームを実現する、最も強力な方法が、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チップが埋め込まれ、その中でプログラムが動きます。

ICチップに搭載されるメモリは数KB程度。スマホで撮った写真1枚さえ入らない容量です。

あえてC言語などの低級言語を使う

そんなカツカツのリソース条件下では、もうプログラム自体のサイズも小さくしないといけない。

なのでこの世界では、“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


目次