JRubyに挑戦1
もとの記事は JRuby - FreeStyleWiki
JRuby
環境構築
最初はJavaでSpring-bootを使おうとしたけど、連携の面倒さに辟易したのでJRubyを試してみる。
- 他の人にもインストールさせると想定してAtomを使ってみる
結局, Atom v1.19.6でatomic-emacsパッケージをインストールした。
適当にインストーラからインストールすること、バージョン 9.1.13.0
>jruby --version Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 jruby 9.1.13.0 (2.3.3) 2017-09-06 8e1c115 Java HotSpot(TM) 64-Bit Server VM 25.112-b15 on 1.8.0_112-b15 +jit [mswin32-x86_64]
- Git
> apm install git-plus
ターミナル
bundler, railsコマンドを使いたいので以下を導入
- ここのレビューを参考にした Atomで使えるTerminalをいくつか試してみた
- Atomで使えるTerminalをいくつか試してみた
Atomを導入済みであれば、apmコマンドでパッケージをインストールできるはずなので、そうする。
> apm install platformio-ide-terminal
再起動したら Ctrl+バッククォート というすっごいわかりにくいショートカットで起動する
起動した図、これは結構うれしい
JRuby on Rails
- GettingStarted
GettingStarted · jruby/jruby Wiki · GitHub を見て、まずはRailsを入れる。
> jruby -S gem install rails
実行すると、java版のいろいろなライブラリが入る。ネイティブ(C言語連携してるやつ)のライブラリに関してはjavaで書き直す必要があったのだろう。
終わったらさっそく rails new <プロジェクト名> で作成する
→ 動きませんでした…
Hanami on Jruby
それでは、ということで最近話題のHanamiを動かしてみる
> jruby -S gem install hanami > jruby -S hanami new generic-dao-jruby > cd generic_dao_jruby > jruby -S bundle install > jruby -S bundle exec hanami s
動いた!
Hanamiについての見解
自分がHanamiフレームワークを知ったのは、以下の記事がはてブでバズっていたからです。RubyやJavaでWEB開発をしている人はぜひ見てみてください。
Rubyist Magazine - HanamiはRubyの救世主(メシア)となるか、愚かな星と散るのか
MVCにService層を追加する
WEBシステムを作る際、もはやModel/View/Controllerを分けることは古典的しぐさです。しかしながら、それなりに大きなシステムを作っていくとビジネスロジックが肥大化します。書き方が素人だとModelのコードがぐちゃぐちゃになりバグの温床になります。JavaだとそのへんService層を作るのですが、Railsだとそれがデフォルトでは存在しないのでどうやっていくか自分で考えないといけません。
Qiitaにもそれを行っている記事があります
qiita.com
Hanamiの試みとは?
Hanamiはサービス層をデフォルトで装備したフレームワークです。不勉強で知らなかったのですがこれは ドメイン駆動設計 - Wikipedia 発祥の考え方のようです。
先ほどの文章の中に、Hanamiが解決したい問題が垣間見えます*2
Railsプロジェクトに蔓延した Fat Model 、 Fat Controller 、信用できないテスト、層をまたいで依存したビジネスロジック、 難解で巧妙な Model 同士のやり取り、Rails Mountable Engine を用いた独自ルールや DSL だらけの gem 、 eager loading に頼り切った非効率な SQL 、ロジックまみれの View ……。 メンテナンス性を下げる要因はたくさんあるが、共通して言えることは、複雑な要件に対して簡単すぎる設計をしてしまっていることだ。 しかもこれらのコードの不吉な匂いは、システムをローンチする頃には既に漂い始めている。
Hanamiはこれからも発展していってほしいプロジェクトです。