Save 37% off PRO during our Black Friday Sale! »

L’expérience développeur dans Drupal 8 : améliorons-la !

L’expérience développeur dans Drupal 8 : améliorons-la !

A7e7c34aaa3ff7eb359b6449fb8bb043?s=128

Thomas Calvet

February 15, 2019
Tweet

Transcript

  1. Thomas Calvet - fancyweb L’expérience développeur dans Drupal 8 Drupalcamp

    Paris 2019 Améliorons-la !
  2. DevelopereXperience 2 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  3. Developer experience 3 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Kind of the same concept than the User eXperience applied to development • The user is the developer • But we are more demanding • And the scope is larger
  4. Drupal DX has even more aspects 4 Drupalcamp Paris 2019

    - L’expérience développeur dans Drupal 8 : améliorons-la ! • Several developer profiles • Site builder • Theme builder • Custom module maker
  5. So, whatisthe topic today? 5 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la !
  6. This talk is about 6 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Your custom code • Daily development • Avoid repetitive tasks • Help new Drupal developers
  7. This talk is not about 7 Drupalcamp Paris 2019 -

    L’expérience développeur dans Drupal 8 : améliorons-la ! • Admin part • Core architecture / code • Documentation • Contribution
  8. Examplesof DX features 8 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la !
  9. Provide shortcuts 9 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Abstract implementations • Functions, methods, classes, traits • The goal is to hide a complexity
  10. Throw exceptions 10 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Handle common users mistakes • Be defensive • Throw an exception • With a useful message
  11. Simple things 11 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • A small UI change • An up to date PHPDoc • Rename a test class • Etc.
  12. Whydoesitmatter? 12 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  13. Why does it matter? 13 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Less frustration • Increased productivity • A better reputation • Attract more users
  14. Return on experience 14 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la !
  15. Who am I? 15 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Thomas Calvet - fancyweb • 6 years experience in PHP • Long time Symfony user and enthusiast • New Drupal developer
  16. Drupalisnot readyfor developmentout of the box 16 Drupalcamp Paris 2019

    - L’expérience développeur dans Drupal 8 : améliorons-la !
  17. Missing concepts 17 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • No « debug » mode • No « environment »
  18. Examples 18 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  19. Display exceptions and errors 19 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! sites/default content
  20. Display exceptions and errors 20 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Step 1
  21. Display exceptions and errors 21 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Step 2
  22. Display exceptions and errors 22 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Step 3
  23. Display exceptions and errors 23 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Step 4
  24. Display exceptions and errors 24 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • A basic and common need • Way too many steps for a new Drupal developer • It should be enabled from the start in local
  25. Drupal cache system 25 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! 13 tables of cache data
  26. Drupal cache system 26 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Cache data content is unreadable
  27. Drupal cache system 27 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Clearable caches with drush
  28. Drupal cache system 28 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Hard to master • Lots of terms : internal, dynamic, Twig, render, keys, tags, context, max age • Even way harder to understand for the front developers
  29. It leads to bad habits 29 Drupalcamp Paris 2019 -

    L’expérience développeur dans Drupal 8 : améliorons-la ! • You must clear a cache but you don’t know which one • So you clear all cache • Precious seconds wasted everytime
  30. Are thereinitiatives? Yes! 30 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la !
  31. From the community 31 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Drupal console commands • drush commands • Devel module
  32. From the core 32 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • D8DX: Improving the D8 developer experience https://www.drupal.org/community-initiatives/drupal-core/d8dx • List DX issues • Provide a common vocabulary
  33. Proposingsomethingnew 33 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  34. ekino/drupal-debug https://github.com/ekino/drupal-debug 34 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Open source third party library • Improve your DX during the development process • Help you develop better and faster • Reuse well known and well tested open source components
  35. Provide actions 35 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • An action is a class that does something • Each action has an unique goal • 16 actions at the moment
  36. Drupaldevelopment configuration 36 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  37. Disable CSS & JS aggregations 37 Drupalcamp Paris 2019 -

    L’expérience développeur dans Drupal 8 : améliorons-la ! Before After
  38. Disable CSS & JS aggregations 38 Drupalcamp Paris 2019 -

    L’expérience développeur dans Drupal 8 : améliorons-la ! What it replaces
  39. Override Drupal configuration 39 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Global $config variable • Normally, you modify it in the settings.php file • The library just override everything after the settings initialization
  40. DisableDrupalcaches 40 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  41. Disable Drupal caches 41 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! What it replaces
  42. Override Drupal settings 42 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Settings class singleton • Normally, you modify it in the settings.php file • The library just override everything after the settings initialization
  43. Twigdevelopment configuration 43 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  44. Enable Twig debug 44 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Before After
  45. Enable Twig debug 45 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! What it replaces
  46. Override Twig configuration 46 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Twig configuration is defined by parameters • Override those parameters before the container compilation • Twig cache is also disabled with this way
  47. Display more information in a prettierway 47 Drupalcamp Paris 2019

    - L’expérience développeur dans Drupal 8 : améliorons-la !
  48. Display pretty exceptions 48 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Before
  49. Display pretty exceptions 49 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! After
  50. Display pretty exceptions 50 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Use Symfony HttpKernel component ExceptionListener • Use Symfony Debug component ExceptionHandler • Available after the environment boot, so very early
  51. Enable Debug class loader 51 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Provide better exceptions messages for case sensitive filesystems
  52. Enable Debug class loader 52 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Use the Symfony Debug component DebugClassLoader class • Wrap your autoloader (a Composer ClassLoader instance most likely) • Also does lightweight static analysis when a class is loaded
  53. Display dump location 53 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Before
  54. Display dump location 54 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! After
  55. Display dump location 55 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • Use the Symfony VarDumper component • Define a custom handler
  56. Enforcegood practices 56 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  57. Throw errors as exceptions 57 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Code example
  58. Throw errors as exceptions 58 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Before
  59. Throw errors as exceptions 59 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! After
  60. Throw errors as exceptions 60 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • PHP errors must be handled • Use the Symfony Debug Component ErrorHandler class • Set a custom error handler that rethrow PHP errors as exceptions
  61. Enable Twig strict variables 61 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Code example
  62. Enable Twig strict variables 62 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Before
  63. Enable Twig strict variables 63 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! After
  64. Invalidatecaches automatically 64 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  65. Watch actions 65 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Detect files creation, alteration and deletion • Invalidate a cache • 3 actions at the moment
  66. Watch container definitions 66 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Default watched files
  67. Watch modules hooks implementation 67 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! Default watched file
  68. Watch routing definitions 68 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Default watched file
  69. Watch systems 69 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • A resources freshness checker system • A file resource is tied to an extension • A file cache system • A file backend cache system
  70. How doesitwork? 70 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  71. It could not be a module 71 Drupalcamp Paris 2019

    - L’expérience développeur dans Drupal 8 : améliorons-la ! • Modules are handled too late in the boot • Some actions would be impossible to implement • It would need to be enabled on first use • It would need to be managed to not be used on production
  72. Use another Kernel 72 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! Drupal front controller
  73. Use an alternative Kernel 73 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Extends the Drupal Kernel • Dispatch events • Alter the container definitions
  74. Substitutingthe original DrupalKernel 74 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la !
  75. How does the substitution work? 75 Drupalcamp Paris 2019 -

    L’expérience développeur dans Drupal 8 : améliorons-la ! • Create a copy of the DrupalKernel on the fly • Use another name • Replace paths references • Alias the DrupalKernel with our DebugKernel
  76. The substitution is great 76 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • The library works out of the box • The Debug Kernel is used by any third party library that woud normally use the Drupal Kernel
  77. The substitution is bad 77 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Compatibility problems • Disable it to test a behavior with caches enabled • Disable it for all your tests
  78. Configuration 78 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  79. Default configuration 79 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la ! • Some actions are configurable with options • Not mandatory because there are defaults values • Configuration is done in a YAML file • Some with environment variables
  80. Requirements 80 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  81. Requirements 81 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la ! • Composer • PHP >= 7.1 (last supported stable version) • Drupal >= 8.6 (latest minor version)
  82. What’snext? 82 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la !
  83. Improvements 83 Drupalcamp Paris 2019 - L’expérience développeur dans Drupal

    8 : améliorons-la ! • On existing actions • Optional actions • Configuration by action
  84. More actions and features 84 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Watch themes hooks implementations • Watch libraries (JS & CSS files) • Support third parties actions
  85. The hidden goal 85 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • A wake up call! • To have a debug mode in the Drupal core • To have more DX initiatives in the Drupal core
  86. Final thoughts 86 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !
  87. An enriching experience 87 Drupalcamp Paris 2019 - L’expérience développeur

    dans Drupal 8 : améliorons-la ! • For me • For Drupal • For Symfony
  88. Is the community interested? 88 Drupalcamp Paris 2019 - L’expérience

    développeur dans Drupal 8 : améliorons-la ! • Is it useful for a lot of developers? • Find first users and testers • Eventually find contributors
  89. Thank you, for your attention. Any questions?

  90. https://github.com/ekino/ drupal-debug 90 Drupalcamp Paris 2019 - L’expérience développeur dans

    Drupal 8 : améliorons-la !