TypeScriptとは?JavaScriptに型を足したら開発が楽になった話

typescript icon
TypeScript

こんにちは、とまだです。

JavaScriptでコードを書いていて、「え、これ数値じゃなくて文字列だったの?」みたいな経験ありませんか?

実行してみて初めてエラーに気づいて、デバッグに時間をかけてしまう。 これ、本当によくある話ですよね。

今回は、そんな悩みを解決してくれるTypeScriptについて解説します。 型という仕組みを使って、コーディング中にミスを発見できるようになるんです。

TypeScriptとは

TypeScriptは、JavaScriptに「型」を追加したプログラミング言語です。

型とは、変数や関数が扱うデータの種類を明確にする仕組みのこと。 日常生活でいえば、料理のレシピみたいなものですね。

「砂糖:大さじ1」「塩:小さじ1/2」と書くように、 「name:文字列」「age:数値」と書くイメージです。

JavaScriptとの違い

JavaScriptは自由度が高い言語です。 変数に数値を入れたり、文字列を入れたり、自由に変更できます。

でも、この自由さがバグの原因になることも。

たとえば、こんなコードを考えてみましょう。

// JavaScriptの場合
function add(a, b) {
  return a + b;
}

console.log(add(1, 2));      // 3
console.log(add("1", "2"));  // "12" (文字列連結)

同じ関数なのに、渡す値によって結果が変わってしまいます。 これが大規模なプロジェクトだと、予期しない動作の原因になるんです。

一方、TypeScriptならこう書けます。

// TypeScriptの場合
function add(a: number, b: number): number {
  return a + b;
}

console.log(add(1, 2));      // 3
console.log(add("1", "2"));  // コンパイルエラー!

文字列を渡そうとした時点でエラーが出るので、 実行前にミスに気づけるわけです。

なぜ今TypeScriptが注目されているのか

Webアプリケーションがどんどん複雑になってきています。

昔は数百行で済んでいたコードが、 今では数万行、数十万行になることも珍しくありません。

そうなると、どこで何のデータを扱っているか把握しきれなくなります。 まるで大きな図書館で本を探すようなものです。

TypeScriptは、すべての本(変数や関数)にラベルを貼るようなもの。 どこに何があるか一目でわかるようになります。

TypeScriptのメリット

TypeScriptを使うと、開発がどう変わるのでしょうか。 主なメリットを3つ紹介します。

エラーを早期発見できる

コードを書いている最中に、エディタが間違いを教えてくれます。

まるでスペルチェッカーのように、 「ここ、型が合ってないよ」と赤線を引いてくれるんです。

実際に動かす前にミスがわかるので、 デバッグ時間が大幅に削減できます。

チーム開発がスムーズになる

大規模プロジェクトでは、複数人で開発することがほとんどです。

でも、他の人が書いた関数を使うとき、 「これ、どんなデータを渡せばいいんだろう?」と悩むことがありますよね。

TypeScriptなら、型情報がドキュメントの役割も果たします。

interface User {
  id: number;
  name: string;
  email: string;
}

function sendEmail(user: User, message: string): void {
  // メール送信処理
}

この関数を見れば、Userオブジェクトとメッセージ文字列が必要だとすぐわかります。 わざわざドキュメントを探す必要がありません。

開発効率が向上する

エディタの補完機能が格段に良くなります。

オブジェクトのプロパティや、 使える関数が自動的に候補として表示されるんです。

タイピング量が減るだけでなく、 プロパティ名を間違える心配もなくなります。

基本的な型の書き方

TypeScriptの型定義、実はとてもシンプルです。 基本的なパターンをいくつか見てみましょう。

変数の型定義

変数名の後ろに: 型名を付けるだけです。

let name: string = "とまだ";
let age: number = 25;
let isStudent: boolean = false;

日本語で「名前は文字列」「年齢は数値」と書くのと同じ感覚ですね。

関数の型定義

関数の引数と戻り値に型を付けられます。

function multiply(x: number, y: number): number {
  return x * y;
}

この関数は「数値を2つ受け取って、数値を返す」という約束事が明確です。 レシピで「材料:卵2個、作るもの:オムレツ」と書くようなものですね。

オブジェクトの型定義

interfaceを使って、オブジェクトの形を定義できます。

interface Product {
  id: number;
  name: string;
  price: number;
  inStock: boolean;
}

const laptop: Product = {
  id: 1,
  name: "MacBook Pro",
  price: 200000,
  inStock: true
};

商品の仕様書を作るようなイメージです。 必要な情報が全て揃っているか、型チェックで確認できます。

TypeScriptの始め方

実際にTypeScriptを始めるには、どうすればいいのでしょうか。 基本的な手順を説明します。

環境構築

まず、Node.jsがインストールされている必要があります。 その後、以下のコマンドでTypeScriptをインストールします。

npm install --save-dev typescript

プロジェクトのフォルダにTypeScriptがインストールされました。

設定ファイルの作成

次に、tsconfig.jsonという設定ファイルを作ります。

npx tsc --init

このファイルで、TypeScriptの動作をカスタマイズできます。 最初は自動生成されたものをそのまま使えば大丈夫です。

コンパイルと実行

TypeScriptファイル(.ts)を作成したら、 JavaScriptに変換(コンパイル)する必要があります。

npx tsc index.ts

するとindex.jsが生成されるので、 通常通りNode.jsやブラウザで実行できます。

実務での活用例

TypeScriptは実際の開発現場でどう使われているのでしょうか。 いくつかの例を見てみましょう。

Reactでの活用

フロントエンド開発で人気のReactでも、 TypeScriptが広く使われています。

コンポーネントのpropsに型を付けることで、 どんなデータを渡すべきか明確になります。

interface ButtonProps {
  text: string;
  onClick: () => void;
  disabled?: boolean;
}

const Button: React.FC<ButtonProps> = ({ text, onClick, disabled }) => {
  return (
    <button onClick={onClick} disabled={disabled}>
      {text}
    </button>
  );
};

propsの型が決まっているので、 使う側も安心してコンポーネントを利用できます。

APIとの連携

バックエンドAPIとやり取りする際も、 型定義があると安全です。

interface ApiResponse {
  status: "success" | "error";
  data?: {
    users: User[];
  };
  error?: string;
}

async function fetchUsers(): Promise<ApiResponse> {
  const response = await fetch("/api/users");
  return response.json();
}

APIのレスポンス形式を型で定義しておけば、 予期しないデータ形式によるエラーを防げます。

大規模プロジェクトでの効果

数十人規模のチームで開発する場合、 TypeScriptの効果は絶大です。

新しくプロジェクトに参加したメンバーも、 型定義を見れば仕様が理解できます。

また、リファクタリング時も型チェックがあるので、 変更の影響範囲がすぐにわかります。

よくある疑問と回答

TypeScript初心者からよく聞かれる質問をまとめました。

Q: JavaScriptが書ければTypeScriptも書ける?

基本的にはその通りです。 TypeScriptはJavaScriptの拡張版なので、 JavaScriptの知識はそのまま活かせます。

ただし、型の概念は新しく学ぶ必要があります。 でも心配いりません。基本的な型なら1週間もあれば慣れますよ。

Q: 小規模プロジェクトでも使うべき?

必ずしも使う必要はありません。 数百行程度の小さなスクリプトなら、 JavaScriptのままでも十分です。

ただ、将来的に規模が大きくなる可能性があるなら、 最初からTypeScriptで書いておくと後が楽です。

Q: 学習コストは高い?

型の基本概念さえ理解すれば、そこまで高くありません。

むしろ、エディタが間違いを教えてくれるので、 JavaScriptより学習しやすいという声もあります。

エラーメッセージも具体的なので、 何が間違っているか理解しやすいんです。

TypeScriptで気をつけたいポイント

TypeScriptを使う上で、知っておくべき注意点もあります。

型定義の粒度

すべてに細かく型を付ける必要はありません。

重要な関数やインターフェースには丁寧に型を付け、 内部的な処理では型推論に任せるバランスが大切です。

anyの使い方

any型を使うと、どんな値でも受け入れるようになります。

let value: any = 42;
value = "hello";  // エラーにならない
value = true;     // これもOK

便利に見えますが、TypeScriptの利点が失われてしまいます。 できるだけ具体的な型を使うようにしましょう。

外部ライブラリの型定義

npmでインストールしたライブラリを使う際、 型定義が含まれていない場合があります。

その場合は、@types/ライブラリ名をインストールすれば、 型定義を追加できることが多いです。

npm install --save-dev @types/express

まとめ

TypeScriptは、JavaScriptに型システムを追加した言語です。

型があることで、以下のメリットが得られます。

  • コーディング中にエラーを発見できる
  • チーム開発での認識のズレを防げる
  • エディタの補完機能が充実する
  • 大規模プロジェクトでも保守しやすい

最初は型定義に戸惑うかもしれません。 でも、一度慣れてしまえば、型なしでのコーディングが不安になるほどです。

小さなプロジェクトから始めて、 少しずつTypeScriptの良さを体験してみてください。

きっと、より安全で効率的な開発ができるようになりますよ。

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →