Closed1

【macOS,シェル,Node.js】何故動くについて、段階的に理解を深めていく記録 

hirohiro

何について書く?

  • macOSのシェルがどのような動きをしているのか。Node.jsでreact.jsなどのPJファイルが何故動くのかなど、普段何気なく使用しているPC環境について段階的に理解を深めていく記録です。
  • 以前にメモ帳にカキカキしていたものをまとめたくてこのスクラップを作りました。

内容

●説明順番

  • LinuxやmacOS
  • シェルとは?
  • macOSのディレクトリー構成
  • Node.jsとPJファイルが動く理由

●macOSやLinux

【ここでの登場人物】
Unix━BSD━macOS
  ┗Linux

Unix

  • macOSやLinuxOSはUnixから始まっている。
  • 1969年にアメリカベル研究所で生まれたUnixは多くのOSの土台になっている。
  • 大部分がC言語で書かれている。
  • ライセンス契約がある。

Linux

  • フィンランドの大学生(リーナス・トーバルズ)がUnixを参考にして作成したのがLinux(LinusがUnixを参考にしたOS⇒Linux) カーネルの構造はUnixと異なり1から作成されている。
  • オープンソースソフトウェア(OSS)
  • サーバーOSとしてよく用いられている。
  • 同氏はgitの生みの親でもあると言うから驚きである。

macOS

  • Unixの派生版 BSDを基に作成された。
  • Unixコマンドが使える。

●シェルとは?

【ここので登場人物】
ユーザー(私)→ターミナル(CLI)→シェル→カーネル→ハードウェア

  • シェルはユーザーとOS中核の仲介役の事。
  • カーネルはOSの中核となる部分であり、プログラムとハードウェアを仲介する。(CPUやメモリ・ハードディスクなどにアクセスする手段を提供する役割を担っている)
  • ただカーネルは機械語にて動くのでユーザーから直接指示を出せない。
  • そこでシェルを使いユーザーがターミナル(黒い画面)で入力したUnixコマンドをカーネルに理解できる機械語変換して伝えてもらう。その逆も然り。
  • Unixコマンドをひとまとめにして.sh拡張子をつけたものをシェルスクリプトという。面倒な作業をいちいちコマンドを打つことなく実行できるメリットがある。
  • CLIのシェルは、大きくBシェル系とCシェル系(Bシェルを基にスクリプト構文をC言語風にアレンジして配列の使用を可能にしたシェル)がある
  • macOS Catalina からデフォルトシェルがzsh(Bシェル系)になった。
  • ちなみにシェルはCLIを指すことが一般的だが、マウス操作などのGUIをベースであるグラフィカルシェルもその一つとして位置する。(macOSであればFinderがグラフィカルシェル名に当たる)

●macOSのディレクトリー構成

パス 機能
/ ルートディレクトリ
/Applications 全ユーザが利用可能なアプリケーション
/Users 各ユーザのホームディレクトリ
/Library 全ユーザが利用可能なアプリケーションの設定
/Volumes ハードディスクやUSBなどの外部記憶媒体と接続する際のマウントポイント
/System OSのファイル
/cores カーネルのコアダンプ
/bin コマンドラインで使用する必須コマンド
/dev プリンタやマウス等の各種デバイスにアクセスするために使用するファイル類
/etc システム全体用の設定ファイル
/opt ユーザーがインストールした静的データ、主にプログラムを格納
/private /varや/tmp, /etcの実体
/sbin コマンドラインで使用する必須コマンドのうちシステムのメンテナンス等に用いられるコマンド
/tmp 一時的に保存するファイルやディレクトリを配置。再起動や期間で削除される
/usr ユーザが使用するコマンドやマニュアルを配置
/var ログファイルなどを保存するディレクトリでシステムが利用
  • ルートディレクトリーは全ユーザーに関わる中核の機能が入っている。
  • ユーザーはUsersディレクトリー配下に作られる。ホームディレクトリーと呼ばれる。
  • 各ユーザーの設定に関して、設定ファイルをルート→ユーザーディレクトリーの順番に読み込んで行く。例:zshの設定ファイルでルートディレクトリー/etc/zshrcが読まれた後ユーザーのホームディレクトリー配下~/.zshrcが上書きで読まれる。

●Node.jsとPJファイルが動く理由

Node.jsとは

  • Google Chromeでも使用されるV8エンジン上で動くJavaScript実行環境。
  • このエンジンで、スクリプトを読み込み(パースし)jsを機械語に変換し実行される。

node.jsインストール・PJファイルに合わせたバージョンのNode.jsを起動

  • Node.jsパッケージングソフトnodenvを使用(https://qiita.com/1000ch/items/41ea7caffe8c42c5211c)
  • nodenvはホームディレクトリーにインストールされる。(※もしもnodenvを使用せずhttps://nodejs.org/ja/公式のインストーラを使用した場合は、Node.jsの本体はルートディレクトリー/usr/bin/nodeにインストールされる。)
  • nodenv配下にvarsionsがあり各Node.jsのバージョン別ディレクトリーがある。
  • nodenv global バージョン1 をすればホームディレクトリー配下どこからでもその指定したバージョン1のNode.js環境を使用可能。PJディレクトリーにてnodenv local バージョン2を実行すると、そのPJディレクトリーではバージョン2のNode.jsにて実行が可能になる。
  • 補足:npm(yarn)インストールについて。2種類ある。
  • グローバルインストールは、ホームディレクトリー配下全てに影響を与える部分にインストールされる。package.jsonが作られない。
  • ローカルインストールはPJディレクトリー配下で行うならば、package.jsonが作成され、そこのnode_modulesにインストールされる。 PJで使用するものは基本的にlocal インストールがいい。→何をインストールしたかがpackage.jsonに記録されてgitで管理している際他の人に渡すときも環境ごと伝えることができるため。

参考サイト

macOSやLinux

シェルとは?

macOSのディレクトリー構成

Node.jsとPJファイルが動く理由

このスクラップは2022/04/17にクローズされました