Un vistazo general a Expression Lab
Soy Anderson Salas, el creador de Expression Lab. En este artículo quiero hablar sobre el proyecto: sus orígenes, los desafíos durante su desarrollo, su filosofía, sus casos de uso y su visión a futuro.
¿Nuevo por aquí? No te preocupes. Esto no es un tutorial, ni tampoco una documentación técnica.
Los orígenes: las trincheras del soporte L2
Algo maravilloso de WordPress es la cantidad infinita de cosas que puedes construir con él: hay plugins y temas para todo lo que puedas imaginar.
Fui agente de soporte L2 por casi 5 años, y durante ese tiempo estuve atendiendo incidencias reportadas por los usuarios, algunas triviales y otras no tanto. Esto rápidamente me hizo preguntarme: si cada sitio de WordPress es único, ¿cómo se diagnostica un problema que puede venir de, literalmente, cualquier lugar?
Sí, al igual que yo, has sido (o eres) agente de soporte, entonces las siguientes prácticas te resultarán familiares:
- Subir un MU Plugin con un
var_dumpo unerror_logdentro. - Instalar el plugin Query Monitor o abrir una sesión de WP-CLI, los estándares absolutos y las herramientas favoritas de muchos, entre los que me incluyo.
- En algunos casos, subir el script Adminer para inspeccionar/dumpear directamente en la base de datos (si el usuario da permiso).
Todas son estrategias legítimas si se usan responsablemente, pero cada una aborda el problema desde una perspectiva distinta, lo cual casi siempre termina exigiendo un enfoque multidisciplinario agotador para el agente de soporte. Y es en ese matiz donde surge la idea detrás de Expression Lab: ¿Y si existiera una alternativa que complemente a todas las anteriores?
El desafío: encontrar una alternativa segura a eval()
Cuando pensamos en un entorno de diagnóstico interactivo, inevitablemente pensamos en una forma de ejecutar código PHP arbitrario en el servidor.
PHP ya tiene una función para esto: la controversial y temida eval(). Sin embargo, su propia documentación advierte de forma explícita los riesgos e implicaciones para la seguridad:
Precaución: La construcción de lenguaje eval() es muy peligrosa ya que permite la ejecución de código PHP arbitrario. Su uso se desaconseja encarecidamente. Si se ha verificado cuidadosamente que no hay otras opciones que utilizarla, se debe prestar una atención especial a no pasar datos provenientes de un usuario sin haberlos validado previamente de manera minuciosa.
Por lo tanto, hacer algo como esto estaba totalmente descartado:
$result = eval($_POST['code']);
Después de un período de investigación, la solución vino de un lugar inesperado: el componente Expression Language de Symfony.
Como su nombre sugiere, este componente permite evaluar expresiones que devuelven un valor, y se usa principalmente como una alternativa ligera para incrustar lógica dinámica en archivos de configuración:
user.getGroup() in ['good_customers', 'collaborator']
article.commentCount > 100 and article.category not in ["misc"]
Naturalmente, evaluar reglas estáticas en archivos YAML es muy diferente a explorar un CMS relacional. El desafío fue evolucionar ese evaluador ligero hacia un DSL completo con entidades fluidas, límites de ejecución en sandbox y replicación en SQLite en memoria, todo mientras se garantiza que ningún código PHP arbitrario ni claves privadas toquen jamás la base de datos de WordPress. El desarrollo posterior se centró en escribir una librería estándar de servicios para observar el estado interno de una instancia en vivo de forma determinista y construir una interfaz intuitiva y ergonómica que permitiera gestionar múltiples flujos de ejecución independientes.
La filosofía: un diagnóstico seguro debe ser accesible, no una ocurrencia tardía
Expression Lab se distribuye bajo la licencia GPLv2, y esto va más allá de una formalidad legal, es una convicción personal:
- Diagnosticar un problema no debería requerir arriesgar la estabilidad del sitio: Todos merecen acceso a herramientas seguras y no destructivas para comprender el estado de ejecución sin temer un error fatal.
- El diagnóstico y el desarrollo se complementan: Expression Lab no es solo una herramienta para agentes de soporte, sino que ofrece telemetría de altísima calidad para desarrolladores. Ambos roles pueden aportar ideas o código en una herramienta que existe para el beneficio de la comunidad.
Creo firmemente en el poder de una buena herramienta para mejorar la vida de las personas e impulsar un ecosistema.
Casos de uso: ¿dónde brilla Expression Lab hoy?
Expression Lab está pensado específicamente para entornos locales y de staging:
- Depurar consultas complejas, transients o eventos de cron programados sin llenar el código de llamadas temporales a
var_dump()ni tener que limpiar después. - Análisis exploratorio y agregaciones ad-hoc mediante SQLite en memoria, lo que te permite consultar e inspeccionar datos libremente sin alterar las tablas de prueba.
- Auditar el estado interno de WordPress en tiempo real durante el desarrollo de plugins, obteniendo retroalimentación inmediata desde una consola interactiva.
Dicho esto, permíteme ser totalmente franco y directo: Expression Lab es un prototipo experimental en fase alfa.
A pesar de que el núcleo del proyecto fue concebido bajo premisas estrictas de seguridad, no ha pasado por auditorías de seguridad externas e independientes.
Por esa razón, no debe instalarse bajo ninguna circunstancia en sitios en producción, ni en sistemas con certificaciones de cumplimiento (SOC 2, PCI-DSS, HIPAA), infraestructura crítica, entidades gubernamentales, entornos militares o cualquier aplicación que gestione datos de tarjetas de crédito o información personal identificable (PII).
El camino por delante
Expression Lab no busca reemplazar a las herramientas consagradas; busca ofrecer un plano complementario: una consola visual, declarativa y determinista para entender cómo funciona WordPress por dentro.
El proyecto es totalmente open source, y en esta etapa alfa lo que más necesita son ojos críticos, pruebas en laboratorios locales y retroalimentación técnica:
- Repositorio en GitHub: andersonsalas/expressionlab
- Documentación oficial: expressionlab.io
Si te apasiona la arquitectura de WordPress, instálalo en tu entorno local, pruébalo y cuéntame qué tal en los issues y las discusiones del repositorio.
