CLI ツールの作成
実践的な例を扱います。
「CLI ツールの作成」はCoddyKit上の無料C Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全4レッスンが含まれています。
全体を組み合わせる
ここでは、引数、オプション、解析を組み合わせて、小さいながらも完全なCLI ツールを作成します。
例として、値といくつかのオプションを読み取り、結果を出力する数値フォーマットユーティリティを作ります。
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <number>\n", argv[0]);
return 1;
}
printf("You passed: %s\n", argv[1]);
return 0;
}インターフェースを設計する
優れた CLI ツールは、最初にインターフェースを定義します。このツールでは次を受け付けます。
-v詳細な出力-r N出力を N 回繰り返す- 1 つの位置引数: 出力するテキスト
#include <stdio.h>
int main(void) {
printf("Interface: prog [-v] [-r N] <text>\n");
return 0;
}設定を宣言する
設定可能な各動作を、適切なデフォルト値を持つ変数で管理します。これにより、解析と実際の処理を分離できます。
#include <stdio.h>
int main(void) {
int verbose = 0;
int repeat = 1;
const char *text = NULL;
printf("defaults: verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}getopt で解析する
getopt を使ってフラグを設定します。-r は値を取るため、optstring の項目は r: です。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
printf("verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}位置引数を読み取る
getopt の処理後、optind は最初のオプションではない引数を指します。そこからテキストを取得します。
存在しない場合は使用方法を出力し、エラーコードで終了します。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
while (getopt(argc, argv, "vr:") != -1) { }
if (optind >= argc) {
printf("Error: missing text argument\n");
return 1;
}
printf("text = %s\n", argv[optind]);
return 0;
}数値入力を検証する
堅牢なツールでは、-r に適切な数値が渡されたことを確認します。0 以下の繰り返し回数は拒否してください。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int repeat = 1, opt;
while ((opt = getopt(argc, argv, "r:")) != -1) {
if (opt == 'r') repeat = atoi(optarg);
}
if (repeat < 1) {
printf("Error: repeat must be >= 1\n");
return 1;
}
printf("repeat = %d\n", repeat);
return 0;
}処理を実行する
設定の解析と検証が完了したら、実際の処理を行います。ここでは、テキストを repeat 回出力します。
#include <stdio.h>
int main(void) {
const char *text = "hello";
int repeat = 3;
for (int i = 0; i < repeat; i++) {
printf("%s\n", text);
}
return 0;
}詳細な出力
詳細フラグを使うと、診断情報を追加できます。通常の出力をすっきり保つため、そのような出力はフラグが設定されている場合だけ行います。
#include <stdio.h>
int main(void) {
int verbose = 1;
const char *text = "hi";
if (verbose) printf("[debug] about to print text\n");
printf("%s\n", text);
return 0;
}完全なツール
ここでは、すべての要素をまとめた完全なプログラムを示します。解析、検証、そして実行という流れです。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
if (optind >= argc) { printf("Usage: prog [-v] [-r N] <text>\n"); return 1; }
const char *text = argv[optind];
if (verbose) printf("[debug] repeat=%d\n", repeat);
for (int i = 0; i < repeat; i++) printf("%s\n", text);
return 0;
}終了コードは重要
CLI ツールは終了コードによって成功を伝えます。成功時には 0、エラー時にはゼロ以外を返します。
スクリプトやほかのプログラムは、この値に基づいて次の処理を決定します。
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("failure\n");
return 2;
}
printf("success\n");
return 0;
}エラーを stderr に出力する
慣例では、通常の出力は stdout に、エラーは fprintf(stderr, ...) を使って stderr に出力します。
これにより、出力をリダイレクトしたときに結果と診断情報を分離できます。
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Error: need an argument\n");
return 1;
}
printf("%s\n", argv[1]);
return 0;
}理解度チェック
CLI ツールの慣例についての理解度を確認しましょう。
まとめ
完全な CLI ツールを作成しました。
- インターフェースを定義し、デフォルト値付きで設定を宣言します。
getoptでフラグを解析し、optindから位置引数を読み取ります。- 処理を行う前に入力を検証します。
- 意味のある終了コードを返し、エラーを
stderrに送ります。
AI チューターと学ぶ C — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 39
- レッスン
- 144
よくある質問
「CLI ツールの作成」レッスンは無料ですか?
はい。「CLI ツールの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全4レッスンが含まれています。
「CLI ツールの作成」で何を学びますか?
実践的な例を扱います。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「CLI ツールの作成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC Academyレッスンでコードを書いて実行できますか?
はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- argc と argv
- オプションの解析
- getopt
- CLI ツールの作成