SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptの限界を超える!TypeScript初めの一歩

【TypeScriptの基礎を学ぶ】既存JavaScriptを着実にTypeScriptへ移行する実践ガイド

JavaScriptの限界を超える!TypeScript初めの一歩 第4回

第2章 TypeScriptへの移植の始め方とポイント

 ここまで、JavaScriptからTypeScriptへ移行する具体的な手順を見てきました。しかし、実際のプロジェクトでは、これほど単純に進められるわけではありません。そこで、どういったところから手を付けていけばよいのか、いくつかのポイントを示しておきます。

大きな流れ

 大きな流れをまずは示します。

  1. 必要ならフォルダ構造を整える
  2. tsconfig.jsonを作成する
  3. ファイル名を.js→.tsに変更する
  4. allowJs: true などの設定で、JSとTSの共存を許可する
  5. コンパイルエラーを一旦許容し、まずはJavaScriptファイルが出力される状態を目指す
  6. 重要なところから型を付けていく

 tscを使ったコンパイルでは、エラーが出た場合でもJavaScriptのファイルは出力されます。そのため最初は、エラーが出ても気にしないで出力するとよいです。

 すぐには型を付けられない場所は、とりあえずany型にしておくという方法も有効です。そして、プロジェクトにとって重要な箇所から段階的に型付けを進め、最終的に全体が型安全な状態になることを目指します。

 重要なところがどこなのかは、プロジェクトによって異なるでしょう。しかしある程度の共通点はあるはずです。次からは、いくつかの指針を示します。

外部とやりとりする関数

 まずは「外部とやりとりする関数」です。

  • APIレスポンスを受け取る関数
  • フロントエンドと通信するバックエンド関数
  • ライブラリに提供するコールバック関数

 こうした関数で外部との境界をきっちりと定めておけば、内部での変更は柔軟におこなえます。

 入力と出力に型を付けた例を示します。

// APIから受け取るデータの型をきっちり定義
function fetchUser(id: number): Promise<User> {
    // 実装
}

使用頻度の高い関数

 次は「使用頻度の高い関数」です。

  • プロジェクト全体で使われている関数
  • 何回も呼び出される小さな処理

 こうした関数は使用頻度が高いので、少し型を付けるだけで全体の堅牢さがアップしやすいです。

 何度も呼び出される関数の例を示します。

function formatDate(date: Date, format: string): string {
    // 実装
}

状態管理や設定データ

 続いては「状態管理や設定データ」です。

  • フレームワークやライブラリの状態データ
  • アプリの設定オブジェクト

 こうしたデータは、値の形が狂うと、アプリ全体が壊れるリスクがあります。そのため、誤って意図しない値が設定されるのを防ぐことが重要です。

 設定の例を示します。

interface AppConfig {
    apiUrl: string;
    timeout: number;
}

const config: AppConfig = {
    apiUrl: "https://example.com/api",
    timeout: 5000,
};

複雑なオブジェクトをあつかう関数

 次は「複雑なオブジェクトを扱う関数」です。

  • ネストされたオブジェクト
  • 配列とオブジェクトが混ざっているデータ

 ネストが深いと、ミスに気づきにくくなるため型が有効です。このようなデータ構造は、ヒューマンエラーが発生しやすい箇所と言えます。

 複雑なオブジェクトをあつかう関数の例を示します。

interface UserProfile {
    name: string;
    contact: {
        email: string;
        phone: string;
    };
}

function displayUserProfile(profile: UserProfile): void {
    console.log(profile.name, profile.contact.email);
}

第3章 まとめと次回予告

 今回は、既存のJavaScriptのコードをTypeScriptに移行する方法について解説しました。次回は外部のパッケージの型定義の扱いなど、さらに実践的な内容を解説します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
JavaScriptの限界を超える!TypeScript初めの一歩連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21598 2025/09/22 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー