Tech Racho エンジニアの「?」を「!」に。
  • 開発

週刊Railsウォッチ(20161209)Active Supportの非推奨メソッド廃止、RailsのjQueryへの依存を廃止ほか

こんにちは、hachi8833です。

今週より、従来の「Ruby/Rails界隈ウォッチ」をリニューアルいたします。

  • タイトルを「週刊RailsウォッチYYYYMMDD)」に変更し、原則週刊といたします。
  • 週刊とは別に、臨時の「Railsウォッチ」も公開することがあります。
  • 過去記事もタイトルのみ統一的に変更いたします。

今後ともよろしくお願いいたします。まずは金星記事から。

Hacker News

160928_1654_q6srdR

?CSSReference.io?

CSSReferenc.io
CSSReference.ioより

CSSのビジュアルリファレンスです。見せ方が画期的にうまいですね。たとえばflexboxを「こういうふうに並べたい」ときにこのサイトでさっとスクロールして探すことができます。animationも実際にアニメーションをオン/オフしたりできます。今週の金星を射止めました。おめでとうございます。

morimorihoge

CSSの仕様策定の段階からこういうビジュアルリファレンスを作って欲しいと切に思います。

Rails公式ニュース

公式ニュースの中の人も体調崩して先週お休みしていたそうです。お大事にどうぞ。

Rails 5.0.1rc1リリース

遅ればせながら。

元記事では「問題なければ12/6に最終版をリリースする」とありますが、本日(12/9)の時点では5-0-1ツリーにはまだstableの文字がありませんね。

RailsのjQuery依存を廃止

既に出回っている話ですが、影響は大きいので。

  • 見出しより

RailsのJavaScriptヘルパーが書き直され、新しくrails-ujs gemとなりました。rails-ujsではvanilla JavaScriptが使われるため、Railsは今後jQueryに依存しなくなります。

#27113では多くのサムアップで迎えられています。

#27113

rails-ujs gemはRails向けに開発されましたが、確認ダイアログ表示やAjaxなどを使うためにRails以外のRubyアプリでも利用できます。

野暮を承知で書くと、ニュースで言及されているVanilla JavaScriptとは「jQueryなどのJSライブラリを使わないでピュアなJavaScriptで同等の機能を書く」という意味です。

日本人の感覚からするとわかりにくいですが、アイスクリームの「バニラ味」は「他に何も加えられていない」「プレーンな」というニュアンスがあります。炊き込みご飯に対する白いご飯みたいな感じでしょうか。

morimorihoge解説
vanillaのもともとの語源はもちろんicecreemのvanillaですが、ソフトウェア的にはゲーム界隈でMODとかを入れていない素の状態のことを指しますね。マインクラフトなどでもvanillaとか言います。

なるほど、私がゲームに暗かったのでそのあたり初めて知りました。

また、UJSは「控えめな(unobtrusive)JavaScript」のことで、本来は具体的な実装やライブラリというよりは、アプローチ、パラダイムといった側面が強いようですが、jquery-ujs.jsや今回のrails-ujs.jsなどのようにUJSをサポートする実装もあります。

jQuery廃止で何が変わるか

SprocketsやAsset Pipelineなど、RailsにおけるJavaScriptの扱いについてさまざまな不満があがってきていますが、便利だが鈍重なjQueryへの依存廃止は、そうしたJavaScript関連の改良のひとつと言えそうです。

今回の変更の導入時期は明言されていませんが、masterにマージされているのでおそらくRails 5.1からの導入となりそうです。

  • jquery-rails gemは新しいRailsアプリケーションには標準では含まれなくなります。
  • 代わりに、rails-ujsが標準で含まれるようになり、Action View経由で提供されます。
  • 今後はRailsのフロントエンド/AjaxをピュアなJavaScriptで書くのが標準になります。
  • jquery-rails gemを別途導入すれば、従来どおりjQueryを利用できます。なお、jquery-railsにはjQuery UJS adapterも含まれています。

Rails開発者は、今後ピュアなJavaScript、そして今後に備えてECMAScript 6を意識したコーディングに徐々に移行するのがよいと思われます。

morimorihoge解説
基本的にjquery-rails的なgemを入れれば動作面は原則問題ないと思いますが、Rails 5.1.0のリリース前後で一気に既存のGemのgemspecにjQuery系gemのrequire dependencyが追記されて一斉にgemのバージョンが上がると、そこでconflictが発生するかもしれないですね。

Qiitaの「Rails5.1に向けてフロントエンド周りで起こっている革命まとめ」も参考になります。

Turbolinksなどの影響も小さくて済むとよいのですが。

ひとこと

tsunekawa

#27035 Rails 5.1に備えてActive Supportから非推奨メソッドが削除される

いよいよalias_method_chainとおさらばします。今後はRuby 2.0以降のModule#prependをお使いください。

以下の非推奨要素がActive Supportから削除されます。

  • key_file_path
  • escape_key
  • set_cache_value
  • namespaced_key
  • kernel debuggerファイル
  • local_constants
  • (モジュール)method_transplantingファイル
  • (struct) core_extファイル
  • time marshal core_extファイル
  • new_from_hash_copying_default
  • :prefix オプション
  • Module.qualified_const_get/set/defined?
  • constant MissingSourceFIle
  • alias_method_chain
  • Numeric#to_formatted_s
  • parameterizeのseparator引数
  • (クラス)ActiveSupport::Concurrency::Latch

なお、5.0.0.1だと非推奨警告が表示されないものがあるので、警告をすべて表示するには5-0-stableを使って欲しいとのことです。

morimorihoge解説
あまり開発者が直接使うメソッドではなさそうですが、ライブラリが依存している可能性はあるので、やはり5.1.0へのアップグレードはかなり慎重になった方がよさそうですね。Asset Pipelineが導入されたかつてのRails 3.0->3.1に匹敵する規模になるかもしれません。

#26976 form_withを追加

従来のform_tagform_forと似たような感じで使えるform_withが追加されました。

#27108 Active Recordの接続終了時の動作を改良

過去のRailsウォッチでもたびたびコネクションプール周りに手が加えられていますね(2016/11/17](/hachi8833/2016_11_17/28909)の#26978など)。

#25395 PostgreSQLの暗号生成をuuid-osspからpcryptoに移行

PostgreSQL 9.4以降はpcryptoのgen_random_uuid()が推奨だそうです。

#26836 Railsにyarnサポート追加

rails new プロジェクト名--yarnオプションを与えることで、node.jsの新しいパッケージマネージャyarnが使えるようになります。

最初yarm gemと空目してしまいました。

#27133 reload_association周りの変更を元に戻す

5.1で予定されていた移行のひとつが元に戻されました。たとえばArticle.category(true)に代えてarticle#reload.categoryを推奨する予定だったそうですが、副作用が思ったより多く回避も難しいので取り消されました。

#27193 update_allとdelete_allのバグ修正

left_joinとチェインしたときのupdate_alldelete_allの動作が、left_outer_joins_values.any?を条件に加えるよう修正されました。

この記事をBPS社内でつっついているときに「えぇー?!left_joinupdate_allとかdelete_allするかー?(笑)」とどよめきがあがりました。

Ruby Weekly

ヨーロッパのRuby事情

米国の開発者がイタリアのフローレンスで開催されたRubyDayを簡単に紹介しています。フローレンスは風光明媚で素晴らしい場所だそうです。コミッターは2人ぐらいしか来てなくて規模はそれほどでもなかったようですが、今後盛り上がるとよいですね。ヨーロッパで最後にRailsConfが開催されたのは2008年なんだそうです。

ヨーロッパではHanamiというRubyベースのWebフレームワークが妙に盛り上がってるらしく「米国じゃ聞いたことないなあ」という感想を漏らしています。米国ではRailsはすっかり定番として認知されていますが、ヨーロッパではまだそれほどでもないようです。Railsは米国勢が多いせいなのか、ヨーロッパはRails以外の選択肢についても積極的なところがあるようです。

ヨーロッパのRails関係者はどことなくロシアやポーランドなど東寄りが多いような印象がありますが、西ヨーロッパはまた雰囲気が違うのかもしれません。

余談

フローレンスってイタリアのどこかと思ったら人体で言う足三里のツボのあたり、内陸なんですね。

私はヨーロッパどころかユーラシア大陸に一度も足を踏み入れたことがないのですが、知人の話ではイタリアを含むヨーロッパの多くの国は日曜になるとレストランも食料品店も全部閉まってしまうので平日のうちに食料を手元に用意しておかないとマジでアウトだそうです。ヨーロッパってコンビニも自動販売機もほとんどないようなので。

Railsの新機能の開発の様子を中継

Sprocketsの後任メンテナがsprockets-railsに新機能を追加する様子を詳しく解説してくれます。

Ruby Facets

スレッドローカルな変数

Rubyのスレッドローカルな変数について詳しく解説しています。図や動画もあってよさげですね。

from rubytapas.com
rubytapas.comより

最近のruby-core (2016年11月)

今回も濃厚な解説がぎっしりです。ありがとうございます。[#5446] at_fork callback APIの解説を見て、スレッドは難しいと改めて思い知りました。

Hacker News

160928_1654_q6srdR

OpenAI

GitHub Trendingでも☆2,700超えと快進撃ですね。人工知能/機械学習系は、マネタイズの匂いがした途端に皆ソースや情報を出したがらなくなっているような印象があります。かつて暗号理論などが軍事情報がらみで長年非公開だったのを連想してしまいました。

Qiitaでも機械学習の記事は「やってみた」系がほとんどになってしまっているので、先端事情を知るには真面目に英語論文を読むのが早いのかも。

ダンボールで加算器つくったった

Rubyで書かれたファミコンエミュレータOptcarrot

似たもの二連続です。LEGOで作ったりするのは割と見かけますが、ダンボールというのが強烈です。

morimorihoge comment

行列の乗算

行列の乗算の理解であれば、上よりも私はこちらのYouTube動画(途中から再生)をおすすめします。この画期的な筆算は学校で習った覚えも日本の教科書で見た覚えもないのですが、即取り入れて欲しいものです。

使えるMacセキュリティガイド

Macbookの裏蓋を開けてプローブを突っ込むところから始まり、Mac OS自体をVMWare Fusionで仮想化するなど、かなりエクストリームなセキュリティガイドですね。

ここまでするのは国家保安がらみか、さもなければ被害妄想に近い気もしますが、趣味ですよねきっと。

暗号を学べるcrypto101.io

私事で恐縮ですが、随分昔にブルース・シュナイアーの暗号技術大全日本語版の、確か第9章あたりで下訳をお手伝いしたのを思い出しました。

Github Trending

160928_1701_Q9dJIU

Metasploit

いわゆるペネトレーションテストを行うフレームワークです。ひととおりの攻撃を自動実行してWebサーバーをテストできます。この種のツールはみなそうですが、悪用厳禁ですね。

無印枠

Xcodeproj

XCodeプロジェクトを作成するRuby gemです。☆700個越えなので需要がある感じですね。

熱力学で新たな発見

エンジニアリングとは別の話題かつ先週ですが、一見枯れた学問のように思われていた熱力学で大きな発見があったとのことです。共同研究者のひとりである田崎晴明先生(@Hal_Tasaki)のファンなもので。

今週は以上です。

関連記事


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。