TypeScriptでライブラリ配布向けのtsconfig設計を完全解説!初心者でも公開できる設定術
生徒
「TypeScriptで自分で作った便利なプログラムを、他の人にも使ってもらえるライブラリとして配ってみたいです!」
先生
「それは素晴らしい目標ですね。ライブラリとして配布するためには、自分だけで使うときとは少し違う、特別な設定ファイルが必要です。」
生徒
「設定ファイルって、あのtsconfig.jsonのことですよね?具体的にどう書けばいいんですか?」
先生
「配布先の相手が困らないようにするための、思いやりのある設定方法を順番に学んでいきましょう!」
1. ライブラリ配布とtsconfigの役割
プログラミングの世界では、自分が作った便利な機能を「ライブラリ」という形で公開し、世界中の人が再利用できるようにする仕組みがあります。TypeScriptでこのライブラリを作るとき、最も重要になるのがtsconfig.jsonという設定ファイルです。
通常、自分一人の練習用プロジェクトであれば、自分が動けばそれで問題ありません。しかし、ライブラリとして配布する場合は、「使う人がどんな環境で動かすか」を想像する必要があります。例えば、最新のJavaScriptを使っている人もいれば、少し古い環境で動かしている人もいます。また、TypeScriptを使っている人には、コードのヒントとなる「型定義ファイル」を一緒に届けてあげる必要があります。
tsconfig.jsonは、いわば「料理のレシピ」のようなものです。どのような材料を使い、どのような手順で、最終的にどんな料理(プログラム)を完成させるかを細かく指定します。この設定が正しくできていないと、せっかく作ったライブラリが他の人の環境で動かなかったり、使いにくいものになってしまったりします。まずは、配布用としての土台をしっかり固めることが大切です。
2. コンパイルの仕組みを理解しよう
ここで一度、基本的な用語を整理しておきましょう。TypeScriptはそのままではブラウザやサーバーで動かすことができません。一度、人間にとって読みやすく、コンピューターが理解しやすい「JavaScript」という言語に変換する必要があります。この変換作業のことをコンパイルと呼びます。
コンパイルを行う際、tsconfig.jsonに書かれた命令に従って変換が行われます。ライブラリ配布において特に意識すべき点は、「成果物」の場所です。元のTypeScriptファイルと、変換後のJavaScriptファイルが混ざってしまうと管理が大変になります。そのため、変換後のファイルを入れる専用の箱(フォルダ)を用意するのが一般的です。
また、ライブラリを使う側の人たちが、あなたの書いたコードの中身を正しく理解できるように、型情報を抽出した特別なファイルも生成します。これを「宣言ファイル」と呼び、拡張子は.d.tsとなります。これもコンパイル時に自動で作るように設定できます。
3. 必須となる基本設定項目の解説
それでは、具体的な設定項目を見ていきましょう。ライブラリを作る際に必ず入れておきたい項目がいくつかあります。まず一つ目は、出力先を指定する設定です。これは変換されたファイルがどこに保存されるかを決めます。二つ目は、どのバージョンのJavaScriptに変換するかという指定です。これにより、古いブラウザまでサポートするか、最新の機能だけを使うかを選べます。
三つ目は、モジュールの仕組みです。JavaScriptにはプログラムを分割して読み込む方法がいくつかあり、配布用としては「CommonJS」や「ESNext」といった形式が選ばれます。最近では、多くの環境で動作するように複数の形式で書き出す工夫もされています。初心者のうちは、まずは標準的な設定から始めるのが良いでしょう。
以下のコードは、最もシンプルで基本的な設定の例です。まずはこの形を目指してみましょう。
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"outDir": "./dist",
"strict": true,
"declaration": true
},
"include": ["src/**/*"]
}
この設定の意味を簡単に説明すると、「srcフォルダにあるファイルを、最新のJavaScriptとしてコンパイルし、distフォルダに出力して、型定義ファイルも一緒に作ってね」というお願いをしていることになります。
4. 厳格モード(strict)で品質を高める
ライブラリを公開するということは、自分以外の誰かがあなたのコードを信頼して使うということです。そのため、バグが入り込みにくい「堅牢なコード」を書くことが求められます。そこで役立つのが、tsconfig.jsonのstrictという項目です。
これをtrueに設定すると、TypeScriptのチェック機能が非常に厳しくなります。例えば、「この変数は空っぽ(null)になる可能性があるけれど大丈夫?」といった細かい指摘をプログラムがしてくれるようになります。パソコンを触り始めたばかりの方には少し口うるさく感じるかもしれませんが、この指摘を一つずつ直していくことで、途中で止まってしまうようなエラーを未然に防ぐことができるのです。
初心者のうちは、エラーが出ると不安になるかもしれませんが、それはTypeScriptがあなたの味方をしてくれている証拠です。厳しい先生に添削してもらっているような感覚で、一つ一つの警告に向き合ってみましょう。結果として、誰にとっても使いやすい高品質なライブラリが完成します。
5. 型定義ファイルの生成と配布のコツ
TypeScriptの最大の特徴は「型」があることです。型とは、そのデータが数値なのか、文字なのかをはっきりさせるラベルのようなものです。ライブラリを配布する場合、この型情報を一緒に提供しないと、使う側の人は「この関数には何を入れればいいんだろう?」と迷ってしまいます。
そこで、declarationという設定をtrueにします。これにより、JavaScriptファイルと一緒に、型の説明書である.d.tsファイルが自動で作られます。これがあるおかげで、他の人があなたのライブラリを自分のプロジェクトで読み込んだときに、入力候補が自動で表示されたり、間違いを指摘してくれたりするようになります。
実際にライブラリを使う側の視点に立った、簡単な関数の例を見てみましょう。このように型を意識して書くことが、良いライブラリへの第一歩です。
export function sayHello(name: string): string {
return "こんにちは、" + name + "さん!";
}
const message = sayHello("田中");
console.log(message);
このコードをコンパイルすると、名前を受け取って挨拶を返すという機能が、誰でも使いやすい形でパッケージ化されます。
6. ファイルの除外設定で不要なものを省く
プロジェクトの中には、実際に配布するプログラム本体以外にも、テスト用のコードやメモ書きなどのファイルが含まれていることがあります。これらがそのままライブラリとして配布されてしまうと、ファイルサイズが大きくなり、使う人にとっても邪魔になってしまいます。
そこで使うのが、excludeという設定です。これは「コンパイルの対象から外すもの」を指定する場所です。例えば、テストコードが入っているフォルダや、既にコンパイルが終わった後のフォルダ、そして外部から取り込んだ部品が入っているnode_modulesというフォルダなどは、除外設定に入れておくのが一般的です。
設定を整理することで、配布される中身は常に「動くために必要な最小限のセット」に保たれます。これは、インターネットを通じてプログラムを届ける際の重要なマナーでもあります。スッキリとした中身のライブラリは、プロっぽさを感じさせてくれます。
{
"compilerOptions": {
"outDir": "lib"
},
"exclude": [
"node_modules",
"**/*.test.ts",
"src/temp"
]
}
このように設定することで、テストファイルや一時的なメモが誤って混入することを防げます。
7. パス指定の活用と注意点
プログラムが大きくなってくると、フォルダの階層が深くなり、ファイルを読み込むときの指定が複雑になることがあります。例えば、「三つ上のフォルダの、さらにその下のフォルダにあるファイル」を呼び出すとき、記号が並んで読みづらくなります。これを解決するのがパスのエイリアス(別名)設定です。
しかし、ライブラリ配布においては、この設定には少し注意が必要です。自分が開発しているときは便利なエイリアスも、そのままJavaScriptに変換されると、使う側の環境ではそのパスが理解できない場合があるからです。初心者のうちは、まずは相対パス(今いる場所からの位置関係)でシンプルに書く練習をすることをおすすめします。
どうしてもエイリアスを使いたい場合は、変換時にそのパスを正しく書き直してくれる特別な道具を使う必要があります。まずは基本に忠実に、誰もが理解できる構造でコードを書くことを心がけましょう。シンプルイズベストこそ、長続きする開発のコツです。
8. 実際にコンパイルして結果を確認しよう
設定ができたら、いよいよコンパイルの実行です。パソコンの黒い画面(ターミナルやコマンドプロンプト)で命令を打ち込むと、一瞬にしてTypeScriptがJavaScriptに姿を変えます。この瞬間は、何度経験してもワクワクするものです。
出力されたフォルダ(例:distフォルダ)を覗いてみましょう。自分が書いたTypeScriptファイルが、少し姿を変えたJavaScriptファイルになり、さらに型の説明書(d.tsファイル)が隣に並んでいれば大成功です。このセットが、あなたのライブラリの正体です。
以下のコードは、計算機能を持つクラスをライブラリとして提供する場合のイメージです。これがどのように出力されるかを想像しながら書いてみてください。
export class Calculator {
add(a: number, b: number): number {
return a + b;
}
multiply(a: number, b: number): number {
return a * b;
}
}
コンパイルを実行すると、以下のような結果が期待されます(ターミナルの表示例)。
$ npx tsc
$ ls dist
index.js index.d.ts
無事にファイルが生成されていることが確認できたら、あとは世界中に届ける準備をするだけです。
9. 公開に向けた最終チェック
tsconfigの設定が完了し、ファイルが正しく出力されるようになったら、最後に「package.json」との連携を確認します。これはライブラリの看板のようなもので、どのファイルがメインのプログラムで、どこに型の説明書があるかを記します。tsconfigで設定した出力先と、この看板の内容が一致している必要があります。
具体的には、mainという項目にJavaScriptファイルの場所を、typesという項目に型定義ファイルの場所を書き込みます。これが揃って初めて、他の人があなたのライブラリをインストールしたときに、すぐに使い始めることができるようになります。
一つ一つの設定は小さく見えますが、それらが組み合わさることで、世界中のプログラマが使うライブラリが出来上がります。最初は難しく感じるかもしれませんが、一度覚えてしまえば、どんな便利な機能も自由に配布できるようになります。一歩ずつ、楽しみながら進めていきましょう。あなたの作ったプログラムが、誰かの役に立つ日はもうすぐそこです。