Un grand pouvoir implique de grandes accessibilités
L'accessibilité dans la CLI
@m4d_zhttps://talks.m4dz.net/cli-a11y/fr/Le développement Web
est devenu un serious game :
Packers & Bundlers
Les sites Web
suivent le même chemin :
Un outil pour les gouverner tous : le terminal !
JamStack, PWA, WebAssembly, Déploiement…
Le Tools Developer,
un nouveau métier ?
Un terminal, c’est… ?
Un shell, alors ?
Et donc, la CLI ?
Couteau suisse du dév. front :
le cas NPM
L’exemple VSCode: le terminal intégré
Nos outils sont complexes,
simplifions leurs usages
Sous-tâches unitaires
ex: Optimiser les images
→ Optimiser les images de fond
Composition
ex: Optimiser les images →
Namespaces
imgoptim:backgrounds
imgoptim:gifs
imgoptim:icons
$ exec imgoptim[:*]
Développer la CLI
const { src, dest, parallel } = require('gulp')
const resize = require('gulp-image-resize')
const imagemin = require('gulp-imagemin')
const backgrounds = () => src('img/backgrounds/*.{jpg,jpeg}')
.pipe(resize({
width: 1280,
imageMagick: true
}))
.pipe(imagemin())
.pipe(dest('dist/'))
const icons = () => { /* ... */ }
exports.default = parallel(backgrounds, icons)
exports.backgrounds = backgrounds
exports.icons = icons
npx
npx
:
$ npx -p imagemin-cli imagemin img/backgrounds/*.{jpg,jpeg} --out-dir=dist
Script NPM:
{
"scripts": {
"preimgoptim:backgrounds": "npm config set tmp $(mktemp -d)",
"imgoptim:backgrounds:resize": "mogrify -resize 1280^> \
img/backgrounds/*.{jpg,jpeg} \
$(npm config get tmp)/img",
"imgoptim:backgrounds:optim": "npx ...",
"imgoptim:backgrounds": "npm run-s imgoptim:backgrounds:resize imgoptim:backgrounds:optim",
}
}
Philosophie Unix:
Un outil pour faire une chose, et une seule ; capable de s’inscrire dans une suite d’actions (pipe).
Node.js : Commander.js
const { program } = require('commander')
program
.command('images:optimize [source] <destination>', 'Optimize images')
.action((source, destination) => {
const imagemin = require('imagemin')
const imageminMozjpeg = require('imagemin-mozjpeg')
(async () => await imagemin([`${source}/*.jpe?g`], {
destination: destination,
plugins: [imageminMozjpeg()]
}))()
})
$ node ./my/app images:optimize img/backgrounds dist
Python : Argparse
Uniformiser
Une interface unifiée permettra aux membres de votre projet de démarrer facilement
Documentez !
$ npx gulp --tasks
[11:44:02] Tasks for gulpfile.js
[11:44:02] ├── clean
[11:44:02] ├─┬ images
[11:44:02] │ └─┬ <parallel>
[11:44:02] │ ├── backgrounds
[11:44:02] │ └── icons
[11:44:02] └─┬ default
[11:44:02] └─┬ <series>
[11:44:02] ├── clean
[11:44:02] └─┬ <parallel>
[11:44:02] ├── backgrounds
[11:44:02] └── icons
$ node ./my/app --help
Usage: app [options] [command]
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
images:optimize [source] <destination> Optimize images
help [command] display help for command
La complétion
$ node app <TAB><TAB>
images:optimize help
La lecture d’écran
La plage braille
Technologies d’assistances natives / OS
Permettre à toutes et à tous d’accéder aux mêmes outils, quelque soit le niveau d’appréhension ou la situation de handicap.
Dans le terminal : ncurses
React-blessed
Objectifs :
Dans le navigateur : WebUI
Vue-cli
Laisser libre de choisir la façon d’accéder aux outils
Vous travaillez sur un projet ?
→ Ajoutez une CLI pour
les fonctions haut-niveau
Vous développez une extension d’un outil existant ?
→ Interfacez-vous
aux CLI disponibles
Dans tous les cas,
→ Offrez des alternatives,
ne laissez personne sur le chemin
Paranoïd Web Dino · Tech Evangelist
https://talks.m4dz.net/cli-a11y/fr/ Disponible sous licence CC BY-SA 4.0
m4dz, CC BY-SA 4.0
Courtesy of Unsplash and Pexels contributors
Powered by Reveal.js
Source code available at
https://git.madslab.net/talks