Utilitaires CLI en Swift : créer des outils en ligne de commande à partir de zéro

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Votre premier CLI en Swift : de l'idée à l'outil prêt à l'emploi

\n\n

Avez-vous déjà réfléchi à la façon dont sont créés ces utilitaires pratiques dans le terminal — curl, git, brew ? Il s'avère qu'écrire votre propre utilitaire CLI en Swift n'est pas plus difficile que de créer une simple application iOS. De plus, Swift est parfaitement adapté à cela : il est rapide, sécurisé pour la mémoire et fonctionne aussi bien sur macOS que sur Linux.

\n\n

Dans cet article, nous allons créer à partir de zéro un outil console complet qui analysera les arguments, affichera du texte en couleur et même gérera les erreurs. Vous apprendrez à configurer le projet via Swift Package Manager, à connecter la puissante bibliothèque ArgumentParser et à préparer l'utilitaire pour la publication dans Homebrew. Prêt ? C'est parti !

\n\n

Pourquoi Swift pour CLI est génial ?

\n\n

Quand il s'agit de créer des outils en ligne de commande, beaucoup pensent immédiatement à Python, Bash ou Go. Mais Swift est un cheval sombre qui surprend :

\n\n
    \n
  • Vitesse au niveau du C — votre utilitaire volera.
  • \n
  • Gestion sécurisée de la mémoire — pas de segfault ni de fuites.
  • \n
  • Multiplateforme — Swift fonctionne parfaitement sur Linux, donc votre CLI peut même être exécuté sur des serveurs.
  • \n
  • Syntaxe moderne — le code se lit comme une bonne prose.
  • \n
  • Écosystème immense — Swift Package Manager (SPM) donne accès à des milliers de bibliothèques.
  • \n
\n\n

D'ailleurs, si vous écrivez déjà en Python et voulez essayer quelque chose de nouveau pour CLI, Swift sera un excellent choix : vous obtiendrez un binaire natif sans dépendances et avec une consommation mémoire minimale.

\n\n

Configuration du projet : Swift Package Manager

\n\n

La première étape consiste à créer un nouveau projet. Ouvrez le terminal et exécutez :

\n\n
mkdir MyCLI\ncd MyCLI\nswift package init --type executable
\n\n

La commande crée une structure SPM standard. Faites attention au fichier Package.swift — c'est le cœur de votre projet. Modifions-le pour ajouter une dépendance à Apple/Swift ArgumentParser :

\n\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MyCLI",\n    dependencies: [\n        .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.2.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "MyCLI",\n            dependencies: [\n                .product(name: "ArgumentParser", package: "swift-argument-parser")\n            ]\n        )\n    ]\n)
\n\n

Exécutez maintenant swift build. SPM téléchargera lui-même la bibliothèque et construira le projet. Si tout s'est bien passé — vous êtes prêt à écrire du code !

\n\n

Écrivons la première commande : Hello World amélioré

\n\n

Ouvrons Sources/MyCLI/main.swift et écrivons une commande très simple qui affiche un message de bienvenue. Mais pas simplement "Hello, World!", en utilisant des arguments :

\n\n
import ArgumentParser\n\nstruct HelloCommand: ParsableCommand {\n    static let configuration = CommandConfiguration(\n        commandName: "hello",\n        abstract: "Affiche un message de bienvenue",\n        discussion: "Utilisez cette commande pour saluer le monde ou une personne spécifique."\n    )\n\n    @Argument(help: "Le nom de la personne à saluer")\n    var name: String = "World"\n\n    @Option(name: .shortAndLong, help: "Nombre de répétitions")\n    var count: Int = 1\n\n    func run() throws {\n        for _ in 0..<count {\n            print("Bonjour, \\(name)! 👋")\n        }\n    }\n}\n\nHelloCommand.main()
\n\n

Lancez : swift run MyCLI hello --count 3 "iOS Developer". Vous verrez :

\n\n
Bonjour, iOS Developer! 👋\nBonjour, iOS Developer! 👋\nBonjour, iOS Developer! 👋
\n\n

Remarquez : Argumen

Blogs

Book Recommendations