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

週刊Railsウォッチ(20170127)わかりやすいAWSサービス名、Rails DBは便利、TruffleRubyの驚異的速度ほか

こんにちは、hachi8833です。先週の更新情報が一段落付いたので平常運転?に戻ります。それでは今週も行ってみましょう。

Railsコアから切り離されたAction Pack gem 2種が更新

ソース: Rails公式ニュース

一同で確認したところ、この2つのgemがRailsのコアから切り出されたのはRails 4のときでした。そのとき以来のまとまった更新ということになります。

現在のRailsでは上の2つの代わりにRussian Doll Caching(旧fragment caching)がデフォルトです。

現役を退いた感の2つのgemですが、まだ更新されてるよーということですね。

rails newするとデフォルトでgitリポジトリが生成される

これまでは.gitignoreだけだったのが、.gitも生成されるようになりました。割りと前から.gitを生成してくれていたような気がしていましたが、私の気のせいでした。

GitリポジトリのないRailsはもう考えられない...

情報いただきました: ありがとうございます!

Integer#to_sのオブジェクト割り当てを大きく削減

修正のポイントは、#to_sの可変長引数をやめて固定長引数にしたことのようです。

従来は普通のInteger#to_sを呼ぶだけで配列(splat引数)とハッシュ(options)の両方でメモリ割り当てが発生していたということです。

def to_s(*args)
#↓
def to_s(format = nil, options = nil)

Integer#to_sの利用頻度は高いので効果ありそうです。

Railsエンジンでのみ一部のRailsコマンドが動かない問題を修正

小文字でさらっと書かれた「engine」が何を指すのか当初よくわからなかったのですが、Railsエンジンのことでした。

詳しくはリンク先に譲りますが、RailsエンジンはRailsの中核であり、プラグイン的に扱うことができます。たとえばアプリの基本機能をマウンタブルエンジン化しておけば、エンジンをプラグインとして複数のアプリで簡単に導入できるようになります。

おまけ

本題とは関係ありませんが、RailsのIssuesに住まうRails-bot、レビュアーを自動で指名してるんですね。

ちょっと便利そうじゃね?と一同盛り上がりました。GitLab issuesにもリクエストがありました。

フリーズさせたクラスでModule#parent_nameが動かない問題を修正

本体がfrozenな状態で呼び出すと@parent_nameを変更しに行ってしまうのでエラーになるようです。

parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil

私はここに三項演算子が使われていることに気づくのにちょっとかかりました。

ところで、修正部分で使われている$`の変数の意味を一同で調べたところ、マッチした部分より前の文字列を表すんですね。

毎度のことですが、この種の記号は検索しにくくて困ります。Rubyスタイルガイドに沿って$`#pre_matchにして欲しいところです。

Rails DB: Railsで書かれたデータベースコンソール

データベースの中身を覗くのもクエリ実行も自由自在のデータベースコンソールです。phpMyAdminのRails版のような塩梅です。これはもうデモサイトで遊ぶのが早いでしょう。


Rails DBデモより

「これめちゃ便利そう!」と一同色めき立ちました。

  • マウンタブルエンジンなのがいい♡
  • 本番に入れっぱなしにしたらまずいよねやっぱり

Rubyのselfを考える

短いので気楽に読めます。selfについての基本的な解説ですが、説明の方法が独特でよいと思います。

TruffleRubyがさらに速くなった


Journeys of a young Software Engineerより

この圧倒的速度が本当なら凄いですね。

TruffleRubyって初めて知りましたが、OracleのGraalというVMで動くRuby実装のようです。JRubyからforkし、Rubiniusや標準のMRIのコードまで取り込んでいるとのこと。

今度遊んでみようっと。

RSpecをもっとDRYにする

短いながらも良記事だと思います。

morimorihogeさんが以下のRSpecコードはカリー化になっていることを見つけました。

subject { ->(field) { fetch(field) } }

its([:age]) { is_expected.to eq 30 }
its([:weight]) { is_expected.to eq 50 }
its([:name]) { is_expected.to eq 'June' }

同じブログにある他のRSpec記事もよさげです。

Google Assistant gem


Google Assistantサイトより

Google版Siriとも呼ばれるGoogle Assistantにアクセスできるgemです。

Active Recordでデータベースに自動再接続する

Active Recordの自動再接続はデフォルトでは一度しか行われないので、もう少しがんばってもらうための方法です。

DBMSが重くなってrails serverの起動にDBMSの起動が追いつかなくなるとrails server自体できなくなってしまうことがあるので、そんなときにこういう処置が必要になりますね。

Passenger 5.1がリリース

多くの改良が行われたとのことです。RailsのアプリケーションサーバーはPassenger -> Unicorn -> Pumaと流行り廃りが激しいよねという声がありました。

Railsにおける「webサーバー」と「アプリケーションサーバー」の違いなどについては以下の記事が参考になります。

参考

gemのアップデートを習慣づけよう

gemのアップデートの前にbundle outdatedコマンドを実行するととても役に立つというお話です。

bundle outdatedはCIで回したいね」との声がありました。

The Ruby Spec Suite

#13156 In-tree copy of ruby/specを見ていて、The Ruby Spec Suiteなるgemがあることに今頃気づきました。

同リポジトリのwikiによると、Ruby実装そのものに対するテスティングスイートであり、JRubyやRubyniusなどのテストを共通化しようという動きから生まれたようです。

このテストにパスすればRubyの実装を名乗れるということですね。

Rubyの小技集(動画)

今回より新顔ニュースソースにOpenRubyを加えました。TechRachoの記事もときどきフェッチされています。

たまには動画でもと思って選んでみました。10分なのですぐ見終わります。

コンテンツを作る側の準備がほとんど不要ということもあり、英語圏ではこの種の「製作時間=放映時間」なScreencastが掃いて捨てるほどあります。

この動画も、各項目にサブタイトルとリンクがあればもっと見やすいのにと思えました。もうひとがんばりです。

ISO 8601ベースのActiveSupport::Duration

ちょうど先週のRailsウォッチでも取り上げたActiveSupport::Durationクラスです。

これはActiveSupport探訪シリーズでも近々お邪魔してみようと思います。

Socios!

ポルトガル語なので何と書いてあるのかなと思ってネット翻訳にかけたら「Rails技術者募集」でした。それだけです。

それにしても英語とヨーロッパ系言語(スペイン語・ポルトガル語など)の機械翻訳の進歩はシャレになっていませんね。

GoogleによるHTTPとモバイル広告へのペナルティ

HackerNewsから2件です。

HTTPS化されてないページにパスワード用フィールドがあるとChromeが危険とみなすようになります。


blogspot.comより

↓この手の広告もこれで壊滅ですね。


scribbris.comより

?AWSの謎サービス名をまともな英語で言い換えてやるぜ?

サービスの種類が増えて全貌がわかりにくくなる一方のAWSに業を煮やしてか、AWSのサービス名を徹底的に言い換えてみるという企画です。

EC2
Amazon Virtual Serversと呼びたい
S3
Amazon Unlimited FTP Serverと呼びたい
Elasticache
Amazon Memcachedと呼びたい

ネタかと思いきや、今のAWSサービスを軒並みわかりやすく端的に言い換えていて、本家AWSよりむしろ親切ですね。morimorihogeさんが感激してました。

これをきちんとリンク&継続的にメンテしたら人気出るのでは、というよりAWSがやるべきかも。

今回の?を進呈いたします。おめでとうございます。

おまけ1

上の記事で「Amazon DNS + Domains」と説明されていたAWSのRoute53は何だろうと思ったら、morimorihogeさんによると53番がDNSのポートであることになぞらえた命名だとのことでした。なるほどです。

その元ネタは「ルート66」ですね。私はつい↓を思い出してしまいます。

おまけ2

おとといまでは上の記事にAWS Mechanical Turkのエントリがあったと思ったのですが、いつの間にか削除されていました。以下からわかるように、ネタとしてはデリケートすぎたようです。「Turk」はトルコ人を指します。

おまけ3

数学の証明の自動化アプリ


blog.socratic.orgより

マジですか。

golang/dep: Go言語公式のパッケージ依存管理登場

BPSアプリチームのtjmさんからのお葉書じゃなかった情報です。既に各所で話題になっていますが、mattnさんのブログ記事からも喜びが伝わってきます。

今週は以上です。

関連記事

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

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

Rails公式ニュース

RubyFlow

160928_1638_XvIP4h

Ruby Weekly

OpenRuby

Hacker News

160928_1654_q6srdR

Github Trending

160928_1701_Q9dJIU


CONTACT

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