- Ruby / Rails関連
週刊Railsウォッチ(20180511)ArelがRailsにマージ、RailsのGDPRエンジン、RubyでWebAssembly、VS IntelliCodeのAIレビュー機能ほか
こんにちは、hachi8833です。長い休みがあるとウォッチに載せたいものがモリモリ増大してしまうので削るのが逆につらいです。
夏日のウォッチ、いってみましょう。心なしかRust成分が多めになりました。
各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
⚓Rails: 今週の改修
まずはRails 6.0向けのmasterブランチから。
⚓ArelがRails本体にマージ
変更量が莫大なのでdiffはなしです。
ここしばらく、Arelの歩調をActiveRecordに合わせる作業が続いていました。Railsのあらゆるリリースで新しいArelリリースが必要であり、ArelのリリースもRailsのリリースに合わせて行われます。
両者を調和させるためにはコストがかかりますが、Arelを別gemとしてメンテし続ける余裕がありません。
Reverse dependencies for arel | RubyGems.org | your community gem hostをチェックしたところ、(Arelに依存する他の)gemのほとんどがActiveRecordに依存しているため、今回の変更はエコシステムに大規模な依存を新たに強いるものではありません。ActiveRecordの新バージョンに依存する、新バージョンのArelを今後リリースしますので、(他の方々も)引き続きアップグレードはスムーズにできます。そのためにはActiveRecordがインストールされている必要があります(ただし読み込みもrequireもしません)。
トップレベルのArel定数名を変更する予定はありません。
同PRより大意
つっつきボイス: 「activerecord/lib/arel.rbに置かれたってことか」「Arelのgemは今後もあるんでしょうかね?」
旧rails/arelを見に行ってみると、aae413bでgemspecなどいくつかのファイルを残してソースがごっそり消えてますね。
⚓has_one_attached
とhas_many_atacched
共通で使えるバリデーション
class User < ActiveRecord::Base
has_one_attached :avatar
has_many_attached :highlights
validates :avatar, presence: true
validates :highlights, presence: true
end
今後こんなふうに書けるようです。
つっつきボイス: 「これはActiveStorageの改修ですね」「ほんとだ: 修正はこんだけ↓」「presence validationってあるのは添付ファイルが存在するかどうかのチェックってことみたい」
# activestorage/lib/active_storage/attached/one.rb#L16
+ def blank?
+ attachment.blank?
+ end
⚓RailsのWelcomeスクリーンのキャラクターを多様化
この間からジェンダーフリーなど多様性を志向した改修が増えつつあるので、こちらも対応が進んでいるようです。動物とか恐竜とか宇宙人とかロボットだったらこういうときに楽ですね。
つっつきボイス: 「もうこの流れは必然ですね」「LGBTは外見と関係ないから絵には表さないはず」「イヌまだいるのかな?あネコだったか(ΦωΦ)」「次は車椅子のメンバーも...と思ったらしっかり入ってました」「『でもリーダーは白人男性ね』が暗黙だったらどうしよう😁😂」
追記: こういった多様化に初めて気づいたのは、「ゴーストバスターズ」がアニメ版になったときに映画版にはいなかった車椅子のレギュラーメンバーがいるのに気づいたときでした。随分昔ですが。
⚓ImageProcessing gemを導入
- PR: Use ImageProcessing gem for ActiveStorage variants by janko-m · Pull Request #32471 · rails/rails
# Gemfile#L91
gem "google-cloud-storage", "~> 1.8", require: false
gem "azure-storage", require: false
- gem "mini_magick"
+ gem "image_processing", "~> 1.2"
end
# Gemfile.lock#L268
+ image_processing (1.2.0)
+ mini_magick (~> 4.0)
+ ruby-vips (>= 2.0.10, < 3)
つっつきボイス: 「MiniMagickとImageMagickってどういう関係でしたっけ」「ImageMagickはCか何かで書かれた画像処理ライブラリで、以前はRMagickというRubyバインディング経由で使っていたのが、MiniMagickの方が軽いとかメモリ食わないとかでよく使われるようになってきた感じですかね」「なるほど!」「libvipsっていうもっと軽くて速いライブラリを使う方向に進むみたいですね」「それでruby-vipsというバインディングが導入されたと」
- リポジトリ: jcupitt/ruby-vips
# 同PRより
real time in seconds, fastest of five runs
benchmark tiff jpeg
ruby-vips.rb 0.85 0.78
image-magick 2.03 2.44
rmagick.rb 3.87 3.89
peak memory use in kb
benchmark peak RES
ruby-vips.rb 43864
rmagick.rb 788768
⚓STIで逆方向の関連付けを自動推定
- PR: Automatically guess the inverse associations for STI by yui-knk · Pull Request #23425 · rails/rails
ここからは、Ruby on Rails 5.2 リリースノート | Rails ガイドのプルリクです。Railsウォッチでプルリクを取り上げるときに番号を書いといてよかったとこういうときに思います。過去に取り上げたかどうかすぐ検索できるので。
# activerecord/lib/active_record/reflection.rb#L657
# from calling +klass+, +reflection+ will already be set to false.
def valid_inverse_reflection?(reflection)
reflection &&
- klass.name == reflection.active_record.name &&
+ klass <= reflection.active_record &&
can_find_inverse_of_automatically?(reflection)
end
# 同PRより
class Post < ActiveRecord::Base
belongs_to :author
end
class SpecialPost < Post; end
class Author < ActiveRecord::Base
has_many :posts
has_many :special_posts
end
# 以下のどちらも使いたいけど2番目がちゃんと動かなかった
author.posts.first.author
author.special_posts.first.author
つっつきボイス: 「おー、こういうふうに書けるようになったと」「STIとどう絡んでるのかなこれ...」「これも修正はピンポイントですね」
# activerecord/lib/active_record/reflection.rb#L658
def valid_inverse_reflection?(reflection)
reflection &&
- klass.name == reflection.active_record.name &&
+ klass <= reflection.active_record &&
can_find_inverse_of_automatically?(reflection)
end
「お、この方とっても印象的なお顔」「ActiveRecordの有名なコミッターですよ」「Sean Griffinさんっていうんですね: ということはkamipoさんより前からActiveRecordをガンガンやってる?」「そんな感じだったかと」
「sgrifさんのactivity見ると、なんかrust-lang/rustとか入ってるんですけど」「(・・;)」「Rust本家のコードまでやってるとは...」「Rustってもう嗜みになりつつあるのかな」「👍☺☺☺」
「Rustなんて超メジャーじゃん」と思った私はちょっとズレてる?
Link: Rubyの会社でなぜRust? Cookpadがマイナー言語を採用するまで - ログミー: https://t.co/rgmSZUdjuq
— Yukihiro Matz (@yukihiro_matz) May 9, 2018
⚓composed_of
カラムを用いたwhere
メソッドの引数に配列オブジェクトを渡した場合に展開されない問題を修正
# 同PRより
david_balance = customers(:david).balance
Customer.where(balance: [david_balance]).to_sql
# 修正前: WHERE `customers`.`balance` = NULL
# 修正後: WHERE `customers`.`balance` = 50
# activerecord/lib/active_record/sanitization.rb#155
if aggregation = reflect_on_aggregation(attr.to_sym)
mapping = aggregation.mapping
mapping.each do |field_attr, aggregate_attr|
- if mapping.size == 1 && !value.respond_to?(aggregate_attr)
- expanded_attrs[field_attr] = value
+ expanded_attrs[field_attr] = if value.is_a?(Array)
+ value.map { |it| it.send(aggregate_attr) }
+ elsif mapping.size == 1 && !value.respond_to?(aggregate_attr)
+ value
else
- expanded_attrs[field_attr] = value.send(aggregate_attr)
+ value.send(aggregate_attr)
end
end
else
つっつきボイス: 「composed_of
ってこういうのだったんですね↓」「こういうのも展開できるって知らなかったなー」
⚓Rails
⚓Rack PushでリアルタイムWebアプリをWebから切り離す(Ruby Weeklyより)
これ訳してみたいです。
追いかけボイス: 「ActionCable的なものをRackのレイヤでやるぜ、みたいな話かな?まあシンプルなpushくらいしかやらないならこれでもいいってのはありそう」
⚓RubyGarageが実際に使っている精選gem 57種
この記事で時間を使ってしまったので、後のつっつきは軽めとなりました🙇。
つっつきボイス: 「これ参考になりそう」「57種も」「知らないやつを中心にざざっと見てみましょうか」
- ActiveRecord: 「act-as-taggable-on、★多い」「morimorihogeさんが『昔のgemにact-asなんちゃらという名前が多かった』って言ってた」「deep_clonableだって」「ちゃんと動いてくれるかな...ゴク」
# moiristo/deep_cloneableより
# Conditional includes
pirate.deep_clone include: [
{
treasures: { gold_pieces: { if: lambda{|piece| piece.is_a?(Parrot) } } } },
mateys: { unless: lambda{|matey| matey.is_a?(GoldPiece) }
}
]
ship.deep_clone include: [
pirates: [ :treasures, :mateys, if: lambda {|pirate| pirate.name == 'Jack Sparrow' } ]
]
- 有限状態機械: 「AASMは前にもウォッチで言及した覚えが」「DSLでお気楽に書けるヤツ」「この間某案件で使おうと思ったのに使わずに進んじゃった😢」
-
バージョニング: 「papertrail」「後になって履歴欲しいとか言われたときに使ったり」
-
i18n: 「GlobalizeはRailsガイドの推奨リストに入ってましたね」
-
テスト: 「database_cleanerは、最近のRailsはシステムテストがあるから要らなくなったんですよね?」「Rails5.1ならもうほぼ要らないでしょうね」
「前は何でこれが必要だったんかな?勝手にデータ消してくれるぐらいに思ってたけど」「えっと、特にcapybaraでしかもJavaScriptをテストするときなんかにRailsのサーバーが別スレッドでもうひとつ立ち上がるじゃないですか: Railsってコネクションプールがスレッド単位なんですけど」「ふむふむ」「でRSpecって、テスト中にトランザクションを張って、テストが1件終わるたびにトランザクションをロールバックしてデータを消してから次のテストに進む、みたいなのが通常の戦略なんですね」「ところがコネクションプールが違っているとトランザクションの外から参照できなくなっちゃうんですよ: だからdatabase_cleanerでこの戦略をトランザクションを使わないように変えて、テストのたびに(明示的に)データを消すという戦略に切り替えないといけなかったんですね」「おーなるほど!😲」「それがRails 5.1のシステムテスト(SystemTestCase)になってからは、ActiveRecordが1つのデータベースだけを参照するように変わったおかげで、別スレッドでWebサーバーが動いていてもRSpecが動くスレッドとRailsが動くスレッドが常に同じものを参照するようになって、それでdatabase_cleanerが要らなくなったんですね」「素晴らしい〜☺: database_cleanerって雑に設定するとすっごく遅くなってたし」
「あれ、まだfactory_girlのまんま?」「database_cleanerといい、最新じゃないのかな?」
RubyFlowにはつい最近紹介されていたのですが、後で元記事をチェックすると記事ソースのどこにも日付がありませんでした(´・ω・`)。redditに2016年12月のエントリがあるので、どうやらこれより新しいということはなさそうです。
「そういえばfactory_girlがfactory_botに改名されたのって、factory girlって言葉自体がよろしくないってことみたいですね」「たぶんそうだと思います: 女工哀史とか富岡製糸場みたいなものが連想されるのかも」
「shoulda-matchersもひところよく見かけた気が: should
好き派とキライ派といたような覚え」「どこかに『should
なんか使っちゃダメだ』って書いてあったんでそうしてます☺」「expect
で書けという感じで」「simplecovは...?」「カバレッジ出すやつ」「あ、そういえばオレオレアプリに入れてた」
「should
形式が盛んだったのはRSpec2系でしたっけか: 3あたりからexpect
が推奨になって滅びていった」「僕はshould
嫌いじゃなかったんですけどね」
- スタイル: 「rubycriticも前に扱った」
- デバッグ: 「letter_openerってデバッグでしたっけ?」「テスト中にメール飛ばないようにできるからでしょうね」
-
認証/承認: 「rolifyは初めて見た」
# RolifyCommunity/rolifyより
class User < ActiveRecord::Base
after_create :assign_default_role
def assign_default_role
self.add_role(:newuser) if self.roles.blank?
end
end
- API: 「apipie-railsも知らなかった: アピパイ?」「APIドキュメント生成するやつみたい」「アノテーションっぽく書くとドキュメントが生成されるのか」「DSLってことですよね」
# Apipie/apipie-railsより
api :GET, '/users/:id'
param :id, :number
def show
# ...
end
- 決済: 「お、今アツいstripe-ruby」「今チーム内でも使いこなし始めている人がいますね」「active_merchantも★多い」「braintree_rubyってのもある」
- ファイルアップロード: 「fogはロゴかわいい↓」「cloud(雲)にかけてfog(霧)かな」
# fog/fogより
require 'fog'
compute = Fog::Compute.new(
:provider => 'Rackspace',
:rackspace_api_key => key,
:rackspace_username => username
)
# boot a gentoo server (flavor 1 = 256, image 3 = gentoo 2008.0)
server = compute.servers.create(:flavor_id => 1, :image_id => 3, :name => 'my_server')
server.wait_for { ready? } # give server time to boot
# DO STUFF
server.destroy # cleanup after yourself or regret it, trust me
- ビューヘルパー: 「meta-tagsはSEOタグをよしなに付けてくれるヤツ」
# kpumuk/meta-tagsより
<% title 'Member Login' %>
<% description 'Member login page.' %>
<% keywords 'Site, Login, Members' %>
<% nofollow %>
<% noindex %>
<% refresh 3 %>
⚓gdpr_rails: RailsのGDPRエンジン
- リポジトリ: prey/gdpr_rails
各所で話題になってますね。
でかい主語で来たな、と思ったけどざっとREADME見る限り Policy Rulesと Session & Cookies のところは便利そう。Portability RulesのところはそもそもRails Engineで汎用化できるんですかねぇ、ってところかな。 https://t.co/x5cLUDDFyX
— masa寿司 (@masa_iwasaki) May 6, 2018
⚓Cucumberが10歳に(Ruby Weeklyより)
⚓RailsのフロントエンドテストのJavaScript周りの秘訣(Hacklinesより)
つっつきボイス: 「社内でJavaScriptと戦ってる勢に」「訳してみたい」
⚓その他記事など
- 元記事: Security Issues in Ruby on Rails Web Application(Ruby Weeklyより)
- Screencast: Vue.js Slots with Tailwind CSS and Rails (Example) - GoRails: むしろTailwind CSSって何?(Ruby Weeklyより)
- 元記事: Increase Your Productivity with Rails Console Aliases [Quick Tip]: 混乱しないのかな。(Ruby Weeklyより)
- 元記事: Minitest 6: Test Feistier! | zenspider.com | by ryan davis: Minitest 6の機能予告(Hacklinesより)
- 元記事: 6 Things to Share Before Outsourcing Your Rails App : Railsアプリをアウトソースする際の心得6つ(Hacklinesより)
- Screencast: How to Migrate from Paperclip to Rails ActiveStorage (Example) - GoRails: PaperclipからActiveStorageに移行する方法(Hacklinesより)
- 元記事: Create charts in a Ruby on Rails app with just one line of code: Rails tipsシリーズではいつもお世話になってます。(Hacklinesより)
- 元記事: CI/CD: How to Build an Effective Initial Deployment Pipeline | Toptal(Hacklinesより)
- 元記事: How Each Role on our Rails Development Team Operates: Rails開発チーム内の役割分担(Hacklinesより)
- 元記事: Multiple Ways to Change Database Column in Rails | Codementor(Hacklinesより)
- Screencast: Ruby on Rails Development with Microsoft Windows 10 | Drifting Ruby
- リポジトリ: chilloutio/chillout ActiveRecordモデルの統計を取るgem
つっつきボイス: 「Tailwind.cssはこの間ちょっと使ってみた」
- リポジトリ: tailwindcss/tailwindcss
optcarrotはJITすればするほど速くなるのにRailsだと全くIOが挟まらないようなコードのままでも何をやってもどんどん遅くなるのだが一体何が違うのかわからない
— k0kubun (@k0kubun) May 9, 2018
つっつきボイス: 「ざわ...ざわ...」
⚓Ruby trunkより
⚓Sleepy GC作ってみたお(Ruby Weeklyより)
またしてもnormalpersonさんですね。Ruby WeeklyにRuby issueがエントリされるのは珍しいかもです。
つっつきボイス: 「Sleepy GCって前からはなさそうですね」
⚓マルチスレッドで同じファイル内の異なる定数を自動読み込みするとデッドロック
# 同issueより
# a.rb
autoload :Foo, __dir__ + "/b"
autoload :Bar, __dir__ + "/b"
t1 = Thread.new { Foo }
t2 = Thread.new { Bar }
t1.join
t2.join
# b.rb
module Foo; end
module Bar; end
⚓提案: Fiberのyield/resumeのパフォーマンス向上
つっつきボイス: 「スレ長い!」「コミッターが続々登場してるし」「libcoroって?」「最後の方見るともう何か作り始めてますね↓」
- リポジトリ: kurocha/coroutine
参考: Making coroutines fast - RethinkDB
⚓Ruby
⚓RubyでWebAssemblyする(Ruby Weeklyより)
つっつきボイス: 「これはmrubyでやってるんですね」「それにしてもこの変換の多さ↓...😁」「長い旅路😁」
Ruby script → MRuby bytecode → C → emcc (Emscripten Compiler Frontend) → LLVM → Binaryen → WebAssembly
⚓Rubyのハッシュ的な構文をParsletに実装する方法(Ruby Weeklyより)
# 同記事より
require 'parslet'
class MyParser < Parslet::Parser
end
class MyTransformer < Parslet::Transform
end
require 'minitest/autorun'
require 'parslet/convenience'
class MyParserTest < Minitest::Test
def test_parses_a_comma
input = %Q{,}
parser = MyParser.new.comma
tree = parser.parse_with_debug(input)
refute_equal nil, tree
end
end
⚓Rubyのクラス名で非ASCII文字が使えるようになる件について(Hacklinesより)
つっつきボイス: 「非ASCII文字のupper/lowerがRuby 2.6でサポート...だと?」「クラス名でとか、やりたい人だけ体当たりしてみて欲しいっす😢」
⚓slacktyping: RubyのSlack向けジョークアプリ
- リポジトリ: will/slacktyping
I made a VGP (very good program) that makes it so it looks like I’m typing on slack whenever anyone else is typing, and stops when they stop.
Everyone loves it so far and doesn’t find it annoying at all!https://t.co/W8e2EKuVXX pic.twitter.com/ZZd01GxYqg
— will leinweber (@leinweber) April 25, 2018
つっつきのときは今ひとつよくわからなくて勘違いしてましたが、後で落ち着いて動画を見てみると「誰かが入力を始めた途端に、あたかも別の人というか自分が入力中であるかのように下に"xxx is typing..."を表示させる」というやつでした。「今のところ誰も嫌がってないみたいよ♡」だそうです。
⚓ko1さんによるRuby 3コンカレンシー(Ruby Weeklyより)
つっつきボイス: 「ついにGUILD情報来た!」
⚓その他Ruby記事
- リポジトリ: podigee/device_detector: ブラウザ検出gem(Ruby Weeklyより)
- 元記事: ApiStruct – A Library for Building API Wrappers in Ruby: Ruby製APIラッパービルダー(Ruby Weeklyより)
- 元記事: My Favorite Ruby Community Resources | Schwad: Ruby関連情報源(Hacklinesより)
- リポジトリ: ruby-amqp/bunny: bunny: RabbitMQクライアント(Ruby Weeklyより)
- 元記事: Fixing Kernel#singleton_method bug in Ruby. – hyperoslo – Medium:
Kernel#singleton_method
にバグがある(Ruby Weeklyより) - リポジトリ: asciidoctor/asciidoctor(GitHub Trendingより)
- リポジトリ: samaaron/sonic-pi: Rubyで(音楽の)ライブコーディング(GitHub Trendingより)
つっつきボイス: 「sonic-piで言うライブコーディングは、ライブ会場で音楽を作り出す方のライブコーディングですね↓」
👶< hello world
— willnet (@netwillnet) May 5, 2018
つっつきボイス: 「お子様がお生まれになったのをHello Worldで表してました↑」「めでたい!」「雑学ですが、英語圏では生まれた赤ちゃんに『Welcome』って声かけるのが定番だそうです」
今こそ昔あきらめた1bit reference counting を復活させるべきか。
— Yukihiro Matz (@yukihiro_matz) May 10, 2018
↑最初これを見たときに何だろう?と思ったら、以下への返しのようでした。
RubyなどGCな言語でGPUを使っていると、GPUメモリを大量に使っていてもメインメモリ上では全然使っていないように見えてGCしなくてもまだ良いんじゃね?って処理系に思われてしまうんだけど、Pythonなど参照カウントな言語だと参照がなくなった瞬間にGPUにメモリを返却できるので嬉しいのです。
— そのっつ (Naotoshi Seo) (@sonots) May 9, 2018
rails + webpackerについて誰か教えて欲しい...
ググって記事は割と見つかるんだけど、webpacker初学者には優しい記事は全くなくて困っております...(railsはエキスパートですが...)#rails #webpacker #webpack— TakuKobayashi (@taptappun) May 10, 2018
つっつきボイス: 「RailsとWebpackerの、『基本的にこう使ってくれ』みたいな公式なユースケースが欲しいですね」
楽しそうだけど大変そう… / “【保存版】自腹でつくる仙台グルメマップ #RubyKaigi 2018 - SmartHR Tech Blog” https://t.co/a9LYVuyiJB
— チャーリー (@chrlohya) May 10, 2018
そういえばRubyKaigi 2018も近いですね。
今日の表参道.rbでMatzがLTしてるらしいwまさかのw#omotesandorb
— シンセ (@_sizer) May 10, 2018
https://t.co/pvFgBuQNGQ Pure RubyのTensawFlow 後で見る
— ハングリィ・ライク・カネゴン (@hachi8833) May 11, 2018
⚓クラウド&コンテナ
⚓KubernetesでPostgreSQLを動かして得た知見(Postgres Weeklyより)
⚓Googleの「.app」ドメイン登録サービス(WebOps Weeklyより)
- サイト: .app
つっつきボイス: 「.appって、hstsを強制することでhttpsを強制するドメインじゃありませんでしたっけ」「ここで.appドメインを登録できるみたい: 知人が早速何か登録してました」「ドメインハイエナが集まりそう☺」
⚓超高速リアルタイム検索「Algolia」の中の人が語る(WebOps Weeklyより)
つっつきボイス: 「Algoliaは前にウォッチでも取り上げたのを思い出しました: 訳してみたいけどやらせてもらえるかしら...」
参考: Algoliaを利用してサイト内検索機能を実装する | WEB EGG
⚓その他クラウド&コンテナ
- 元記事: Email with Amazon SES from Rails on EC2
- 元記事: Cloud security: The skills gap is delaying cloud migration | InfoWorld(InfoWorld記事)
- 元記事: Reducing Latency and Shifting Compute to the Edge with Lambda@Edge | Networking & Content Delivery
- 元記事: AWSを学ぶために最初に構築するアーキテクチャパターン5選 - log4ketancho
⚓SQL
⚓RubyでのPostgreSQLデータ読み込みを高速化する(Hacklinesより)
scalingpostgres.comというドメインまで取ってるんですね。
⚓「データベースは何を?」「ぽすぐれです、今後も」(Postgres Weeklyより)
つっつきボイス: 「タイトルから未来のデータベースの話かと思ったらインタビューでした」
⚓PostgreSQLのテーブルスペースのすべて(Postgres Weeklyより)
# 同記事より
postgres=# create tablespace space2 location '/tmp/space2';
CREATE TABLESPACE
postgres=# \db+
List of tablespaces
Name | Owner | Location | Access privileges | Options | Size | Description
------------+-------+-------------+-------------------+---------+---------+-------------
pg_default | alice | | | | 22 MB |
pg_global | alice | | | | 573 kB |
space2 | alice | /tmp/space2 | | | 0 bytes |
(3 rows)
参考: PostgreSQL 9.4ドキュメント テーブル空間
⚓OR
は避けよう(Postgres Weeklyより)
つっつきボイス: 「OR
は使いすぎに注意?」「まあそうっすね☺」
「SQLにおけるOR
は、使い始めると急にクエリが複雑化するんですよね: 使うにしても小さいWHERE
句にカプセル化するような使い方に限らないと、容易に地獄化する」「参照記事はパフォーマンスに関する話だけど、使いすぎると普通にアプリでコード書いてても相当読みづらくなります」「↓これでもめっちゃ単純な方だけどぱっと見だけでは把握不能」
Hoge.where(name: 'piyo').or(Hoge.where(name: 'foo')).or(Hoge.where(name: 'baa')).where(age: @age).order(id: :desc)
⚓その他SQL関連
- 元記事: PostgreSQL visits LSFMM [LWN.net]: LSFMMにPostgreSQLの人が客演(Postgres Weeklyより)
⚓JavaScript
⚓NGXS: Angular.js向けステート管理ライブラリ(JavaScript Weeklyより)
つっつきボイス: 「ほーAngular用」「みんなステート管理欲しいんですね」
⚓JSで任意サイズの整数を使うBigInt(JavaScript Weeklyより)
Googleのドキュメントです。
// 同記事より
1234567890123456789n * 123n;
// → 151851850485185185047n
つっつきボイス: 「Rubyにはとっくにあるやつですね」
参考: library bigdecimal (Ruby 2.5.0)
⚓サービスワーカー、する?(JavaScript Weeklyより)
この間のウォッチでも取り上げましたが一応。
参考: Service Worker の紹介 | Web | Google Developers
⚓Dojo 2.0登場(JavaScript Weeklyより)
- 元記事: Introducing Dojo 2.0! | Dojo(JavaScript Weeklyより)
- リポジトリ: phoboslab/Impact: HTML5 Canvas&JSのゲームエンジン「Impact」(JavaScript Weeklyより)
過去記事を検索したら大昔のbabaさん記事が出てきました。
⚓その他JavaScript
Isn’t this diagram from that one Nicolas Cage movie where he’s a JS developer looking for a lost treasure? pic.twitter.com/oK7NETXW5A
— Aaron Patterson (@tenderlove) May 5, 2018
⚓CSS/HTML/フロントエンド
⚓Webデザインをがらっと変える新しいCSS機能(Frontend Focusより)
See the Pen Height based grid example by Zell Liew (@zellwk) on CodePen.
⚓LayerJS: 素のHTMLをインタラクティブに(Frontend Focusより)
- サイト: https://layerjs.org/
- リポジトリ: layerjs/layerjs
「素のHTML」が目を惹きました。
⚓「もっと見る」ボタン(Frontend Focusより)
⚓その他CSS/HTML/フロントエンド
- リポジトリ: Simonwep/selection: DOM Selectionをビジュアル表示(Frontend Focusより)
- 元記事: A Deep Dive into the Bootstrap Form Component — SitePoint(Frontend Focusより)
- 元記事: Password Strength Visualization | Demo 1 | Codrops パスワード強度のビジュアル表示かっけ~(Frontend Focusより)
- 元記事: Welcome to the immersive web | Web | Google Developers(Frontend Focusより)
- 元記事: Apple風のかっこよくて美しいデザインの背景49種類を簡単に実装できるスタイルシート -HUE.css | コリス
⚓言語よろず大部屋
⚓Runic言語が登場(Hacklinesより)
- 元記事: Runic programming language - Crystal [ANN]
- リポジトリ: runic-lang
リポジトリからまるわかりのように、Crystal言語で書かれてます。
- 汎用コンパイラ言語(ライブラリ、バイナリ、埋め込みなど)
- C並に高性能(でもCより安全)
- 目に優しいRuby風構文(でも型あり)
- 最小限のランタイムでもポインタなどの重要な要素が使える
- 別プロジェクトでクロスプラットフォーム標準ライブラリの開発進めるかも
しかしrunic(ルーン文字風の)というネーミングは紛らわしすぎるのでは(´・ω・`)。
美術館に来て何故かルーン文字の本を買ったので勉強しまふ#ルーン文字 pic.twitter.com/xBpfFCyDgd
— あに (aniy -iis, n.) (@aniyomechan) August 16, 2017
⚓RubyistのためのGo言語入門
⚓RustコードをRubyで実行するには
# 同記事より
#[macro_use]
extern crate helix;
extern crate idna;
ruby! {
class Domain {
def to_ascii(domain: String) -> Option<String> {
let result = idna::domain_to_ascii(&domain);
return result.ok();
}
}
}
⚓Rust 1.26リリース
Announcing Rust 1.26 - The Rust Programming Language Blog
⚓その他言語
- 元記事: Go vs. Ruby on Rails - DZone Web Dev「私と仕事とどっちが大事なの」みたいに噛み合ってない気がします。(Hacklinesより)
- スライド: エラー処理を書いてはいけない -- すごいH本を翻訳された方だそうです。
- 元記事: Rustic Nil Handling in Ruby
rustic: 素朴な、ひなびた
好きな言語は?
「R…」(Rかな?)
「Ru…」(Rubyかな?)
「Rus…」(Rustかな?)
「Russian」(Русский язык!)— Masaki Hara (@qnighy) February 9, 2018
おっ wasm アーキテクチャ入ってきたで。 https://t.co/Ti1pvOgTiy
— mattn (@mattn_jp) May 5, 2018
#Julia言語https://t.co/6tHP0vyzjt
Diffusion-limited aggregation数学GIF動画の作成にJulia言語は非常に便利です。 pic.twitter.com/a76OdjD47g
— 黒木玄 Gen Kuroki (@genkuroki) March 16, 2018
⚓その他
⚓Shopifyのインターンが学んだことを晒す(Hacklinesより)
⚓GitHubが「Checks API」を公開(WebOps Weeklyより)
つっつきボイス: 「CIの結果がこんな感じで統合表示されるみたい」「お、ちょっとよさげ」
⚓Visual Studio IntelliCodeのAIレビュー機能
つっつきボイス: 「これは衝撃...」「今後増えることはあっても減ることはないのかも」「AIのサジェスチョンって、『こういうときは皆様こういうふうにお書きになってらっしゃいます: 理由はわかりませんが』っていう感じになりますよね☺」「☺」
私が欲しいものがだんだん現実化している(でも対象はC#)
Link: [速報]AIがコードのレコメンドやバグの指摘など開発を支援してくれる「Visual Studio IntelliCode」発表。Build 2018 - Publickey: https://t.co/HES9YA2HeF
— Yukihiro Matz (@yukihiro_matz) May 8, 2018
私は基本的に「楽できるものが好き」です。コード補完もその一環ですね。ついでに意図を読み取ってコードもテストも書いてくれればいいと思ってます。そのくせ、「余計なお世話」は嫌うワガママでもありますが。 https://t.co/iigq6Heidy
— Yukihiro Matz (@yukihiro_matz) May 9, 2018
昨日の msbuild で発表された、機械学習で補完候補を出す Visual Studio IntelliCode すごいな。もうバカでもコード書けるじゃん。https://t.co/4Ebc2w1CSR pic.twitter.com/uRNwIXM7Ej
— mattn (@mattn_jp) May 8, 2018
⚓その他のその他
- 元記事: GitHub Pages、カスタムドメインでも HTTPS による接続が可能に | WWW WATCH
- 元記事: GraphQLはRESTの置き換えではない|こんぴゅ|note
- リポジトリ: github-changelog-generator/github-changelog-generator(GitHub Trendingより)
- 元記事: IPv6本 脱稿しました:Geekなぺーじ
マイクロソフトが「半導体企業」になる日──人工知能を巡る、もうひとつの開発競争 @wired_jp https://t.co/Uaqf761tAx
— yomoyomo (@yomoyomo) May 10, 2018
原稿執筆のときだけはポモドーロタイマーが役に立つ
— Yukihiro Matz (@yukihiro_matz) May 9, 2018
つっつきボイス: 「ポモドーロタイマー、流行ってますよね☺」「このツイートで初めて知りました」
参考: ポモドーロタイマー|ポモドーロ・テクニック実践ツール
⚓番外
⚓あと必要なのは身を任せる勇気だけ
蘭アイントホーフェン工科大学(TU/e)の研究プロジェクト
手術支援ロボット「RoBoSculpt」
RT
開頭手術を高精度でサポートする手術支援ロボットがオランダで開発される | Techable(テッカブル) https://t.co/kNyPPX3Wc4 @TechableJpさんから— 森山和道/ライター、書評屋 (@kmoriyama) May 6, 2018
つっつきボイス: 「そのうち無人運転カーみたく『えー、昔は人間が手術してたの?危なくね?』みたいになりそうですね😁」
⚓未来の電源はどんなふうに
NASAが月面で稼働する原子力発電機KRUSTYを発表。
従来の放射性物質の崩壊熱を使った原子力電池RTGとは異なり、核分裂反応を利用する。RTGの発電量が数100Wなのに対し、KRUSTYは10kWまでスケールアップできる。長期間にわたる月面での有人探査などに利用する予定。https://t.co/vBeLwfJrTS pic.twitter.com/EiomHWoVfa
— Takuro Daimaru|大丸拓郎 (@takurodaimaru) May 5, 2018
⚓西洋おみくじ「オブリーク・ストラテジーズ」
ポイントは「煮詰まってる、困ってるときにだけ」「1回限り引く」ことです。
根拠はありませんが、たぶん周りに人がいないときにやるのがよい予感がします。
こういうのは「当たる・当たらない」ではなく、偶然の力を借りて自分の行動パターンを軽くかき乱し、いつもは通らない道を発見するのが目的ぐらいに考えています。理詰めだけでやってるといつも同じ道ばかり通ることになるので。一種他力のヒューリスティックというか。
参考: ブライアン・イーノ - Wikipedia -- 「オブリーク・ストラテジーズ」作者の1人です。km professional 3を読むと、本人自身も頻繁に使っているようです。元祖ドッグフーディングというか。
参考: ドッグフーディングとは 意味/解説 - シマウマ用語集
⚓そ、その年は...
1966年イギリスの高校生が電波のドップラー効果を検証中に、ソ連の衛星がバイコヌール以外の場所(プレセツク基地)から打ち上げられた事を突き止めた記事。僅か25ポンドの軍用無線機と校舎間を結んだワイヤーで、ペンタゴンに勝った。#宇宙pic.twitter.com/JqnzTNE6fE
— cccp2017 (@cccp2017) May 5, 2018
今週は以上です。明日はRejectKaigiですね。よい週末を!
バックナンバー(2018年度)
週刊Railsウォッチ(20180427)Rails開発者アンケート2018結果発表、「次に学びたい言語」、各種カンファレンス目白押しほか
- 20180420 NGINX Unit正式リリース、Rubyをメモリリークさせてみる、美しいコード宇宙ほか
- 20180413 RailsConf 2018、Form Objectの昔と今、rubyreferences.github.ioのドキュメントがスゴイ、GitHubが10歳にほか
- 20180406 ruby-sass gemが非推奨に、Roda gem、paiza.ioは便利、Linuxは/procで遊ぼうほか
- 20180330 春のリリースラッシュ: Rails 5.1.6/5.0.7とRuby 2.5.1など、Ruby 2.2は3月でメンテ終了ほか
- 20180312 Rails 5.2.0 RC2リリース、「サーバーレスなRubyが欲しい」、capybara風JSテストフレームワークCypressほか
- 20180316 Rails 5.2のドキュメント更新中、Value Objectの使い方、RubyがTIOBEトップテン復活、Rails「雪だるま」エンコーディングほか
- 20180309 RubyGems.orgのTLS 1.0/1.1接続非推奨、2年に1度のRailsアンケート、DockerのMoby Project、Ruby拡張をRustで書けるruruほか
- 20180302 Ruby 2.6.0-preview1とWebpack 4.0リリース、爆速検索APIサービスAlgolia、Clowneでモデルをクローンほか
- 20180223 Ruby25開催、Rails6のパラレルテスト、書籍「RSpecによるRailsテスト入門」更新ほか
- 20180216 Rails 5.1.5リリース、DHHのYouTubeチャンネルは必見、Ruby Toolboxが運営再開ほか
- 20180209 RubyにMJIT初マージ、高速JSON API gem、Railsにparallel-testingブランチほか
- 20180202 Rails 5.2.0 RC1と5.1.5.rc1リリース、Rails 6開発開始、メソッド絵文字化gemほか
- 20180126 Bootstrap 4登場でbootstrap_form gemが対応、PostgreSQLやnginxの設定ファイル生成サービスほか
- 20180119 derailed_benchmarks gem、PostgreSQLをGraphQL API化するPostGraphile、機械学習でモック画像をHTML化ほか
- 20180112 update_attributeが修正、ぼっち演算子
&.
はObject#try
より高速、今年のRubyカンファレンス情報ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。