CLI ツール開発
NagiScript でコマンドラインツールを開発する方法を学びます。
CLI ツール開発は、現行コンパイラー v0.2.0
では標準モジュール(std:args /
std:fs /
std:process
等)が未実装のため、ロードマップ扱いです。下記は将来仕様であり、現行の
nagiscript
コマンドでは動きません。現行で実際に使えるのは組み込み
print / println /
panic と、C 標準関数の
extern "C" fn 呼び出しのみです。
現行で動く最小の CLI 的プログラム
現行の組み込み
println
だけでも、引数なしの出力のみの簡単なプログラムは書けます(引数取得は未実装)。
fn main() {
println("mytool 1.0.0")
println("Usage: mytool <command>")
}
基本的な CLI ツール(ロードマップ)
引数取得は std:args(未実装)、C 標準関数
argc /
argv
の利用も現行では検証できていません。下記は将来仕様です。match
は文字列パターンではなく裸の列挙バリアントに置き換えています。
// ロードマップ: 引数取得には std:args(未実装)が必要
enum Command { Help Version Run Unknown }
fn dispatch(cmd: Command) {
match cmd {
Help => print_help(),
Version => println("1.0.0"),
_ => println("Unknown command"),
}
}
fn print_help() {
println("Usage: mytool <command>")
}
引数パース(ロードマップ)
基本的な引数取得
args.get / args.has は
std:args(未実装)の API です。Option
型も組み込みでは存在しないため、enum
は自前で定義します。下記は将来仕様です。
// ロードマップ: std:args は未実装。下記は将来仕様
enum Opt { SomeName Ok None }
使用例(将来仕様)
$ mytool --name Alice --verbose --output result.txt
Name: Alice
Verbose mode enabled
出力の制御(ロードマップ)
ANSI エスケープによる色付けは想定の将来仕様です。現行の
println は 1 引数のみで、+
による文字列連結は使えません。
// ロードマップ: 色付き出力は想定の将来仕様
// 現行では println(text) をそのまま出力するのみ
fn print_colored(text: string) {
println(text)
}
エラーハンドリング(ロードマップ)
Result 型は組み込みでは存在しないため enum
で自作し、?演算子(エラー伝播)も未実装です。std:fs
も未実装です。下記は将来仕様です。
// ロードマップ: fs モジュールは未実装。Result 形は enum で自作
enum Result { Ok NotFound }
実践的な例: ファイルチェッカー(ロードマップ)
std:fs /
std:args
は未実装です。下記は将来仕様です。現行ではファイルアクセスは
extern "C" fn(例: fopen /
fgets 等)でのみ行えます。
extern "C" fn fopen(path: *u8, mode: *u8) -> *u8
fn check_path(path: string) {
// ロードマップ: 完全なファイルチェック機能は将来仕様
println(path)
}
ビルドと実行
# ビルド
nagiscript build main.ngs -o mytool
# 実行
./mytool --help
