虚無庵

徒然なるままに

Fukuoka.rb #105 に行ってきた

fukuokarb.connpass.com
グルーヴノーツさんに行ってきました。

前回のおさらい

  • VirtualBox にインストールしている Debian の 2300 番ポートをこじ開ける

結論から書くと、こじ開ける必要はなかった。

$ rbenv exec bundle exec hanami server --host=0.0.0.0

Rails を動かすときも

$ rbenv exec bundle exec rails server -b 0.0.0.0

とやっていたのに何故 hanami だとやらなかったのか…。

今回やったこと

  • OneMDM を hanami に移植してみる

Rails で動いているものを hanami に移植することはできないだろうか?」と考えたのが発端。Rails と hanami ではアーキテクチャーの基本理念が異なるので容易ではないと思うが、さて如何に。
前提としては「資産として OneMDM の環境構築で作った DB を可能な限り再利用して hanami へと移植する」というものだけにした。多分、他の資産はあまり使えないと思ったので。

まず最初に

CentOS 上では構築していた OneMDM の環境を、再度 Debian 上でも構築する。構成は以下の通り。

CentOS では MySQL 8 にしたが、MySQL で躓きたくなかったのと、先に hanami で遊ぶように作った DB が 5.7 だったのでそのまま 5.7 にした。Sequel Pro から参照できて楽。
動かすところまではサクッとできた。以前苦労して構築しただけあってすぐできたが、Vagrant なり何なりでもうちょい楽できるようにしておけば良かった。が、そこは本筋ではないのでまたいつか。
それよりも Rails 上での Rspec が通ってなかったので、通るように修正。FactoryGirl を FactoryBot に置き換えるのはすぐ終わるが、model の rspec で「undefined method `validate_presence_of」や「undefined method `belong_to'」が出ていた。ぐぐると 「shoulda-matchers のバージョンを下げると解消する」とか見つけたが、このエラーに関しては放置。hanami には Model ではなく Entities/Repositories という概念で OR マッピングしてそうなのでテストとして必要かの判断がつかなかった。ひとまず、必要そうになってから考えることにした。

いざ移植

hanami は BDD を推奨しているので rspec の資産を流用できそうと考え、Rails の controller の試験のみをまずは移植してみることにする。まずは dashboard 画面から。

そして課題にぶち当たる

すんなり行かないのは予想していたが、いきなり難問にぶちあたった。ActiveAdmin をどうやって移植するか?以前にもブログで書いたと思うが、Rails で管理画面を簡単に構築できる gem である。こやつが Rails そのものの機能を拡張して(= モンキーパッチを利用して)実現していそうなのである。るびまによると hanami はモンキーパッチを非推奨にしているので、これの解決がかなりしんどそう。

HanamiはRubyの救世主(メシア)となるか、愚かな星と散るのか

ActiveAdmin のコードを読むのが正しいアプローチだと思うのだが、そこまで時間をかけたくない。さて、どうしたものか。というところで時間切れ。

次回 Fukuoka.rb

fukuokarb.connpass.com

弊社で開催します。ご参加お待ちしております。