Closed1
【macOS,シェル,Node.js】何故動くについて、段階的に理解を深めていく記録
何について書く?
- 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
- https://eng-entrance.com/linux_birth#i
- https://www.otsuka-shokai.co.jp/products/linux/
- https://qiita.com/sutton/items/b72dd042825c2870ef05
- https://eng-entrance.com/programming-os
- https://ja.wikipedia.org/wiki/Unix系#:~:text=現在プロプライエタリのUnix系,VxWorksなどが存在する。
- https://teratail.com/questions/119363
シェルとは?
- http://www.cc.kyoto-su.ac.jp/~hirai/text/shell.html#history
- https://kouritool.com/what-linux/カーネルとシェル/
- https://recruit.cct-inc.co.jp/tecblog/os/shell/
- https://ja.wikipedia.org/wiki/Finder
- https://news.mynavi.jp/article/osxhack-241/
- https://codezine.jp/unixdic/w/シェル機能#:~:text=シェルには、sh、bash,が開発されました。
macOSのディレクトリー構成
- https://epic-life.me/archives/1914
- https://oshiete.goo.ne.jp/qa/6506983.html
- https://suwaru.tokyo/zshenv/
- https://qiita.com/muran001/items/7b104d33f5ea3f75353f
Node.jsとPJファイルが動く理由
このスクラップは2022/04/17にクローズされました