2023 aura été marquée par deux tendances de fond : l'essor fulgurant de l'intelligence artificielle, avec des outils comme ChatGPT qui se sont démocratisés à grande vitesse, et la montée en puissance de la conteneurisation, devenue un incontournable de l'infrastructure moderne. En posant de nouveaux standards dans le développement d'applications, elle uniformise les pratiques de développement et garantit une interopérabilité de tous les composants du SI. Investir dans des technologies cloud natives n'est donc plus nice-to-have mais un must-have. Google l'illustre d'ailleurs très bien dans cet article sur l'importance de standardiser ses outils.
Et l'IBM i dans tout ça ? AUMERIAL vient de sortir NTi, un fournisseur d'accès à l'IBM i pour .NET, cloud-natif, autonome et conteneurisable. Cet article présente le développement et la publication d'une application web .NET accédant à l'IBM i, conteneurisée dans Docker en environnement ARM, avec ChatGPT comme assistant de développement, non pas pour remplacer le développeur, mais pour illustrer le gain de productivité que cet outil apporte.
CQFD : de l'IA, du container et de l'IBM i.
Le scénario
L'objectif est de développer une application web de réservation de billets de concert, en ASP.NET Blazor Server, sur une base DB2 for i via NTi. Les étapes couvrent :
- La conception de la base de données relationnelle
- L'écriture des accès aux données (CRUD)
- Le développement de l'interface web
- La conteneurisation et le déploiement
L'article ne constitue pas un tutoriel détaillé, mais démontre trois points :
- Un assistant virtuel comme ChatGPT apporte une réelle productivité dans le développement
- Développer une application .NET sur IBM i est aussi simple qu'avec n'importe quelle autre base de données
- NTi permet d'intégrer l'IBM i aux schémas modernes de développement
L'architecture cible est ARM, mais sans modifier une ligne de code, l'application peut s'exécuter en environnement POWER ou x86.
Briefing avec ChatGPT
La démarche est d'abord présentée à l'assistant virtuel :

Puis le cas d'utilisation est exposé clairement :

Le briefing est terminé, on peut commencer !
Étape 1 - Création de la base de données
La première étape est la modélisation des données. ChatGPT propose un premier modèle entités-relations :

Après relecture, quelques points sont à corriger :

Le modèle validé, ChatGPT génère le script SQL :

Le script est exécuté dans ACS, tout se crée sans problème :

Étape 2 - Création de l'application
Création du projet
Le projet est créé en ligne de commande avec ses dépendances :
dotnet new blazorserver -n ConcertBookingApp
cd ConcertBookingApp
dotnet add package Dapper
dotnet add package MudBlazor
dotnet add package Aumerial.Data.Nti
- MudBlazor pour la réalisation de l'interface
- Aumerial.Data.Nti et l'ORM Dapper pour l'accès à DB2 for i
Une fois le projet ouvert dans Visual Studio ou VSCode, on suit les étapes d'installation de MudBlazor.
Couche d'accès aux données
ChatGPT génère les modèles C# représentant les entités :

L'approche est classique : des classes représentent les entités, des services implémentent le SQL. NTi exposant les classes ADO.NET standard, ChatGPT produit une implémentation basée sur ces classes génériques, avec des marqueurs de paramètres en ? pour respecter le format attendu par l'IBM i :

Après vérification et quelques ajustements, tous les services d'accès aux données sont en place, écrits en SQL, protégés contre l'injection SQL via des paramètres et requêtes préparées.
Les requêtes sont soumises directement à l'IBM i via NTi, sans ODBC ni OLE-DB. L'application est totalement agnostique à la plateforme cible.
Interface moderne avec MudBlazor
Les différentes pages de l'application sont créées grâce à la bibliothèque de composants MudBlazor :
- Page de connexion/création de compte
- Page d'accueil/affichage des concerts et réservation de billets
- Page d'affichage des billets réservés par l'utilisateur
- Page de gestion des informations du profil utilisateur
ChatGPT est sollicité pour générer le code de chaque page. Par exemple, pour la page d'affichage des concerts et de réservation :

Le code généré dégrossit le travail, quelques ajustements restent nécessaires, mais la structure est là :

Les données remontent bien depuis la base de données relationnelle DB2 for i :

Une fois toutes les pages développées selon ce principe, l'application est prête à être publiée dans n'importe quel environnement supportant Docker ou disposant d'un orchestrateur de conteneurs (OpenShift, Kubernetes...).
Étape 3 - Création de l'image Docker
L'application est publiée sous forme d'image Docker depuis Visual Studio. Le Dockerfile est généré automatiquement :
FROM mcr.microsoft.com/dotnet/aspnet:7.0-bookworm-slim-arm64v8 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["ConcertBookingApp.csproj", "."]
RUN dotnet restore "./ConcertBookingApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "ConcertBookingApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConcertBookingApp.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConcertBookingApp.dll"]
L'interface de Visual Studio guide ensuite les étapes de publication :

L'image est poussée sur Docker Hub :

Étape 4 - Déploiement sur Raspberry Pi
L'image est récupérée et exécutée sur un Raspberry Pi ARM, sans aucune dépendance autre que Docker :

docker run -it --rm -p 5000:80 --name ConcertApp rrouillo/concertbookingapp
Cette commande lance l'image concertbookingapp du dépôt rrouillo dans un conteneur nommé ConcertApp, en exposant le port 5000.
L'application démarre et est accessible depuis un navigateur :

Et l'appli est disponible :

Conclusion
À travers cet article, vous aurez donc compris qu'un assistant virtuel comme ChatGPT peut être d'une aide précieuse dans le développement d'une application, en l'occurrence entre .NET et l'IBM i.
Nous avons également pu constater qu'avec la solution NTi développée par AUMERIAL, appréhender l'IBM i depuis .NET n'a rien de complexe, bien au contraire. La syntaxe est identique à celle de tous les autres fournisseurs de base de données et on peut faire de l'IBM i sans faire d'écran vert.
Là où NTi se différencie des autres solutions, c'est dans son intégration totale à .NET: peu importe l'architecture cible, notre application communique avec l'IBM i. C'est un point très important pour pouvoir faire tourner des charges de travail .NET/IBM i ailleurs que sur des VMs Windows... avec de belles économies à la clé et une vraie infrastructure moderne.
Enfin, que ce soit dans le développement de l'application ou dans sa publication, tout est simple, efficace et sans approximation. N'importe quel développeur peut maîtriser ces concepts et développer des applications métier performantes et résolument modernes.
Rémi ROUILLOT