週刊Railsウォッチ(20161109)bundler audit gemは超おすすめ、CIAのFactbook gemほか

※ 「Ruby/Rails界隈ウォッチ」は2016年12月より週刊Railsウォッチにタイトルを改めました。

Google Maps API無償版のポリシー変更の対応は皆様大丈夫でしょうか?hachi8833です。

RubyWorld Conference 2016も盛況のうちに終わりました。11月のRailsウォッチ2回目をお送りいたします。

なお、Railsウォッチは英語のニュースに限っているわけではありませんが、他の日本語情報源で紹介されていない記事を中心に取り上げていますので、自然と英語ニュースが多くなっています。

お知らせ: 金星記事?

今後、必読の良記事には金星(きんぼし)「?」を記事タイトルに付け、そのメディアの見出しとともにRailsウォッチのトップ(ただし臨時ニュースの次)に置かせていただきます。1回のウォッチで金星が1件あるかないかぐらいの頻度にとどめるつもりです。

どうぞよろしくお願いします。

臨時ニュース

今週も臨時ニュースから始まります。

#12142で採用されたのがハッシュのオープンアドレス法とのことです。

以前はどんな手法がRubyのハッシュテーブルで使われていたのでしょうか。

BPS Webチームの新メンバーtazuさんによると、『Rubyのしくみ(原題: Ruby Under a Microscope)』の日本版P187「7 ハッシュテーブル: Ruby内部の働き者」にとても詳しく書かれているとのことです。ありがとうございます!

  • 第7章 ハッシュテーブル:Ruby内部の働き者
    • Rubyにおけるハッシュテーブル
    • 実験7-1:さまざまなサイズのハッシュテーブルから値を取り出す
    • ハッシュテーブルを拡張して、より多くの値を格納する仕組み
    • 実験7-2:さまざまなサイズのハッシュに新しい要素を1つ追加する
    • Rubyはハッシュ関数をどう実装しているか
    • 実験7-3:ハッシュのキーとしてオブジェクトを使用する
    • まとめ
      Rubyist Magazine 書籍紹介『Rubyのしくみ Ruby Under a Microscope』より

同書の内容は最新ではありませんので、その点ご了承ください。

[tmkm-amazon]4274050653[/tmkm-amazon]

RubyFlow

160928_1638_XvIP4h

? そのパッチをRailsに当ててよいかを考える ?

初金星を射止めたのはこちらの記事です。おめでとうございます。

Action ViewのXSS脆弱性に関連するCVE-2016-6316を例に、セキュリティパッチを適用すべきかどうかの検討過程を記事にしています。

著者は、bundler audit gemの導入をすすめています。Gemfile.lockに含まれているバージョンのgemが脆弱性を含んでいるかどうかや、gem取得元がhttp://になっていないかどうかなどをチェックしてくれます。インターネットにつながってなくても利用できるそうです。

Railsを高速化する10の方法

DRYに書く、bullet gemでN+1を避ける、RedisやCDNなどを導入する、Nginxでgzipするなど、多くは定番ですが、こうした高速化の手法はだいたい確立されつつありますね。

factbook gem

日本ではなぜか知名度が低いのですが、米国CIAが渾身の力を注いでメンテし続けているFactbookという超優良コンテンツをgem化したものだそうです。

Factbookサイトの証明書はもちろんピカピカのEVです。正直なぜこれをgem化したのかよくわかりませんが、Factbookはパブリックドメイン化されているので楽々引用できるからなのでしょうか。

私としてはむしろFactbookそのものを読み物としておすすめします。さまざまな国の人口統計、地理、通信、政治、経済、軍事情報が端的に要約されていて、日本の公民や地理の教科書なんかより断然面白いですよ。しかも情報アップデートもとても熱心なのでその意味で安心して読めます。日本語で書かれたツッコミどころもどうぞ。

「英語の勉強したいけど読むものなくて辛い」という方には特におすすめです。要約が非常に的確で短いのですいすい読めます。

ある意味凄いのは、万全とはいかないまでも政治的に極力中立かつ正直に書かれている点かもしれません。CIAのスパイが敵国に侵入するときにこのサイトを読むことが義務付けられているのかどうか知りませんが、情報に無駄な色を付けないのは諜報の基本と言えます。

RubyのHash#digを強化したdig_and_collect

hash_dig_and_collect gemは、難しいことを考えずにハッシュの特定の階層にある値を全部取り出してリストにしてくれるようです。まだGitHub☆は少ないですが、これ結構便利かも。

ハッシュと言えば、別の記事でopenstruct-from_hash.rbというgemも見つけました。こちらはハッシュ構造をRuby標準のOpenStructの構造体に変換してくれるようです。s.one.two.three.fourのようにドットでアクセスできるのがよさそうです。

Ruby 2.4で導入されるEnumerable#sum

従来はActive Supportの機能だったEnumerable#sumRuby 2.4で本体に導入されることになりました

Ruby 2.4でString#concat/Array#concat/String#prependが引数を複数取れるようになった

地味ながらありがたい改良かもしれません。

Rails公式ニュース

2016/10/28

ActiveSupport::Dependencies.interlock.permit_concurrent_loadsのブロックを介してSQLクエリを発行することでロックを回避したようです。

morimorihoge: 今まではAR::execute等のSQL実行時にはshared lockされていたのをpermit_concurrent_loadsで明示的にconcurrent処理できるようにしたことで、恐らくpuma等のthreadベースな環境において待ちがなくなったのかも

どのSQLアダプタ側でも#indexesメソッドが実装されているのでrespond_to?(:indexes)は不要ということで呼び出し元から削除されました。もし#indexesメソッドがアダプタで実装されていなかったら?という疑問に対しては、ごく初期から#indexesメソッドの実装がアダプタで義務付けられているので大丈夫だろうとのことです。

コードでActiveRecord::Base.connectionprepareからcompleteまで変化しないことが暗黙の前提となっていましたが、途中でActiveRecord connectionが他から返されると条件が変わって失敗することがあるというバグが修正されました。同じ問題がsidekiq gemでも起きていたそうです。

morimorihoge: HABTM(Has And Belongs To Many)はもう使ってる人いないからこのコミット自体はまあ特に言うこともないですが、RailsのDSLってたまに文字列・Symbol・クラスのどれか一つしか食えないようなものがたまにあって辟易とすることは確かにあるある

Ruby Plus

このサイトは小粒記事が多いながらもそこそこ拾い物でした。

個別には紹介しませんが、Bootstrapと並ぶフロントエンドフレームワークであるZurb FoundationとRailsを組み合わせる記事が目につきます。

Rails5のincludeとjoinを比較

includeは関連付けをeager loadingするので、関連付けられたモデルのデータにアクセスすることが事前にわかっている場合にN+1問題を回避できます。
関連付けられたデータにアクセスする必要がない場合にはjoinを使います。
Include vs Joins in Rails 5より

morimorihoge: まあ別にRails 5に限らない良くあるN+1系の話かなと。

Rubyの「nil/empty/blank」とRailsの類似オブジェクトを比較する

比較の表だけがポンと置かれた寡黙な記事です。

Rails 5 でouibounce.jsを使う

ouibounce.jsは、ユーザーの退会をあの手この手で引き止めるダイアログのライブラリです。

おっそろしく古いですが、金色夜叉とか思い出してしまいました。

ほかに目についた記事

morimorihoge: まあ別にRails 5独自っぽいことは何もなかった

SphynxはRails以外でも広く使われているSQLベースの著名な全文検索エンジンです。

Ruby Weekly

WebMockで外部APIをスタブ化する

WebMockはテストでいちいち本物の外部Web APIアクセスにアクセスしなくて済む「スタブ化」を行う定番のgemなので、類似の日本語記事がいろいろありますね。

DTraceでRubyのミューテックスを深掘りする

DTraceはSolarisやMac OS Xのシステム情報取得機能です。

この後、morimorihogeさんのKindleに入ってた『Mac OS X Internals』をちょっと見せてもらいましたが、Fatバイナリ時代の内容ではありますが途方もなく濃厚で、ついそっちで盛り上がってしまいました。最新版欲しい。

Ruby trunk: bug

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

月間卜部さんの10月号出ました。

Hacker News

160928_1654_q6srdR

WebAssemblyがbrowser preview版となる

Chromeのアドレスバーにchrome://flags/#enable-webassemblyと入力してみると、他にも大量のお試し機能が隠れていることを知りました。とりあえずWebAssemblyをChromeでオンにして再起動し、公式デモページをやってみようとしましたがダウンロードがえらく重そうなので5秒であきらめました。

自由にハックできるPrasma Mobile

公式ページがいかにもヒッピーな感じ。Qt/GTK/X11などのアプリが動くかもということらしいです。機能一覧にTelepathyとあって一瞬本気かと思ったらメッセージングソフトウェアらしいです。

本番のDockerで失敗を重ねてきたお

Docker化アプリを12本もリリースした著者が、Dockerでさんざん血を流してきた歴史を詳しく語っています。読み物としても非常に面白いのですが、長いので、最後の「Surviving Docker in Production」だけでいいかもしれません。GIF動画も楽しいです。

「いいか坊主、リリースノートは必ず読めよ」とか「インスタンスは3つにしとけよ」「Dockerにデータを置くなよ」「Dockerに大事なものはひとつたりとも置くなよ」というあたりは微笑ましくも実感がこもってますね。

Github Trending

160928_1701_Q9dJIU

最近は深層学習系のソフトウエアが目立ちますね。

Eve

先週紹介したEveが☆5,000越えてます。さすがHacker Newsでトップになっただけのことはありますね。もう少し深掘りしてみようかな。

concurrent-ruby

☆3,000超えです。寄せられている期待の大きさがわかります。他のgemに依存していないあたりがありがたいです。

Goの間

作ってみました。

goroutineが完全にロックされる問題

チャネルに特定の操作を加えるとgoroutineが永久にロックされてしまう問題を報告しています。

それはそうと、「Go言語のMap(Rubyで言うハッシュ)はスレッドセーフじゃないからgoroutineで使うな、構造体にせい」と説いていたarslan.ioサイトが今見たらなくなってます。

cweill/gotests

Goのソースからテストコードを生成してくれるそうです。もしかして神ソフト?

無印枠

TwitterやRSSフィード由来のニュースです。

Awesome Ruby

Rubyの新着gemやツールやフレームワークなどを紹介するサイトです。今回紹介した記事も含め、割といい感じにまとまってます。

【翻訳】WoSign と StartCom による今後の証明書は拒否します

社内の日報から拾いました。ルート証明書を発行する立場の組織がやっちゃいけないことを派手にやらかしたWoSignのサイトの閑散っぷりに秋風が沁みます。

今年も残りあと2か月切ったんですね。

今週は以上です。来週も皆様どうぞご無事で!

関連記事

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ウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ