Votre premier CLI en Swift : de l'idée à l'outil prêt à l'emploi
\n\nAvez-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.
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\nPourquoi Swift pour CLI est génial ?
\n\nQuand 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
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\nConfiguration du projet : Swift Package Manager
\n\nLa première étape consiste à créer un nouveau projet. Ouvrez le terminal et exécutez :
\n\nmkdir MyCLI\ncd MyCLI\nswift package init --type executable\n\nLa 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 :
// 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\nExé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 !
Écrivons la première commande : Hello World amélioré
\n\nOuvrons 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 :
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\nLancez : swift run MyCLI hello --count 3 "iOS Developer". Vous verrez :
Bonjour, iOS Developer! 👋\nBonjour, iOS Developer! 👋\nBonjour, iOS Developer! 👋\n\nRemarquez : Argumen