テンプレートから効率的にFlutterファイルを生成する方法:Dart CLI活用
コマンドラインは、タスクの自動化と生産性の向上に効果的です。このガイドでは、テンプレートから Flutter ファイルを生成するための、シンプルなコマンドラインを Dart で作成する方法を紹介します。
はじめに
コマンド「flutter_generator_cli」は、単一のコマンドでテンプレートから Flutter ファイルを生成することができます。このコマンドは、引数の解析と実行に「args」パッケージを使用しています。
1. Dartプロジェクトのセットアップ
新しいDartプロジェクトを作成します
dart create -t console-simple flutter_generator_cli
cd flutter_generator_cli
2. 依存関係の追加
必要な依存関係を含めるために「pubspec.yaml」を更新します
dependencies:
args: ^2.0.0
「dart pub get」を実行して依存関係をインストールします。
3. コマンドランナーの定義
次に、「CommandRunner」を拡張したコマンドランナークラス「FlutterGeneratorCli」を定義します
class FlutterGeneratorCli extends CommandRunner<int> {
FlutterGeneratorCli()
: super(
'flutter_generator_cli',
'A command-line tool to generate template files.',
) {
addCommand(CreateCommand());
}
@override
Future<int> run(Iterable<String> args) async {
try {
final args0 = parse(args);
return await runCommand(args0) ?? 0;
} catch (e) {
print(e);
}
exit(0);
}
}
「FlutterGeneratorCli」:コマンドを実行するために設計された「args」パッケージのクラス「CommandRunner」を拡張しています。
「addCommand(CreateCommand())」:CLIツールに「CreateCommand」を追加します。
「run」:引数を解析し、適切なコマンドを実行するために「run」メソッドをオーバーライドします。例外を処理し、エラーが発生した場合にはそれを出力します。
ファイルのコマンドオプションを持つGenerateCommandクラスを定義します
class CreateCommand extends Command<int> {
@override
final name = 'create';
@override
final description = 'Creates a file from a template with the given name.';
CreateCommand() {
argParser.addOption('file', abbr: 'f', help: 'Create a file with the given name.');
}
@override
Future<int> run() async {
if (argResults == null) {
print('Command not provided. Use --help for usage information.');
return 0;
}
final filename = argResults!['file'] as String?;
if (filename != null && filename.isNotEmpty) {
createTemplateFile(filename);
} else {
print('Please provide a valid filename using --file or -f option.');
}
return 0;
}
void createTemplateFile(String filename) {
final file = File(filename);
const templateContent = '''
// Sample Template
void main() {
print('Hello, World!');
}
''';
file.writeAsStringSync(templateContent);
print('File "$filename" created successfully with a sample template.');
}
}
「CreateCommand」:「CommandRunner」によって実行できるコマンドを表す「Command」を拡張しています。
「name」:コマンドの名前(「create」)。
「description」:コマンドの機能説明。
「CreateCommand()」:引数パーサーに略称「f」を持つオプション「file」を追加するコンストラクタ。
「run」:コマンドを実行するために「run」メソッドをオーバーライドします。「file」オプションが提供されているかどうかをチェックし、指定された名前でサンプルテンプレートを含むファイルを作成します。
「createTemplateFile」:提供されたファイル名でファイルを作成し、サンプルのDartプログラムを書き込むヘルパーメソッド。
4. メインエントリーポイントの作成
「bin」ディレクトリ内の「flutter_generator_cli.dart」を開き、メインエントリーポイントをセットアップします:
import 'dart:io';
import 'package:flutter_generator_cli/flutter_generator_cli.dart';
Future<void> main(List<String> args) async {
try {
exit(await FlutterGeneratorCli().run(args));
} catch (e) {
rethrow;
}
}
5. 実行可能ファイルの定義
「pubspec.yaml」ファイル内の「executables」は、Dartパッケージのコマンドライン実行可能ファイルを定義するために使用されます。これにより、「dart pub global activate」でパッケージをグローバルにインストールした後、CLIツールを簡単に実行できるようになります。
executables:
flutter_generator_cli:
6. パッケージのアクティベーション
変更のたびに非アクティベートと再アクティベートを行う必要なく、CLIツールを使用するために、ローカルでアクティベートすることができます:
dart pub global activate --source path .
7. パッケージの実行
パッケージを実行するには、定義されたオプションを使用して以下のようにコマンドを実行します:
flutter_generator_cli create --name=test.dart
結論
これらのステップに従うことで、テンプレートからFlutterファイルを生成するための基本的ながら強力なコマンドラインツールをDartで構築しました。このツールは、カスタムBLOc(bloc、event、stateクラス)の作成など、追加のコマンドやオプションを追加して拡張することができ、開発プロセスをより効率的にすることができます。
この記事は、2024年8月に弊社のモバイルエンジニアである Suman Raj Pathak が執筆した内容を日本語に翻訳したものです。
英語版は、こちらからご覧いただけます。
https://articles.wesionary.team/creating-a-command-line-tool-in-dart-a-step-by-step-guide-fff33c3eda25
採用情報
私たちはプロダクト共創の仕組み化に取り組んでいます。プロダクト共創をリードするプロダクト・マネージャー、そして、私たちのビジョンを市場に届ける営業メンバーを募集しています!
開発パートナーをお探しの企業様へ
弊社は、グローバル開発のメリットを活かし、高い費用対効果と品質を両立しています。経験豊富で多様性のあるチームが、課題を正しく理解し、最適なシステムと優れた体験を実現します。業務システムの開発、新規事業の開発、業務効率化やDX化に関するお困りごと、ぜひ弊社にご相談ください。