花火 Ver. 3.0 が全面咲くのを間近に

2026/07/02 2:41

花火 Ver. 3.0 が全面咲くのを間近に

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Hanami 3.0 は、Ruby 3.3+ の必須サポートと大幅なパフォーマンス向上を原動力とした Web アプリケーション開発における重要な進化を表します。デフォルトでは、メモ化されたコンポーネントとアップフロントのアクション構成スナップショットによる割り当て削減により、HTTP 上のリクエストの実行速度がほぼ 3 倍に向上し、tail latency は 89ms から p99 で 4ms に削減されました。メモリ消費量はバージョン 2.3 と比較して著しく低下しています。本アップデートは以下の 3 つの主要な新機能を導入します:

t()
および
localize
ヘルパーを備えた内蔵型国際化(i18n)、デフォルトの RSpec フレームワークとの併用でネイティブな Minitest サポート、そして SMTP、インメモリなど複数の配信方法をサポートし、依存性の注入を通じてファーストクラス市民として動作する統合型メールャーです。内部的にはエコシステムが近代化されており:
hanami-controller
ジェムは
hanami-action
に改名され、バリデーションロジックは
hanami-validations
から
dry-validation
の直接使用へと移行し、アクション構成にmultipart フォームおよび JSON によるリクエストボディパースが標準装備されています。ビューの露出は明示的に要求される場合を除きデフォルトで装飾されず、アセットウォッチングは画像やフォントなどの静的アセットの追加・削除を処理する際に再開始を行いません。ローギンは開発環境でデフォルトカラー化、
:debug
レベルで SQL ステートメントがログ出力され、キーワード引数および
#tagged
ブロックを用いた一貫した構造化インターフェースへと改善されています。その他の微調整には、新しいジェネレーター(
provider
,
mailer
)、ジェネレーターの
--force
オプション、ならびに
gem.coop
への対応が含まれます。これらの変更により、より効率的で国際化されかつリソースフットプリントが小さいアプリケーションが可能となりますが、古い Ruby 環境をバージョン 3.3 以上にマイグレーションする必要があります。

本文

ハナミ 3.0 のリリース!モジュール化された Ruby フレームワークへの進化

ハナミは当初から、明確でモジュール化され、拡張性を備えたシステムという方針で開発されてきました。本日、その方針に沿った ハナミ 3.0 が正式に発表されます!今回のリリースでは、フレームワークを以下の 三大新機能 とパフォーマンスの劇的な向上で大幅に進化させました。

🚀 メインの新機能と強化点

  • メーラー(メール送信機能):以前失くしていた機能が戻ってきました。
  • 国際化(i18n):アプリケーションの世界展開が容易になりました。
  • Minitest テストフレームワークへの対応:RSpec と Minitest の両方をサポートします。

これらに加えて、デフォルト設定での高速化やログの明確化など、開発体験全体の向上を図っています。


📧 一等市民待遇のメーラー機能

統合されたメーラー機能が標準搭載され、アクション、ビュー、操作(operations)と調和した形で利用できるようになりました。

メーラークラスの基本構造

メーラークラスは、メール送信に必要なすべての要素を記述します。

module Bookshelf
  module Mailers
    class Welcome < Bookshelf::Mailer
      from "welcome@bookshelf.test"
      to { |user:| user.email }
      subject { |user:| "Welcome to Bookshelf, #{user.name}!" }

      expose :user
    end
  end
end
  • オブジェクト指向アプローチ:スタンドアロンのオブジェクトとして機能し、
    Deps
    ミクシンを介して依存注入可能です。
  • 自動ヘッダーとテンプレート
    .deliver
    メソッドを実呼ぶだけで、入力値を使用したヘッダー準備およびビュー層の機能を取り入れたメール描画を行います。

配信方法の柔軟性

  • 標準 SMTP:SMTP ホストの環境変数設定だけで利用可能です。
  • テスト環境:メールはメモリ上に蓄積され、確認・検証が可能です。
  • 高度なカスタマイズ:独自の配信メソッドを記述可能で、配信オプションのチェーン(連鎖)化をサポートしています。

ハナミ メーラーは低レベル処理を担当する名作 mail gem を基盤としています。


🌍 インターナショナル化(i18n)機能内蔵

アプリケーションの世界展開が今よりずっと簡単になりました。「i18n」gem が直接組み込まれ、翻訳バックエンドの設定やヘルパーが即座に利用可能です。

翻訳データの管理

翻訳データは

config/i18n/
ディレクトリに格納されます。

config/i18n/en.yml

en:
  posts:
    index:
      title: "Latest posts"
    create:
      created: "Your post is live!"
  greetings:
    welcome: "Welcome, %{name}!"

翻訳ヘルパーの利用例

  • ビュー内
    <h1><%= t(".title") %></h1>
    
  • アクション内
    def handle(request, response)
      response.flash[:notice] = t(".created")
      # ...
    end
    
  • 独自コンポーネント内
    Deps["i18n"]
    を介して取得):
    class Greeter
      include Deps["i18n"]
    
      def call(name)
        i18n.t("greetings.welcome", name:)
      end
    end
    

ローカライゼーション(フォーマット設定)

localize
ヘルパーにより、日付や時刻を現在のロケールに合わせてフォーマットできます。

localize(Date.new(2026, 5, 22))
# => "Fri, 22 May 2026"

localize(Time.new(2026, 5, 22, 9, 5), format: :short)
# => "22 May 9:05 am"

✅ Minitest との連携

ハナミは従来の RSpec セットアップを維持しつつ、新しい Minitest サポートを追加しました。アプリケーション生成時にテストフレームワークを選定可能です。

クイックスタート:Minitest 採用

$ hanami new my_app --test=minitest
  • RSpec はデフォルトですが、必要であれば Minitest を採用できます。
  • 同等の完全なセットアップ環境が即座に提供されます。

🚄 デフォルト設定で大幅に高速化

ハナミ 3.0 は導入直後から恩恵を受けるレベルの劇的な速度向上を達成しました。

パフォーマンスの目覚ましい改善

  • スループット向上:HTTP を介した同一リクエストの実行速度が約 3 倍 に向上。
  • メモリ使用量低減:テスト用アプリケーションでのメモリ使用量は微々たるものとなり、リクエストあたりの割当(allocation)数は約 14 倍 減少。
  • タイルラテンシー縮小:p99 が 89ms から 4ms に急落。

なぜ这么快?

  • コンポーネントのメモ化:コンテナ内の各コンポーネントは一度解決すれば再利用され、再構築がなくなります。
  • アクション設定のスナップショット化
    Hanami::Action
    が各アクションの設定を事前に取り込むため、リクエストごとの再計算が不要に。
    • 最小限のアクションでは割当数が 88 → 17 に減少(約 3.7 倍 高速化)。
  • ビュー描画の最適化
    Hanami::View
    が設定スナップショット処理を受け、余計な装飾処理が不要に。
    • 最小限の描画では割当数が 100 → 42 に減少(約 2.9 倍 高速化)。

これらすべての機能は無料で利用可能です!アップグレードだけでコード変更なしで高速化を実現できます。


📝 より明確で有用なログ

開発から本番環境まで、ログ機能を見直しました。

  • 開発環境:デフォルトでカラー化されたログが表示され、SQL ステートメントも統一フォーマットに整形されます。
    rouge
    gem をバンドルすれば構文ハイライトも可能。
  • SQL ログの抑制:本番環境での出力を静かにするため、SQL ステートメントのログレベルが
    :info
    から
    :debug
    へ変更されます(
    config.db.log_level
    で調整可能)。
  • 環境変数設定:アプリケーションクラス内の設定よりも優先される
    HANAMI_LOG_LEVEL
    環境変数でログレベルを簡便に設定可能。

ハナミは内部構造においてロギングのインタフェースを不変化し、以下の機能を標準で保証します:

  • 構造化ロギング:キーワード引数を通じて標準メソッドからアクセス。
  • タグ付きロギング
    #tagged
    ブロックを通じてログ付けが可能。

📦 よりスムーズなアセットウォッチ

「hanami assets watch」 は作業ペースに追従するよう進化しました。

  • 新規・削除されたエントリーポイントや、静的アセット(画像、フォントなど)の変更をリアルタイムで検出。
  • 監視プロセスの再起動が必要なくなるとおり、開発フローが妨げられる心配がありません。

また、あらゆるアセットバンドラーがハナミへのクリーンなプラグイン方法を規定する仕様を制定しました。当社のバンドラー(esbuild 系)を基盤としつつ、バンドラーロックインを防ぎ、ユーザー自らの好きなバンドラーの導入を歓迎しています。


🔄 ハナミ アクションへボディパーサー機能の統合

リクエストボディのパース処理が Middleware から取り出され、ハナミ アクション内に移転しました。

  • フォーマット駆動型:アクションは受け入れるフォーマットに合わせて正確にパースを行ないます。
  • 標準パーサー搭載:Multipart フォームボディと JSON パーサーが標準で利用可能。
  • カスタムパーサー登録:必要であれば独自のパーサーを登録できます。
formats.register(:custom, "application/custom", parser: ->(body, env) { ... })

🎨 装飾されなかったエクスポジションによるシンプル化されたビュー

現在、ビューのエクスポジション(exposure)はデフォルトで装飾されません。テンプレートは要求通り受け取り、余計な作業を避けます。

  • 明示的な装飾が必要な場合:新しい
    .decorate
    メソッドを使用します。
  • 従来の動作に戻したい場合
    config.decorate_exposures = true
    を設定します。

🧹 よりクリーンな基盤

メジャーバージョンアップで基盤を整理整頓しました。

Gem 名の統一と廃止

  • hanami-controller
    hanami-action
    に改名(クラス名と一致)。
    • 依存関係設定時は
      hanami-action
      または
      hanami/action
      を使用してください。
  • hanami-validations
    廃止。ハナミ アクションが直接
    dry-validation
    を呼び出すため、不要な中間 gem を省きました。

Ruby バージョン必須化

ハナミ 3.0 では Ruby 3.3 またはそれ以降の使用を必須としています。 これにより動く部品が減り、gem の名前は明確になり、アプローチが容易になりました。


✨ さらに多くの機能!

  • ジェネレーター強化
    • 新しい「hanami generate provider」と「hanami generate mailer」を追加。
    • 全てのジェネレーターに
      --force
      オプション(既存ファイル上書き)を付与。
    • hanami new
      にアプリ名空間を別途設定する
      --name
      オプション追加。
    • hanami new
      gem.coop
      から gem をインストール可能に。
  • テンプレートエンジンの可視化
    • エンジン用のテンプレート作成時に
      --template-engine
      オプション対応(erb, haml, slim)。
    • 生成されたアプリケーションは Puma 7.1 を要求し、アプリプリローディング用テンプレート削除。
  • ルーターの明確化
    • ルーター内に明示的なリダイレクトヘルパー(
      permanent_redirect
      ,
      temporary_redirect
      )を追加。通常のリダイレクトには明示的な
      code:
      引数が必要に。
  • 設定検索の効率化:複数のストア間で設定検索を連鎖させるための
    Hanami::Settings::CompositeStore
    を追加。
  • スライスの返却変更
    Hanami::Slice.with_slices
    がすべてのスライス(ネストを含む)を返すようになった。
  • ビュー情報のエクスポート:現在描画中のテンプレート名を
    template_name
    および
    current_template_name
    としてエクスポート(相対 i18n キー検索対応)。
  • エラーハンドリング改善:ルートが存在しない場合、スライスを Rack アプリとして呼び出すための便利なエラーを抛出するように改良。
  • ハナカイの新しいウェルカム画面:美しいビジュアルを実装(感謝 マックス!)。

📢 是非お試しください!

ハナミ 3.0 の新しいアプリケーションは数コマンドですぐに始められます。

$ gem install hanami
$ hanami new my_app
$ cd my_app
$ bin/hanami dev
$ open http://localhost:2300

あなたの活用状況について聞きたいです!フォーラムやチャットで声をかけてください。私たちはコミュニティを非常にフレンドリーに保ち、常にハナミの旅路にお手伝いすることに喜んでおります。

2.3 からのアップグレード

すでに 2.3 を使用中の方は、3.0 アップグレードノート をご確認ください。


👏 コントリビューターへのご感謝!

今回のリリースに貢献してくださった皆様:

  • Aaron Allen, Adam Lassek, Carolyn Cole, Edouard, Jane Sandberg
  • Joshua Young, Konstantin Haase, Kyle Plump, Matthew Stanton
  • Max Wheeler, Paweł Świątkowski, Philip Arndt, Ramón Valles
  • Sean Collins, Tim Riley, Wout, Yi Sangwon

ビジネススポンサーへ:

  • 🥇 Sidekiq:プラチナスポンサー
  • 🥈 Brandon Weaver:ゴールドスポンサー
  • 🥉 Honeybadger, FastRuby.io, AppSignal, SerpApi:シルバー・スポンサー

GitHub Sponsors および Open Collective を通じた個人の方々の支援も大いに感謝申し上げます。

本日、ハナミは満開を迎えていますが、庭園は決して完成するものではありません。その実現のためには、皆様の支援が不可欠です。ぜひスポンサーの仲間になってください。

同じ日のほかのニュース

一覧に戻る →

2026/07/02 7:03

ZCode:GLM-5.2 ハーネス

## Japanese Translation: ## サマリー: ZCode は、Deep GLM-5.2 の機能を「エージェント型」のワークフローに統合することでソフトウェア開発を革命化し、エンジニアがレガシーなモノリシックアーキテクチャからリアルタイム機能のデプロイへと移行することを可能にします。当プラットフォームは、Goals を通じた長期間にわたるタスクへの継続的な計画をサポートし、ユーザーが WeChat、Feishu、Telegram などのメッセージングアプリを通じてセッションを導くことを可能にします。提供されるのは柔軟な 3 つの料金プランです:小規模なリポジトリ向けで Base ユーザー数に基づいた「ライトウェイト(軽量)プラン」16.2 ドル/月、中規模なリポジトリ向けでユーザー数を 5 倍にし厳選されたツールを含んだ「プロフェッショナルプラン」64.8 ドル/月、大企業向けに専用リソースと新モデルへの優先アクセスを提供する「ハイボリュームプラン」144 ドル/月の 3 つです。MacOS と Windows の両プラットフォームに対応しており、ZCode は複雑な推論タスクにおいて AI の速度を最適化しながらも、チームを開発の最前線に保ち続けます。(注:料率と特典は変動する可能性があります。最終詳細については z.ai をご参照ください。)

2026/07/01 23:20

初めて、細胞から作られたものが成長・分裂した

## Japanese Translation: 生物学者は、非生命の素材から成長し、DNA を複製し、分裂する合成細胞を構築することに成功し、人工的なシステムにおいて細胞周期の主要な機能を遂行した。ミネソタ大学のケイト・アダマラ氏率いるチームが主導するこの研究は現在未公開であり、査読もされていないものの、ジャック・シュストゥーク氏(芝加哥大学)ら専門家からは、「非生命物質から生命を生み出す」という「聖杯」への画期的な一歩として称賛されている。シブレン・オット氏(ストアテンハ化学研究所)は、同細胞は現在の定義において本当に「生きている」とは言えないと指摘しつつも、この成就是、死んだ物質から生命を生み出す科学の進展を大幅に促進したとしている。

2026/07/02 7:48

運動不足の健康な人でも細胞内のエネルギー産生が早期に低下することが判明

## 日本語翻訳: 年齢約 42 歳で運動を習慣化していない健康な成人でも、疾病の発症前に著しい細胞レベルの劣化が見られます。コロラド大学アンスシュ医学部によって実施され、*Clinical Bioenergetics* に公開された研究では、9 名の非活性男性と 10 名の有活動な男性(平均約 42 歳)を比較し、定期的な好気性運動の欠如(週 150 時間未満)が、細胞内の糖や脂肪をエネルギーに変換する「エンジン」となるミトコンドリア機能を急激に低下させることを明らかにしました。非活性男性では、最大酸素利用量が 38% 減少し、負荷時の血液中の乳酸値は 60% 上昇しました。また、主要な燃料処理タンパク質も著しく機能不全を起こしており、MPC1 の活性が有活動レベルの約 49% に低下し、CPT1 酵素の活性は有活動レベルの半分程度まで減少し、糖と脂肪の両方を処理する能力が損なわれていることを示しました。全体として、ミトコンドリアの効率は複数の項目で約 28% から 36% の減少が見られました。共同著者の Iñigo San Millan(イニゴ・サン・ミリャン)は、「40 歳で健康でありながら非活性であることは、現在既に細胞への損傷変化が進行しており、10〜15 年後の健康に影響を与える可能性がある」と指摘し、糖尿病、アルツハイマー病、がんなどの疾患を引き起こす可能性があると述べました。この劣化を早期に検出するための介入対策を可能にするには、心臓血管・呼吸器運動テストと乳酸分析による非侵襲的検査が有効です。研究チームは、より大規模で多様な臨床試験を実施する計画であり、特定の運動プログラムや新規薬剤によってミトコンドリアの健康を回復させることができるかどうかを検証するために、女性の参加者も含む併行研究も行う予定です。