Post on 21-Jan-2018
@osrecio@osrecio 30/06/2017
De 0 a 100 con Magento 2
2
@osrecio 30/06/2017
Óscar RecioLead Magento Developer
Mi previsión de #eCommerce para 2017 es: "El humo se disipa"
@osrecio
osrecio
osrecio
osrecio.com
@osrecio 30/06/2017
Interactiv4
4
@osrecio 30/06/2017
Entorno Desarrollo Despliegue Consejos
¿ Qué vamos a ver ?
5
@osrecio 30/06/2017
Entorno
6
@osrecio 30/06/2017
Sistema Operativo
Linux Mac Win
Entorno
7
@osrecio 30/06/2017
Sistema Operativo
Linux Mac Win
Entorno
8
@osrecio 30/06/2017
Setup
PHPPHP-FPM
ApacheNginx
MysqlPerconaMariaDb
Magento CEMagento EE
PHP HTTP Mysql Magento
Entorno
9
@osrecio 30/06/2017
Setup
LAMP || MAMPLinux/MacOS Apache + Mysql + PHP,
Es la opción más conocida popularmente
LEMP || MEMPLinux/MacOS Nginx + Mysql + PHP,
Misma opción que L/MAMP pero con Nginx
LARAVEL VALET*Sólo disponible para Mac
La forma más sencilla y rápida de montarse un env local
VAGRANTNos permite construir nuestras máquinas virtuales de una forma rápida y automática
DOCKERConteneriza tu aplicación para que sea portableCada tecnología debería estar en 1 contenedor
Entorno
10
@osrecio 30/06/2017
Herramientas
TerminalLa principal herramienta de cualquier desarrollador. No le tengáis miedo, no muerde y seguramente te ahorre mucho tiempo.
1
IDE ~ PHPStorm Principalmente donde vamos a pasar el rato implementando nuestros módulo, temas, etc. Es dónde ocurre la magia.
2
DBMSNuestro gestor de bases de datos. Si le prestamos atención podemos salvar segundos y deadlocks de nuestro día a día.
3
BrowserDónde la gente común ve cosas y compra sin saber el iceberg que hay por debajo.4
Photoshop / Gimp / Pixelmator
Tower / Sourcetree / GitKraken
Postman / Boomerang / Soap UI
Nyancat / Cmatrix / Hacker Typer
Sublime / Atom / Vim
git / tig / ssg / htop / ncdu
Entorno
11
@osrecio 30/06/2017
Desarrollo
12
@osrecio 30/06/2017
Creación de ComponenteMódulos / Lenguajes / Temas / Librerías
Componente Magento 2
Semver
KeepChangeLog
Composer
1
2
4
Versionado semántico de nuestros módulos.MAJOR versión: al realizar cambios de API incompatibles.MINOR versión: cuando se agrega funcionalidad de una manera compatible con versiones anteriores.PATCH versión: es cuando haces correcciones de errores compatibles con versiones anteriores.
Es el archivo que contiene una lista ordenada cronológicamente de cambios notables para cada versión de un componente.
Es el fichero que definirá sus dependencias con otros componentes a la hora de instalarse, además de informar de incompatibilidades con diferentes versiones etc.
3
MAJOR.MINOR.PATCH
READMETu archivo README es normalmente el primer punto de entrada a tu código. Debe describir para que se debe usar tu componente, cómo pueden instalarlo y cómo pueden usarlo.
Desarrollo
13
@osrecio 30/06/2017
Creación de móduloEstructura básica
Desarrollo
Presentation Logic
Request handling
Configuration
Translations
Tests
Rendering
Register to App
Business Logic
14
@osrecio 30/06/2017
Optimiza tu tiempo
magento2-phpstorm-templatesphpstorm-live-templates-magento-2
LiveTemplates
pestleMage2gen
magento2-code-generator
Code Generationn98-magerun2
n98-magerun
22%
41%10%
25%Este plugin ha salvado a más de un desarrollador
Magicento
Desarrollo
Saber más
phpstorm directory types
Directory Types PHPStorm2%
15
@osrecio 30/06/2017
Calidad de código
Mientras esculpes código te irá informando de tus errores
PHPCS - PHPCBF / PHPMD
Siempre hay que pasar los testTest
No se hace push si hay erroresGrumPHP
Una vez hemos pasado los anteriores steps, estamos
listos para pushear
Push
Automated Code ReviewCodacy / CodeClimate
Desarrollo
16
@osrecio 30/06/2017
Desarrollo
$ composer global require phpmd/phpmd
$ composer config -g repositories.magento composer https://repo.magento.com
$ composer global require magento-ecg/coding-standard
$ composer global require magento/marketplace-eqp
$ export PATH="$PATH:$HOME/.composer/vendor/bin" #Add to .zshrc .bashrc etc
$ phpcs --config-set installed_paths $HOME/.composer/vendor/magento-ecg/coding-standard/,$HOME/.composer/vendor/magento/marketplace-eqp/
$ phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, Ecg, EcgM2, MEQP1 and MEQP2
PHPStormphpcsPreferences > Languages & Frameworks > PHP > Code Sniffer : ~/.composer/vendor/bin/phpcsPreferences > Editor > Inspections > PHP > PHP Code Sniffer validation: select standard from list phpmdPreferences > Languages & Frameworks > PHP > Mess Detector : ~/.composer/vendor/bin/phpmdPreferences > Editor > Inspections > PHP > PHP Code Mess Detector validation: {magento_root}/dev/tests/static/testsuite/Magento/Test/Php/_files/phpmd/ruleset.xml
Configurar PHPCS / PHPMD
Calidad de código
17
@osrecio 30/06/2017
Desarrollo
Tests
Calidad de código
./vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist
Lanzar todos los tests
./vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist app/code/Example/Module/Test/Unit
Lanzar los tests de un módulo
DevDocs Magento
Configurar PHPStorm
magento dev:tests:run <test> <<all, unit, integration, integration-all, static, static-all, integrity, legacy, default>>
Lanzar tests desde Magento CLI
18
@osrecio 30/06/2017
Trabajar con ComposerDesarrollo
Dependency Manager for PHP
19
@osrecio 30/06/2017
Composer¿ Cómo funciona ?
Resolve dependencies
Generatecomposer.lock
Downloadpackages
composer.json
Desarrollo
20
@osrecio 30/06/2017
Composer¿ Cómo funciona ?
SatisRepo
Resolve dependencies
Generatecomposer.lock
Downloadpackages
composer.json
Desarrollo
21
@osrecio 30/06/2017
Desarrollo
$ composer create-project composer/satis --stability=dev --keep-vcs
$ echo ‘{
"name": "Satis Repository",
"homepage": "http://repo.osrecio.com",
"repositories": [
{ "type": "vcs", "url": "https://github.com/osrecio/privaterepo" },
{ "type": "vcs", "url": "http://bitbuclet.org/private/repo" },
{ "type": "composer", "url": "https://repo.magento.com" }
],
"require-all": true
}
‘ > packages.conf
$ php ./satis/bin/satis build ./packages.conf ./packages-mirror
$ php -S localhost:8888 -t ./packages-mirror/
Trabajar con ComposerSatis
Saber más
22
@osrecio 30/06/2017
Trabajar con ComposerDesarrollo
Crear componente aséptico
Crear subcarpetaCreate Subfolder with unique
name
Require componentAdd `require` in project
`composer.json`
Crear carpeta Create Folder in root project
named `i4modules`
Añadir structura componenteAdd module structure, `README.md`,
`CHANGELOG.md`, `composer.json` and `src` (inside this folder will be the
module)
Repository pathAdd repository type path
Begin to developEmpieza con tu lógica de negocio
23
@osrecio 30/06/2017
Trabajar con ComposerDesarrollo
Crear componente aséptico EJEMPLO
24
@osrecio 30/06/2017
Trabajar con ComposerDesarrollo
“Paquetiza” un componente creado previamente
Componente“Paquetizado”
Copiar componente
Añadir git
Crear tag y push
4
5
6
1
2
3
Crear carpeta
Crear Subcarpeta
Crear estructura comp.
Create Folder named `i4modules`
Create Subfolder with unique name
Create Subfolder `src`, add `README.md`,
`CHANGELOG.md` and `composer.json`
Copy Module from `app/code/Interactiv4/{moduleName}` to folder `src`
Init Git, Add Remote, Add files, Commit Files
Create git tag with same version of `composer.json`, Push your code to repo with tag
Como resultado tenemos un repo que podemos añadir a packagist o a
nuestro Satis
25
@osrecio 30/06/2017
Despliegue
26
@osrecio 30/06/2017
Deploy ToolsOpciones
Remote server automation and deployment tool written in Ruby
Capistrano
Magento2 Deployment Setup using Robo and Deployer
MageDeploy2
Deployment tool for PHP
Deployer
Deployment tool for Magento 2 created with PHing
Magento 2 Deploy Tool
Despliegue
27
@osrecio 30/06/2017
CI / CDContinous Integration / Continous Delivery
CodeShip
CodeFresh
Jenkins
GitLab CI / Bitbucket Pipelines *
Circle CI
Despliegue
28
@osrecio 30/06/2017
EjemploDespliegue en Producción
Despliegue
29
@osrecio 30/06/2017
EjemploDespliegue en Producción
Run BuildTrigger Deploy from Jenkins
Run TestsRun Integration, unit, static
tests
Build AssetsChange to production mode,
deploy:compile and deploy:static:content
DeployMultistage deploy with
deployer
Create ArtifactsCreate zip of project to being
deployed to prod env.Tool SetupInstall or update tools for
deploymentMagento SetupClone RepositoryUpdate composer
Despliegue
30
@osrecio 30/06/2017
Consejos
31
@osrecio 30/06/2017
Tips and Tricks
1 Utiliza hirak/prestissimo para paralelizar la descargas con composer
2 Deshabilita el módulo: Magento_Version
3 Parchea Magento a través de composer. James Cowie te explica cómo
4 Ten siempre en tus proyectos una Developer Toolbar, aquí te dejo un par: DT1 y DBT2
5 Si no sabes dónde encontrar cosas de Magento aquí te dejo un par de resources: Awesome Magento 2 y Mageres
6 Sino te acuerdas de todos los comandos del magento cli y estás todo el día con el grep, usa este autocomplete
7 Lee todos los #MagentoMonday que hace Sherrie si quieres estar al día. Están en los foros de Magento
8 Sígueme en Twitter
Consejos
32
@osrecio 30/06/2017
Mis consejos
“Pasa algún tiempo investigando y planificando tareas para dar una
estimación precisa”
Piensa y luego estima
“El mal no deja de estar equivocado porque la mayoría participe en el”
El Core no es el Santo Grial
“No soy un excelente programador; Soy un buen programador con
excelentes hábitos”
Testea todo lo que puedas
“Los pequeños detalles son vitales. Las pequeñas cosas hacen que sucedan grandes cosas”
Cada detalle importa
“La satisfacción radica en el esfuerzo, no en el logro, el pleno esfuerzo es la victoria completa”
Satisfacción
“La innovación distingue a un líder de un seguidor”
Innova
Consejos
@osrecio 30/06/2017
¿ Preguntas ?
Gracias
@osrecio