こんにちは、hachi8833です。
ちょいと日曜日にずれこんでしまいましたが、Railsウォッチ今週もいってみましょう。
余談: Railsウォッチつっつき会について
なおBPSのWebチームでは、いつの頃からかRailsウォッチの公開前に有志でぶらっと集まり、ドラフト記事を読みながら気軽にコメントしたりプルリクを追ってみたり重要なポイントを発見したりする通称「つっつき会」が催されるようになっています。
もともとRailsウォッチの公開前チェックだったのですが、小一時間程度の気楽な催しなので、つっつきながら雑談が思わぬ方向に発展したり、普段聞こうと思って忘れていたことを記事で思い出して、思い切って質問してみたりと、今ではこれが毎週の楽しみになっています。
このつっつき会は私にとっても強烈に勉強になっていて、毎回たくさんの新発見があります。英文情報などを一人で黙々と集めたりRailsのソースコードを全部読んだりして技術力向上に努めるのもよいですが、こういう肩のこらない形で共有することで、自分一人だけで頑張る場合と比べて効果が数倍アップすると思います。
だいたい技術記事って、読むだけだとその場でふむふむと納得して終わって、その後スカッと忘れてしまったりしますよね。読んだ技術情報が血となり肉となるには何らかの形で出力するに限るのですが、コードを書いたり記事を書いたりプレゼンしたりする時間もなかなか取れない昨今、つっつき会のような場なら短時間で大きな効果を得られることに後から気が付きました。
つっつきながら主にmorimorihogeさんがSlackに要点を流し、しかも私がそれを記事にするので、「楽しく雑談して終わり」にならず、ちゃんと情報として残るのも大きなメリットです。
発展系として「オレもこんな記事見つけたぜ」とか「この本すっごくよかった」みたいなこともこういう場なら気楽に言えますね。
もくもく会やハッカソンは一定時間内に何らかの成果を出すという場という感じですが、つっつき会はまた違う効果がある場だと思います。
Railsウォッチをお読みいただいている皆様も、たまにはチームでRailsウォッチを肴にツンツンしてみてはいかがでしょうか。
有志の皆様いつもありがとうございます!
Rails公式ニュース
#27300 yarnをデフォルトにしてvendor/assetsを廃止することに
DHHがyarnを大歓迎しています。yarnは以前のRailsウォッチでもご紹介しましたが、まだ登場後半年も経っていないのにこの普及ぶりはすごいですね。
サムアップがめちゃ集まっています。反対らしい反対もなく、ストンとマージされています。
なおvendor/assetsには一部のgemがアセットを置くことがあるようなので、今後そうしたgemがアップデートされることになりそうです。
Issueで、package.jsonファイルはプロジェクトのルートに置くべきだという意見が出されており、つっつき会でも皆うなずいていました。
#27288 webpacker gemの改良始まる
yarnデフォが決まってまた動きが激しくなりました。機能がかぶるwebpackとwebpackerをどうするかという点ですが、webpackの機能をwebpackerにも移植して強化を図ります。
#26266 デフォルトのプライマリキーをBIGINTに変更
この変更はかなりでかそうです。「テーブルがロックされるーw」という小さな悲鳴も聞こえてきました。
こんなツイートも紹介されています。
Friends don't let friends use INT as a primary key. Btw you can find out where you accidentally did this, run $ heroku pg:diagnose
— ThisIsNotNormal (@schneems) 2016年5月13日
#25451新機能: NOT NULL violation時にActiveRecord::NotNullViolationをraiseする
このプルリクは@kamipoさんだったんですね。データベース関連では有名な方です。
morimorihogeコメント
今まではnullを渡してもActive Recordを通過してしまい、SQLでやっとエラーになってましたね。
エラーメッセージがわかりやすくなるので、初心者とかあんまりRailsに慣れていない人たちにはありがたい修正だと思います。地味に良いですね。
#27271 RSpecの結合テストが40%高速化
digest cacheをクリアしないようになったことでRSpecを高速化したとのことです。
#27248 after_commitコールバックを冪等化
「after_commit
ってどんなときに使うんだ?」と皆で思ったりしましたが、要求のシビアな案件などで必要になるかもしれないというコメントもありました。
今さらですが「冪等」は「ばくとう」ではなく「べきとう」と読みます。英語ではidempotentですね。もともとはもろに数学用語で、冪等化行列は「方程式E2=Eを満たす行列」を指します。
#28303 テンプレートでblockという名前の変数を使えるようにした
変数名がblockってあまり筋がよくなさそうな気がします。
morimorihogeさんがソースから予約語を扱っている部分を掘り当てました。RailsやERBってこういう感じで予約語を管理しているのを初めて知りました。
RUBY_RESERVED_KEYWORDS = %w(alias and BEGIN begin break case class def defined? do
...
locals = @locals - Module::RUBY_RESERVED_KEYWORDS
Ruby Weekly
SidekiqのSinatraをRackに置き換える
Sidekiqはバックグラウンドジョブを扱うgemですが、今まではRailsにSidekiqをインストールするとSinatraまでインストールされていたということがわかり、思わず一同顔を見合わせてしまいました。
SinatraはRailsよりも軽量なRubyのWebフレームワークですが、RailsにSinatraがインストールされるのは明らかに冗長なのでこの修正は助かりますね。
つい「畸形嚢腫」という言葉を思い出してしまいました。私の年代ではピノコのことですね!
AWSの新サービスRekognitionをRubyから使う
こういう機械学習系のサービスがgemで導入できるようになったんですね。
Ruby 2.4の新機能
つっつき会でもっとも反響があったのがこの記事でした。
Float#round
のデフォルトの動作が変わる
# Ruby 2.3
(2.5).round
3
# Ruby 2.4
(2.5).round
2
四捨五入の変更はきついですね。「SQLでの四捨五入とRubyの四捨五入がずれたりするかもしれない」との声もありました。要注意です。
最近接偶数への丸め
最近接偶数への丸め (round to the nearest even; RN) は、端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げ、端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める。JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている。
四捨五入ではバイアスが発生する、端数0.5のデータが有限割合で存在する場合でも、バイアスがないのが特徴であり、多数足し合わせても丸め誤差が特定の側に偏って累積することがない(偶数+0.5は現れるが奇数+0.5は現れない、といったような特徴があるデータであれば、やはりバイアスはあらわれる)。
単に「偶数丸め」「最近接丸め」とも呼ばれる。JIS Z 8401で定められていることから「JIS丸め」、あるいは同様にISO 31-0で定められていることから「ISO丸め」ともいう。英語では、誤差の累積を嫌い銀行家が好んで使ったため「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう。5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、端数がちょうど0.5の場合に整数部分が偶数なら切り捨て奇数なら切り上げるので「偶捨奇入」と呼ばれたりもする。
Wikipedia: 端数処理より
その他の新機能は以下のとおりです。
- IOのメソッドにChompフラグを追加
Pathname#empty?
compare_by_identity
Kernel#send
、BasicObject#send
、Symbol#to_proc
の改良Hash#transform_values
Kernel#clone
でオプションのキーワード引数を利用可能にThread.report_on_exception
Binding#irb
最後のBinding#irb
は、pryのBinding#pry
と同等のデバッグ機能をpryなしでも使えるので便利そうですね。
参考 from morimorihoge
Ansistrano
CapistranoをAnsibleに移植したことで、PHP/Python/RubyなどのアプリをCapistrano風にAnsibleでデプロイできるとのことです。
Railsのレガシーコントローラのリファクタリング
MVCのコントローラにターゲットを絞ったリファクタリング記事です。
コントローラのコードはできるだけ少なくするのが定番なので、コントローラが膨れ上がっていたり、コントローラのテストがやけに多かったりするのはそれだけでやばい臭いがしますね。
RubyFlow
PolyBelongsTo gem
PolyBelongsTo gemはActive Recordのリレーションを拡張するメソッド群です。
MyObject.pbt
など、さすがにメソッド名の付け方はブーイングの嵐でした。
morimorihogeコメント
複雑に絡み合ったモデルの関連や階層を取り出すに使えそうなメソッドがいろいろあるので、調査用ツールを作るのに向いてそうですね。
Rails開発で役立つpry活用術
短くて拍子抜けしそうな記事ですが、その分すぐ読めるので英文慣れしてない方向け。
Pry#wtf?
は直前に発生した例外を追うのに便利そうです。
- 参考: WTFの意味とは
openruby.com
openruby.comをニュースソースに加えてみました。ときどき日本語記事も流れてくることもあるようです。
gemとnpmのバージョン管理方法の違い
上の表はリンク先記事からのものですが、バージョン表記の解釈がgemとnpmで見事に違っているのがよくわかります。これが時に困った問題を引き起こしてしまいます。
つっつきでは「gemのバージョン指定方法ってなんであんなにわかりにくいんだ」との声もありました。
Hacker News
lanchaco.com
画面をポチポチするだけで、ドメイン名取得も含めてレスポンシブなWebサイトを無料で作れるようです。お便利サービスもここまで来たかと。悪いことに使っちゃやーよ。
BOSEのHearphone
BOSEの新製品Hearphoneは、ノイズをカットして会話を聞き取りやすくしたり、大きな音を和らげたり、コンサートの音質を変えたりできるようです。
darkpatterns.org
ユーザーをだますためのUIをあれこれ集めた動画です。既に日本語ニュースサイトでも紹介されているようですね。
Goの間
Go 1.8ではhttpサーバーのgraceful shutdownが導入される
これ地味にありがたいです。群雄割拠するGo製Webフレームワークたちはgraceful shutdownがあったりなかったりするので、スペックだけ見てフレームワークを選ぶとこういうところで小さく困ってしまいます(&困ってます)。
あなたの知らないGo向けツール
この中では、interfaceの型を調べてくれるinterfacerが気になりました。Go言語のinterfaceではいつも迷ってましたが、自分だけではなかったと知ってちょっと安心しました。
無印枠
USBに挿すとLinuxマシンになるXtra-PC
「古いマシンを再生できる」が売りのようで、WinでもMacでもOK、本体HDは読み取りのみなのでデータも壊れず、HDがなくてもいい、だそうです。
案外トラブルシューティングに便利かもしれないと思ってしまいました。
時間は現実ではない: あらゆる事象は同時に生起している
日本語でも出回っているニュースですね。タイトル前半のおかげでSEO的にバズってますが、個人的にはタイトルの後半に力点があるように思えます。
英語圏のプログラミング言語擬人化
Webチームのtakanekoさん情報です。これはもう説明するだけ野暮というものでしょう。
takanekoさんによるともともとDHHが以下をリツィートしたのがバズったきっかけのようです。Ruby on Railsの擬人化だけ女子高生だからじゃないのかとのツッコミもありました。
I'm a sucker for anthropomorphizing programming languages: https://t.co/CmegHEEwbG pic.twitter.com/IyVA5I9Lwr
— Krinn DNZ (@krinndnz) 2016年11月29日
今週は以上です。
関連記事
- 週刊Railsウォッチ(20161209)Active Supportの非推奨メソッド廃止、RailsのjQueryへの依存を廃止ほか
- 週刊Railsウォッチ(20161125)Railsのデータベース・ベストプラクティス、SQLインジェクション解説ほか
- 週刊Railsウォッチ(20161117)DockerホスティングのHyper.sh、accepts_nested_attributes_for殺すほか
- 週刊Railsウォッチ(20161109)bundler audit gemは超おすすめ、CIAのFactbook gemほか
- 週刊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の脆弱性ほか