※ 「Ruby/Rails界隈ウォッチ」は2016年12月より週刊Railsウォッチにタイトルを改めました。
Google Maps API無償版のポリシー変更の対応は皆様大丈夫でしょうか?hachi8833です。
RubyWorld Conference 2016も盛況のうちに終わりました。11月のRailsウォッチ2回目をお送りいたします。
なお、Railsウォッチは英語のニュースに限っているわけではありませんが、他の日本語情報源で紹介されていない記事を中心に取り上げていますので、自然と英語ニュースが多くなっています。
お知らせ: 金星記事?
今後、必読の良記事には金星(きんぼし)「?」を記事タイトルに付け、そのメディアの見出しとともにRailsウォッチのトップ(ただし臨時ニュースの次)に置かせていただきます。1回のウォッチで金星が1件あるかないかぐらいの頻度にとどめるつもりです。
どうぞよろしくお願いします。
臨時ニュース
今週も臨時ニュースから始まります。
【朗報】hash tables with open addressing が着地。事前のベンチマークによるとRails(Redmine)で1req/sくらい処理が高速化する可能性がある。12月に出るRuby 2.4から。https://t.co/5LBE6Y2Sb3
— Urabe, Shyouhei (@shyouhei) 2016年11月7日
#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
? そのパッチを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#sum
がRuby 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.connection
がprepare
から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ベースの著名な全文検索エンジンです。
- Rails 5でメソッドの定義場所を見つけるは、RubyのIRBやpryでメソッドの定義元をすっと調べる方法でご紹介したように
owner
を使うともっと見やすくなります。
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
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
最近は深層学習系のソフトウエアが目立ちますね。
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か月切ったんですね。
今週は以上です。来週も皆様どうぞご無事で!
関連記事
- 週刊Railsウォッチ(20161102)HTML 5.1正式勧告、CSS中央揃えに便利なサイトほか
- 週刊Railsウォッチ(20161027)LinuxカーネルのDirty COW脆弱性、DeviseはWikiを読めほか
- 週刊Railsウォッチ(20161019)ObjectSpaceモジュール活用法、Capybara統合、コミッターを撮影するソフト
- 週刊Railsウォッチ(20161012)RubyのHashの詳細、RethinkDBの会社が終業ほか
- 週刊Railsウォッチ(20161005)Mac OS SierraとRubyの問題、Learning Gitほか
- 週刊Railsウォッチ(20160928)constantizeの注意点、GoのGUI “gallium”登場ほか
- 週刊Railsウォッチ(20160921)クールなHTMLエディタ「Mozilla Thimble」他
- 週刊Railsウォッチ(20160913)MySQLの脆弱性ほか