Edit : Le code à été mis à jour, projet en anglais désormais, au programme corrections de micro bug, utilisation optimisée de session.
1./ L’origine du projet.
Ce micro-projet sans prétention a pour but de me permettre de gérer les projets que je développe dans une page web toute simple.
J’utilisais avant les marque-pages de Firefox entre autre pour ça sans trop de difficulté. Mais ce n’est pas parce que je suis utilisateur de Firefox que j’oublie tous les clones de Chrome, travail à faire deux fois.
En plus, j’ai 2 machines sur lesquels je bosse, on ajoute encore du travail. Sur l’une d’elle un dualboot, et il peut m’arriver de tester le projet sur les 2 os pour des questions de compatibilités, donc il me faut une cohérence dingue entre les environnement.
De fait, en faisant une page web simple, accessible par navigateur, qui me sert de favoris local à l’environnement, il me suffisait de mettre en favoris cette page dans les navigateurs avec lesquels je procéderais à mes tests locaux, c’est aussi simple que ça.
Voici un screenshot du projet :

2. Le cahier des charges
Les promesses de ce micro-projet :
Être compatible PHP 7-8 |
Être simple à comprendre |
Être compact au possible |
Le moins de lignes de code possible et dans un seul fichier |
Voilà quelle approche guide ce micro-projet.
3. Le projet aujourd’hui
Depuis la première version présentée dans cet article, StuProjectManager a pas mal évolué.
L'idée de départ reste la même : disposer d'une page web simple permettant de retrouver rapidement les différents projets sur lesquels je travaille, notamment les environnements locaux accessibles via mes différents vhosts.
En revanche, le petit script PHP initial a progressivement laissé place à une application un peu plus structurée.
Le projet est désormais en version 0.4 et nécessite PHP 8 ou supérieur ainsi que l'extension SQLite3. L'installation passe également par Composer.
L'objectif reste cependant inchangé : ne pas transformer cet outil en usine à gaz.
3.1. Les projets et les catégories
La première évolution logique a été l'ajout des catégories.
Au lieu d'avoir une longue liste de projets, il est maintenant possible de les organiser par catégories et de naviguer entre celles-ci directement depuis l'interface.
Chaque projet peut notamment contenir :
- un nom ;
- une URL ;
- une description ;
- une catégorie ;
- un ordre d'affichage ;
- un favicon.
Les catégories sont elles aussi gérables depuis l'interface : création, modification et suppression.
Cela permet par exemple d'avoir des catégories comme Clients, Perso, Tests, Local, ou simplement de les organiser selon sa propre manière de travailler.
Les catégories peuvent également être réordonnées. L'ordre défini est utilisé pour déterminer l'ordre des onglets dans l'interface.
3.2. Un ordre d'affichage personnalisable
Une petite fonctionnalité qui peut sembler anodine, mais qui devient rapidement pratique lorsqu'on commence à avoir beaucoup de projets : l'ordre d'affichage.
Chaque catégorie possède son propre ordre et chaque projet possède également un ordre.
On peut donc décider précisément de l'ordre dans lequel les catégories apparaissent, mais également de celui des projets à l'intérieur de chaque catégorie.
Un numéro plus faible signifie simplement que l'élément apparaîtra plus tôt dans la liste.
Cela évite notamment de devoir renommer artificiellement ses projets ou ses catégories simplement pour obtenir l'ordre souhaité.
3.3. Les liens ne se limitent plus au HTTP
Le projet a également évolué sur la gestion des liens.
StuProjectManager accepte désormais les liens :
- HTTP ;
- HTTPS ;
- FTP.
L'ajout du FTP est notamment pratique dans un contexte de développement où certains projets ou ressources peuvent encore être accessibles directement via ce protocole.
Le fonctionnement des favicons reste cependant lié au web : la récupération automatique du favicon fonctionne pour les liens HTTP et HTTPS. Pour les liens FTP, il reste possible d'ajouter manuellement une icône.
3.4. Une vraie gestion des favicons
Les favicons ont eux aussi évolué depuis la première version.
Il est possible d'utiliser des favicons pour les projets, mais également pour les catégories, avec une gestion des fichiers directement par l'application.
Pour les projets accessibles en HTTP ou HTTPS, StuProjectManager peut également tenter de récupérer automatiquement le favicon depuis l'URL du projet.
L'objectif reste surtout pratique : identifier rapidement un projet visuellement sans avoir à lire systématiquement son nom ou son URL.
3.5. Sauvegarde et restauration
C'est probablement l'une des évolutions les plus importantes par rapport à la première version.
Le projet étant destiné à centraliser les liens vers mes environnements de développement, perdre la base de données ou devoir la reconstruire manuellement serait évidemment assez pénible.
StuProjectManager dispose donc maintenant d'un système intégré de backup et de restauration.
Depuis l'interface, un bouton permet de générer une archive ZIP contenant :
- les projets ;
- les catégories ;
- les favicons.
Les données sont notamment stockées dans des fichiers JSON accompagnés du dossier contenant les favicons.
La restauration fonctionne dans l'autre sens : il suffit de fournir une archive précédemment générée.
Avant d'écraser les données actuelles, l'application effectue également une sauvegarde de la base et des favicons existants, avec un horodatage.
La restauration prend également en charge la migration automatique du schéma de base de données lorsque cela est nécessaire.
Cela permet notamment de faire évoluer la structure de l'application sans avoir à reconstruire manuellement sa base à chaque nouvelle version.
3.6. Une base SQLite toujours volontairement simple
Malgré ces nouvelles fonctionnalités, je suis resté sur SQLite.
C'est un choix qui correspond toujours bien à l'objectif initial du projet : StuProjectManager n'a pas vocation à être une application nécessitant un serveur de base de données dédié.
La base projects.db est créée automatiquement lors de l'utilisation de l'application.
L'application utilise également les contraintes d'intégrité de SQLite pour garantir qu'un projet est toujours associé à une catégorie existante. Une catégorie ne peut donc pas être supprimée tant que des projets lui sont encore associés.
C'est un petit détail, mais c'est justement le genre de chose qui permet de garder une application simple tout en évitant de laisser la base partir dans un état incohérent.
3.7. L'application s'est aussi structurée
La grosse différence avec la version présentée dans l'article original se trouve finalement dans l'organisation du projet.
Le code n'est plus regroupé dans un unique fichier PHP.
Le dépôt est maintenant organisé en plusieurs parties, avec notamment :
app/pour le code de l'application ;public/pour la partie accessible depuis le serveur web ;tests/pour les tests ;docs/pour la documentation ;- Composer pour la gestion des dépendances.
Le projet dispose également d'une documentation générée avec Doxygen, permettant de générer la documentation des classes, méthodes et fichiers PHP à partir des commentaires présents dans le code.
On reste donc sur une application relativement petite, mais avec une structure qui commence à ressembler davantage à celle d'un vrai petit projet maintenable.
3.8. Des tests automatisés
Autre différence avec la version originale : le projet possède maintenant des tests automatisés avec PHPUnit.
Les tests se concentrent notamment sur les modèles Project et Category et utilisent une base SQLite temporaire afin de ne pas modifier les données réelles de l'application.
Cela permet notamment de vérifier le comportement de la gestion des projets et des catégories, mais aussi les contraintes d'intégrité de la base de données.
Pour un projet aussi petit, ce n'est évidemment pas indispensable pour pouvoir l'utiliser.
Mais au fur et à mesure que StuProjectManager évolue, avoir quelques tests permet de modifier le code avec un peu plus de sérénité.
4. Installation et utilisation
L'installation reste volontairement simple.
Il suffit de récupérer le dépôt, d'installer les dépendances avec Composer, puis de lancer un serveur PHP en utilisant public/ comme racine web.
Par exemple :
git clone https://github.com/Steform/StuProjectManager.git cd StuProjectManager composer install php -S localhost:8000 -t public
La base SQLite est créée automatiquement.
Le projet étant avant tout destiné à un environnement de développement local, il est ensuite possible de l'intégrer à son propre environnement web, par exemple derrière un vhost, et d'y accéder comme n'importe quelle autre application locale.
Une fois connecté à l'interface, le fonctionnement est assez direct : les catégories permettent de filtrer les projets, les projets sont affichés dans l'ordre défini, et les différentes actions de création, modification et suppression sont accessibles directement depuis l'interface.
# 5. Le résultat
Au final, StuProjectManager a beaucoup évolué depuis le petit script qui me servait simplement à remplacer mes favoris de navigateur.
Le principe reste pourtant exactement le même.
J'ai plusieurs projets web, plusieurs environnements, plusieurs navigateurs et plusieurs machines. Plutôt que de maintenir une collection de favoris différente selon l'environnement utilisé, j'ai maintenant une petite application dédiée qui centralise tout ça.
Je peux y retrouver mes projets, les classer, les réordonner, leur associer une icône et gérer leurs liens depuis une seule interface.
Et surtout, je peux sauvegarder l'ensemble pour pouvoir le restaurer ailleurs si nécessaire.
L'application reste volontairement assez simple. Je n'ai pas cherché à en faire un outil de gestion de projet complet avec utilisateurs, tâches, planning, notifications ou autres fonctionnalités qui finiraient par éloigner le projet de son objectif initial.
StuProjectManager sert simplement à gérer mes liens vers mes projets web.
Et finalement, c'est probablement cette simplicité qui reste la partie la plus importante du projet.
6. Conclusion
Ce qui devait au départ être un petit script PHP de quelques dizaines de lignes a finalement grandi avec mes besoins.
Les catégories, le tri personnalisé, les favicons, le backup/restore, les migrations et les tests sont venus progressivement, au fur et à mesure que l'utilisation du projet faisait apparaître de nouveaux besoins.
Mais je souhaite conserver la philosophie de départ : un outil personnel, simple, léger et pratique pour retrouver rapidement ses projets web.
Le projet est disponible sur GitHub :
StuProjectManager https://github.com/Steform/StuProjectManager
Le dépôt contient également les instructions d'installation, la documentation et les tests.
Commentaires
Aucun commentaire approuvé pour le moment.
Connectez-vous avec un compte commentateur pour publier un commentaire. Se connecter.