|
| 1 | +# 第1章: TypeScriptへようこそ |
| 2 | + |
| 3 | +JavaScriptの経験がある皆さん、TypeScriptの世界へようこそ。 |
| 4 | +この章では、TypeScriptがどのような言語であるか、なぜ現代のWeb開発のスタンダードとなっているのかを理解し、実際に開発環境を整えて最初のコードを実行するところまでを学びます。 |
| 5 | + |
| 6 | +## TypeScriptとは? |
| 7 | + |
| 8 | +TypeScriptは、Microsoftによって開発されているオープンソースのプログラミング言語です。一言で言えば、**「型(Type)を持ったJavaScript」**です。 |
| 9 | + |
| 10 | +重要な特徴は以下の通りです: |
| 11 | + |
| 12 | + * **JavaScriptのスーパーセット(上位互換):** すべての有効なJavaScriptコードは、有効なTypeScriptコードでもあります。つまり、今日から既存のJS知識をそのまま活かせます。 |
| 13 | + * **静的型付け:** JavaScriptは実行時に変数の型が決まる「動的型付け言語」ですが、TypeScriptはコンパイル時(コードを書いている途中やビルド時)に型をチェックする「静的型付け言語」としての性質を持ちます。 |
| 14 | + * **コンパイル(トランスパイル):** ブラウザやNode.jsはTypeScriptを直接理解できません。TypeScriptコンパイラ(`tsc`)を使って、標準的なJavaScriptファイルに変換してから実行します。 |
| 15 | + |
| 16 | +## なぜTypeScriptか? |
| 17 | + |
| 18 | +「わざわざ型を書くのは面倒だ」と感じるかもしれません。しかし、中〜大規模な開発においてTypeScriptは以下の強力なメリットを提供します。 |
| 19 | + |
| 20 | +1. **型安全性(バグの早期発見):** |
| 21 | + `undefined` のプロパティを読み取ろうとしたり、数値を期待する関数に文字列を渡したりするミスを、コードを実行する前にエディタ上で警告してくれます。 |
| 22 | +2. **強力なエディタサポート:** |
| 23 | + VS Codeなどのエディタでは、型情報に基づいた正確なコード補完(IntelliSense)が効きます。APIの仕様をドキュメントで調べなくても、ドット`.`を打つだけで利用可能なメソッドが表示されます。 |
| 24 | +3. **リファクタリングの容易さ:** |
| 25 | + 変数名や関数名を変更する際、型情報があるおかげで、影響範囲を自動的に特定し、安全に一括置換できます。 |
| 26 | + |
| 27 | +## 環境構築 |
| 28 | + |
| 29 | +それでは、実際にTypeScriptを動かす環境を作りましょう。 |
| 30 | + |
| 31 | +### プロジェクトの作成とTypeScriptのインストール |
| 32 | + |
| 33 | +今回はローカル環境にTypeScriptをインストールする方法を採用します。適当なディレクトリを作成し、ターミナルで以下のコマンドを実行してください。 |
| 34 | + |
| 35 | +※あらかじめ [Node.js](https://nodejs.org/) がインストールされていることを前提とします。 |
| 36 | + |
| 37 | +```bash |
| 38 | +# プロジェクトフォルダの作成と移動 |
| 39 | +mkdir ts-tutorial |
| 40 | +cd ts-tutorial |
| 41 | + |
| 42 | +# package.jsonの初期化 |
| 43 | +npm init -y |
| 44 | + |
| 45 | +# TypeScriptのインストール(開発用依存関係として) |
| 46 | +npm install --save-dev typescript |
| 47 | +``` |
| 48 | + |
| 49 | +インストールが完了したら、バージョンを確認してみましょう。 |
| 50 | + |
| 51 | +```bash |
| 52 | +npx tsc --version |
| 53 | +# Output: Version 5.x.x (バージョンは時期によります) |
| 54 | +``` |
| 55 | + |
| 56 | +## 最初のTypeScript |
| 57 | + |
| 58 | +いよいよ最初のTypeScriptコードを書いてみましょう。 |
| 59 | + |
| 60 | +### コードの記述 |
| 61 | + |
| 62 | +エディタで `hello.ts` というファイルを作成し、以下のコードを記述します。 |
| 63 | +JavaScriptと似ていますが、変数宣言の後ろに `: string` という「型注釈(Type Annotation)」が付いている点に注目してください。 |
| 64 | + |
| 65 | +```ts:hello.ts |
| 66 | +// 変数messageにstring型(文字列)を指定 |
| 67 | +const message: string = "Hello, TypeScript World!"; |
| 68 | + |
| 69 | +// 数値を渡そうとするとエディタ上でエラーになります(後ほど解説) |
| 70 | +console.log(message); |
| 71 | +``` |
| 72 | + |
| 73 | +### コンパイルと実行 |
| 74 | + |
| 75 | +このままではNode.jsで実行できないため、JavaScriptにコンパイルします。 |
| 76 | + |
| 77 | +```bash |
| 78 | +npx tsc hello.ts |
| 79 | +``` |
| 80 | + |
| 81 | +エラーが出なければ、同じフォルダに `hello.js` というファイルが生成されています。中身を確認すると、型注釈が取り除かれた普通のJavaScriptになっているはずです。 |
| 82 | + |
| 83 | +生成されたJSファイルをNode.jsで実行します。 |
| 84 | + |
| 85 | +```ts-exec:hello.ts |
| 86 | +Hello, TypeScript World! |
| 87 | +``` |
| 88 | + |
| 89 | +これがTypeScript開発の基本的なサイクル(記述 → コンパイル → 実行)です。 |
| 90 | + |
| 91 | +このウェブサイトでは上のようにコードを編集して実行ボタンを押すとコンパイルと実行を行うことができる環境を埋め込んでいます。 |
| 92 | + |
| 93 | +またコンパイル後のjsファイルの内容も以下のように確認できます。 |
| 94 | + |
| 95 | +```js-readonly:hello.js |
| 96 | +"use strict"; |
| 97 | +// 変数messageにstring型(文字列)を指定 |
| 98 | +const message = "Hello, TypeScript World!"; |
| 99 | +// 数値を渡そうとするとエディタ上でエラーになります(後ほど解説) |
| 100 | +console.log(message); |
| 101 | +``` |
| 102 | + |
| 103 | +## tsconfig.json: コンパイラの設定 |
| 104 | + |
| 105 | +毎回 `npx tsc hello.ts` のようにファイル名を指定するのは手間ですし、プロジェクト全体の設定も管理しづらくなります。そこで、`tsconfig.json` という設定ファイルを使用します。 |
| 106 | + |
| 107 | +以下のコマンドで初期設定ファイルを生成します。 |
| 108 | + |
| 109 | +```bash |
| 110 | +npx tsc --init |
| 111 | +``` |
| 112 | + |
| 113 | +生成された `tsconfig.json` には多くの設定項目がありますが、基本として以下の設定が有効(コメントアウトされていない状態)になっているか確認してください。 |
| 114 | + |
| 115 | +```json |
| 116 | +{ |
| 117 | + "compilerOptions": { |
| 118 | + "target": "es2016", /* コンパイル後のJSのバージョン */ |
| 119 | + "module": "commonjs", /* モジュールシステム */ |
| 120 | + "strict": true, /* 厳格な型チェックを有効にする(重要) */ |
| 121 | + "esModuleInterop": true, /* CommonJSモジュールとの互換性 */ |
| 122 | + "forceConsistentCasingInFileNames": true, /* ファイル名の大文字小文字を区別 */ |
| 123 | + "skipLibCheck": true /* 定義ファイルのチェックをスキップ */ |
| 124 | + } |
| 125 | +} |
| 126 | +``` |
| 127 | + |
| 128 | +### 設定ファイルを使ったコンパイル |
| 129 | + |
| 130 | +`tsconfig.json` があるディレクトリでは、ファイル名を指定せずに以下のコマンドだけで、ディレクトリ内のすべてのTypeScriptファイルが設定に基づいてコンパイルされます。 |
| 131 | + |
| 132 | +```bash |
| 133 | +npx tsc |
| 134 | +``` |
| 135 | + |
| 136 | +> **Note:** `strict: true` はTypeScriptの恩恵を最大限に受けるために非常に重要です。このチュートリアルでは常にこの設定が有効であることを前提に進めます。 |
0 commit comments