• en
  • Échafaudez un module PowerShell automagiquement

    Être paresseux

    Récemment, j’ai parlé de mes découvertes en termes de fabrication d’outils PowerShell et j’ai réalisé que la plupart du temps, je réécris toujours et encore le même code. Je ne sais pas pour vous mais pour ma part, il est fastidieux d’écrire ou de copier-coller les mêmes instructions. C’est une source d’erreur et je me sens quasiment en retenue à écrire la même phrase au tableau.

    Pendant mon premier cours de programmation au Collège Lionel-Groulx, Sainte-Thérèse, Canada (circa 2001), mon professeur de C++, Vincent Échelard, a prononcé ces mots qui résonnent dans mon esprit à ce jour : « Messieurs, un bon programmeur est un programmeur paresseux ». La signification derrière cet adage est de ne pas reprogrammer ce qui a déjà été écrit. Réutiliser vos choses, vous sauverez du temps et éviterez des erreurs en cours de route.

    Parlons de générateur de code

    Étant un programmeur paresseux, j’adore les possibilités offertes par un outil puissant comme Yeoman. Il permet d’interagir avec l’utilisateur pour générer un projet adapté aux besoins du programmeur. Avec ceci en tête, j’ai décidé de construire mon propre générateur encapsulant les philosophies de tests unitaires et d’analyseur de code pour bâtir mes propres outils PowerShell.

    Parce que partager c’est aimer, j’ai aussi décider de publier le générateur sur npm.

    Installer le générateur

    Un générateur Yeoman est essentiellement un package npm. L’installation suit la même logique. Afin d’installer Yeoman ainsi que le générateur, exécuter les commandes suivantes d’une console.

    npm install -g yo
    npm install -g generator-psmodule

    Utiliser le générateur

    Premièrement, créez un répertoire vide qui servira à générer le module. De ce répertoire, l’invocation du générateur se fait en exécutant la commande suivante :

    yo psmodule

    Si Yeoman et le générateur sont installés convenablement, vous obtiendrez les résultats suivants :

    Merveilleux! Maintenant le générateur posera 3 questions avant d’échafauder le squelette du module.

    1. Le nom du module (prendra le nom du répertoire de travail par défaut)
    2. L’auteur du module
    3. La description du module

    Et voilà! Un module PowerShell de base, configuré et prêt à être raffiné en plusieurs unités logiques. À partir de la capture d’écran ci-dessous nous pouvons, au premier coup d’œil, voir que la première réponse fournie est utilisée pour nommer et modéliser certains des fichiers.

    Plongeons dans le module généré

    La première chose à regarder est le manifeste du module. À l’intérieur, nous pouvons voir que les réponses fournies au générateur ont aidé à modéliser le fichier.

    Philosophie d’organisation des sources

    Possédant un fort passé de programmeur C#, j’aime vraiment l’approche architecturale « basée sur des classes logicielles ». Un fichier source, que j’aime bien les appeler unité logique, est une entité en soi sans la syntaxe Verbe-Nom préconisée par le langage. Toutefois, à l’intérieur de l’unité, il s’agit d’une toute autre histoire. L’idée est d’utiliser les bonnes portées de fonctions pour l’encapsulation et utiliser la syntaxe Verbe-Nom. Pour une liste des verbes supportés référez-vous à la cmdlet Get-Verb. Vous pouvez utiliser vos propres verbes mais par mesure de cohérence, je préfère utiliser les verbes standards.

    Voici un exemple fourni par le module généré.

    Philosophie de test

    Je mets à profit les fonctionnalités de Setup de tests fournis par Pester afin de bien configurer l’environnement pour l’unité logique sous test.

    1. Je pousse l’emplacement courante relative à l’exécution du script. Mon expérience m’a prouvé qu’il est plus aisé de référer aux fichiers sur le disque de manière relative au contexte d’exécution.
    2. Mise en mémoire de l’unité logique sous test.
    3. Utilisation du TestDrive de Pester permettant la configuration de données de tests qui seront utilisée par les cas de tests.

    Pour chacun des blocs Context, le contexte des tests spécifiques peut être appliqué.

    Publier votre module

    Le générateur fournit également un mécanisme pour publier le module dans la galerie PowerShell. J’ai déjà couvert comment y parvenir ici. Jetez un coup d’œil au script Publish-psdawg.ps1.

    Conclusion

    Les générateurs peuvent sauver beaucoup de temps mais je recommande fortement de garder en tête le principe que la simplicité c’est beau. Un générateur stupide ne demande pas beaucoup de maintenance de la part de votre équipe de développement et est facile à comprendre lorsque vient le temps d’ajouter des fonctionnalités supplémentaires.

    Le projet est disponible publiquement sur github et vous êtes plus que bienvenus à soumettre vos idées où à participer à son développement.

    Faisons connaissance
    Vous désirez en savoir plus et/ou collaborer avec nous?

    Nous avons hâte de vous lire.