【第1回】環境構築を理解すれば、コンピュータの理解も深まる

 

2023年03月21日

【第1回】環境構築を理解すれば、コンピュータの理解も深まる

 

 


こんにちは、エンジニアの友田です。 MLエンジニアを目指しています。

Dockerの普及により環境構築が容易になりました。コマンドを叩けばできあがり。魔法のようですね。ぶっちゃけ、環境構築や実行環境とか分からないけど開発している、このままで良いのだろうか・・・・・と不安を感じている方も多いのではないでしょうか。
今シリーズからはそんな不安を払拭する記事を目指します。
第1回は、OSの役割とアプリケーション開発のポータブル性です。

はじめに

環境構築や実行環境について理解したい方向けです。

OSはリソースを管理している

OSはソフトウェアです。どんな役割・機能を提供するソフトウェアでしょうか。OSはCPU、メモリ、ストレージ、ネットワークなどを管理しています。これらを「リソース」と呼びます。つまり、OSはリソースを管理しています。
アプリケーションからリソースを直接操作することはできません。

アプリケーションからリソースを操作するためには

アプリケーションからリソースを操作するためには、OSが提供するシステムコールAPIを使用する必要があります。システムコールは、OSが提供する機能をアプリケーションから利用するためのインターフェースであり、リソースの操作に必要な機能を提供します。
たとえば、ファイルを読み書きする場合、OSが提供するファイル操作のシステムコールAPIを呼び出す必要があります。

OSが異なれば、システムコールAPIも異なる

システムコールAPIの仕様は、各OSで統一されていません。例えば、各OSのファイルを読み込むAPIを挙げましょう

OS API(メソッド)
LINUX read()
macOS read()
Windows ReadFile()

上記のようにmacOSとWindowsで異なります。

OSに依存しない実行環境とは

Nodejsでファイルを読み込むAPIはreadFile()です。
readFile()を呼び出せば、内部でシステムコールを呼び出しています。何度も言いますが、ファイルを直接操作していません。あくまでもファイルを操作しているのはOSです。OSのプログラム(=カーネル)が操作しています。
ここで疑問を持つ方がいます。 なぜ、readFile()というAPIで対応できるのか。macOSとWindowsのシステムコールAPIは違いました。

実行環境はOSごとに用意されてる

下記画像をご覧下さい。

OSごとにNode.jsが用意されています。イメージで捉えると、macOS環境でreadFile()を呼び出すと、macOS用のシステムコールread()に変換され、Windows環境でreadFile()を呼び出すと、Windows用のシステムコールReadFile()に変換されます。
こうすれば、プログラマーはOSを意識せずとも、Node.jsのドキュメント通りに実装すれば、どの環境でも実行することができます。

ポータブル性とは

アプリケーション開発のポータブル性とは、異なるプラットフォーム(OS、ハードウェア、アーキテクチャなど)上でアプリケーションを動作させることができる性質のことを指します。
Windows、Linux、macOSなどの異なるOS上で動作することができます。
OSを意識しなくて良いという観点からの場合、Node.jsは、ポータブル性が高いと言えます。

最後に

リソースの操作はOSのシステムコールAPIを呼び出していること。OSごとにシステムコールが異なること。ポータブル性が高い開発は、OSを意識しなくても開発できることを学びました。
次回は、実行環境について書きます。

 

無題ドキュメント