Mojolicious 6がリリースされました

少し情報提供が遅れましたが、先日Mojolicious 6がリリースされました。MojoliciousはPerlのWebフレームワークです。

Mojolicious 6.0 released: Perl real-time web framework

Mojoliciousの作者のセバスチャン・リーデルさんのアナウンスを日本語訳しておきます。

リリース報告

Mojolicious 6.0(Clinking Beer Mugs)のリリースをアナウンスできて、とても大きな喜びに満たされています。これは、コアチームに新しいメンバーを迎えての最初のメジャーリリースです。ようこそ、ヤン・ヘニング・トーセン(Jan Henning Thorsen)。

2015年は、6.0のリリースの年として記憶されるように思えるでしょうけれど、まだこの年は早い時期ですし、楽しみにできることは、たくさんあります。IETFはHTTP/2を承認しました。これが、よいにしろ悪いにしろ、私たちがWebアプリケーションを開発する方法完全に変更してしまうかもしれません。

これが私たちを導く場所を待っていることは、できないでしょう。また、今年はニューヨークでMojoconfがあります。準備はすでに始まっており、まもなく詳細を共有することができるでしょう。

リアルタイムWebテクノロジーはますます主流になってきており、コミュニティは成熟してきましたけれど、着実な成長を続けています。Github上でも、もっともスターがついたPerlのプロジェクトとしての地位を強化できました。

公式ドキュメントには、毎日数百人のユーザーが訪れています。メーリングリストの購読者は1000人を超えました。みなさん、ありがとう。

今年の主要な焦点は、パフォーマンスの改善です。すべての部品がかなり速くなり、スケーラビリティも増しました。新しいいくつかの機能追加もあります。以下は、機能のハイライトです。

  • ネストされたヘルパー。ヘルパーを名前空間の中に入れ子にできるようになりmさいた。たとえば、組み込みのヘルパー reply->asset のように。
  • IO::Socket::Socksを通したSOCKS5のサポート。
  • Net::DNS::Nativeを通して、ノンブロッキングの名前解決のサポート。
  • 新しいMojo::DOM。完全にAPIがデザインされなおしました。また、ケース印センシティブな属性のセレクタのサポートが追加されました。[foo=”bar” i]の「ように。
  • RFC 3339のサポート。ほとんどすべての新しいREST APIがそれを使います。
  • コンテントネゴシエーション。コンテントネゴシエーションは、If-None-Match 、If-Modified-Sinceと一緒に使えます。
  • IPv6をあらゆる場面でサポート: IO::Socket::IPが、とても信頼できるものになったので、いつでもそれを使用するようになりました。
  • wantarray()は使いません。セキュリティの脆弱性を防ぐために、コードから完全に取り除かれました。
  • Mojo::PgとMinion: 安定的な1.0のリリースに到達しました。これは、スピンオフプロジェクトになりました。
  • より多くのことを知りたいなら、GitHub上のChangesを見てください。

Mojolicious 6.0 Changes

楽しんでね!

Mojolicious 6で互換性が崩れる部分をピックアップ

MojoliciousはPerlのWebフレームワークのひとつで、ノンブロッキングI/Oをサポートしているので、並列HTTPリクエストに対する処理が最適に処理されるようになっています。

Mojoliciousの互換性は、全体的に高いですが、将来のために、部分的な非互換を許容しています。ですから、Mojoliciousは新しいバージョンいきなりアップグレードするのではなくって、開発環境で試験をしてから、アップグレードしてくださいね。

Mojolicious 6において互換性が崩れる部分が少しありますので、その部分について書いておきます。

paramメソッドは、リストコンテキストで評価されなくなりました。

paramメソッドは、リストコンテキストで評価されなくなりました。セキュリティの脆弱性を防ぐために、コード上のwantarrayを使っている部分ががすべて取り除かれました。

以下のようなコードが、以前のようには機能しなくなるので、注意してください。

my @params = $c->param('title');

paramメソッドは、配列のリファレンスを受け取らなくなりました。

paramメソッドは、配列のリファレンスを受け取らなくなりました。以下の記述が以前のようには、機能しなくなるので、注意してください。

my @params = $c->param(['title', 'author']);

paramメソッドの一部仕様変更は、広い範囲に影響があると思われますが、Webアプリは、セキュリティリスクを下げる必要が高い分野ですので、これは、いたしかたがないと感じます。上記のふたつのコードが利用されている可能性があれば、チェックしてみてください。

Mojo::JSONのオブジェクト指向サポートがなくなりました

Mojo::JSONのオブジェクト指向サポートがなくなりました。もし次のように記述していた場合は、下のものに書き換えてください。

# 旧
use Mojo::JSON;
Mojo::JSON->new->encode($foo);
Mojo::JSON->new->decode($foo);

# 新
use Mojo::JSON 'encode_json', 'decode_json';
encode_json($foo);
decode_json($foo);

render_static, render_not_found, render_exceptionがなくなります

コントローラクラスのrender_static, render_not_found, render_exceptionがなくなります。代わりに次のように記述しましょう。

# 旧
$c->render_static($path);
$c->render_not_found;
$c->render_exception;

# 新
$c->reply->static($path);
$c->reply->not_found;
$c->reply->exception;

bridgeがなくなってunderになります。

bridgeと書いているところはunderに変更しましょう。

# 旧
$r->bridge(sub { ... })

# 新
$r->under(sub { ... });

Mojo::DOM周辺はまだ安定していません

Mojo::DOM周辺の実装はまだ安定していませんので、もし使っている場合は、変更箇所を確認しましょう。

関連情報