Projet FRAMEWORK
Mes Projets / Projet Personnel / Projet FRAMEWORK
Contexte
Dans le cadre de la création de mon site web portfolio, j'ai d'abord pensé incorporer mes classes directement dans le squelette de mon application dans un dossier core ou src mais avec la découverte de l'outil Composer, je me suis dit qu'il serait plus pertinent de créer mon framework et de l'uploader sur Packagist pour le réutiliser.
Un tel projet me semblait très instructif pour approfondir mes connaissances de la programmation et de l'informatique de manière générale.
Un tel projet me semblait très instructif pour approfondir mes connaissances de la programmation et de l'informatique de manière générale.
Objectifs
Mon objectif était de créer un petit framework PHP, réutilisable pour d'autres projets/outils web.
Le but est d'avoir tout ce qu'il faut pour créer mon site web par la suite.
Je ne comptais pas faire un framework aussi avancé et complexe que ceux que l'on peut trouver sur le marché comme Synfony ou Laravel par exemple.
Mais quand même lui donner des fonctionnalités basiques.
Comme par exemple gérer un Routeur pour les URLs, un système de Controlleur/Vue, les Requêtes/Réponses HTTP, des classes pour gérer des fichiers et des configurations, et des interactions avec la base de données, etc.
Beaucoup de fonctionnalités sont venues s'ajouter par la suite comme des classes de Logger, des classes pour gérer les contenus média du HTML5 comme Video/Audio, un système de Flux pour afficher le contenu texte.
Le but est d'avoir tout ce qu'il faut pour créer mon site web par la suite.
Je ne comptais pas faire un framework aussi avancé et complexe que ceux que l'on peut trouver sur le marché comme Synfony ou Laravel par exemple.
Mais quand même lui donner des fonctionnalités basiques.
Comme par exemple gérer un Routeur pour les URLs, un système de Controlleur/Vue, les Requêtes/Réponses HTTP, des classes pour gérer des fichiers et des configurations, et des interactions avec la base de données, etc.
Beaucoup de fonctionnalités sont venues s'ajouter par la suite comme des classes de Logger, des classes pour gérer les contenus média du HTML5 comme Video/Audio, un système de Flux pour afficher le contenu texte.
Contraintes
La seule contrainte que je me suis imposée pour ce projet est de ne pas utiliser de librairie tierce.
Pour comprendre le fonctionnement de l'informatique, mais également ce que l'on fait, il est plus efficace de tout faire soi-même.
Les seules librairies que comporte mon projet sont celles des normes et standards de PHP, les normes PSR.
Celles-ci ont pour objectif de rendre mon code le plus propre et le plus interopérable possible.
Pour comprendre le fonctionnement de l'informatique, mais également ce que l'on fait, il est plus efficace de tout faire soi-même.
Les seules librairies que comporte mon projet sont celles des normes et standards de PHP, les normes PSR.
Celles-ci ont pour objectif de rendre mon code le plus propre et le plus interopérable possible.
Démarches
Au moment où j'ai décidé de séparer mon code commun de mon site web, la 1ère chose à faire était de voir comment un tel projet de type framework s'organise.
Pour ce faire je me suis basé sur un projet qui est un exemple dans le domaine de la programmation PHP, à savoir Symfony.
Quand je développe ce sujet pour mes débuts, aux alentours de 2019, je développe sur du Windows (honte à moi) avec une stack WAMP et MySQL.
À cette époque, je rencontrais beaucoup de difficultés de configuration, car le fonctionnement d'un système Windows et Linux est complètement différent.
J'avais encore assez peu de connaissances sur le système Linux, ce qui m'a conduit à mettre en pause mes développements car mon incompréhension me frustrait.
Le rachat de Github par Microsoft m'avait mis un coup au moral début 2019, car j'ai appris que Atom (l'IDE de Github) allait ne plus être mis à jour.
Mon travail en tant que DevOps ne me motive pas à continuer ce projet car je suis comme tout le monde, le week-end j'ai envie de me reposer aussi.
La sortie de PHP 8 en 2020 m'a aussi découragé car mon code était remis en cause par une telle mise à jour et un refactoring massif s'imposait.
Mais en 2022, ma motivation de développeur est de retour avec la découverte de 3 outils qui ont révolutionné ma façon de voir le développement sur Windows.
À cette époque avec mon métier, je préférais de plus en plus Linux pour beaucoup de raisons.
Avec mon activité de gamer, difficile de changer de système d'exploitation comme ça.
Un dual boot était possible mais trop prise de tête selon moi.
WSL2, Docker et VSCode entrent en scène.
Avoir un système Linux à disposition sur ma machine Windows avec WSL2, c'était parfait ça me permettait de ne pas changer selon mes envies.
VSCode, mon nouvel IDE me propose beaucoup de fonctionnalités qui simplifient mon développement (terminal integré compatible avec WSL2 et des extensions toujours plus pratiques).
Docker et la conteneurisation, un sujet très en vogue car extrêmement puissant quand on parle d'applications web qui n'ont pas vraiment besoin de persistance hormis pour la base de données.
C'est alors que j'ai complètement refactorisé ma stack technique, je passe sur du PHP 8.2 toujours sur Apache, une base de données MariaDB.
Ma partie db dans son propre conteneur, complètement indépendante de la partie web, ça m'aide pour me projeter beaucoup plus facilement sur mon environnement final.
Donc d'en anticiper toutes les problématiques, ce qui me donne un boost de motivation mais ça ne m'a pas empêché de faire une petite pause début 2023.
Qui est suivi d'une remotivation milieu 2023, avec l'envie de mettre en place un Logger pour rendre mon application plus facile à débugger.
C'est là que je décide d'inclure les normes PHP PSR à ma façon de coder pour rendre mon code interopérable, des Traits, Interface, Factory naissent.
Qui rend mon code beaucoup maintenable dans le futur pour inclure de nouvelles classes basées sur des règles que je définis.
C'est ainsi que fin 2024 scelle la 1ère version de mon framework, qui était testé en parallèle sur mon projet de website.
Je n'ai pas encore tagué de version car j'attends les 1ers tests de mon site dans son environnement, m'assurer que tout est ok avant de figer mon framework.
Étant un projet qui s'est étendu sur plusieurs années, j'ai sûrement oublié de mentionner beaucoup de choses, difficile de se rappeler de tout sur une période aussi longue.
Mais le résultat est au rendez-vous, j'en suis très satisfait (pour l'instant), la phase de test m'en dira plus.
Pour ce faire je me suis basé sur un projet qui est un exemple dans le domaine de la programmation PHP, à savoir Symfony.
Quand je développe ce sujet pour mes débuts, aux alentours de 2019, je développe sur du Windows (honte à moi) avec une stack WAMP et MySQL.
À cette époque, je rencontrais beaucoup de difficultés de configuration, car le fonctionnement d'un système Windows et Linux est complètement différent.
J'avais encore assez peu de connaissances sur le système Linux, ce qui m'a conduit à mettre en pause mes développements car mon incompréhension me frustrait.
Le rachat de Github par Microsoft m'avait mis un coup au moral début 2019, car j'ai appris que Atom (l'IDE de Github) allait ne plus être mis à jour.
Mon travail en tant que DevOps ne me motive pas à continuer ce projet car je suis comme tout le monde, le week-end j'ai envie de me reposer aussi.
La sortie de PHP 8 en 2020 m'a aussi découragé car mon code était remis en cause par une telle mise à jour et un refactoring massif s'imposait.
Mais en 2022, ma motivation de développeur est de retour avec la découverte de 3 outils qui ont révolutionné ma façon de voir le développement sur Windows.
À cette époque avec mon métier, je préférais de plus en plus Linux pour beaucoup de raisons.
Avec mon activité de gamer, difficile de changer de système d'exploitation comme ça.
Un dual boot était possible mais trop prise de tête selon moi.
WSL2, Docker et VSCode entrent en scène.
Avoir un système Linux à disposition sur ma machine Windows avec WSL2, c'était parfait ça me permettait de ne pas changer selon mes envies.
VSCode, mon nouvel IDE me propose beaucoup de fonctionnalités qui simplifient mon développement (terminal integré compatible avec WSL2 et des extensions toujours plus pratiques).
Docker et la conteneurisation, un sujet très en vogue car extrêmement puissant quand on parle d'applications web qui n'ont pas vraiment besoin de persistance hormis pour la base de données.
C'est alors que j'ai complètement refactorisé ma stack technique, je passe sur du PHP 8.2 toujours sur Apache, une base de données MariaDB.
Ma partie db dans son propre conteneur, complètement indépendante de la partie web, ça m'aide pour me projeter beaucoup plus facilement sur mon environnement final.
Donc d'en anticiper toutes les problématiques, ce qui me donne un boost de motivation mais ça ne m'a pas empêché de faire une petite pause début 2023.
Qui est suivi d'une remotivation milieu 2023, avec l'envie de mettre en place un Logger pour rendre mon application plus facile à débugger.
C'est là que je décide d'inclure les normes PHP PSR à ma façon de coder pour rendre mon code interopérable, des Traits, Interface, Factory naissent.
Qui rend mon code beaucoup maintenable dans le futur pour inclure de nouvelles classes basées sur des règles que je définis.
C'est ainsi que fin 2024 scelle la 1ère version de mon framework, qui était testé en parallèle sur mon projet de website.
Je n'ai pas encore tagué de version car j'attends les 1ers tests de mon site dans son environnement, m'assurer que tout est ok avant de figer mon framework.
Étant un projet qui s'est étendu sur plusieurs années, j'ai sûrement oublié de mentionner beaucoup de choses, difficile de se rappeler de tout sur une période aussi longue.
Mais le résultat est au rendez-vous, j'en suis très satisfait (pour l'instant), la phase de test m'en dira plus.
Problèmes
Mon plus gros problème avec ce projet était la perte de motivation.
Comme je travaille dans l'informatique, je travaillais sur ce projet après mes heures de travail mais aussi certains week-ends.
Donc arrivé à un point où j'avais du mal à comprendre une technologie ou un principe, ma motivation en pâtissait jusqu'à la découverte d'un sujet qui me donne envie de m'y remettre.
Comme je travaille dans l'informatique, je travaillais sur ce projet après mes heures de travail mais aussi certains week-ends.
Donc arrivé à un point où j'avais du mal à comprendre une technologie ou un principe, ma motivation en pâtissait jusqu'à la découverte d'un sujet qui me donne envie de m'y remettre.
Améliorations
Beaucoup d'améliorations sont possibles, mon système de mail qui dépend de configuration système pour fonctionner alors que des librairies comme PHPMailer n'en ont pas besoin.
Mon système d'authentification utilise la base de données pour stocker les identifiants et mots de passe.
Je pourrai faire une authentification avec des systèmes externes comme le protocole LDAP par exemple ou encore même intégrer des authentifications OAuth2 comme ceux de Google ou Github.
Cela nécessiterait d'ajouter la possibilité de communiquer avec des API en tout genre comme ceux suscités ou encore différents services d'API comme Gitlab ou Twitter par exemple.
Et cela me demanderait de mettre en place un catalogue LDAP pour tester la communication avec le LDAP, ce qui est très formateur.
Je commence aussi à avoir envie de mettre en place de l'observabilité, c'est un sujet que je trouve passionnant et qui apporte beaucoup dans le monde professionnel.
Car il va aussi nécessiter de mettre en place une infrastructure avec les stacks techniques pour recevoir ces informations comme Prometheus/Loki/Grafana.
M'essayer à ces exercices peut être très intéressant et de très bon défi sur le côté développeur mais également côté administrateur système qui coïncide avec mon métier de DevOps.
Mon système d'authentification utilise la base de données pour stocker les identifiants et mots de passe.
Je pourrai faire une authentification avec des systèmes externes comme le protocole LDAP par exemple ou encore même intégrer des authentifications OAuth2 comme ceux de Google ou Github.
Cela nécessiterait d'ajouter la possibilité de communiquer avec des API en tout genre comme ceux suscités ou encore différents services d'API comme Gitlab ou Twitter par exemple.
Et cela me demanderait de mettre en place un catalogue LDAP pour tester la communication avec le LDAP, ce qui est très formateur.
Je commence aussi à avoir envie de mettre en place de l'observabilité, c'est un sujet que je trouve passionnant et qui apporte beaucoup dans le monde professionnel.
Car il va aussi nécessiter de mettre en place une infrastructure avec les stacks techniques pour recevoir ces informations comme Prometheus/Loki/Grafana.
M'essayer à ces exercices peut être très intéressant et de très bon défi sur le côté développeur mais également côté administrateur système qui coïncide avec mon métier de DevOps.
Conclusion
Au départ je ne pensais faire qu'un petit assortiment de classes pour des opérations basiques.
Mais au final, ce projet a pris bien plus d'ampleur que je le pensais et les différentes évolutions du langage PHP durant toute la période de développement m'ont pas mal amené à revoir ma façon de coder.
J'ai énormément appris durant ce projet et je pense continuer d'apprendre au fur et à mesure que j'ajouterai des fonctionnalités.
La prise de mon poste de DevOps m'a également beaucoup apporté pour ce projet.
J'ai commencé avec un serveur WAMP installé sur ma machine Windows et codé avec NotePad++, pour arriver sur un développement conteneurisé sur WSL2 et codé sur Visual Studio Code.
La route fut longue, quasiment 10 ans avec des reworks intégraux, mais les connaissances sont au bout.
Mais au final, ce projet a pris bien plus d'ampleur que je le pensais et les différentes évolutions du langage PHP durant toute la période de développement m'ont pas mal amené à revoir ma façon de coder.
J'ai énormément appris durant ce projet et je pense continuer d'apprendre au fur et à mesure que j'ajouterai des fonctionnalités.
La prise de mon poste de DevOps m'a également beaucoup apporté pour ce projet.
J'ai commencé avec un serveur WAMP installé sur ma machine Windows et codé avec NotePad++, pour arriver sur un développement conteneurisé sur WSL2 et codé sur Visual Studio Code.
La route fut longue, quasiment 10 ans avec des reworks intégraux, mais les connaissances sont au bout.
Compétences
- Etude des exigences liées à la qualité attendue d'un service
- Détermination des tests nécessaires à la validation d'un service
- Définition des niveaux d'habilitation associés à un service
- Test d'intégration et d'acceptation d'un service
- Déploiement d'un service
- Participation à un projet
- Evaluation et maintien de la qualité d'un service
- Identification, qualification et évaluation d'un problème
- Proposition d'amélioration d'un service
- Installation et configuration d'éléments d'infrastructure
- Remplacement ou mise à jour d'éléments défectueux ou obsolètes
- Proposition d'une solution applicative
- Conception ou adaptation de l'interface utilisateur d'une solution applicative
- Conception ou adaptation d'une base de données
- Définition des caractéristiques d'une solution applicative
- Prototypage de composants logiciels
- Gestion d'environnements de développement et de test
- Développement, utilisation ou adaptation de composants logiciels
- Réalisation des tests nécessaires à la validation d'éléments adaptés ou développés
- Rédaction d'une documentation technique
- Analyse et correction d'un dysfonctionnement
- Mise à jour d'une documentation technique
- Mise en place d'une gestion de configuration
- Recueil d'informations sur une configuration et ses éléments
- Suivi d'une configuration et de ses éléments
- Evaluation d'un élément de configuration ou d'une configuration
- Exploitation des référentiels, normes et standards adoptés par le prestataire
- Veille technologique
- Repérage des compléments de formation ou d'auto-formation
- Etude d'une technologie, d'un composant, d'un outil ou d'une méthode
Compétences techniques















Captures d'écran
Lien Externe
