こんにちは、hachi8833です。RubyKaigi 2017@広島のかわいい公式Tシャツをどうやらどこぞに置き忘れてしまいました(´・ω・`)
RubyKaigiの動画も既にすべて公開され、スライドもほぼ出揃ってきたようです。既に大きな話題になっているので今さらですが、RubyKaigiのNOCWi-Fiチームのそらはさんのインフラ記事がとてもよかったので一応貼っておきます。
書いた / “RubyKaigi 2017 で Wi-Fi を吹いてきた #rubykaigi - diary.sorah” https://t.co/fY1AEYtthh
— そらは (@sora_h) September 25, 2017
ウオッチ特別編は2日目LTと3日目セッションです。それではいってみましょう。
RubyKaigi 2017広島: セッションを振り返る: 2日目: LT 12本勝負
LTは10本のような気がしてましたが、並べてみたら12本でした。昨年と同様、LTにするにはもったいないレベルの内容が多く、大変濃密な1時間でした。以下は通しのLT動画です。
セッションの番号は、先週に続き視聴した順に振っています。今回動画やスライドの埋め込みは控えめにしました。
LT#20: Implementation of Web Standards in Mastodon @_furoshiki
つっつきボイス: 「マストドンって最近流行ってるようでござるな」「スライドでも説明されていますが、分散サーバー型のTwitter的マイクロメッセージのSNSで、フェデレーションという概念がある」「最初OStatusという古い標準をベースにしたGNU socialでMastodonしてたのが、バルス祭りに備えようとしたときにパフォーマンスが出ないわドキュメントもろくにないわで、検討の末ActivityPubという新しい標準に乗り換えたお話」「Web開発者やインフラエンジニアならいろいろ心当たりありそうな話でした」
LT#21: How to develop CRuby easily with Vim @ujm
- スライドMarkdown: file-ujihisa-rubykaigi2017-lt-vim-md
- 動画頭出し
つっつきボイス: 「vimでマリオ動かしてた」「VimでIDEみたいにRubyコードからc定義へのジャンプやオートコンプリートとかするプラグインを書いたというLTらしいお話でした」
上のスライドMarkdownにあったhttps://github.com/ujihisa/cruby-defs.vimはRubyKaigi中に公開するとありましたが、今見たらリンクが切れてました。数日前のリポジトリと思われる以下がありましたので参考までに。
LT#22: How to specify frozen_string_literal: true
. @znz
つっつきボイス: 「frozen_string_literal
マジックコメントを付けまくったら、IO#read
でもエラーが出たそうです」「read
なのにでござるか?」「IO#read
のパラメータが2つあるやつだと2つ目がバッファなんですが、そこで起きてた」
LT#23: Use case of Refinements with black magic @joker1007
joker1007さんのrefinement愛が伝わってきました。
RubyKaigiブログ書いた! #rubykaigi
RubyKaigi 2017の記録 - joker1007’s diaryhttps://t.co/Xa8DeugRcS pic.twitter.com/WhSLZorCEN— ジョーカー1007 (@joker1007) September 27, 2017
つっつきボイス: 「refinementなら特定のテストの特定の部分だけパッチを当てる、みたいなことができるんですね」「TableSyntax
のテストの書き方とかなかなかトリッキー↓」
参考
LT#24: A WebSocket proxy server of Niconico comment server by Ruby @GhostBrain
つっつきボイス: 「最初ニコ生で小規模にWeb Socketでプロキシ立てたら『これニコ動でもやれるよね?』と指示が来て、ユーザー数が段違いなので引きつりながらJRubyで切り抜けた話」
「サーバーに入る人より出て行く人が多かったりという怪現象」
LT#25: Auto Completion in Rails::WebConsole @sh19910711
つっつきボイス: 「Railsのブラウザコンソールでオートコンプリートできるようにしたそうです」「ほほー」
今動画を少し見直してみると、Ruby Roguesという技術系Podcastを愛聴しているとスライドに記載されていたので貼ってみました。文字起こしもされていてなかなかよさそうなPodcastです。
LT#26: My Challenge of embedding mruby into a bare-metal hypervisor @chikuwa_IT
つっつきボイス: 「hypervisorでmrubyしようとしたらFPU(浮動小数点演算ユニット)が使えなかったりしたのでソフトウェアに置き換えたりして切り抜けた」「大昔はFPUなんてないのが当たり前だったからみんなこんなふうにソフトウェアでやってましたけどね: 8088の頃とか」
そういえば私も8080から始めたのでした。
LT#27: Glitching ruby script @shyouhei
glitchingという用語を初めて知りました。glitchは一般には「故障」「誤作動」と訳されるくだけた英語ですが、コードのある部分と別の部分をわざと取り替えるなどして、普通では出てこないようなバグをあぶり出す技法のようです。glitchingのため、ここではamerican fuzzy lopというツールを使ったそうです。
つっつきボイス: 「urabeさんがRuby trunkにときどき『どうやって見つけたのこれ?』みたいな見つけにくそうなバグをちょくちょく上げていたのは、きっとこれ使ったんですね」「アプリ開発者よりは言語やフレームワークメンテナが使いそうな」
こうしたツールをfuzzer(「毛羽立たせる」からの転用)と呼ぶそうです。私はつい楽器エフェクターのファズを連想してしまいました。
- 参考: american fuzzy lop (2.51b)
- 参考: American Fuzzy Lop画像検索 -- ウサギちゃん画像がぎっしり
LT#28: DNN/GPU with Ruby @ainame
つっつきボイス: 「機械学習用ライブラリdlib(C++)用rubyバインディングを作成した話」「GPUを使いたくてCUDAを呼ぶためにがんばった」「RubyでGC(ガベージコレクション)してもGPU側では自動でGCされないので自分でやってくださいだそうです」「そういえば昔機械学習で遊んでたときにNVIDIAのCUDAダウンロードしたんですが、すごくでかいうえに結局Pythonにバインドできなかった...」
- 参考: Wikipedia-ja CUDA
LT#29: Migration from hiki to markdown in Rubima @miyohide
つっつきボイス: 「Rubyist Magazineるびまの記法をhikiからmarkdownに変えた話」「昔はいろんなWiki記法が乱立しとりましたなー(今もか)」「今はGitHubのおかげで開発者にはmarkdownが定着したし、記事をもっと書いてもらうために書きやすい環境を整えたということですね」「TechRachoが昨年内部的にmarkdownに切り替えたのも記事作成促進の一環なのでわかるなー」
LT#30: Independence of mruby. @take-cheeze
つっつきボイス: 「まさに今回のオープニングキーノートでも触れられていた『RubyをコンパイルするためにRubyが必要』という部分に手を加えた話」
rakeのファイルを動かすためにminirakeをシングルバイナリ化したそうです。
LT#31: LLVM-based JIT compiler for CRuby @k0kubun
つっつきボイス: 「これはもう普通のセッションでやってもおかしくない内容」「私も同じこと思いました」
Here are my slides for today's #rubykaigi lightning talk / 結構丁寧に資料つくったので見てください! https://t.co/0qFXTwGRrZ
— k0kubun (@k0kubun) 2017年9月19日
どこで見かけたか思い出せませんが、今回のRubyKaigiにはセッション枠の3倍ぐらい応募があったそうで、これを含むいくつかのLTも、もともと通常セッション用だったのかもしれません。泣く泣く絞り込んだ運営側の苦労が偲ばれます。
RubyKaigi 2017広島: セッションを振り返る: 3日目
セッション#32: Compacting GC in MRI @tenderlove
つっつきボイス: 「Aaron Pattersonさんのこのセッションもよかった: GitHubの中の人として、Unicornのチューニングの一環としてRubyのGC周りを改良した話」「CoW(Copy on Write)はコピーは瞬時に終わる代わりに、後で書き込むときにコピーが始まって遅くなるやつ」
そういえばiOS 11やMac OS High SierraのAPFSにもファイル単位でのCoWが行われます。
「メモリはページ単位で管理されますが、実際にはページ内に使われていない領域がけっこう含まれているので、起動時にこんなふうに↓コンパクトにすればfork時にCoWでコピーされる量が明らかに減るし、Unicornの場合実はめったに書き換えは発生しないのでパフォーマンスがよくなる」「初期起動ならコンパクト処理がんばって多少遅くなっても運用上問題はないし」「Ruby側のC実装の問題などで移動できないページもあったりするけど、それでも46%までコンパクトにできたそうです」
セッション#33 Introducing the Jet Programming Language @i2y_
並行処理向けで知られるErlang言語のBEAM VMを使って、できるだけRubyライクな言語を作る試みです。今回のRubyKaigiでは、Rubex、Goby、そしてこのJetとRubyライクな新言語の発表が目立ちました。
BEAM VM上で動くという点ではElixir言語と似ていますが、Erlangの特徴を採り入れつつ、よりRubyらしい記法を目指しているそうです。
その一方で、クラスを継承しないとかブロックが単なるクロージャであるなどの独自の方向性も打ち出しています。
つっつきボイス: 「スライドにGobyが映っていたので個人的にちょっとうれしかった」「Q&AでMatzがとてもうれしそうにたくさん質問してました」
セッション#34 Ruby for Distributed Storage System @tagomoris
つっつきボイス: 「BigDamというJavaで書かれた社内の大規模分散ストレージのRuby版を自分で書いたそうです『だって書きやすいから』」
なおbigdam-pool-rubyは現時点でもまだ公開されていません。
セッション#35 Ruby Parser In IRB 20th Anniversary...Now Let Time Resume @aycabta
IRB生誕20周年にかけたRDoc内パーサーのお話です。今のRubyにはRipperという正式なパーサークラスがありますが、昔はなかったのでIRBやRDocなんかが独自のパーサーを持ってしまっていて、そのRDocのパーサーをこの方がRipperに置換えてくれたそうです。パーサーがいくつもあると、本家パーサーが更新されたときに並行してメンテしないといけなくなって相当つらいだろうと想像できました。
偶然ですが、数か月前私がGobyのREPL部分を改造していたときに、最初に実装したStanさんから「参考までに、RubyのIRBは独自のパーサーを持ってるよ」と教えてもらい、見に行ったら本当にRubyで書かれた独自パーサーがありました。
つっつきボイス: 「前日のRubyKaraokeで平沢進を素晴らしい美声で熱唱している方がいて個人的におおっと思ったのですが、それがこの方でした」「冒頭で登山関連の話が割と長く続いて、どうなるかと思ってドキドキしちゃいました」「こういうドキュメント寄りの作業はなかなかやってくれる人がいないだろうなと思いました: 実際このPR↓に喜びの声が続々あったそうです」
セッション#36 Pattern Matching in Ruby @yotii23
つっつきボイス: 「パターンマッチングとあったので最初正規表現の話かなと思ったんですが、Rubyに%p()
というElixir的な新しいパターンマッチング記法を追加する話がどちらかというとメイン」「ワイの大好きな%w
みたいなやつですな」
セッション#37 Ruby in office time reboot @gotoken
つっつきボイス: 「RubyやRedMineなどのお馴染みのツールを開発以外の業務にも役立てる話でした」
セッション#38 JRuby at 15 Years: Meeting the Challenges @headius、@tom_enebo
つっつきボイス: 「昨年のRubyKaigiではJRuby系のセッションを全然見られなかったので見てみました: JRubyの歴史や概要をおさらいできた」「今年のJRuby関連セッションは昨年より少なかった印象です」
セッション#39 Writing Lint for Ruby @p_ck_
つっつきボイス: 「これは私とmorimorihogeさん両方とも見ました」
「RuboCopがコードを解析する仕組みと、自分で設定を書いてみようというお話でした: 広く使われているツールなのでQ&Aも賑わいましたね」「RuboCopもRipperは使ってないようでした」
RuboCopのメンテナの方だと途中まで気づいてなかった...
セッション#40 How to write synchronization mechanisms for Fiber @m_seki
m_sekiさんは今年もおそ松さんで攻めてます。
つっつきボイス: 「1日目のko1さんのセッションにもあったFiberのお話: 動画で丁寧に解説してくれているので動画の方がわかりやすいと思います」
Fiberやスレッドはやっぱり難しいとうなずき合いました。
週刊Railsウォッチ(20170922)特集: RubyKaigi 2017セッションを振り返る(1)、Rails 4.2.10.rc1リリースほか
セッション#41 Improving TruffleRuby’s Startup Time with the SubstrateVM @nirvdrum
つっつきボイス: 「速いと評判のTruffleRubyをチェックしたくて見てみました: JVM上で動くのでJRubyととても近い関係」「ファミコン(英語圏ではNES)エミュレータのOptcarrotもベンチマークに使ってました」
セッション#42 Towards Ruby 3x3 performance
- スライドPDF: VMakarov-RubyKaigi2017.pdf
- 動画
つっつきボイス: 「GCCなどを長年手がけている方だけあって、CPUのインストラクションコードが出まくる非常に濃厚な内容: さすがの締めくくりでした」「まあこのレベルを扱える、コンパイラの中身まで知りつくした超ベテランは世界にも数えるほどしかいないでしょうな」
「ここでもOptcarrot使われてた: Microsoftが以前フライトシミュレーターでパフォーマンスチェックしてたのをちょっと思い出しました」
Rubyに今後JITが導入されるのか、されるとしたらどんな形になるのか、見守りたいところです。
閉会&来年の開催場所
あらためて、みなさまお疲れさまでした。
Rails
ここから通常運転です。
Rails 4.2.10が正式にリリース
先週お伝えしたrc版から基本変わってないようです。
Rails: 今週の改修(Rails公式ニュースより)
変更: Rails 5.2でsecrets.ymlを非推奨にしてcredentials.yml.encを導入
DHH自身の旗振りです。
The combination of config/secrets.yml, config/secrets.yml.enc, and SECRET_BASE_KEY is confusing. It's not clear what you should be putting in these secrets and whether the SECRET_BASE_KEY is related to the setup in general.
This PR will deprecate secrets.yml* and instead adopt config/credentials.yml.enc to signify what these secrets are specifically for: Keeping API keys, database passwords, and any other integration credentials in one place.
新機能: with_attached_*
スコープを導入
改修そのものは1箇所でした。
# activestorage/lib/active_storage/attached/macros.rb
+ scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) }
修正: ActiveRecord::Associations::Preloader
のメモ化部分
# activerecord/lib/active_record/associations/preloader/association.rb
def key_conversion_required?
- @key_conversion_required ||= association_key_type != owner_key_type
+ unless defined?(@key_conversion_required)
+ @key_conversion_required = (association_key_type != owner_key_type)
+ end
+
+ @key_conversion_required
end
新機能: change_table_comment
とchange_column_comment
がMySQLでも使えるようになった
kamipoさんのPRです。
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+ def change_table_comment(table_name, comment) #:nodoc:
+ comment = "" if comment.nil?
+ execute("ALTER TABLE #{quote_table_name(table_name)} COMMENT #{quote(comment)}")
+ end
+
...
+ def change_column_comment(table_name, column_name, comment) #:nodoc:
+ column = column_for(table_name, column_name)
+ change_column table_name, column_name, column.sql_type, comment: comment
+ end
+
TechRacho記事でご紹介したこのRails 5の機能↓への追加です。
修正: ActiveStorageのFirefoxでのアップロード部分
修正: テストでPumaにデフォルト設定が効いていなかった問題
# actionpack/lib/action_dispatch/system_testing/server.rb
- Capybara.server = :rails_puma
+ Capybara.server = :puma, { Silent: self.class.silence_puma }
end
Rails
godmin: Rails 4以降で使える管理画面gem
- リポジトリ: varvet/godmin
つっつきボイス: 「今は管理画面系gemもたいていRails 5に対応していると思いますが、5が登場したころまともに動いたのがこのgodminぐらいしかなかった」
Railsアプリを物理的に分割(Awesome Rubyより)
ドメイン駆動開発(DDD)に関連してるようです。
「Railsで重要なデザパタ」シリーズ(Awesome Rubyより)
- Essential RubyOnRails patterns — part 1: Service Objects
- Essential RubyOnRails patterns — part 2: Query Objects
つっつきボイス: 「このサイト、これも含めていい記事が多いので翻訳しようと思います」
Railsのクラスレベルで使えるアクセサリを比較
これも上のサイトの別記事です。
Rails製著名サイト15
クックパッドが入っていないのは著者が英語圏の人だからでしょうか。
dpl: CI向けデプロイgem(Awesome Rubyより)
- リポジトリ: travis-ci/dpl
Travis-CI製ですが、さまざまなCIサイトにデプロイできるようです。
つっつきボイス: 「対応CIが多くてサポートが薄まってないといいけど」「BPSの主力リポジトリのGitLabはまだ入ってないかー」
GitLocalizeでRailsのyamlをローカライズする
短いのですぐ読めます。
Ruby
Ruby 2.3.5リリース(Ruby公式より)
火曜日にさらっとリリースされていました。一応記念写真。
JetBrainsによるRubyKaigiアンケート結果
日本語版もあります。
Rubyの現状 : RubyKaigi 2017の簡単な振り返り #rubykaigi | JetBrains ブログ - https://t.co/lkEniXDPkd
— JetBrains (@jetbrainsjp) 2017年9月27日
米国のRubyConfは11月にニュー・オリンズで
- サイト: rubyconf.org
I'm speaking at RubyConf about the history of space computing + simulating rocket launches with Ruby and Kerbal Space Program! https://t.co/U532SKpuYV
— Nate Berkopec (@nateberkopec) September 23, 2017
外部APIを扱うときにネーミングルールを守るには(Awesome Rubyより)
よさそうです。
100万行のRubyコードを5秒で読み込むには(Awesome Rubyより)
30分の動画です。今年6月にニューヨークで開催されたGORUCO 2017というRubyカンファレンスのセッションだそうです。初めて知りました。
目次を見るとRubyKaigi並にエッジの効いた感じのセッションが多く、Railsネタもいくつもあるようです。
つっつきボイス: 「このPolyglotってどの意味なんだろう?」「Polyglot.jsではなさそう: Single track(=セッションの部屋が分かれていない)とあるからそれとの対比で「いろんな内容を扱う」的な感じかな」「あー、それか: 多言語のことでもなさそうだし」
polyglot: {形} : 数カ国語の[に通じた・を話す・で書かれた]
Watir: Seleniumを使う自動テストgem(Awesome Rubyより)
- サイト: watir.com
- リポジトリ: watir/watir
ロゴからして「ウォーター」と読ませたいようです。
つっつきボイス: 「Capybaraの競争相手ですね」
Onigmoが絵文字プロパティをサポート
+* Emoji
+ Emoji
+ Emoji_Component
+ Emoji_Modifier
+ Emoji_Modifier_Base
+ Emoji_Presentation
+
つっつきボイス: 「他の言語のことはよく知らないんですが、RubyのUnicode対応ってかなり手厚いんじゃないかと思います」「だと思いますよ: あの巨大な仕様をちゃんと追っかけて実装するメンテナがいる言語なのは確か」
Ruby trunkより
提案: Rubyの正規表現にデバッグ機能を
RubyKaigiでもおなじみのマーティン先生からの提案です。
私は賛成です。
ARGVのArrayの挙動が微妙に普通のArrayと違う?→仕様どおり:却下
ARGV [0] # NoMethodError: undefined method `ARGV' for main:Object
A [0] # NoMethodError
SQL
PostgreSQLでJSONを扱う
Dimitri Fontaine氏の記事です。よさそうです。
CSS/HTML/フロントエンド
CSS-in-JSを使わずにCSSを書く極意(Frontend Weeklyより)
これもよさそうです。CSS-in-JS(JSS)は今回初めて知りましたが、日々CSSに苦しめられているコーダーからの支持を集めつつあるようです。
- JSS
- リポジトリ: cssinjs/jss
その他
Adobeのブログで秘密キーが漏洩
Oh shit Adobe pic.twitter.com/7rDL3LWVVz
— Juho Nurminen (@jupenur) 2017年9月22日
番外
Hacker NewsのYC Researchがベーシックインカムの大規模実験を提案
ベーシックインカムは天使か悪魔か? アメリカで史上最大の実験 #ベーシックインカム #実験 #サム・アルトマン #YCombinator https://t.co/ezvRNwUBOu
— BusinessInsiderJapan (@BIJapan) 2017年9月24日
何年か前に米国で小規模なベーシックインカムを無作為抽出でやってみたら、なぜか離婚率が急上昇したという記述を何かの本で見た覚えが。
コリオリの力
Playing with the Coriolis force https://t.co/Ko7EAJnUEb #Science #Fun pic.twitter.com/5docWL59Jr
— Massimo (@Rainmaker1973) 2017年9月22日
音商標の登録が開始
ヤバい、音商標の登録開始で、特許情報DBがCMマニアの天国と化してる pic.twitter.com/H8oUuaKtOf
— 祥太 (@shota_) 2017年9月28日
今週は以上です。
バックナンバー(2017年度)
週刊Railsウォッチ(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など)です。