Classroom Admin pour améliorer Google Classroom

En 2016, j'ai développé une application qui permet de mieux gérer la création de cours dans Google Classroom afin de faciliter le travail de l'équipe pédagogique de mon école. Comme l'application Classroom Admin est maintenant disponible librement sous licence CeCILL, j'ai rédigé un article pour expliquer le contexte et quelques anecdotes autour afin d'accompagner sa publication.

Contexte

Dans mon école, la Web School Factory, nous utilisons la suite Google Apps pour la bureautique. Nous utilisons principalement Google Docs et Google Drive pour gérer tous les documents et aussi Google Classroom pour gérer les rendus des étudiants et les échanges de documents avec les intervenants.

Les outils Google ont l'avantage d'être souvent simples à utiliser en tant que simple utilisateur car ils vont droit au but. En revanche, du côté de l'administration, ils ne sont pas suffisamment avancés. En effet, il n'y a pas la possibilité pour l'administration de créer des Google Classroom en masse, mais seulement un-par-un. Comme à la Web School Factory nous n'avons évidemment pas juste un seul cours toute l'année, ça oblige l'équipe pédagogique de l'école à passer un temps fou à créer un par un les cours pour les différentes promotions de l'école et ça chaque année.

Comme les listes des cours sont déjà préparées en amont par l'équipe pédagogique, et sont sous format tableur, le directeur pédagogique m'a donc proposé de développer un outil qui permette de créer tous les cours sur Google Classroom d'un seul bloc avec juste ce fichier ce qui permettrait en effet d'avoir un grand gain de temps. Après avoir rédigé des spécifications afin de bien définir le travail à faire, j'ai donc développé cette solution sobrement nommée "Classroom Admin" et qui a été bien sûr "open sourcée".

Que permet Classroom Admin

L'usage de Classroom Admin est très simple une fois configuré. En résumé, il suffit d'avoir préparé la liste des cours au format CSV (en exportant d'un tableur comme Excel), de l'importer dans Classroom Admin, puis de cliquer sur "Create courses" pour voir les cours se créer automatiquement.

Exemple de fichier CSV pour créer les cours

En plus de la création des Classroom, de l'affectation automatique des étudiants au Classroom, ainsi que du professeur, ce dernier reçoit un email récapitulatif lui expliquant comment accéder à son compte Google Classroom et comment le gérer.

Concernant l'email, pour des raisons techniques que nous verrons plus bas mais aussi car les intervenants peuvent avoir oublié, il est possible de renvoyer un email pour des Classroom spécifiques en les sélectionnant dans la liste et en cliquant sur le bouton "Resend emails manually".

Interface de Classroom Admin

Pourquoi open source

Pour les personnes qui ne sont pas très sensibilisées à l'open source et au logiciel libre, elles peuvent se demander pourquoi j'ai eu envie d'ouvrir le code source sous licence CeCILL et de faire profiter mon travail à tout le monde.

Tout d'abord personnellement, je bénéficie de beaucoup de services et logiciels accessibles gratuitement qui ont été développés par une multitude de personnes. Le navigateur web Firefox, le logiciel de modélisation 3D Blender, les langages de programmation C/PHP/Python, les cours du feu Site du Zéro (maintenant OpenClassrooms), sont autant d'opportunités qui m'ont permis de découvrir différents aspects de la technologie à l'âge de 10 ans sans avoir à débourser un sou. Je considère que l'on peut entretenir un cercle vertueux en contribuant chacun à son niveau à cet écosystème et en faire en profiter à chacun et donc dans le cas présent, à d'autres écoles ou organisations qui rencontrent le même problème que nous avec Google Classroom.

Ensuite, en laissant le code source de l'application ouvert, je laisse la possibilité à chacun de corriger des bugs et même de contribuer pour améliorer des fonctionnalités. Là encore, les modifications apportées par un individu à ce projet permet à chacun ensuite d'en bénéficier à son tour.

Enfin, en publiant cette application au public, nous montrons à Google qu'il y a des attentes vis-à-vis de ses services qui ne sont pas comblées. Nous pouvons considérer qu'une fonctionnalité "bulk" pour créer des Google Classroom en masse n'est pas si compliqué à implémenter et que c'est tout de même très important pour un service de ce type de permettre de le faire. Il s'agit d'un véritable frein et d'une perte de productivité que de ne pas pouvoir le faire. Ce serait donc bien qu'une telle fonctionnalité soit implémentée de base au service, sans avoir à utiliser une application externe.

Le comment

Maintenant que je vous ai expliqué le contexte, je vais expliquer quelques choix techniques.

La back-end a été réalisé en Python avec le framework Flask. J'ai choisi ce langage car il est plutôt simple et efficace à utiliser. En revanche, il s'agissait de la première fois que j'utilisais ce langage pour un serveur web sur un projet dont j'étais le seul développeur. J'ai donc rencontré quelques difficultés quant au choix du serveur WSGI entre uWSGI et Gunicorn. Finalement je me suis arrêté sur ce dernier car les websockets semblaient fonctionner le mieux avec.

Le front-end a été réalisé avec Vue.js car c'est un framework qui est aussi simple, efficace et explicite. J'ai beaucoup apprécié lire le guide de Vue.js sur son site web car les différentes fonctionnalités sont clairement décrites ainsi que leurs limites. En revanche, comme il s'agissait peut-être de la première fois que je l'utilisais, je n'ai clairement pas utilisé son plein potentiel.

Le déploiement a été réalisé avec Docker car ça permet de s'extraire de l'environnement et donc de mieux maîtriser les conditions de réussite du déploiement. Avant Docker, j'avais toujours la peur que l'application fonctionne en local sur mon ordinateur et pas sur le serveur. Maintenant avec les containers ça réduit ce risque.

Détails techniques

Ce petit projet a été l'occasion pour moi d'apprendre deux détails techniques qui sont pourtant très importants et répandus. Ils sont peut-être tellement répandus et évidents que finalement on n'en parle peu et que je suis passé à côté jusque là.

Découverte du exponential backoff

Avant ce projet, j'avais déjà utilisé plusieurs API comme Twitter et Instagram et ça s'est toujours plutôt bien passé. Mais cette fois-ci avec l'API Google Classroom, j'ai eu quelques sueurs froides avant de comprendre ce qui se passait.

En effet, jusque là, je pensais que l'on pouvait envoyer une requête, recevoir un code 200 nous indiquant que tout s'est bien passé et puis c'est tout. Cependant, durant le développement de l'application, j'ai reçu de nombreuses erreurs 500 indiquant un problème du côté de Google lors du traitement de ma requête. Ne pouvant pas y croire, car tout de même, Google ils ont des serveurs incroyables, des grandes équipes d'ingénieur, ils ne peuvent donc pas avoir de problèmes de leurs côtés. Donc pendant plusieurs jours, j'ai toujours cru que l'erreur 500 était en fait un bug de mon côté, qu'il était mal intérprété ou que je faisais mal mes requêtes et que mon application était donc toute cassée.

Mais que nenni ! Avec mes recherches, j'ai découvert l'exponential backoff décrite dans la documentation de l'API de Google. En effet, il semblerait qu'il est donc normal de recevoir des erreurs et que dans ce cas, il suffit de réessayer la requête un peu plus tard, et si ça ne marche toujours pas, alors attendre un peu plus longtemps avant de réessayer et ainsi de suite.

Ce moment-là, j'ai donc appris qu'il peut y avoir des erreurs logicielles même chez les meilleurs, et que les logiciels ne faisaient vraiment aucun effort pour être écologiques.

Les emails c'est pas automatique

Comme mentionné tout à l'heure, j'ai dû ajouter un bouton dans l'application permettant de renvoyer l'email aux intervenants aussi pour des raisons techniques. En effet, alors que j'ai fait de mon mieux pour gérer les erreurs mentionnées ci-dessus, il arrive parfois que des emails ne soient pas reçus par les intervenants.

Après avoir investigué dans la documentation de Google, j'ai vu qu'il existait un quota limite d'envoi d'email via l'API Gmail ce qui est compréhensible, et on reçoit donc une erreur 429 indiquant que trop de requêtes ont été effectuées. Cependant, à cause d'une certaine complexité dans la vérification de ce quota, j'ai découvert que la réception de l'erreur 429 n'arrivait que plusieurs minutes après les premières requêtes, qui elles, ont pu recevoir une réponse 200 indiquant que tout allait pour le mieux. Il n'est donc pas possible de savoir de manière fiable si l'email a bien été envoyé et il a donc fallu ajouter un bouton pour manuellement réenvoyer l'email.

Conclusion

J'espère que cet article a pu vous apprendre quelque chose sur le pourquoi de l'Open Source, sur les problématiques techniques qui peuvent exister ou encore que vous avez pu enfin trouver cet outil qui dépannera votre organisation avec Google Classroom !

Dans tous les cas, Classroom Admin est librement disponible avec les instructions d'installation sur sa page Github : https://github.com/KillianKemps/ClassroomAdmin

Merci à la Web School Factory d'encourager l'Open Source !

Mots-clés : google, python

Un commentaire ?

Vous avez repéré une erreur dans l'article ? Un point d'amélioration ? Vous pouvez envoyer vos commentaires par email à « blog arobase killiankemps.fr » avec pour objet « [Comment][fr][Classroom Admin pour améliorer Google Classroom] ».
(Le « @ » a été remplacé par « arobase » afin que des robots malveillants ne puissent pas récupérer l'adresse email)

Envoyer un commentaire par email