TypeScript CLIツール開発入門:ASTと環境構築から始める
TypeScript CLIツール開発入門:ASTと環境構築から始める
Table of Contents
1. TypeScript開発環境の構築とASTの概要
まず、TypeScriptの開発環境を構築します。Node.jsとnpm(またはyarn)がインストールされていることを確認してください。 その後、以下のコマンドでプロジェクトを作成します。
npm init -y
npm install typescript @types/node commander --save-dev
commander
はコマンドライン引数を扱うための便利なライブラリです。@types/node
はNode.jsの型定義ファイルです。 2025年4月時点での最新バージョンがインストールされるように、npm install
を使用しています。
次に、tsconfig.json
を作成し、コンパイラの設定を行います。
{
"compilerOptions": {
"target": "es2020",
"module": "commonjs",
"esModuleInterop": true,
"outDir": "./dist",
"strict": true,
"skipLibCheck": true
}
}
ASTとは、ソースコードを木構造で表現したものです。コンパイラやリンター、コード解析ツールは、このASTを解析することで、コードの構造を理解し、様々な処理を行います。TypeScriptでは、typescript
パッケージの ts.createSourceFile
関数などを利用してASTを作成・操作できます。
2. 簡単なCLIツールの作成
今回は、コマンドライン引数を受け取り、その内容を出力するシンプルなCLIツールを作成します。
// src/index.ts
import { Command } from 'commander';
import * as ts from 'typescript';
const program = new Command();
program
.command('hello <name>')
.description('Greet a person')
.action((name) => {
console.log(`Hello, ${name}!`);
});
program.parse(process.argv);
// サンプルのAST操作 (ここでは簡略化)
const sourceFile = ts.createSourceFile('test.ts', 'console.log("Hello, world!");', ts.ScriptTarget.ES2020, true);
const firstStatement = sourceFile.statements[0];
console.log(firstStatement.kind); // Nodeの種類を出力
このコードでは、commander
を使用してコマンドライン引数を解析し、hello
コマンドに名前を渡すと、挨拶メッセージを出力します。 また、コメントアウトされた部分では、typescript
パッケージを使って簡単なAST操作の例を示しています。 実際のAST操作は、コードの解析、変換、生成など、より複雑な処理を行うために必要となります。
3. ASTを用いた高度なCLIツールの開発
より高度なCLIツールを作成するには、ASTを積極的に活用する必要があります。例えば、特定のコードパターンを検出したり、コードを自動的に修正したり、コードの複雑さを分析したりといったことが可能です。
例えば、特定の関数呼び出しを検出するツールを開発する場合、ASTを巡回して、該当するノードを探し出す必要があります。 これは、TypeScriptのASTノードの種類とプロパティを理解することで実現できます。
// src/analyzer.ts
import * as ts from 'typescript';
function findFunctionCalls(sourceFile: ts.SourceFile, functionName: string): ts.Node[] {
const calls: ts.Node[] = [];
function visit(node: ts.Node) {
if (ts.isCallExpression(node) && (node.expression as ts.Identifier).text === functionName) {
calls.push(node);
}
ts.forEachChild(node, visit);
}
visit(sourceFile);
return calls;
}
// 使用例
const sourceFile = ts.createSourceFile('test.ts', 'console.log("Hello"); myFunction();', ts.ScriptTarget.ES2020, true);
const calls = findFunctionCalls(sourceFile, 'console.log');
console.log(calls);
この例では、console.log
関数の呼び出しを検出する関数 findFunctionCalls
を実装しています。 より複雑なコード解析を行うには、ASTの構造を深く理解し、再帰的な処理などを駆使する必要があります。 さらに、ASTを操作してコードを生成・変換するライブラリを使うことで、リファクタリングツールやコードジェネレーターなどの高度なCLIツールを開発することも可能です。
まとめ
本記事では、TypeScriptを用いたCLIツールの開発において、ASTの基礎知識と環境構築、そして簡単なツールの作成方法を紹介しました。 ASTの活用は、高度なコード解析や変換を可能にし、強力なCLIツールの開発に繋がります。 typescript
パッケージや commander
などのライブラリを効果的に活用することで、効率的で安全なCLIツールを構築できることを理解していただけたと思います。 さらに高度な機能を実装するには、ASTの深い理解と、TypeScriptの豊富な機能を習得することが重要となります。 Think ITの記事にあるような開発効率向上ツールを自作することで、自身の開発スキルを向上させることができるでしょう。