TypeScriptのincremental設定でビルド高速化!初心者向けコンパイル設定ガイド
生徒
TypeScriptのプログラムを書いているのですが、保存してから実行できるようになるまでの待ち時間が長くて困っています。もっと早くする方法はありませんか?
先生
それは大変ですね。TypeScriptには、前回の結果を覚えておくことで、二回目からの変換作業を劇的に早くする「incremental」という魔法のような設定があるんですよ。
生徒
前回の結果を覚える?具体的にどうやって設定すればいいのでしょうか?設定ファイルとか難しそうで不安です。
先生
大丈夫ですよ!パソコンの操作に慣れていない方でも、一箇所書き換えるだけで設定できます。まずは基本的な仕組みから一緒に見ていきましょう!
1. TypeScriptのビルドとコンパイルの仕組みを知ろう
プログラミングの世界では、私たちが書いた言葉をコンピューターが理解できる言葉に翻訳する必要があります。この翻訳作業のことをコンパイルと呼びます。特にTypeScriptの場合は、JavaScriptという別のプログラミング言語に変換する作業を指します。
通常、私たちがプログラムを一行書き換えるたびに、パソコンは最初から最後まで全てのファイルを読み直して、一から翻訳作業をやり直します。これが、プログラムが大きくなればなるほど、待ち時間が長くなってしまう原因です。料理に例えると、カレーにジャガイモを一つ追加しただけなのに、お肉や玉ねぎを炒めるところからやり直しているような状態です。これはとても効率が悪いですよね。
そこで登場するのが、今回の主役であるビルドの高速化です。ビルドとは、コンパイルを含めた「プログラムを動かせる状態にする一連の準備作業」のことを指します。この作業を賢く省略することで、作業効率を大幅にアップさせることができます。
2. 魔法の設定incrementalとは何か?
incremental(インクリメンタル)という言葉は、日本語で「増分の」や「積み重ねの」という意味があります。プログラミングの文脈では「前回の作業から変わった部分だけを処理する」という仕組みのことを指します。パソコンの中に「前回の翻訳結果のメモ」を残しておくことで、次に翻訳するときに「あ、ここは前回と同じだから翻訳しなくていいや」と手抜きをさせてあげるわけです。
この設定を有効にすると、TypeScriptはプロジェクトの情報を専用のファイルに保存します。次にビルドボタンを押したとき、パソコンはそのファイルを見て、修正された場所だけを特定して変換します。これにより、大規模な開発現場では作業時間が半分以下になることも珍しくありません。初心者の方にとっても、待ち時間が減ることで学習のリズムが崩れにくくなるという大きなメリットがあります。
3. 設定ファイルtsconfig.jsonを準備しよう
TypeScriptの設定を変更するには、tsconfig.jsonという名前のファイルを使います。これは、いわば「翻訳者への指示書」です。このファイルの中に、「今回はこういうルールで翻訳してね」という命令を書いておきます。パソコンを触り始めたばかりの方は、ファイル名に「.json」と付いているだけで難しく感じるかもしれませんが、中身はただのテキストデータなので安心してください。
まずは、自分のプロジェクトのフォルダの中にこのファイルがあるか確認しましょう。もしなければ、新しく作成する必要があります。この指示書が正しく配置されていることで、TypeScriptは初めて自分の役割を理解できるようになります。ここではまず、最もシンプルな指示書の書き方を確認してみましょう。
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"strict": true
}
}
上のコードは、基本的な設定が書かれた指示書です。まだ高速化の設定は入っていませんが、これが土台となります。strictというのは「厳しくチェックしてね」という意味で、初心者のうちはこれを入れておくと間違いをすぐに見つけられるようになります。
4. 実際にincrementalを有効にする書き方
では、いよいよ高速化の設定を書き加えていきましょう。やり方はとても簡単です。先ほどの指示書の中に、"incremental": trueという一行を追加するだけです。これにより、TypeScriptは「あ、今回はメモを取りながら翻訳作業をすればいいんだな」と判断します。
具体的には、以下のように記述します。カンマの打ち忘れなどに注意してくださいね。プログラミングでは、カンマ一つ忘れるだけでパソコンが機嫌を損ねて動かなくなってしまうことがあります。しかし、それは間違いを教えてくれているだけなので、ゆっくり確認すれば大丈夫です。
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"incremental": true,
"tsBuildInfoFile": "./.tsbuildinfo"
}
}
ここで新しく出てきたtsBuildInfoFileという項目は、メモをどこに保存するかを決める設定です。これを指定しない場合は、自動的に適切な場所に保存されますが、自分で名前を決めておくと管理がしやすくなります。この設定を行うだけで、次回のビルドから驚くほど動作が軽くなるはずです。
5. コンパイルを実行して効果を確認してみよう
設定が終わったら、実際にコンパイルを実行してみましょう。パソコンの画面にある黒い画面(ターミナルやコマンドプロンプト)に、特定の命令を打ち込みます。最初は緊張するかもしれませんが、決まった言葉を入れるだけなので簡単です。基本的にはtscという命令を使います。
一回目の実行では、パソコンはまだメモを持っていないので、通常通りの時間がかかります。しかし、二回目の実行からは見違えるように早くなります。実行結果を確認して、エラーが出ていなければ成功です。もしエラーが出た場合は、指示書の書き方が間違っていないか、スペルミスがないかを確認してみてください。
$ tsc
# 初回は少し時間がかかります
# 終了後、フォルダ内に .tsbuildinfo というファイルが作成されます
$ tsc
# 二回目はメモを参照するため、一瞬で終わります!
このように、一度目の作業で作成された「知識」を二度目で活用しているのがわかりますね。これで、あなたは無駄な待ち時間から解放され、より創造的なプログラミング作業に集中できるようになります。
6. 保存ファイル.tsbuildinfoの役割を理解する
設定を有効にすると現れる.tsbuildinfoというファイル。これは、TypeScriptが自分のために書いた「学習ノート」のようなものです。中身を人間が読む必要はありませんが、このファイルがあるおかげで、パソコンは「どのファイルをいつ変更したか」を正確に把握できています。
もし、何らかの理由でビルドがうまくいかなくなったり、動作がおかしいと感じたりしたときは、このファイルを一度ゴミ箱に捨ててみてください。そうすると、パソコンはメモを失うので、再び一から丁寧に翻訳をやり直します。これを「クリーンビルド」と呼びます。リフレッシュしたいときに使えるテクニックですので、覚えておいて損はありません。初心者のうちは、何かあったらこのメモを消してやり直す、という解決策を知っているだけでも心強いはずです。
7. 他の高速化設定との組み合わせ
実は、incremental以外にも、ビルドを早くするための設定がいくつかあります。例えば、skipLibCheckという設定があります。これは「外部から借りてきたプログラムの部品(ライブラリ)のチェックを省略する」という命令です。自分で書いた場所以外のチェックを飛ばすことで、さらに時間を短縮できます。
プログラミングは、たくさんの設定を組み合わせて、自分にとって最も快適な環境を作っていく作業でもあります。初心者の方は、まずincrementalを試してみて、慣れてきたら他の設定も調べてみると良いでしょう。自分だけの「最強の指示書」を作るのも、プログラミングの楽しみの一つです。それでは、少し発展的な設定を含めた指示書の例を見てみましょう。
{
"compilerOptions": {
"target": "ES2020",
"module": "NodeNext",
"incremental": true,
"skipLibCheck": true,
"removeComments": true
}
}
ここで追加したremoveCommentsは、翻訳後のファイルから「メモ書き(コメント)」を消して、ファイルのサイズを小さくする設定です。これにより、動かすときのスピードもわずかに向上します。こうした細かな積み重ねが、大きなアプリを作るときの助けになります。
8. 実際にプログラムを動かして変化を感じよう
最後に、簡単なプログラムを書いて、設定の効果を実感できるか試してみましょう。まずは、名前を表示するだけの簡単なコードを用意します。これを保存して、コンパイルし、実行するという一連の流れを繰り返してみてください。設定前と設定後で、手応えが変わっていることに気づくはずです。
const message: string = "TypeScriptの世界へようこそ!";
const userName: string = "初心者さん";
function greet(name: string, text: string): void {
console.log(name + "、" + text);
}
greet(userName, message);
実行結果は以下のようになります。
初心者さん、TypeScriptの世界へようこそ!
この短いコードであれば、もともとの実行速度も早いですが、ファイルが10個、20個と増えていったときに、今回のincremental設定が真価を発揮します。将来、あなたが立派なエンジニアになって、巨大なシステムを作るようになったとき、この設定があなたを支えてくれることでしょう。一歩ずつ、確実に知識を積み上げていけば、パソコン操作が苦手な方でも必ずプログラミングをマスターできますよ。