- 開発
週刊Railsウォッチ(20171201)JSON PatchでRails高速化、Knapsack Proでテスト高速化、Decorator/Presenter gem比較ほか
こんにちは、hachi8833です。マカーな皆さまはHigh Sierraアップデートお済みでしょうか。
macOS High Sierra なかたは,昨日ネットを騒がせた対策法についての議論はすべて忘れて,すぐに App Store からセキュリティアップデートを行ってください。再起動不要
— Haruhiko Okumura (@h_okumura) November 30, 2017
続報: macOS High Sierra脆弱性パッチに別の不具合、ファイル共有できなくなる恐れ。ただし修正は簡単
12月最初のウォッチ、いってみましょう。
Rails: 今週の改修
MemCacheStoreでexpiringカウンタに機能追加
expires_in: [seconds]
に#increment
と#decrement
オプションが追加されました。
Rails.cache.increment("my_counter", 1, expires_in: 2.minutes)
のように使えます。
# activesupport/lib/active_support/cache/mem_cache_store.rb#125
options = merged_options(options)
instrument(:increment, name, amount: amount) do
rescue_error_with nil do
- @data.incr(normalize_key(name, options), amount)
+ @data.incr(normalize_key(name, options), amount, options[:expires_in])
end
end
end
アイドリング中のDB接続を解除
# activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb#959
+ # Disconnects all currently idle connections.
+ #
+ # See ConnectionPool#flush! for details.
+ def flush_idle_connections!
+ connection_pool_list.each(&:flush!)
+ end
つっつきボイス: 「これまではとりあえずconfigで設定したpool数分だけ常にDBのconnction poolを確保していたのが、idle_timeout
の間使われていないconnectionは切断するようになったということかな」「大規模なシステムだと影響ありそう: abstractの中で定義されているので、ほぼすべてのDBMSに影響するのかも」
ActiveRecordのDB接続のfork周りを改善
# activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb より
+ # Discards all connections in the pool (even if they're currently
+ # leased!), along with the pool itself. Any further interaction with the
+ # pool (except #spec and #schema_cache) is undefined.
+ #
+ # See AbstractAdapter#discard!
+ def discard! # :nodoc:
+ synchronize do
+ return if @connections.nil? # already discarded
+ @connections.each do |conn|
+ conn.discard!
+ end
+ @connections = @available = @thread_cached_conns = nil
+ end
+ end
つっつきボイス: 「これは上の#31221に関連する修正のようだ」「最近DBアダプタ周りの改修が目につきますね」
form_with
ヘルパーでデフォルトでidを生成するよう変更
configでid生成を無効にすることもできるそうです。
# actionview/lib/action_view/helpers/form_helper.rb#1676
def initialize(object_name, object, template, options)
@nested_child_index = {}
@object_name, @object, @template, @options = object_name, object, template, options
- @default_options = @options ? @options.slice(:index, :namespace, :skip_default_ids, :allow_method_names_outside_object) : {}
+ @default_options = @options ? @options.slice(:index, :namespace, :allow_method_names_outside_object) : {}
convert_to_legacy_options(@options)
つっつきボイス: 「あ...これform_for
をform_with
に代えたときにはまった気がする」「今度からはデフォルトでidが有効ですね」
ActiveRecord::RecordNotFound
に引数を追加
# activerecord/lib/active_record/associations/collection_association.rb#79
def find(*args)
if options[:inverse_of] && loaded?
args_flatten = args.flatten
- raise RecordNotFound, "Couldn't find #{scope.klass.name} without an ID" if args_flatten.blank?
+ model = scope.klass
+
+ if args_flatten.blank?
+ error_message = "Couldn't find #{model.name} without an ID"
+ raise RecordNotFound.new(error_message, model.name, model.primary_key, args)
+ end
+
つっつきボイス: 「これはデバッグでありがたい: どのidで失敗したかがわかるのは親切」
「その代わり今後はこういう雑なコード↓を書くとリクエストidがお漏らししてしまいますけどね」
raise => e
render :index, alert: e.inspect
variable_size_secure_compare
をpublicに変更
publicに変更してもSHA256ダイジェストの長さは暴露されないからという理由です。長さを手がかりにした攻撃方法があった気がします。
# actionpack/lib/action_controller/metal/http_authentication.rb#70
before_action(options.except(:name, :password, :realm)) do
authenticate_or_request_with_http_basic(options[:realm] || "Application") do |name, password|
# This comparison uses & so that it doesn't short circuit and
- # uses `variable_size_secure_compare` so that length information
+ # uses `secure_compare` so that length information
# isn't leaked.
- ActiveSupport::SecurityUtils.variable_size_secure_compare(name, options[:name]) &
- ActiveSupport::SecurityUtils.variable_size_secure_compare(password, options[:password])
+ ActiveSupport::SecurityUtils.secure_compare(name, options[:name]) &
+ ActiveSupport::SecurityUtils.secure_compare(password, options[:password])
end
end
end
つっつきボイス: 「長さを手がかりにした攻撃って何て名前だったかなー」「んーと」「そうだ、timing attack」
以下の記事によると、アプリの応答時間がパスワード比較の前方一致に比例してしまうとパスワードが推測されやすくなってしまうので、それを防ぐためにRails 4.2.5.1でvariable_size_secure_compare
が導入されたという経緯でした。
参考: Rails CVE-2015-7576 で見る タイミングアタック(Timing Attack)
既存の認証情報をデフォルトで上書きしないよう修正
昨日mergeされていました。
# railties/lib/rails/generators/rails/credentials/credentials_generator.rb#8
module Generators
class CredentialsGenerator < Base
def add_credentials_file
- unless credentials.exist?
+ unless credentials.content_path.exist?
template = credentials_template
say "Adding #{credentials.content_path} to store encrypted credentials."
...
def add_credentials_file_silently(template = nil)
- credentials.write(credentials_template)
+ unless credentials.content_path.exist?
+ credentials.write(credentials_template)
+ end
end
つっつきボイス: 「うっぷ、これは普通にバグ」「y-yagiさんが秒殺で修正」
Rails
⚓Decorator/Presenter gem 6種を比較(Awesome Rubyより)
以下の6つを比較していますが、他にもあるそうです。Lulalalaは手作りなようです。
- ActiveDecorator
- Draper
- Oprah
- Display-case
- Lulalala Presenter
- RailsCasts
つっつきボイス: 「RailsCast?と思ったらgemじゃなくて本当にRailsCastsだった」「↓この図、DecoratorとPresenterの違いがよくわかってとてもいい」「Presenterは機能を絞り込んでる感じ」「Decoratorは強力な分ビューで無茶なことできちゃったりする」
⚓Rails 5.2を待たずにActiveStorageを使ってみる(Ruby Weeklyより)
すぐ使える手順です。
# 同記事より
Rails.application.routes.draw do
resources :posts
end
⚓JSON-PatchでRailsのパフォーマンスを向上(Ruby Weeklyより)
見出しから単にJSONにパッチを当てるのかと思ったら、RFC6902: JSON Patchを元に実装したfast-JSON-Patchというnpmパッケージでした。hanaというgemで導入しています。
// 同記事より
import { compare as jsonPatchCompare } from 'fast-json-patch'
if (!Immutable.is(template.fields, previousTemplate.fields)) {
data.fields_patch = jsonPatchCompare(
previousTemplate.fields.toJS(), template.fields.toJS())
}
つっつきボイス: 「おー、JSONを毎回まるごと投げる代わりに差分だけを投げるのか」
⚓ブラウザごとのsession cookie上限を調べてみた(Ruby Weeklyより)
Rack::Protection::MaximumCookieというRackミドルウェアの利用を勧めています。
# mwpastore/rack-protection-maximum_cookie より
use Rack::Protection::MaximumCookie
つっつきボイス: 「巨大なsession cookie食わせると普通にぶっ壊れますね」「クライアント側で対処しないといけなくなるとつらいです」
⚓Amazon API GatewayでRuby SDK生成をサポート(Ruby Weeklyより)
aws.amazon.comより
# 同記事より
gem install pet-sdk-1.0.0.gem
つっつきボイス: 「おー、gemとして生成してくれるのがよさそう」「そういえば昔SOAPとかでこういうSDK生成的なのが流行った気がする: Java界隈とかで特に」
⚓RailsEventStore.orgで監査ログを無料で取得
RailsEventStore.orgはオープンソースをベースにしています。
つっつきボイス: 「これ使いみちあります?」「悪くなさそう: 某社案件で使いたかったなこれ」「pub/sub好きな人にはいいかも」「Auditingは大体以下の2つをやりたいケースが多い:」
- データに対する参照や変更ログを自動で網羅的に取りたい
- 特定の操作に対して手動で特別なログを出したい
「前者はARのModelに対してであればpaper_trailとかがメジャーで、良い」「後者は正直あんまり決め手がないというかLoggerでよくね?という話になったりする」
後でRailsのPublish/Subscribeについて検索したところ、The Publish-Subscribe Pattern on Rails: An Implementation Tutorialという記事でwisperというgemがあるのを知りました。RailsのActionCableにもPub/Subがありますね。
- リポジトリ: krisleech/wisper
⚓Knapsack Pro: 複数のCIノードにテストを分散するサービス
knapsack pro、着眼点のいいSaaSだよな。既存のサービスから届くデータはファイル名と実行時間だけでサーバー運用の負担も少ない。料金プランを実行時間別に分けているのも適切。ファイル数や実行時間のばらつきが増えるほど、アルゴリズム大変だろうし。
— masa寿司 (@masa_iwasaki) November 27, 2017
つっつきボイス: 「Knapsack Pro、以下がとりあえずわかりやすかった」
参考: CircleCI + KnapsackProでRailsのテストを高速化させる
comfortable-mexican-sofa: Rails 5.1対応のマルチリンガルCMSエンジン(RubyFlowより)
以前からあったようです。★2100超え。
つっつきボイス: 「名前が凄いな: comfyという略し方も」「mexican sofaってこういう形なのか」「Railsエンジンのようだけどルーティングは自分で足すのかな↓」「マルチリンガル対応みたいだし、使いどころがありそうならチェックしてもいいかも」
# 同記事より
comfy_route :cms_admin, path: "/admin"
comfy_route :cms, path: "/"
derailed_benchmarks: Railsアプリ全体のベンチマークgem
- リポジトリ: schneems/derailed_benchmarks
Railsのベンチマークをさっと取れます。作者はRichard Schneemanさんです。
$ bundle exec derailed bundle:mem
TOP: 54.1836 MiB
mail: 18.9688 MiB
mime/types: 17.4453 MiB
mail/field: 0.4023 MiB
mail/message: 0.3906 MiB
action_view/view_paths: 0.4453 MiB
action_view/base: 0.4336 MiB
つっつきボイス: 「gem名はちょっとひねりすぎかなー」「『脱線』w」「自分でもちょっとだけ動かしてみました」
duckrails: Rails APIのモックを急いで作りたいときに(Ruby Weeklyより)
- リポジトリ: iridakos/duckrails
GUIでAPIモック作れます。docker pull iridakos/duckrails
でお試しできます。
つっつきボイス: 「これ教育用にならいいかもしれない」
enumerize: ActiveRecordなどの属性をi18n化
- リポジトリ: brainspec/enumerize
class User < ActiveRecord::Base
extend Enumerize
enumerize :sex, :in => [:male, :female], scope: true
enumerize :status, :in => { active: 1, blocked: 2 }, scope: :having_status
end
User.with_sex(:female)
# SELECT "users".* FROM "users" WHERE "users"."sex" IN ('female')
User.without_sex(:male)
# SELECT "users".* FROM "users" WHERE "users"."sex" NOT IN ('male')
User.having_status(:blocked).with_sex(:male, :female)
# SELECT "users".* FROM "users" WHERE "users"."status" IN (2) AND "users"."sex" IN ('male', 'female')
つっつきボイス: 「名前からenum
の拡張かと思ったら、enumerizeのkeyはstringとしてDBに保存されるということかな」
「なお、自分はこのkeyをstringのままenumとして扱う方が好き: DBでSELECT
したときにわかるので」「keyが0
とか1
とかだと見たときにわからないですしね」「そういえば今のRailsはenumで_prefix
と_suffix
が使えるのでとても助かってます↓」「enum
ってRails 4.1からだったのか」
参考: Rails Enum with prefix/suffix
social-share-button: Railsに各種SNSボタンを追加するgem(Awesome Rubyより)
- リポジトリ: huacnlee/social-share-button
つっつきボイス: 「今ならgemよりWebpackでインストールしたいですね」
本当にあったRailsの怖い話
なるほどなー。uniqueness貼るやつ、DB上もユニークインデックスはると思うのでインデックス効きそうな感じするけどどうなんだろ/本当にあったRailsの怖い話 #rails #ruby https://t.co/J2f5Dxwx9N @SlideShareさんから
— freedomな人 (@tzm_freedom) November 30, 2017
Ruby trunkより
提案: attr
、attr_reader
、attr_writer
をpublicに変えよう
2.5で採用されるようです。
Here are 15k+ examples of send :attr_accessor in the wild:
https://github.com/search?utf8=%E2%9C%93&q=language%3Aruby+%22send+%3Aattr_accessor%22&type=Code
15k+ examples of send :attr_writer in the wild:
https://github.com/search?utf8=%E2%9C%93&q=language%3Aruby+%22send+%3Aattr_writer%22&type=Code
15k+ examples of send :attr_reader in the wild:
https://github.com/search?utf8=%E2%9C%93&q=language%3Aruby+%22send+%3Aattr_reader%22&type=Code
つっつきボイス: 「send :attr_accessor
とかでやっている事例がこんなにたくさんあるとは↑」「それならpublicにしてもよさそうですね」
提案: Exception#display
のエラー出力をフォーマットしたい(継続)
def the_program
# ...
raise "failure!"
# ...
rescue RuntimeError => e
$stderr.puts "#{e.message} (#{e.class})\n\t#{e.backtrace.join("\n\t")}"
retry
end
# こう書けば済むようにしたい
rescue RuntimeError => e
e.display
#
つっつきボイス: 「sorahさんからの提案だ」「『そらは』って読むのか」
今年3月の大江戸Ruby会議でキーノートスピーチを務めたのがsorahさんでした。
Ruby
クラスメソッドをclass << selfで定義する理由(Awesome Rubyより)
RubocopのRubyスタイルガイドではdef self.method
が推奨されていることを踏まえた記事です。いかにも議論になりそうです。
つっつきボイス: 「わかるー: 自分もclass << selfにしたい派」「self.
だとクラスのどこにでもクラスメソッドを書けてしまうから散らかりそう」「self.
使うこともあるかな」「個数にもよるかも: 1つのクラス内でself.
が3つ以上になると耐えられなくなりそう」
Ruby 2.5の新機能: Dir.children
とDir.each_child
(Ruby Weeklyより)
# 同記事より
> Dir.each_child("/Users/mohitnatoo/Desktop/test") { |child| puts child }
.config
program.rb
group.txt
test2
つっつきボイス: 「Dir.children
とDir.each_child
、なぜ今までなかったんだと思っちゃいますね」
Rubyでfreeze
やfrozen?
を使うタイミング
# 同記事より
MY_CONSTANT = "foo".freeze
MY_CONSTANT << "bar" # => RuntimeError: can't modify frozen string
平易で読みやすい内容です。
つっつきボイス: 「Ruby最近始めた人やPHPとかから来た人には読んでおいて欲しいですね」
chewy: Ruby製Elasticsearchフレームワーク(Awesome Rubyより)
- リポジトリ: toptal/chewy
Elasticsearch公式のelasticsearch-rubyのODMでありラッパーだそうです。
# toptal/chewyより
class UsersIndex < Chewy::Index
define_type User.active.includes(:country, :badges, :projects) do
field :first_name, :last_name # multiple fields without additional options
field :email, analyzer: 'email' # Elasticsearch-related options
field :country, value: ->(user) { user.country.name } # custom value proc
field :badges, value: ->(user) { user.badges.map(&:name) } # passing array values to index
field :projects do # the same block syntax for multi_field, if `:type` is specified
field :title
field :description # default data type is `string`
# additional top-level objects passed to value proc:
field :categories, value: ->(project, user) { project.categories.map(&:name) if user.active? }
end
field :rating, type: 'integer' # custom data type
field :created, type: 'date', include_in_all: false,
value: ->{ created_at } # value proc for source object context
end
end
つっつきボイス: 「インターフェースが素直で普通っぽく書けるのがよさそう」
bunny: RabbitMQのRuby製クライアント
- リポジトリ: ruby-amqp/bunny
- サイト: http://rubybunny.info/
ドキュメントがかなり充実しているようです。
# ドキュメントより
require "bunny"
conn = Bunny.new
conn.start
ch = conn.create_channel
q = ch.queue("", :exclusive => true)
x = ch.fanout("logging.events")
q.bind(x)
つっつきボイス: 「RabbitMQはメッセージングミドルウェアとして有名」「そういえばIBMのWebSphere MQというのもありますね」
参考: RabbitMQを導入すると… “依存しないカンケイ”でもっと幸せになれる!?
RubyHack.com: 米ソルトレイクシティで開催されるRubyカンファレンス
- 元記事: rubyhack.com
昨年に続き、来年5月中旬に第2回が開催されます。詳細は未定のようです。
つっつきボイス: 「ソルトレイクシティというとロケットカーのイメージ」「ユタ州なのか」
@a_matsudaさんの福岡Ruby会議02スライド
先日の福岡Ruby会議02のキーノート"Finding Ruby Again"の発表スライドです。 https://t.co/4wrpONOSP2 #fukuokark02
— Akira Matsuda (@a_matsuda) November 27, 2017
つっつきボイス: 「a_matsudaさんの作ったライブラリこんなにある↓」
RubyConf 2017に参加しての雑感(Ruby Weeklyより)
ざっとしか見ていませんが、進むに連れてだんだん落ち込み気味になってきて、ちょっとどきどきしてしまいました。コメント欄の励ましが泣けます。
mruby向けIDE
Link: mruby/c IDEの公開 | しまねソフト研究開発センター: https://t.co/TJLwJqzmqy
— Yukihiro Matsumoto (@yukihiro_matz) November 29, 2017
ちょっとだけ動かしてみました。
つっつきボイス: 「組み込み分野でIDE欲しい人はそれなりにいると思うので、そういう人向けかも」
データベース
PostgreSQLの設定を1箇所変えたら速度が50倍になった(Postgres Weeklyより)
これだけ速くなったそうです。
つっつきボイス: 「まさしくexplainが役に立つ例」
PostgreSQLのAutovacuumのビジュアル表示とチューニング(Postgres Weeklyより)
つっつきボイス: 「Vacuumって何だろうと思って」「↓: うかつにVACUUM FULL
すると終わるまでテーブル全部ロックされるから注意」「こ、怖」
参考: PostgreSQL: VACUUM
PostgreSQLのトランザクション分離レベル(Postgres Weeklyより)
repmgr 4.0がリリース(Postgres Weeklyより)
- プレスリリース: Announcing the Release of repmgr 4.0
- 詳細: repmgr 4.0.0 Documentation Release 4.0.0
PostgreSQL標準のツールです。dry-runできる操作が増えたようです。
つっつきボイス: 「dry-runマジありがたい」「レプリケーション方向逆にして自爆するのを防げる」
PgBouncerとAWS RDSでデータベーストラフィックのセキュリティを向上(Postgres Weeklyより)
参考: PgBouncer とは何ですか
スライド: 人間のためのPostgreSQL設定(Postgres Weeklyより)
つっつきボイス: 「やっぱりPostgreSQLはいい情報あるなー」
JavaScript
JSのlet
とconst
解説
ブラウザからBluetooth機器につないでみた
つっつきボイス: 「こんなことできるのか!」
CSS/HTML/フロントエンド
Webサイトを簡単にPWA(Progressive Web App)に変える方法
Googleが推進しているProgressive Web Appの記事です。
- PWAサンプルサイト: https://pwa.rocks/
つっつきボイス: 「Progressiveといえばプログレ」「私もろその世代」「ピンク・フロイドとかキング・クリムゾンとかでしたっけ」「今はJoJoの影響でキング・クリムゾンの意味が全然違っちゃいましたね: 本家クリムゾンもそれに反応してたり」
The band King Crimson's Robert Fripp shares a JoJo meme on the stand King Crimson. ⊙▂⊙ #JJBAhttps://t.co/XeOxNj2oPDhttps://t.co/yUsFCISNia pic.twitter.com/iMRkJeWcmz
— Robert (@DemiFiendRSA) January 8, 2017
参考: いまさら聞けないPWAとAMP
HTTP/2 pushは思ったより手強い(Frontend Weeklyより)
その他
正規表現の背後を深掘り
つっつきボイス: 「この間翻訳したJSの正規表現記事より深い内容っぽいので、これも翻訳してみます」
VSCodeの表示をかっこよくするCSS
VSCodeをアップデートするとCSSが元に戻っちゃうそうです。
コーダーがスランプを理解して克服する方法
最初何のblockかと思ってしまいました。
- パソコンの電源を切ってみる
- あえて紙と鉛筆でやってみる
- などなど
つっつきボイス: 「紙と鉛筆はスランプ以外でも有効ですねー」
番外
どうぶつの森
スポットインスタンスの高騰がどうぶつの森の影響という話を耳にして、にわかにどうぶつがゆるせなくなっている
— Moriyoshi Koizumi (@moriyoshit) November 28, 2017
100ドルで買えるミューオン検出器
100ドル卓上ミューオン検出器の話を広報の人から聞いたので調べてみたらこれか。https://t.co/nbpVgDuIpJ
arxivもある。https://t.co/IjEk5zVfw6
原理はプラシン+SiPM。さすがに組み立て費含めると100ドルでは作れない気もするが。— Hiro Nakayama (@Hryk_Nkym) November 29, 2017
12月
明日から Advent Calendar か。
— mattn (@mattn_jp) November 30, 2017
今週は以上です。
バックナンバー(2017年度)
- 20171124 GitHubにセキュリティアラート追加、RailsでVue.jsを使う、Railsテスト本2種、node-pruneで瞬間クリーンアップほか
- 20171117 Rails開発3年分のコツ集大成、PostgreSQL 10.1でセキュリティ問題修正ほか
- 20171110 dry-rbでFormObjectを作る、RailsのSQLインジェクション手法サイト、年に1度だけ起きるバグほか
- 20171020 Rubyが来年で25周年、form objectでサニタイズ、コアなString解説本ほか
- 20171013 Ruby 2.5.0-preview1リリース、RubyGems 2.6.14でセキュリティバグ修正、Bootstrap 4.0がついにBetaほか
- 20171006 PostgreSQL 10ついにリリース、Capybaraコードを実画面から生成するnezumiほか
- 20170929 特集: RubyKaigi 2017セッションを振り返る(2)Ruby 2.3.5リリースほか
- 20170922 特集: RubyKaigi 2017セッションを振り返る(1)、Rails 4.2.10.rc1リリースほか
- 20170915 Ruby 2.4.2リリースで脆弱性修正、strong_migrations gemでマイグレーションチェック、書籍『Mastering PostgreSQL』ほか
- 20170908 Rails 5.1.4と5.0.6リリース、コード書換え支援gem「synvert」、遅いテストを分析するTestProfほか
- 20170818 RailsとYarnでTypeScript、Rails新コミッタにkamipoさんも、CSVにSQLクエリをかけられるツールほか
- 20170804 Rails 5.1.3と5.0.5が正式リリース、GitHubでローカライズ基盤サービス、正規表現で迷路を解くほか
- 20170623 gemを見極める7つのコツ、mixinがよくない理由、重いページをrender_asyncで軽減ほか
- 20170616 railsdiff.orgはアップグレードに便利、RubyのDSLとかっこの省略、TerraformをRubyで制御ほか
- 20170609 ついにtherubyracerからmini_racerへ、注意しないとハマるgem、5.1でのVue.jsとTurbolinksの共存ほか
- 20170602 チームが喜ぶ19のgem、Bundler 1.15が高速化&機能追加、Deviseに挑戦する新認証gem「Rodauth」ほか
- 20170512 Rubyの不思議な挙動「シャドウイング」、コードレビュー作法を定めるDanger gemほか
- 20170428 Rails 6.xでの’#form_for’と
#form_tag
廃止決定のその後、deviseの5.1対応はこれから、ほか - 20170421 RailsConfが来週アリゾナで開催、コントローラを宣言的に書けるdecent_exposure gemほか
- 20170414 サーバーを危うくする1行のコード、PostgreSQL 10の新機能ほか
- 20170407 N+1問題解決のトレードオフ、Capybaraのテスト効率を上げる5つのコツほか
- 20170331 PostgreSQLの制約機能を使えるRein gemはビューも使えるほか
- 20170324 Ruby 2.4.1リリース、GAEがついにRubyに対応、このgemがないと生きていけない27選ほか
- 20170317 Railsパフォーマンスチューニング本、DBレコード存在チェックの最速メソッド、RubyのUnicode正規化ほか
- 20170310 クールなDocker監視ツールCtop、RailsがGoogle Summer of Code 2017に正式参加、Unicode 10.0.0ドラフト発表ほか
- 20170303 5.0.2正式リリース、メタプログラミングに懲りた話、bundler 1.12のバグ、すぐ試せるWebアノテーションほか
- 20170227 Rails 4.2.8リリース、SHA-1コリジョンアタック、便利なハッシュ変換ツールほか
- 20170217 Rails 4.2.8.rc2リリース、Ruby 2.4正規表現とActiveSupportのnormalizeほか
- 20170210 JRubyやRubiniusの配列への追加はスレッドセーフではないほか
- 20170203 AnyLogin gemで開発中に楽々再ログイン、イベント数ベース課金の監視サービスRollbarほか
- 20170127 わかりやすいAWSサービス名、Rails DBは便利、TruffleRubyの驚異的速度ほか
- 20170120 Ruby 2.5.0 devリリース、古いMySQLのサポート終了、uniqメソッドが削除ほか
- 20170116 Ruby 2.4の詳細、範囲指定したsumメソッドは速い、rescueの挙動を動的に変更ほか
- 20170110 ReactをRailsに置き換える、Ruby 2.4の新機能ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。