以下の内容はhttps://nopipi.hatenablog.com/entry/2025/02/14/181117より取得しました。


TypeScriptを初めて触った時のメモ(その1: 初期セットアップ編)

はじめに

この記事は、AWS CDKを覚えるにあたり、その前にAWS CDKを使ったIaCで最も使われるプログラミング言語であるTypeScriptの基礎を押さえないと行けないなと思い、触った時のメモである。

TypeScriptを動かすまででも結構な量になったので、この記事ではTypeScriptを動かすまでの初期セットアップとして、node.js・npm/npx・tsc周りまでの話を記載する。TypeScriptの言語そのものは別途記載する。

TypeScriptとは?

wikipediaのTypeScriptの説明の冒頭から拝借

TypeScript はマイクロソフトによって開発され、メンテナンスされているフリーでオープンソースプログラミング言語である。TypeScriptはJavaScriptに対して、省略も可能な静的型付けとクラスベースオブジェクト指向を加えた厳密なスーパーセット(既存のものを全て含んだ上でより機能が拡張されている上位互換となるモノ)となっている。

TypeScriptとJavaScriptとnode.jsの関係性は?

最初はここから理解がふわっとしていたが、調べた内容を図にするとこんな感じ。
こちらのblog記事で別途まとめているのでよければ参照頂きたく。

メモ

以下、やったことと調べたことをつらつら書く。

TypeScript開発&実行環境のセットアップ

node.jsのセットアップ

まず、前提としてJavaScriptの実行環境としてnode.jsをセットアップする。
基本は、以下のnode.js公式ページの手順に従ってセットアップする。

インストール例(最新バージョンでの実行コマンドは上記リンク先を参照)

# Download and install nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# in lieu of restarting the shell
\. "$HOME/.nvm/nvm.sh"

# Download and install Node.js:
nvm install 22

# Verify the Node.js version:
node -v # Should print "v22.14.0".
nvm current # Should print "v22.14.0".

# Verify npm version:
npm -v # Should print "10.9.2".

ここで、node.jsnvmnpmの3つのツールがセットアップされる。この3つが何者かを一言でまとめると以下の通り。

  • node.js : JavaScriptの実行環境の一つ
  • nvm : node.jsのバージョン管理ツール
    • node.jsそのものの管理用のコマンド。最新バージョンや指定したバージョンのnode.jsをインストールしたり、複数のバージョンのnode.jsをインストールしている時に、使いたいバージョンのnode.jsを切り替えたりするのに使うコマンド。
  • npm : node.jsのパッケージ管理ツール
    • node.jsで動かすJavaScriptで作られたさまざまなパッケージを管理するためのツール。TypeScriptもnpmコマンドでこの後インストールする。

ちなみに、nvmnpmは最初に実行するシェルでインストールし、node.js は、3つ目のnvm install 22でインストールされる。

開発用のフォルダを準備する

任意のディレクトリを用意する。ここでは、TypeScriptPracticeというディレクトリを利用する前提とする。
GitHubなどで空のリポジトリを作成してgit coneしても良い。

mkdir TypeScriptPractice && cd TypeScriptPractice && pwd
npmパッケージ管理の初期化

開発するディレクトリでnpmの初期化を行う

npm init --yes

そもそもなぜnpmの初期化を行うのか?
npmのパッケージインストール方法は以下の2種類がある。そして通常は、プロジェクト間でnpmパッケージが干渉し合わないようにするために、ローカルモードでパッケージをインストールするのが推奨ということらしい。このローカルモードでインストールする際に、「このディレクトリから独立した領域ですよ」というふうにするためにnpmの初期化を行うようである。

npmのインストールモード

  1. ローカルモード :
    • npm initによる初期化を実行したディレクトリでのみ有効なパッケージとしてインストールされるモード
    • npm initを実行したディレクトリ直下に作成される、./node_modulesディレクトリにパッケージをインストールする。
    • npm installのデフォルトのモード。
  2. グローバルモード :
    • npm initによる初期化に関係なく、実行可能なglobalとしてインストールするモード
    • ~/.nvm/versions/node/vXX.XX.X/lib/node_modulesディレクトリにパッケージがインストールされる
    • 環境変数PATHにも追加されるため、ユーザーはディレクトリを意識することなくインストールしたパッケージを実行できる。
    • グローバルモードでインストールする場合は、npm install -g パッケージ名と、オプションを明示的に指定する必要がある。
TypeScriptのセットアップ
  • typescript, @types/node, ts-nodeの3つのモジュールのインストール
npm install --save-dev typescript @types/node@22 ts-node
  • TypeScriptの動作テスト

以下のコマンドを打って、tscコマンドのバージョンが表記されればTypeScriptのインストールは成功である。

npx tsc --version

インストールするパッケージの説明

パッケージ名 説明 備考
typescript Node.jsをTypeScriptで実装するための静的型付け言語の基本的なライブラリ
@types/node@node.jsバージョン TypeScriptのためのNode.jsの型情報を提供するライブラリ
ts-node TypeScriptファイルをリアルタイムでJavaScriptコンパイルし、利用者はコンパイルを意識せずnode.js上でTypeScriptを直接実行ように見せるためのツール 最初はts-nodeを使わず、tscでTypsScriptからJavaScriptコンパイルしてからnodeコマンドでJavaScriptを実行してみるとありがたみがわかる

npm installの--save-devオプションについて
開発だけでなく本番環境でも使うパッケージなのか、開発環境だけで良いパッケージなのかを指定する。違いはpackage.jsonDependenciesに登録されるかdevDependenciesに登録されるかが異なる。

オプション(short) オプション(long) 説明 インストール時
-D --save-dev 開発環境のみで利用するパッケージの場合に指定する。この場合package.jsonには、devDependenciesのブロックにパッケージが登録される npm installdevDependenciesDependenciesの両方がインストールされる
-P --save-prod 開発環境でも利用するパッケージの場合に指定する。この場合package.jsonには、Dependenciesのブロックにパッケージが登録される npm install --productionDependenciesのみインストールされる

xpnコマンドについて

xpnは、ローカルモードでインストールしたまたはリモートのパッケージを実行するためのコマンド。
例えばTypeScriptのコードをコンパイルするtscコマンドについて、グローバルモードでインストールした場合はPATHが設定されているためプロンプトでtscと打てば実行できるが、ローカルモードでインストールした場所にはPATHがないため、そのままでは実行できない。そのため、xpnコマンドを利用して、パッケージを実行する。 npm execと同様の動きになる。

tscの初期化

TypeScriptコンパイラtscの設定ファイルであるtsconfig.jsonを生成する。
この設定ファイルを編集することでコンパイラの動作をチューニングすることができるが、まずはデフォルトのままで利用する。

npx tsc --init

TypeScriptをとりあえず動かしてみた

前提のTypeScritp環境のセットアップ
# npmの初期化
npm init --yes

# パッケージのインストール
npm install --save-dev typescript @types/node@22

# tscの初期化
npx tsc --init
とりあえずTypeScriptを動かしてみる

こちらのblogの内容を参考に動かしてみた。

console.log("Hello! Node.js × TypeScript");
npx tsc --build
node ./ts_practice/sample1.js
  • 生成された ./ts_practice/sample1.jsファイルを削除する
npx tsc --build --clean
  • ts-nodeで実行してみる
npx ts-node ./ts_practice/sample1.ts
  • ポイント
    • tscコマンド、nodeコマンドを実行せず、ts-nodeコマンド一つでTypeScriptをnode.jsで実行可能
    • この場合はJavaScriptコンパイルされた.jsファイルの書き込みは発生しない
node.jsのhttpモジュールを使って簡易httpサーバを動かしてみる

引き続き、こちらのblogの内容を参考に動かしてみた。

import * as http from "http";

const port = 8989; // ポート番号

// httpサーバーを設定する
const server = http.createServer(
  (request, response) => {
    // サーバーにリクエストがあった時に実行される関数
    response.end("Hello! Node.js with TypeScript");
  }
);
// サーバーを起動してリクエストを待ち受け状態にする
server.listen(port);
// ログを出力する
console.log(`http://localhost:${port} へアクセスください`);
  • 実行してみる
npx ts-node ./ts_practice/sample2.ts
  • 別のターミナルを開いてアクセスしてみる
curl http://localhost:8989

npmでのTypeScriptプロジェクト管理

TypeScriptからJavaScriptへのコンパイル(ビルド)や、実行をnpmのpackage.jsonscriptsとして登録することで、npmコマンドを介して簡単に実行することができる。

  • package.jsonscriptsブロックに以下のように記載する
  "scripts": {
    "build": "tsc --build",
    "clean": "tsc --build --clean",
    "start": "node ./ts_practice/sample2.js"
  },
  • 実行してみる
# TypeScriptのビルド
npm run build

# sample2.jsの実行
npm run start

# ビルドしたファイルのクリア
npm run clean

どんなふうに記載すると良いのかは、node_module配下にインストールした有名なパッケージのpackage.jsonを眺めると参考になると思う。




以上の内容はhttps://nopipi.hatenablog.com/entry/2025/02/14/181117より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14