🍎

ソフトウェアを支える土台を知る(ランタイム、ライブラリ、SDK、IDE)

2022/07/31に公開

対象者

  • ライブラリ、ランタイムといった用語をなんとなくのわかるが、しっかりと理解できていない人
  • ソフトウェアを作る、動かす上で扱われる周辺技術を知っておきたい人

ゴール

  • ソフトウェアを動かすのに必要なものとそれがどういうものかを理解する

ソフトウェアを動かすのに必要なもの

  1. ハードウェア(PC、サーバなど)
  2. OS(Linux、Windowsなど)
  3. ソースコード
  4. ランタイム
  5. ライブラリ

1と2はイメージがつきやすいかと思います。今回は主に3~5についてみていきます。
3のソースコードについても「そんなのわかってるよ~」と感じだと思いますが、アプリケーションの視点から見ると、アプリケーション実行にはこの3~5がまず一つのまとまりだと思います。実際にコンテナという技術もこの3~5を1つにパッケージングし、1つの独立したプロセスとして稼働させることができます。

ソースコード

これは言わずもがなだと思います。ソフトウェアにはソースコードは必須です。
Python,Ruby,PHPなどのスクリプト言語の場合はあまり意識しなくも良いですが、C,C++,C#のようなコンパイル言語の場合は、ソースファイルをビルドして、実行可能なバイナリファイルを作成する必要があります。

  • 例えばC#の場合、人間が理解できるテキスト形式の「xxx.cs」ファイルをビルドして、コンピューターが理解可能な「xxx.exe」ファイルにする必要があるということです。

ランタイム

これは各言語で書かれたプログラムを実行するときに必要なものです。逆に言えば皆さんがいくら頑張って素晴らしいプログラムを書いてもランタイムがないと動きません。

  • 例えば、JavaならJavaランタイム(JRE:Java Runtime Environment)をインストールする必要があります。またPythonで書いたプログラムを実行する前に、当然Pythonをインストールする必要があるように各言語にあった舞台(ランタイム)を用意してあげる必要があります。

ライブラリ

ライブラリはプログラムを構成する上で利用する「部品」です。この「部品」はアプリケーションでよく利用される機能を切り出して再利用できるようにしたものとも言えます。この「部品」を利用することでアプリケーション開発はとても楽になります。
しかしプログラムを動かすのに必要なものという観点では、このライブラリは極端な話、自分で全てコーディングしてしまえば、必要ありません。しかしプログラムからライブラリを呼び出す時に、そのライブラリが用意されてなければ、当然そのプログラムは「え、なにそれ?そんな名前のライブラリありませんよ~」となってエラーになります。

  • Pythonの例
# ライブラリをインポート
import datetime
#現在の日付を取得
date = datetime.date.today()
print(date)

上記の例ではdatetimeライブラリを使うことで楽に現在日付を取得できます。これをライブラリなしで実装すると考えると震えますね。。
このようにライブラリはプログラムを扱う上で必須なものです。

ソフトウェアを作るのに必要なもの

これまで説明してきたプログラム実行に必要ものですが、もしかしたらあまり意識したことがない人が多いのでないかと思います。(私もそのうちの1人です。(笑))
というのもこれらの細かいものを1つ1つ準備するのは大変です。やはりプログラマー、アプリケーションデベロッパーはロジックを書くことに集中したいものと思います。そのためにSDK、IDEがあります。このSDK、IDEは昨今ソフトウェアを作るのに必要なものだと思います。(※ソフトウェアを動かすのに必須ではありません。)

SDK(ソフトウェア開発キット)

SDKはソフトウェア開発は楽にするための詰め合わせのようなものです。
SDKによって異なる部分はありますが、一般的にSDKは下記を提供します。

  • コンパイラ、デバッグツール
  • 標準ライブラリ
  • ランタイム

ソフトウェアを動かすのに必要なライブラリの一部とランタイムを用意してくれます。
例えばJDK(Java Development Kit)というJavaのSDKにはJava実行に必要なJREを含んでいます。

IDE(統合開発環境)

最後にみんな大好きIDEです。IDEは統合開発環境という名前の通り、ソフトウェア開発に必要なツール一式をまとめた環境です。IDEには一般的に下記を提供します。

  • テキストエディタ
  • SDK(相当の機能)

例えば、

  • 「Visial Studio」にはWindows SDK(Windowsアプリ開発で必要なツールをまとめたもの)
  • 「Xcode」にはiOS SDK
  • 「Android Studio」にはAndroid SDK
    が含まれます。

IDEはGUIのインターフェースでソフトウェア開発に必要なSDKへのアクセスを提供します。
なのでIDEを使うことでこれまで説明したソフトウェアを動かしたり、作るのに必要なものが最低限利用できます。

まとめ

ソースコード、ランタイム、ライブラリといったソフトウェアを動かすのに必要なものについて見てきました。またSDKにはランタイムやライブラリが含まれるいることやIDEにはさらにそのSDKの一部が含まれています。
私はアプリケーションエンジニアではなく、このような用語が仕事の中で出てきた時に、自分の中で整理できていませんでしたが、今回この記事を執筆する中で整理ができたと思います。
もし私のような方がいて、この記事を拝見くださり。それが参考になれば幸いです。
また内容についてご指摘、ご感想などありましたらフィードバック頂けますと幸いです。

Discussion