なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

JRubyに挑戦1

もとの記事は JRuby - FreeStyleWiki

JRuby

環境構築

最初はJavaでSpring-bootを使おうとしたけど、連携の面倒さに辟易したのでJRubyを試してみる。

IDE

  • 他の人にもインストールさせると想定してAtomを使ってみる

qiita.com

qiita.com

結局, 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

qiita.com

> apm install git-plus

ターミナル

bundler, railsコマンドを使いたいので以下を導入

Atomを導入済みであれば、apmコマンドでパッケージをインストールできるはずなので、そうする。

> apm install platformio-ide-terminal

再起動したら Ctrl+バッククォート というすっごいわかりにくいショートカットで起動する

起動した図、これは結構うれしい

f:id:panzer-jagdironscrap1:20170920210337p:plain

日本語化

  • apm install japanese-menu して再起動
> apm install japanese-menu

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

動いた!

f:id:panzer-jagdironscrap1:20170920210616p:plain

Hanamiについての見解

自分がHanamiフレームワークを知ったのは、以下の記事がはてブでバズっていたからです。RubyJavaでWEB開発をしている人はぜひ見てみてください。

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

MVCにService層を追加する

MVCというのはご存知ですね?*1

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はこれからも発展していってほしいプロジェクトです。

*1:わからなければブラウザバックしてください

*2:この文書のうちのほとんどはJavaにも当てはまる設計の問題である、勉強すべし