ERP Triple Bilan : Evaluation d'Anyblok

Après avoir présenté les critères d'évaluation d'un ERP et évalué l'ERP Odoo selon ces critères, HashBang s'attaque au framework Anyblok. Pour rappel, ces évaluations ont pour but de choisir l'outil le plus adapté à notre projet d'ERP Triple Bilan : un ERP comportant des modules permettant de faire des bilans de comptabilité, mais aussi des bilans sociaux et environnementaux.

Avant-propos

Anyblok est un framework qui doit permettre de créer, à terme, des applications métiers, comme par exemple ERPBlok. Cependant, le projet est encore en construction : à la date de parution de cet article, Anyblok ne propose pour l'instant que des outils pour construire le backend d'une application métier, pouvant se fixer sur un client web existant. Ainsi, l'interface n'est pas encore très développée. Certains des critères d'évaluation que nous avons établis risquent donc de ne pas être pertinents pour l'étudier. Ces critères sont :

  • L'ergonomie
  • La documentation frontend
  • La customisation frontend

Les évaluations qui seront présentées sur ces critères seront donc à relativiser avec le fait qu'en tant qu'outil de conception de backend, ces critères sont mineurs.

Contexte de l'évaluation

Notre évaluation s'est portée sur le framework Anyblok, en version 1.0.0. Pour les essais de customisation, nous avons utilisé le dépôt ERPBlok dans sa première et unique version alpha.

L'initiative Anyblok

Jean-Sébastien Suzanne, un ancien intégrateur d'Odoo, lance en 2014 son projet de framework adapté à la conception de modules métiers. Son but est d'obtenir un ERP dont il approuverait les choix de développement. Sa volonté est de concevoir un framework composé de "bloks", et de choisir de les activer ou non afin d'avoir un outil métier modulable. Il existe trois types de bloks : les business bloks qui correspondent aux modules métiers d'un ERP, les bloks techniques pour le fonctionnement du framework, et les bloks d'aide au développement.

Ce framework utilise un grand nombre de librairies Python existantes, l'enjeu de la conception d'Anyblok est donc d'agencer ces librairies entre elles pour que le framework puisse permettre de créer simplement une application métier.

La communauté

Le développement d'Anyblok se fait sur GitHub. Ce dépôt montre que, malgré la douzaine de contributeurs au coeur d'Anyblok, la très grande majorité des commits sont de Jean-Sébastien Suzanne. Le développement d'Anyblok n'est donc pas très communautaire. On remarque cependant que d'autres contributeurs sont plus investis dans le développement de certains bloks, il y a donc un développement communautaire des bloks.

Les discussions autour du développement sur Anyblok se font sur un forum Gitter, mais il n'est plus actif depuis plusieurs mois.

Il n'existe aucun site ni aucune organisation permettant de rassembler la communauté. De plus, Anyblok n'est pas un outil à l'initiative d'une entreprise qui se consacre à son développement, contrairement à Odoo et ERPNext. Ainsi, aucune communauté n'a pu s'organiser autour de l'outil. Son développement, toujours assuré par quasiment une seule personne depuis le début, n'a pas décollé.

Points positifs

  • L'investissement communautaire dans le développement de quelques bloks
  • Le grand investissement de l'initiateur pour le développement du coeur d'Anyblok, et le fait qu'il soit très répondant sur le forum, GitHub ou personnellement

Points négatifs :

  • Pas de communauté organisée autour de l'outil
  • Pas d'entreprise consacrée à l'outil pour faire décoller son développement
  • Le développement du coeur d'Anyblok qui se fait majoritairement par une seule personne

Les licences

Anyblok, ainsi que tous les bloks présents sur le même dépôt, sont sous la licence libre Mozilla Public License Version 2.0. Cela oblige toute personne concevant une application qui utilise ou modifie ce code de le rendre accessible sous la même licence aux utilisateurs. Il est cependant possible de créer des extension ou des bloks pour Anyblok sous une licence propriétaire.

L'ergonomie

Le blok du client web d'Anyblok possède une interface de base qui est encore en cours de développement, et n'est donc pas encore aboutie. Elle est conçue avec Vue.js, il est donc possible de retravailler cette interface connaissant cette technologie. Cela laisse plus de liberté aux développeurs pour créer une interface adaptée à ses besoins, mais cela demande en contrepartie plus de temps de développement. Il est également possible, plutôt que de développer son interface, de lier Anyblok à un autre client web.

Points positifs

  • L'utilisation de Vue.js pour l'interface
  • La possibilité d'utiliser d'autres clients web pour l'interface d'Anyblok

Points négatifs

  • Être obligé de chercher un autre client web ou concevoir sa propre interface, ce qui entraine une grande perte de temps

Les fonctionnalités

Fonctionnalités Présente ?
CRM Non
Vente Oui (non fonctionnel)
Facturation Non
Comptabilité Non
Notes de frais Non
Congés Non
Fiches Oui
Planning prévisionnel Non
Gestion de projet Non
Messagerie Non
Point de vente Non
Gestion des stocks Oui
Billeterie Non

Etant donné qu'Anyblok est composé de bloks ayant chacun leur documentation, on ne trouve pas de documentation décrivant l'ensemble des possibilités sur l'environnement d'Anyblok.

Le seul business blok fonctionnel, le blok de gestion de stock, présente une documentation assez complète, pour l'utilisateur, avec la présentation des concepts et des fonctionnalités, mais aussi pour le développeur, avec les releases, la roadmap ou encore la documentation de l'API.

La partie backend d'Anyblok est développée dans la documentation du projet Anyblok. Elle est composée de deux parties importantes. La partie "Basic Usage" présente brièvement les concepts utilisés dans Anyblok, comme les bloks ou les modèles, et les fonctionnalités basiques. La partie "MEMENTO" présente de manière exhaustive les mots-clés et fonctions disponibles pour le développement avec Anyblok. Cette documentation explique assez bien les choses et est illustrée par des exemples de code.

Enfin, le blok du client web, ainsi que la partie frontend d'Anyblok, ne possèdent malheureusement aucune documentation, ce qui rend plus difficile la conception d'une interface plus aboutie que celle présente de base.

Points positifs :

  • La disponibilité de l'initiateur d'Anyblok en cas de manques de la documentation
  • La partie backend bien expliquée et assez complète

Points négatifs :

  • Pas de documentation réunissant toutes les documentation de l'environnement Anyblok
  • Certaines documentation très succintes
  • L'absence de documentation pour la partie frontend

Les technologies utilisées

Anyblok utilise un très grand nombre de librairies, en particulier pour des fonctionnalités techniques. Voici les librairies principalement utilisées :

  • SQLAlchemy pour son système d'ORM
  • Pyramid pour ses sytèmes d'authentification, la gestion des permissions et l'accès à l'API REST
  • Jinja pour la mise en forme des documents générés
  • Pytest pour la réalisation de tests unitaires
  • Marshmallow pour la sérialisation et la désérialisation des données d'Anyblok.

Les gestionnaires de bases de données PostgreSQL, MySQL et Microsoft SQL Server sont testés pour pouvoir être utilisés avec le framework, mais il existe un blok permettant d'utiliser PostgreSQL de manière plus poussée avec Anyblok.

L'architecture

Anyblok est composé de bloks, qui sont avant tout des paquets Python.

A la racine d'une application Anyblok, il est nécessaire de déclarer les dépendances, ainsi que les bloks utilisés.

Dans le dossier d'un blok, il faut ensuite instancier un blok en utilisant une classe d'Anyblok, déclarer les fichiers templates qui vont servir à agencer l'interface du blok, implémenter ou importer des rôles et déclarer les permissions d'accès de ces rôles au blok.

Dans le dossier des modèles du blok, il faut alors déclarer ces modèles, implémentés chacun dans un fichier python dans ce même dossier. Chaque blok présente également un dossier de templates contenant les fichiers templates en HTML qui permettent d'agencer l'interface du blok.

Points positifs :

  • Pouvoir créer ses bloks dans un dossier à part
  • Faire appel aux modèles et rôles d'autres bloks depuis son blok

Les API

Dans l'environnement Anyblok, il existe un blok permettant, grâce à Pyramid, de concevoir une API REST à partir des données d'une application Anyblok. Il permet de créer soi-même les routes pour accéder à ces données, sérialisées au format JSON grâce à Marshmallow.

L'installation

Les installations d'Anyblok, d'un projet Anyblok et d'ERPBlok se font assez simplement.

Il est possible d'installer Anyblok par l'installeur pip avec une simple commande, ou bien par les fichiers sources en clonant le dépôt et en installant la commande anyblok.

Pour installer de quoi faire un ERP, il y a alors deux possibilités. La première est d'utiliser l'outil cookie-cutter d'Anyblok, permettant de générer un template de projet Anyblok. La deuxième est de cloner le projet ERPBlok, l'ERP développé avec Anyblok. Pour les deux méthodes, on peut ensuite les installer avec PostgreSQL et lancer un serveur avec de simples commandes grâce aux Makefile.

Points positifs :

  • Très facile à faire, notamment grâce aux Makefile
  • Bien documenté dans chaque dépôt

La customisation

Au niveau de la customisation backend, le tutoriel Anyblok-Book permet d'apprendre à créer un blok dans un projet Anyblok, à utiliser des bloks existants, créer des modèles, les lier entre eux, et faire du développement plus avancé. Le tutoriel est bien expliqué et illustré avec des morceaux de code. Il montre comment réaliser des tests à chaque étape. Cependant, certaines étapes du tutoriel, considérées comme "simple", ne sont pas illustrées par du code, ce qui peut repousser les développeurs peu expérimentés.

Au niveau de la customisation frontend, il n'existe aucun tutoriel et aucune documentation de l'API utilisée pour concevoir une interface sur Anyblok. Nous avons pu tout de même apprendre à en faire grâce à nos échanges avec l'initiateur d'Anyblok.

FuretUI, le client web d'Anyblok, utilise Vue.js pour implémenter l'allure générale de l'interface ainsi que tous les éléments graphiques qui peuvent être utilisés. Les fichiers templates d'un business blok permettent alors d'instancier les modèles du blok et les éléments graphiques implémentés dans le client web afin de concevoir l'interface du blok. Ces fichiers sont traduits par le blok anyblok_furetui pour que le client web génère l'interface.

Points positifs :

  • La documentation backend très bien expliquée
  • L'implémentation et l'instanciation des éléments graphiques qui sont séparées

Points négatifs :

  • L'absence de tutoriel pour le client web et pour les fichiers templates
  • L'absence de documentation pour l'API de frontend

La gestion de permissions des utilisateurs

Sur Anyblok, la création de rôles et la gestion des permissions se fait par la librairie Pyramid, grâce au blok Anyblok_Pyramid qui permet de lier la librairie au framework. Il est donc possible de créer des rôles et de régler la permission CRUD de ces rôles pour chaque modèle d'Anyblok, et ce à la racine du blok.

Points positifs :

  • L'utilisation d'une librairie existante pour la gestion des rôles

Les tests unitaires

Anyblok a l'air d'avoir une grande culture des tests, puisque le tutoriel de développement backend apprend à écrire et maintenir des tests pour tout ce qu'on implémente. Il nous apprend aussi à réaliser des tests à plusieurs échelles : tests unitaires, tests fonctionnels, test d'un modèle ou test d'un blok entier.

Les tests sur Anyblok se font par l'utilisation de Pytest, permettant de faire des tests unitaires et des tests fonctionnels. Anyblok ajoute également dans son coeur des fonctions de test pour pouvoir tester modèles et bloks dans leur ensemble.

Points positifs :

  • L'apprentissage de la bonne pratique des tests
  • L'ajout de fonctions à celles déjà proposées par Pytest

Le déploiement

La documentation d'Anyblok ne mentionne nul part comment réaliser le déploiement d'une application sous Anyblok. Cependant, les projets Anyblok sont composés de paquets Python, les méthodes de déploiement génériques adaptées aux paquets Python sont donc compatible avec les projets Anyblok, comme par exemple le déploiement avec Docker.

Points positifs :

  • Pouvoir choisir sa méthode de déploiement favorite

Points négatifs :

  • Le manque d'indication sur quelles méthodes de déploiement peuvent être utilisées

Les migrations

Il existe plusieurs méthodes de migration d'une application Anyblok. La méthode la plus simple et qui fonctionne dans la plupart des cas est l'utilisation de la librairie Alembic, qui permet d'effectuer en une commande la montée de version avec la migration de la base de données.

Dans certains cas, cette méthode ne fonctionne pas, notamment s'il y a des changements de clé primaire. Il faut alors faire la migration de la base de données à la main avec les fonctions pre_migration et post_migration disponibles dans le coeur d'Anyblok. Si le projet a été créé avec le cookie-cutter, il est également possible d'exécuter le script update_project après avoir fait la migration à la main.

Points positifs :

  • Une méthode de migration automatique qui fonctionne le plus souvent
  • Des alternatives si la méthode précédente ne fonctionne pas

La cohérence entre les versions

Anyblok dispose de CHANGELOG assez exhaustifs et concis, quoique pas très rédigés, donc peu accessibles pour des développeurs peu expérimentés. La concision des release notes montre que les changements d'une version à l'autre ne sont pas nombreux, le coeur du fonctionnement d'Anyblok reste le même. Il n'est donc pas nécessaire de réapprendre comment fonctionne le framework d'une version à l'autre.

Cependant, les changements sur Anyblok sont extrêmement dépendants des librairies sur lesquelles il s'appuie. Il peut donc y avoir des changement majeurs dûs à de gros changements de ces librairies.

Points positifs :

  • Peu de changements d'un version à l'autre

Points négatifs :

  • Pas de release notes bien rédigées pour les rendre accessibles
  • La nécessité de retravailler Anyblok à chaque migration majeure d'une des librairies qu'il utilise

Conclusion

Après étude du framework Anyblok, nous pensons qu'il pourrait être une très bonne base pour le développement d'un ERP modulable et facilement maintenable, grâce à une architecture très adaptable, de grandes possibilités de développement et de customisation, un système de tests élaboré, l'utilisation de librairies abouties, ainsi que la facilité d'installation, de déploiement et de migration. Cependant, il y a encore des efforts considérables à fournir et beaucoup de temps à y consacrer pour pouvoir concevoir un ERP avec cet outil : il n'y a pas d'interface aboutie, il n'existe encore presque aucune fonctionnalité standard d'un ERP; et la documentation n'est pas complète sur certains aspects de développement sur Anyblok. Ces problèmes sont principalement dû au fait qu'il n'existe pas vraiment de communauté autour d'Anyblok, ce qui ralentit considérablement son développement.

Un grand merci à Jean-Sébastien Suzanne d'avoir pris sur son temps personnel pour nous parler de son projet et de nous avoir aidé à mieux le connaitre.

Derniers articles

Pourquoi nous utilisons Wagtail : le CMS Django qui sépare les casquettes

Une introduction à Wagtail et son Zen : comment laisser à l'éditeur·i·ce de contenu un peu de choix, mais pas trop.

Comment devenir un bureau d'enregistrement ?

Devenir bureau d'enregistrement est un parcours de la combattante au niveau technique, administratif et financier. Il y a des cas simples et d'autres qui demandent de raser un Yack.

Précisions sur le projet de bureau d'enregistrement coopératif

L'appel à intérêt lancé la semaine dernière a suscité plusieurs réactions sur les valeurs proposées : clarifions quelques points aujourd'hui.

Appel à intérêt pour un bureau d'enregistrement coopératif

Qui serait partant·e pour participer (ou être client·e) du premier registrar sous forme de société coopérative d'intérêt collectif ?