J'utilise GitHub Copilot depuis plusieurs mois. Comment ça marche ? Pour quoi l'utiliser ? Est-ce sécurisé ? Voici mon retour d'expérience à travers quelques cas d'usages réels.
GitHub Copilot est une IA générative spécialisée dans le code. Elle permet d'assister les développeurs dans leurs tâches. Autrement dit, au lieu de générer du texte comme ChatGPT ou des images comme Midjourney, Copilot génère principalement du code.
Concrètement, Copilot s'appuie sur le LLM Codex d'Open AI. Il a été entraîné sur des grandes quantités de code public - GitHub étant par ailleurs la plateforme de référence sur l'Open Source. Il s'intègre dans votre environnement de développement - par exemple Visual Studio Code - ce qui permet de l'utiliser en s'appuyant sur votre contexte actuel : votre projet, votre langage de programmation, votre style.
L'avantage de son intégration dans l'environnement de développement est qu'on l'utilise sans avoir besoin de le solliciter (en mode "Intellisense"). Au fur et à mesure que l'on tape du code il fait des suggestions dynamiques que l'on accepte simplement en appuyant sur TAB ou qu'on peut ignorer complétement en continuant à taper.
Les cas d'usages sont très divers car il essaye en permanence de "deviner" ce que vous voulez faire. Voici quelques exemples de mon utilisation.
Générer du code répétitif
En développement on a souvent tendance à répéter des traitements ou des bouts de code. GitHub Copilot est d'une grande aide lorsqu'on veut refaire plusieurs fois la même chose. Dans l'exemple suivant, il s'agit de rajouter un paramètre à un script Shell existant.
Juste en se positionnant sur le ligne à ajouter et en tapant le premier caractère, il suggère - en se basant sur d'autres fichiers du projet et sur son entraînement - un argument à ajouter ("-f") et le code pour le faire. En se positionnant sur les lignes suivantes il comprend que vous voulez rajouter le test pour s'assurer que le nouvel argument est présent et génère de lui-même le code nécessaire en s'inspirant de ce qui existe déjà.
Compléter votre code
Les suggestions de GitHub Copilot sont aussi intéressantes dans l'écriture de nouveau code. Il parait comprendre ce que vous faites et propose au fur et à mesure la suite. Dans l'exemple suivant, il s'agit de construire une variable "query" contenant une requête SQL dynamique. Il comprend que pour cette requête il y a un filtre (FILTER) à utiliser et un identifiant (id) à tester.
Il génère de lui-même le texte à rajouter à la requête et s'assure que si les 2 tests sont présents il faut ajouter un "AND" entre les deux. Il est bluffant de constater que pour écrire ces 10 lignes de code j'ai juste à appuyer plusieurs fois sur TAB !
Générer du code à partir d'un commentaire
GitHub Copilot s'appuie aussi sur vos commentaires pour générer du code correspondant. Ainsi si vous avez l'habitude de commenter votre code, il suffit parfois d'écrire le commentaire pour que Copilot vous suggère le code à écrire. Dans l'exemple suivant, j'ai besoin de filtrer puis de trier un tableau. J'ai juste à écrire le commentaire et me laisser guider.
Il comprend quelles variables et propriétés je veux utiliser en s'appuyant sur le code précédent et suggère les méthodes adaptées à mon langage de programmation actuel (JavaScript ici). Il respecte également mes règles de nommage.
Générer de la documentation à partir du code
Inversement, GitHub Copilot peut générer de la documentation à partir du code. Dans l'exemple ci-dessous, je veux résumer en une ligne l'objectif du code contenu dans le fichier courant. Je me place au début du fichier et je laisse faire Copilot. Il comprend quelles méthodes contient le fichier et génère une description pertinente.
Générer du code de debug
Anecdotique mais pratique, GitHub Copilot vous aide à rajouter du code de debug. Dans l'exemple suivant, je me place à l'endroit où je veux ajouter mon code de debug, je commence à taper "console" (la fonction d'affichage en JavaScript) et il comprend que je veux afficher l'objet courant et génère le code associé.
Trouver l'inspiration
Dans les exemples précédents, je sais ce que je recherche, GitHub Copilot me sert à générer plus rapidement du code que je pourrais écrire. Il est aussi possible de lui demander des choses que vous ne savez pas faire. Dans l'exemple ci-dessous, je veux générer un fichier Excel en node.js et je ne sais pas le faire. J'écris ma demande dans un commentaire et je me laisse guider TAB après TAB.
Il suggère une librairie JavaScript (xlsx) et génère un exemple d'utilisation qu'il est facile d'adapter.
Pour fonctionner et vous faire des suggestions pertinentes, GitHub Copilot utilise votre code. Est-il raisonnable d'exposer son code source, qui est peut-être sensible, de cette manière ?
Oui, car les clauses de confidentialité de GitHub Copilot (voir ici) sont précises là-dessus: votre code n'est pas partagé avec d'autres.
Et pour plus de sécurité, vous pouvez également décocher la case dans les options pour indiquer que votre code ne doit pas être utilisé non plus pour améliorer l'outil.
Autre question: GitHub Copilot peut-il produire du code non sécurisé ?
Oui bien sûr ! Il peut même produire du code faux ! GitHub Copilot n'est qu'une aide à la saisie, c'est à vous de vous assurer du fonctionnement de ce qui est généré.
J'étais sceptique au démarrage mais à l'usage GitHub Copilot est très utile. Il fait incontestablement gagner du temps et augmente la productivité: au moins de 10 à 20% selon moi.
Il n'est pas intrusif, son utilisation est donc très fluide. Au même titre qu'un IDE remplace avantageusement une ligne de commande, GitHub Copilot me parait donc un élément indispensable de la boite à outils du développeur. A 20€ par mois, il ne faut pas s'en passer !
Aujourd'hui lorsqu'il n'est pas là à regarder au dessus de mon épaule - quand je suis hors ligne par exemple - Copilot me manque…