Hanami 1.2.0 追加機能


昨日Hanamiのバージョン1.2.0がリリースされたので変更点をまとめたいと思います。

HTTP/2 Early Hints

HTTP/2のあたらしいステータスコードであるEarly Hintsに対応しました。
以下のように設定すれば有効化されます。

# config/puma.rb
# ...
early_hints true
# config/environment.rb
Hanami.configure do
  # ...
  early_hints true
end

Unobtrusive JavaScript (UJS)

日本語で控えめなjavascriptですね。
rails4で言うところの

form_for @user, remote: true

がサポートされました。
使用方法はまずhanami-ujsGemfileに追加します。

そしてapps/web/templates/application.html.erbを以下のように修正します

  1. <head>の中に<%= csrf_meta_tags %>を追加する。
  2. <%= javascript 'hanami-ujs' %>を任意の場所に追加する。(</body>の直前がおすすめです。)

これで設定は終わりです。実際に使用する場合は

<%=
  form_for :search, "/search", remote: true do
    # ...

    submit "Search"
  end
%>

このようにすれば使用できます。

新しい開発者のためのエラーページ

better_errorsをもとに新しいhanami-webconsoleが追加されました。
これはアップデートすればデフォルトで設定されるようです。

※追記
デフォルトでは入らないみたいです
hanami-webconsoleを使用するにはGemfile

group :development do
  gem 'hanami-webconsole'
end

を追記します。
さらに条件があり、shotgunのコードリローディングと互換性が無いようなので、
以下のようにコードリローディングを無効化して起動する

$ bundle exec hanami s --no-code-reloading

もしくはGemfile以下を追記しコマンドを実行

group :plugins do
  gem 'hanami-reloader'
end
$ bundle exec hanami g reloader

あとはいつものように

$ bundle exec hanami s 

で起動するだけでリッチなエラー画面が出るようになります

CLI hook

Hanamiのcliにhookを仕込めるようになりました。

使用方法は以下の2つあり、以下のようにブロックで処理を渡すか、

Hanami::CLI.after("db migrate") do
  puts "the database has 23 tables"
end

#callを実装したクラスのインスタンスを引数として渡すかのどちらかです。

class DatabaseTableCounter
  def call(*)
    puts "the database has 23 tables"
  end
end

Hanami::CLI.after "db migrate", DatabaseTableCounter.new

Project Rack middleware

これはgem開発者向けの機能ですが、
Rack middlewareをuseする新しい方法として、以下のような使用が認められるようになりました。

Hanami.plugin do
  middleware.use BetterErrors::Middleware
end

これによりgem側でrack middlewareのuseを強制させることが可能になりました。

Custom repositories commands

Hanamiでromcommandsが使用できるようになったようです。

例えば複数のレコードを一括で登録したい場合に以下のような方法で実現することができるようです。

class TaskRepository < Hanami::Repository
  def create_many(data)
    command(create: :tasks, result: :many).call(data)
   end
end

これに関しては詳しいことはちょっとわからないので、後日追記したいと思っています。

おわり

以上が今回のアップデートで追加された機能です。
もちろんバグ修正もいくつか含まれているようです。

またHanami 2.0.0の開発も始まったようです。
個人的にはrubyといえばの中にHanamiも入ることを願ってます

皆さんもEnjoy Hanamiしましょう!