週刊Railsウォッチ(20170303)5.0.2正式リリース、メタプログラミングに懲りた話、bundler 1.12のバグ、すぐ試せるWebアノテーションほか

こんにちは、hachi8833です。ひな祭りにもいつものように週刊Railsウォッチをお送りいたします。今回は公式以外の情報を多めにしてみました。いつも同じ情報源だと、ボットがかき集めるニュースのように縮退してしまうので。

Rails 5.0.2正式リリース

3月1日に5.0.2が正式にリリースされました。お疲れさまでした。5.0.1からのコミットログは149件です。

そういえば最近のリリースではハッシュがSHA-1からSHA-256に変更されていますね。

早速ローカルでインストールしました。

Rails 5.0.1 + Ruby 2.4のときに表示されていたRails起動時のFixnumのdeprecation warningがきれいになくなったのがうれしいところです。

collection proxyの委譲先をmerge!からscopeに変更した(Rails公式より)

Rails公式ニュースからのトピックはTechRacho記事「5.1 beta1リリースノートに見るRails 5.1の姿」に含まれていないものに絞り込みました。

merge!はパフォーマンス上不利であるとのことです。active_record/associations/collection_proxy.rbのこのあたりが改修の中心のようですが、ActiveRecordの全貌を把握しないと真の意図を読み取るのは難しいことを痛感しました。

環境変数に応じたデータベース接続を3段階まで指定できるようになった(Rails公式より)

#27611: new database.yml formatで行われたdatabase.ymlフォーマット改定のひとつです。aconnection_handler_test.rbのテストコードにあるように、database.ymlでcommon/primary/readonlyの3種類の接続を記述できるようになるようです。その後#28095がまたオープンされているので、また変わるかもしれません。

        # connection_handler_test.rb より
        @handler.establish_connection(:common)
        @handler.establish_connection(:primary)
        @handler.establish_connection(:readonly)

一同でこの改修をチェックしていて、従来だと複数のデータベース接続の使い分けには以下のようなgemを導入することがよくあったという話が出ました。

multi_db gemはslaveを複数指定でき、octopusはより多機能なようです。

なおoctopus gemのREADME冒頭でshardingという用語を見つけました。以下のリンクによると、大規模なデータベースを分割してスケーリングする手法のひとつであるとのことです。

ActiveSupport::TimeWithZoneインスタンスをfreezeすると#to_datetimeを呼べない問題を修正(Rails公式より)

修正のため、freezeの際にutctimeの他に#to_datetimeも呼ぶことでActiveSupport::TimeWithZoneのインスタンス変数をプリロードするように変更されました。修正後のコードを以下に示します。

     def freeze
       # freezeの前に以下をプリロード
       period; utc; time; to_datetime
       super
     end

#quoted_idが非推奨になった(Rails公式より)

ActiveRecord::Sanitization#quoted_idは文字どおりidを引用符で囲んで返します。devdocs.ioでは出てこないことから、Railsでの内部利用が主と思われます。今後は型変換での対応が推奨され、実際の削除はRails 5.2で行われる予定です。

その他の細かな修正・変更(Rails公式より)

#28138でHashWithIndifferentAccessがHWIAと略されているのがもう何がなんだかですね。

Heroku: 古いBundler 1.12のRubyバージョン指定のバグによる不具合

Herokuのブログ記事です。#4627によると、bundler 1.12まではGemfileで指定したRubyのバージョンとGemfile.lockのバージョンで互換性が取れなくなることがあり、bundle installしてもRubyのバージョンが変更されないという不具合がありました。

この問題はbundler 1.13で修正されましたが、Herokuユーザーの中にはローカルで古いbundlerを使い続けている人もそこそこいたらしく、Heroku側で1か月前にbundlerを1.13.7にアップデートしたところ、Your Ruby version is <X>, but your Gemfile specified <Y>エラーが発生したユーザーから多数の問い合わせを受けたそうです。

私も念のためローカルでマイアプリのgem install bundlerを実行してbundlerを最新バージョンにアップデートしましたが、今度は別の問題が起きた…明日修正しよう。

Rubyコード: こういう書き方はもうやめた

Rails開発を8年やった著者が動的なプログラミングのやりすぎを反省している記事です。

  • sendmethod_missingでメタプログラミングしすぎると後からのリファクタリングやgrepが困難になる
  • Hashのkeyを動的に組み立てるのも同じ理由でもうやりたくない
  • ActiveSupportのconstantizeunderscoreを使ってAbc::XyzからCSSクラスabc_xyzを動的に生成するのもやめたいと思っている

何だかニコチン中毒患者の告白みたいに見えてきました。

社内有志一同で記事をチェックしていて「こうやってメタにささっと書きたい気持ち、わかる!」「でも後で死ぬよね」と次々に共感の声があがりました。

JVMはそこまで重くなんかないお

とある技術系Slackで議論を呼んだ「Clojureが嫌なのはJVMが重いから」という意見への反論です。コメント欄もずいぶん伸びています。
一同からは「JVMはとっくの昔から速くなってるじゃない」と一斉にツッコミがありました。

devbattles.comのITトーナメント


https://www.devbattles.com/en/tournaments/indexのSlack imageより

またしてもプログラミングのクイズサイトです。開発者同士のSNSも兼ねているようです。

instacartにオープンソースソフトウェアのコーナー


Open Source at Instacartより

instacart.comは米国の食料品宅配サービスですが、なぜかその一隅にオープンソースソフトウェアも並んでいます。といってもそのほとんどはankaneことAndrew Kane氏のリポジトリからのものです。

ankane氏はGitHubにソフトウェアやドキュメントを多数公開していて、かつその多くが大量の☆を獲得しています。
中でも有名なのはchartkickでしょう。Railsで1行書くだけでJavaScriptの美しいグラフを作成できるgemで、日本でも使っている人が結構いるようです。


http://chartkick.com/より

ankane氏のRailsアプリ開発とセキュリティのベストプラクティス

そのankane氏がGitHubに公開している、Railsのアプリ開発やセキュリティのベストプラクティス集です。
自身の開発したgemもさりげなく織り込んであったりしますが、特にセキュリティはチェックリストとしてかなり役に立ちそうです。ぜひ一度チェックしてみてください。

CloudFlareのリバースプロキシが初期化されてないメモリをダンプしてる(HackerNewsより)

3/2の時点でHackerNewsダントツトップです。BingにまだCloudFlareのキャッシュが残っているという別記事もエントリしています。

MozillaがPocketを買収(HackerNewsより)

記事そのものは見出しのとおりですが、文中でリンクされている技術ブログ「Context Graph: It’s time to bring context back to the web」を経由して、Mozillaが推進しているContext Graphという一種の「コンテンツの自動推薦システム」にたどりつきました。


https://wiki.mozilla.org/Context_Graphより

FirefoxのActivity Streamがその実装のひとつであるようです。

SHA-1コリジョンアタックについてLinus Torvaldsからのコメント(HackerNewsより)

SHA-1コリジョンアタック騒ぎで「Gitは大丈夫なのか」という意見への返信ですが、さすが落ち着いています。

BPS社内では、むしろapt-getでミラーサイトからdebパッケージを取ってくるようなときの方が心配だとの声もありました。いずれにしろSHA-1をどうにかすることについては避けては通れない流れですね。

生産性が10倍高いプログラマーはたぶんここが違う(HackerNewsより)

著者のantirezRedisの中の人ですね。以下は著者の20年のプログラマー経験を元にした「たぶんここが違う」リストです。エッセイなのでエビデンス云々は気にしないようにします。

  • Bare programming abilities: getting sub-tasks done
  • Experience: pattern matching
  • Focus: actual time VS hypothetical time
  • Design sacrifice: killing 5% to get 90%
  • Simplicity
  • Perfectionism, or how to kill your productivity and bias your designs
  • Knowledge: some theory is going to help
  • Low level: understanding the machine
  • Debugging skills

冒頭で「プログラミングスキルの成長は線形ではない」というような見解を述べています。1つめはpairでもbearでもなく”bare programming abilities”でした。ここでは「地の」とか「素の」ぐらいの意味ですね。

W3C Web AnnotationがRecommendedになった(HackerNewsより)


www.w3c.orgより

Web AnnotationはW3Cが進めている規格のひとつで、あらゆるWebサイトにコメントできる機能を目指しています。電子書籍にも関連する部分がありそうで気になるところです。

日本では国の科学技術プラットフォームからつい先ごろ「W3C、Webアノテーションに関する3文書を公開」がアナウンスされたところです。おや、リンク先の文字が微妙に足りないような気が。

Webアノテーションを推進するhypothes.is

これに関連して、少し前の国立国会図書館のアナウンスに、Webアノテーションを推進するhypothes.isという団体について言及されているのを見つけました。WebアノテーションについてはこのWebサイトがわかりやすそうです。


hypothes.isより

hypothes.isで試せるWebアノテーション

hypothes.isのトップページにChrome extensionのインストールボタンがあり、それをクリックすればChromeブラウザにWebアノテーション機能を即座に追加できます。ユーザー登録してメールのリンクをクリックすると、https://hypothes.is/searchでいろんな人がいろんなWebサイトにつけたコメントを見ることができます↓。

Chrome extensionをオンにすると、Webページ右上隅にボタンが表示され、ここでコメントを追加したり見たりできます。少々邪魔ですね。

コメントは一般公開しないようにもできるようです。

果たして今後どのように普及し、どのように使われるようになるでしょうか。

Rasberry PIがWiFi/Bluetooth付きで10ドル(HackerNewsより)


https://www.raspberrypi.org/blog/raspberry-pi-zero-w-joins-family/より

日本円にして1000円ですよ奥さん。

一同で基板の写真を眺めながら、USBの給電が割りと不安定なこと、PoEでのEthernetケーブル給電は上位製品なら安定しているがハブ側の対応が必要、などの話題が出ました。今PoEのリンク先を見ると「活線挿抜で火花が散ることがある」とありました。電力系と信号系の共存は個人的にどきどきしちゃいます。

morimorihogeさんが「Googleの「サーバー1台ごとにバッテリー持たせた方がUPSより効率的」には本当に驚いた」という記事を思い出し、そこからサーバーセンターでの直流給電やバッテリー導入について、果てはUPSが原因でPCが煙を吹いた思い出などについても話題が広がりました。

今週は以上です。

関連記事

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。

Rails公式ニュース

Hacker News

160928_1654_q6srdR

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ