スクリプトとは【プログラミング言語についての解説】

プログラミング 用語解説

スクリプトについて調べる人

スクリプトついて調べる人
「スクリプトとは何でしょう?プログラムと何が違うのでしょうか?どういう特徴がありますか?例えばどんなものがスクリプトと呼ばれているのでしょうか?」

こんな悩みを解決します。

スクリプトとは、コンパイルが不要でコーディングしたプログラムを直ちに実行できる言語のことです。事前にコンパイルして機械語に翻訳しなくても実行することができるため、お手軽に開発・実行できます。

本記事の内容

本記事では、下図①〜③の順に解説します。
スクリプトとコンパイル言語の概念図

①スクリプト/スクリプト言語とは

スクリプト言語とは、コンパイルが不要なプログラムのことです。

  • コンパイルが不要だからすぐに実行できる
  • すぐに実行できるから開発する時にトライ&エラーが早い

一方で実行時はリアルタイムで機械語に変換しなくてはならないため、コンパイル言語に比べてプログラムの実行速度が遅いです。

代表的なスクリプト言語

HTML、Python、node.js、シェルスクリプト、VBScript、PHP、perl、Ruby、AppleScript、AWKなどです。

②コンパイル/コンパイル言語とは

コンパイル言語とは、コンパイルが必要なプログラムのことです。コンパイルとは、ソースコードを機械語へ変換することで、コンパイラーによって変換が行われます。

スクリプトに対してコンパイル言語はコンパイルが必要です

コンパイラーとは

出典:Wikipedia 

プログラミング言語(人間が理解しやすい言語や数式でプログラムを記述可能な人工言語)で書かれたプログラムを、コンピュータのプロセッサが直接的に実行できる機械語、あるいは元のプログラムよりも低いレベルのコード(例えばバイトコードなどの仮想機械向け中間言語あるいは中間表現)に変換することを、英語の動詞で”compile”(コンパイル)と呼ぶ。コンパイラとは、コンパイルを行なうコンピュータプログラムのことである。

代表的なコンパイル言語

Java、Go言語、Scala、C++、C、C# などです。

こちらの記事も参考になります

③スクリプトとコンパイル言語の違いは機械語への翻訳の仕方

まず、スクリプト言語とコンパイル言語の違いをざっくり解説します。

  • スクリプト言語は実行時(=同時通訳)
    ・・・速度は遅いがコンパイルが不要
  • コンパイル言語は事前(=翻訳)
    ・・・速度は速いが事前のコンパイルが必要

スクリプト言語は同時通訳のイメージです。実行するたびに、ソースコードを機械語にリアルタイムで通訳して実行します。

一方、コンパイル言語は翻訳版の本のイメージです。あらかじめ翻訳する作業は大変ですが、実行時は通訳不要だから実行速度は速いです。

コンパイル不要なのは、同時通訳をするインタプリタのおかげ

スクリプトはコンパイルしてないのになぜ動くのかというと、スクリプト実行時にインタプリタが機械語に同時通訳しているからです。そのため、スクリプトはインタプリタ型言語とも呼ばれます。

  • コンパイル言語にはコンパイラー(翻訳者)が必要です
  • スクリプト言語にはインタープリタ(通訳者)が必要です

インタプリタとは

出典:Wikipedia 

インタプリタは、およそ次のいずれかの動作をするプログラムのことです。
 ・ソースコードを直接解釈実行する。
 ・ソースコードを何らかの効率的な中間的なコード(中間表現)に、最初に全て変換して、あるいは、逐次変換しながら、解釈実行する。
何らかのコンパイラが生成し出力した、何らかの効率的な(マシンに依存しない、あるいは、マシン依存の)中間表現を解釈実行する。

Pythonはスクリプト言語?コンパイル言語?

Pythonはスクリプト言語ですが、実はコンパイルすることもでき、スクリプト言語とコンパイル言語の良いとこ取りをしています。

  • スクリプト言語は低速だけど開発しやすい
  • コンパイル言語は高速だけど開発しにくい

Pythonは開発時にはスクリプト言語でコンパイル不要ですが、開発が終わった時点でコンパイルして、高速化できるのです。

Javaはスクリプト言語?コンパイル言語?

Javaはコンパイル言語ですが、仮想マシン上の機械語に翻訳され、仮想マシン上で実行されます。仮想マシンを介すことで、コンパイル言語とスクリプト言語の中間のようなシステムです。一般に機械語はWindows、Linux、MacなどそれぞれのOSによって異なりますがJavaではこの違いを仮想マシンが吸収するため、仮想マシン上のJavaプログラムはどのOS上でも同じように動かすことができます。

実行速度が遅いスクリプト言語が流行るワケ

最近ではpythonやnode.jsなどのスクリプト言語が流行しています。また一部の仮想通貨でもスマートコントラクトというプログラムの実行言語にJavaScriptが使われています。

実行速度が遅いはずのスクリプト言語がこれだけ多くのシーンで使われている理由は、やはり開発者視点に立った時の開発のしやすさがプログラミング言語のシェアに大きく依存しているからでしょう。

コンパイル言語とスクリプト言語の両方を扱ってみるとわかりますが、圧倒的にスクリプト言語の方が扱いやすく、開発時のストレスが少ないです。

一部の高速化が必要なアプリケーションや専門性の高いアプリケーションでなければ、開発者がスクリプト言語を選択したくなるでしょうし、そうした開発者の意向がnode.jsなどのプロダクト戦略にも現れていると考えるのが妥当でしょう。

新たに広く普及させるには、言語設計はスクリプト一択です

スクリプト言語はプログラミングを本業としない人にも扱いやすいのが特徴です。例えば、HTMLやCSSもスクリプト言語で、ライターやデザイナーなど開発者以外の方にも広く使われています。今後も、開発者に限らず多くの人に利用してもらう言語設計にするには、スクリプト言語一択と言えるでしょう。

スクリプトに関する参考記事

スクリプトに関する別サイトの解説、コンパイル言語をスクリプトとして実行する汎用的な仕組みとしてのJVM(Java Virturl Machine/Java仮想マシン)についての別サイトの解説記事を紹介します。

スクリプト言語とは

出典:weblio 

スクリプト言語とは、プログラミング言語のうち、プログラムの記述や実行を比較的簡易に行うことができる言語の総称である。
多くの場合、スクリプト言語はインタープリタ型言語であり、コンパイラ型言語に比べて実行までの処理の手間がかからないという特徴を持っている。また、他のプログラミング言語に比べると、英語のような自然言語に近い記述を用いてプログラミングすることが可能であり、習得が比較的容易であるとされる。

スクリプト言語の中には、デスクトップアプリケーションで処理を自動化するために用いられるマクロ言語なども含まれるが、通常、スクリプト言語と言った場合は、Webブラウザ上で動作する簡易プログラムを記述するための言語を指す場合がほとんどである。代表的なスクリプト言語としては、JavaScript、Perl、Python、PHP、Rubyなどを挙げることができる。
JavaScriptは、Webページにおいてインタラクティブ性を実現するための手法として注目され、Ajaxを実現するための要素技術の一つとしても用いられている。かつては、セキュリティ上の脆弱性の観点からユーザー側での利用を制限される場合もあったが、セキュリティ関連技術の向上に伴い、ページ遷移を伴わずに(非同期で)画面を描き直せるといった利便性が再評価され、最近ではWebアプリケーションの開発言語として盛んに採用されている。

スクリプト言語が動くわけと動かすメリット

出典:日経XTECH 

皆さんは、 Java仮想マシン(以下、JVM)と聞いて何を思い浮かべますか。多くの読者は、Javaプログラムを動かすために必要な実行環境と思うことでしょう。 Javaで書いたプログラムは、JVMを利用することでプラットフォーム(WindowsやMac、Linux)が異なっていても、同じJavaプログラムを同じように動かすことができます。

 このようにJVMはJavaのためにあると思いがちですが、Java以外のプログラミング言語を動かす実行環境としても注目されています。それが、JavaScriptやRubyといったスクリプト言語を動かすためのJVMです。例えば、NTTソフトウェアはスクリプト言語のGroovyを既存のJavaプログラムと組み合わせて、 JVMで使うシステム開発を行っています。

スクリプト言語+JVMを注目しているのは、企業だけではありません。 Javaの言語仕様を策定している開発者もスクリプト言語をJVMで動かすニーズに注目しています。

スクリプトとは – おわりに

スクリプトとは
今回の記事は以上です。コンパイル言語との違いを中心にスクリプトについて解説しました。理解の一助となりましたら幸いです。