Crear aplicaciones web con Ruby on Rails es un disfrute total. Este framework nos brinda muchas características para ser productivos muy rápidamente y enfocarse en hacer software y no tanto en configuraciones o resolver problemas con soluciones ya dadas.
Rails ofrece tantas cosas que uno no termina de enterarse de todo. Así me pasó cuando descubrí que existen plantillas para Ruby on Rails. Similar a una plantilla para WordPress, la cual trae diseño visual y complementos, una plantilla para Rails puede ofrecer un gran número de características extra o configuraciones adicionales para empezar aún con más ventaja un proyecto nuevo.
Son una especie de bonus track que el framework permite. A continuación las menciono un poco, explico al respecto y comparto algunas cosas que descubrí al crear la propia para Dev As Pros.
¿Por qué crear/usar una plantilla?
Para ahorrar aún más tiempo.
Ruby on Rails ofrece muchas cosas ya listas para usar, sin embargo, hay otras que pueden volverse repetitivas según el estilo de trabajo. Por ejemplo, en Dev As Pros hubo una ocasión donde tuve que iniciar dos aplicaciones Rails desde cero pero en ambas tuve que configurar las mismas cosas.
Con una plantilla, habría creado las aplicaciones dos veces pero con todo ese trabajo de configuración ya listo. Obviamente hay una inversión de tiempo previa pero se vuelve en ahorro por cada vez que se use la plantilla.
Viene muy bien a agencias, a desarrolladores Rails freelance que están trabajando frecuentemente en software desde cero o incluso para cualquier otro dev que esté probando cosas nuevas o sacando ideas. En verdad ayudan mucho a ahorrar tiempo y esfuerzo.
¿Qué cosas ayudan a ahorrar tiempo?
Veamos una lista:
- Autenticación y autorización lista para usar
- Sistemas de pago integrados
- Diseño visual integrado (sea con Bootstrap, Foundation o Tailwind)
- Configuraciones de rutas para API
- Listas de gemas ya configuradas
- etc, etc
Casi que todo lo que uno haga en un proyecto Ruby on Rails se puede configurar en una plantilla.
¿Cómo se usa una plantilla?
Supongamos que identificamos una que esté libre en GitHub, la podemos usar así para crear una app Ruby on Rails nueva:
$ rails new MySuperApp \
-d postgresql \
-m https://raw.githubusercontent.com/mattbrictson/rails-template/main/template.rb
El comando instalará el proyecto Rails con todo lo que la plantilla tenga por configurar.
Sobre Puntapie
Puntapie es el proyecto que hice para tener una plantilla Ruby on Rails para proyectos futuros. La hice pensando en el futuro y también por la curiosidad de aprender cómo funcionan. Aquí dejo algunas cosas que descubrí.
Lo mejor de querer hacer una plantilla es que hay buena información además que se puede partir de otras ya existentes. En mí caso, fue así como hice y luego fui modificando y adecuando a lo que yo quería tener.
En las guías de Rails podemos encontrar el paso a paso de cómo empezar desde cero e información sobre todos los comandos disponibles para generar los archivos necesarios del proyecto.
Vale la pena destacar que en esto juegan dos cosas. Por un lado varios comandos que Rails ofrece y también otros que vienen de una gema llamada Thor. Esta librería es una dependencia de Rails pero en el proceso terminé usando varias funciones directamente por conveniencia.
Algunos comandos que son de Thor:
Esta es la forma de forzar un copy_file:
copy_file "file_name", force: true
Estos otros son de Rails:
Al final, me di cuenta que tan sencillo es crear una plantilla, me pregunté por qué no lo había hecho antes y descubrí que el proceso es bastante directo: una plantilla es una serie de comandos a ejecutarse para generar un proyecto Ruby on Rails.
Así luce la parte final de Puntapie la cual llama todas las funciones para lograr el resultado esperado:
# Main setup
add_template_repository_to_source_path
template "Gemfile.tt", force: true
after_bundle do
set_application_name
disable_default_generators
stop_spring
add_users
add_authorization
add_webpack
add_javascript
add_sidekiq
copy_templates
add_whenever
configure_rspec
active_storage_setup
add_action_mailer_configs
setup_exception_handler
# Commit everything to git
unless ENV["SKIP_GIT"]
git :init
git add: "."
# git commit will fail if user.email is not configured
begin
git commit: %( -m 'Initial commit' )
rescue StandardError => e
puts e.message
end
end
say "To get started with your new app:", :green
say " cd #{app_name}"
say
say " Update config/database.yml with your database credentials"
say
say " rails db:create db:migrate"
say " foreman start # Run Rails, sidekiq, and webpack-dev-server"
end
Claro está, llegar a ese paso final tomó tiempo y pruebas por varios días e iteraciones.
Plantillas que hay por ahí
Estas son algunas plantillas con muchas cosas interesantes. Algunas son de libre uso, otras requieren pagar una licencia de uso.