|
38 | 38 |
|
39 | 39 | TypeScript対応の環境で、最小設定ですぐに使い始められるのはVisual Studio Codeです。しかも、必要な拡張機能をプロジェクトファイルで指定して、チーム内で統一した環境を用意しやすいので、推奨環境として最適です。EclipseなどのIDEの時代とは異なり、フォーマッターなどはコマンドラインでも使えるものを起動するケースが多いため、腕に覚えのある人はVimでもEmacsでもなんでも利用は可能です。
|
40 | 40 |
|
41 |
| -.. todo:: lyntのTypeScript対応状況を注視する |
42 |
| - |
43 | 41 | これらのツールを組み合わせて環境を作っていきます。昔のJavaScriptの開発環境は、ビルドツール(GruntやGulp)を使ってこれらのツールの組み合わせを手作業をで行う必要がありましたが、ツールが複雑になってプロジェクトのテンプレート化が進んだことや、TypeScriptの人気が上がるにつれてTypeScriptを考慮したツールが増えてきました。そのため、現在は比較的簡単に導入できます。
|
44 | 42 |
|
45 | 43 | ツールは日々改良されているため、どの目的に対してどのツールを利用するのがベストかは一概には言えませんが、比較的に広く使われていて、安定していて、かつ利便性が高い物はいくつかピックアップできます。次の表はその対応表になります。フォルダ作成は\ ``package.json``\ を含むプロジェクトのフォルダを作成することを意味します。
|
|
73 | 71 | - * React + SSR
|
74 | 72 | * `Next.js <https://nextjs.org/>`_
|
75 | 73 | * ○
|
76 |
| - * (オプション) |
| 74 | + * (tsconfig.jsonを作成したら有効) |
77 | 75 | * -
|
78 | 76 | - * Vue.js
|
79 | 77 | * `@vue/cli <https://cli.vuejs.org/>`_
|
80 | 78 | * ○
|
81 | 79 | * (オプション)
|
82 | 80 | * (オプション)
|
| 81 | + - * Nuxt.js |
| 82 | + * `nuxi <https://v3.nuxtjs.org/getting-started/installation>`_ |
| 83 | + * ○ |
| 84 | + * ○ |
| 85 | + * (オプション) |
83 | 86 | - * Angular
|
84 | 87 | * `@angular/cli <https://angular.io/>`_
|
85 | 88 | * ○
|
86 | 89 | * ○
|
87 | 90 | * ○
|
88 | 91 | - * ウェブ全般
|
89 |
| - * `Parcel <https://en.parceljs.org/>`_ |
| 92 | + * `Parcel <https://parceljs.org/>`_ |
90 | 93 | * -
|
91 | 94 | * ○
|
92 | 95 | * -
|
| 96 | + - * ウェブ全般 |
| 97 | + * `Vite.js <https://vaitejs.dev/>`_ |
| 98 | + * ○ |
| 99 | + * (オプション) |
| 100 | + * - |
93 | 101 |
|
94 | 102 | 本章では、これらのツール間で共通となる情報を紹介します。
|
95 | 103 |
|
96 | 104 | 作業フォルダの作成
|
97 | 105 | -------------------------
|
98 | 106 |
|
| 107 | +この作業はツールによっては行ってくれるため不要です。 |
| 108 | + |
99 | 109 | 出力先フォルダの作成はプロジェクト構成ごとに変わってくるため、入力側だけをここでは説明します。プロジェクトごとにフォルダを作成します。ウェブだろうがライブラリだろうが、 ``package.json`` が必要なツールのインストールなど、すべてに必要になるため、 ``npm init`` でファイルを作成します。ツールによってはこのフォルダの作成と\ ``package.json``\ の作成を勝手にやるものもあります。
|
100 | 110 |
|
101 | 111 | .. code-block:: bash
|
@@ -414,9 +424,19 @@ ESLintの警告はなるべく適用したいが、特別なコードだけ除
|
414 | 424 |
|
415 | 425 | ユニットテスト環境も作ります。TypeScriptを事前に全部ビルドしてからJasmineとかも見かけますが、公式でTypeScriptを説明しているJestにしてみます。
|
416 | 426 |
|
| 427 | +Jest、Jestの型定義、TypeScriptを読み込めるようにするトランスレータの3つはセットで入れます。 |
| 428 | + |
| 429 | +.. code-block:: bash |
| 430 | +
|
| 431 | + $ npm install jest @types/jest ts-jest --save-dev |
| 432 | +
|
| 433 | +``jest --init``\ を起動するといくつか質問されて設定ファイルの雛形が生成されます。 |
| 434 | + |
417 | 435 | .. code-block:: bash
|
418 | 436 |
|
419 |
| - $ npm install --save-dev jest ts-jest @types/jest eslint-plugin-jest |
| 437 | + $ npx jest --init |
| 438 | +
|
| 439 | +``npm test``\ で実行できるようにするかの質問が最初にされるのでYを選択します。TypeScriptを\ **設定ファイルに**\ 使うかの質問はどちらでも良いです。こちらを選んでもTypeScriptを有効化する設定は必要です。Nodeかjs-domかは、純粋なロジックのテストがしたいか、ブラウザのテストをしたいか次第です。必要であれば後から足せます。あとはカバレッジ計測、モックのリセットを毎回行うかといった質問です。 |
420 | 440 |
|
421 | 441 | scripts/testと、jestの設定を追加します。古い資料だと、transformの値がnode_modules/ts-jest等になっているのがありますが、今はts-jestだけでいけます。
|
422 | 442 |
|
@@ -471,3 +491,40 @@ JestでもMochaでも、人気のフレームワークはテスト専用の関
|
471 | 491 |
|
472 | 492 | .. todo:: eslintやテストの書き方の紹介
|
473 | 493 |
|
| 494 | +.. _change_import_path: |
| 495 | + |
| 496 | +プロジェクト内のファイルの参照方法を\ ``@/``\ にする |
| 497 | +------------------------------------------------------------------- |
| 498 | + |
| 499 | +プロジェクト内のファイルの\ ``import``\ では、現在のファイルから相対パスで書く方法と、\ ``tsconfig.json``\ の\ ``compilerOptions.baseDir``\ を起点とした絶対パスで書く方法がありました。 |
| 500 | + |
| 501 | +それ以外に近年広く使われている記法が、プロジェクトのベースフォルダを\ ``@/``\ と表記する方法です。 |
| 502 | + |
| 503 | +.. code-block:: ts |
| 504 | +
|
| 505 | + import { MyComponent } from "@/components/mycomponents"; |
| 506 | +
|
| 507 | +もし、すべてのコードが\ ``src``\ フォルダ以下にあるのであれば、次のように\ ``tsconfig.json``\ を変更します。もしプロジェクトにJavaScriptファイルものこっているのであれば、同一の内容を\ ``jsconfig.json``\ に書けば、Visual Studio Code、Next.js、Veterなどが解釈してくれますし、\ ``babel-plugin-module-resolver``\ を入れれば他のプロジェクトでもこの表記が可能です。 |
| 508 | + |
| 509 | +.. code-block:: json |
| 510 | + :caption: tsconfig.json |
| 511 | +
|
| 512 | + { |
| 513 | + "compilerOptions": { |
| 514 | + "baseUrl": ".", |
| 515 | + "paths": { |
| 516 | + "@/src/*": ["src/*"] |
| 517 | + } |
| 518 | + } |
| 519 | + } |
| 520 | +
|
| 521 | +Jestはこのファイルから情報を取得してくれませんので専用の設定が必要です。 |
| 522 | + |
| 523 | +.. code-block:: json |
| 524 | +
|
| 525 | + { |
| 526 | + "moduleNameMapper": { |
| 527 | + "^@/(.*)$": "<rootDir>/src/$1" |
| 528 | + } |
| 529 | +
|
| 530 | +単なるエイリアスなので、この設定を入れなくてもできることは変わりませんが、特にテストコードからプロジェクトのファイルを参照したい場合など、\ ``import { Targert } from "../../../../src/components/Target";``\ のように\ ``import``\ が長くなる可能性があります。\ ``import``\ 文を他のファイルからコピーするときも、どのフォルダであってもそのまま使えるというメリットもあります。 |
0 commit comments