- 開発
週刊Railsウォッチ(20180525)特集: RubyKaigi 2018いよいよ来週、Rails vs Hanami対決、命名にはシソーラス使おうほか
こんにちは、hachi8833です。最近Macの⌘
+Ctrl
+space
で顔文字を出す技を教わりました😊。問題は、漢字と違って顔文字には定まった読み仮名がないことです(´・ω・`)。
ご家族みんなで楽しめるウォッチ、いってみましょう。
各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
なお来週の週刊RailsウォッチはRubyKaigi参加のためお休みです🙇。
⚓特集: RubyKaigi 2018情報
RubyKaigi 2018もいよいよ来週ですね。皆さま覚悟は完了ですか?
⚓事前情報
- るびま特集号: RubyKaigi 2018 直前特集号 -- 記事引き続き募集中とのことです。
つっつきボイス: 「お、今年もるびまが特集組んでますね」「記事募集中とのことなので、せっかくだからTechRachoからも出そうか?」「いいですね!😀」「今回分のRailsウォッチでエントリ応募するとか」「(受け付けてもらえるかな...ドキドキ)」
追記: 掲載いただきました🙇。
エントリ?ありがとうございます! https://t.co/vg1FnFha9x に取り上げさせていただきました。万が一問題などありましたらお手数ですがお知らせください。
— zunda nはオマケ🍡 (@zundan) May 25, 2018
スピーチの内容をざっくり知りたい方には、RejectKaigi 2018の「RubyKaigi 2018タイムテーブル徹底解説」レポートが便利です。
時系列にまとまっていて、とっても読みやすい。こういうまとめ作ってくださって感謝感謝m(_ _)m それにしても毎月27万円のSaas利用...気になる #RejectKaigi2018 https://t.co/fA5ZPJ5uZV
— 堀辺 憲🍞toaster (トースター) チームをつなげる🏃♀️ (@horikenIII) May 13, 2018
⚓アンチハラスメントポリシーとは
- アンチハラスメントポリシー: Policies - RubyKaigi 2018
改めて読み直してみました。
RubyKaigi は、誰もがハラスメントを受けずに参加できるカンファレンスを目指しています。いかなる形であれハラスメントは許容できません。このルールを破る人は誰であろうと、オーガナイザーの裁量で制裁措置を加えたり、カンファレンスから出入禁止とすることもありえます。
同ポリシーより抜粋
つっつきボイス: 「この話も何度かしたと思うんですが、このアンチハラスメントポリシーを見るたびにRubyコミュニティって偉いなって思うんですよ」「私もです」「カンファレンスが公式にこうしたポリシーを表明するのは、他のカンファレンスもぜひ参考にするといいと思いますね」「レースクイーンやキャンペーンガールみたいな演出もありませんしね」「😅そういうのよりは、カンファレンスの場を不快にしないように皆んなで気をつけようねっていうメッセージ: この雰囲気が実は大事だし、貴重」「このポリシーが定まっていて、雰囲気が確立していることで、来場する人が安心できるし、仮に有名OSSのコミッターや偉い人がこれに反する言動をしたときに諌めることもできるし」「今のところ見たことありません」
「この雰囲気づくりには、Matz自身の人柄の影響も結構あるんじゃないかなと思う」「あー、それはこれまでカンファレンスに参加していて感じました: Matzは特定のコミッターとだけ固まって行動したりしないですよね」「それもあるし、あまり極端な価値観を持ち込まないようにしているところとか」「Matz自身があまり群れたがらない方なのかなとも思ったりしましたが」「いや、意識的にやってると思いますよ: 排他的にならないことについて」
生まれてこの方、主流派気分というものを一度たりとも味わったことのない私には、本当にうれしい配慮です🤓。皆さんも会場でいろんな方に話しかけてみましょう🐹。海外から来た方は特に会話に飢えてますので、「May I join you?」でいってみましょう↓。
⚓パーティ情報
皆さまパーティのブッキングは完了でしょうか?
RubyKaraokeだけまだ募集が始まってないようですが、たぶんエントリ開始とともに激戦が始まる予感です。
以下のツイートは上から目についたものを貼りました。網羅できなかった方ごめんなさい🙇。
RubyKaigiと仙台と両方に関するツイートにプチプチ反応しております。中身は技術の話ができない小売業店員なのでご了承ください。何度も言いますが国際センター周辺何もないです。#rubykaigi
— びーる♨︎隊長さとかわ (@sato_kawa) May 12, 2018
素晴らしいまとめ【保存版】自腹でつくる仙台グルメマップ #RubyKaigi 2018 - SmartHR Tech Blog https://t.co/0bDHLztFNm
— Katsumata Ryo (@katsumata_ryo) May 15, 2018
秋田も味わいましょう RT @sato_kawa: RubyKaigiに前日から仙台に来ている方で、小規模で飲みたい方はこちらも是非!仙台地元のスタッフが企画してます。はじめて東北に来る方歓迎ですー #rubykaigi https://t.co/GTxt2kSNpZ
— Katsuyoshi Ito (@gutskun) May 22, 2018
#rubykaigi の前夜祭申し込みに出遅れてぼっち確定していたので、雑に飲み会を企画しました。まだ何も決まってないけど、みんな来てくれ! https://t.co/npJMvTsKtn
— もりのくにから (@s_osa_) May 17, 2018
つっつきボイス: 「そういや今回はプレパーティ以外あまりエントリしなかったナ: 行きたい店もあるし🍺🍶」「私アクセス集中でプレパーティ押し出されちゃいました(´・ω・`)」「マジでw」「まー仙台だったら正直どこででも飲めるけどねっ😎」「上のツイートには『会場の周りはなんもない』ってありますけど」「あそこは公園だしwそりゃそうだ: でもタクシーでもせいぜいワンメーター、その気になれば徒歩でも少し頑張れば飲み屋街に楽勝でたどり着けますよ」
「国分町あたりまで来れば店いくらでもあるので大丈夫↓: 自分の宿もこの近く」「おー❤️」「自分は味・雰囲気優先なので、朝までやってる店は基本行きませんけどね😝」「仙台といえば牛タン!🐮」「牛タン攻略は昼か夕方の早い時間に行くのがおすすめかな」
⚓その他情報
RubyKaigi2018にてラブグラフがPhoto Sponsorとして期間中の写真を撮影します!当日はリアルタイムに会場の素敵な写真をアップロード予定です。お楽しみに。あと弊社もRubyの会社です(宣伝)
Lovegraph sponsored RubyKaigi2018 as photo sponsor!https://t.co/7MKgd1oMZL #rubykaigi @lovegraph_me— nil (@KatsumaNarisawa) May 11, 2018
万葉はRubyKaigi2018のNursery Sponsorになりました。参加者が会場でお子様を預けることのできる託児サービスを提供するスポンサーです。 #rubykaigi
https://t.co/MjWga1F9gA
https://t.co/WpsBJVH64n— 株式会社万葉 (@everyleaf) May 11, 2018
今年の #rubykaigi 向け弊社のノベルティは『マイクロファイバー傘カバー』です。
濡れた折りたたみ傘をしまったり、裏返して鞄をひと拭きししたり、これからの雨の季節にご利用いただけるアイテムとなっております。気になる方はぜひノベルティ置き場にお越しください! pic.twitter.com/sXhdOm5C6k— 株式会社万葉 (@everyleaf) May 21, 2018
つっつきボイス: 「Photo Sponsorかー: そうそう、RubyKaigiのスポンサー受け付けフォームは、通常のスポンサー枠の他に、『これやらせてください!』って独自のスポンサー活動を申請することもできるんですよ」「おー、知りませんでした!」
「万葉さんの託児サービススポンサーもおなじみですね: 子連れでも来場できるのがうれしいです👼🏽👶」
⚓TechRachoとBPS株式会社よりお知らせ
最後にTechRachoとBPS株式会社からのお知らせです。
#techracho でお馴染みのBPS株式会社の #rubykaigi 2018スポンサー参加に伴い、社内デザインチーム謹製のTechRachoステッカーを会場受け付けにて配布いたします!
惜しくも間に合わなかった方は、会場にてTechRachoのシャツを着ている者に声をかけていただければお分けしますのでお気軽にどうぞ! pic.twitter.com/jzgI770ETA— OreKanegon (@hachi8833) May 25, 2018
#rubykaigi 2018 向けの #techracho シャツ3着(非売品🙇)が先ほど届きました!
この模様にピンときたら声掛けいただければTechRachoステッカーを先着順にてお渡しいたします
ステッカーは会場受付にも置いてありますのでどうぞ! pic.twitter.com/fMWFrPOzdJ— OreKanegon (@hachi8833) May 25, 2018
⚓Rails: 今週の改修
公式の更新情報がなかったので、以下はRails 5.2リリースノートの中から、これまで取り上げていなかったものを見繕いましたので、すべてRails 5.2が対象です。
⚓(5.2) ActiveSupportのModule#reachable?
を非推奨化
非推奨化の理由はこのPRには書かれていませんでした。
3.5 到達可能
名前を持つモジュールは、対応する定数に保存されている場合に到達可能 (reachable) となります。これは、定数を経由してモジュールオブジェクトに到達できるという意味です。
これは通常の動作です。"M"というモジュールがあるとすると、Mという定数が存在し、そこにモジュールが保持されます。
しかし、定数とモジュールが実質上切り離されると、そのモジュールオブジェクトは到着不能 (unreachable) になります。
Railsガイド Active Support コア拡張機能より
# 同ガイドより
module M
end
orphan = Object.send(:remove_const, :M)
# このモジュールは孤立しているが、まだ無名ではない
orphan.name # => "M"
# 定数Mは既に存在してないので、定数Mを経由して到達できない
orphan.reachable? # => false
# "M"という名前のモジュールを再度定義する
module M
end
# 定数Mが再度存在し、モジュールオブジェクト"M"を保持しているが
# 元と異なる新しいインスタンスである
orphan.reachable? # => false
つっつきボイス: 「reachable?あー、そういうことか」「Railsガイドなんで訳語の『到達可能』は私がやったやつですが、英ママの方がよかったかな...」「非推奨化の理由ほんとに書いてないや」
普段はカンニングしないようにしてるのですが、y_yagiさんのブログを参照しました↓。
参考: rails commit log流し読み(2017/09/21) - なるようになるブログ
Active Supportの修正です。Module#reachable?メソッドをdeprecateにしています。rails内部でもう使用してない為deprecateにしたとの事です。
同ブログより
⚓(5.2) config/database.ymlにすべての環境で読み込まれる共有セクションを追加
# railties/lib/rails/application/configuration.rb#L133
config = if yaml && yaml.exist?
require "yaml"
require "erb"
- YAML.load(ERB.new(yaml.read).result) || {}
+ loaded_yaml = YAML.load(ERB.new(yaml.read).result) || {}
+ shared = loaded_yaml.delete("shared")
+ if shared
+ loaded_yaml.each do |_k, values|
+ values.reverse_merge!(shared)
+ end
+ end
+ Hash.new(shared).merge(loaded_yaml)
elsif ENV["DATABASE_URL"]
# Value from ENV['DATABASE_URL'] is set to default database connection
# by Active Record.
マージ後にも議論が続いていました。
- #28095とコンフリクトするのでは?
- 5.1へのバックポートは止める方がよさそう
- DHH: YAMLへのパッチという形は好きでない。概念として共有される分にはいいけど、secretsと同様読み出し時に行うべき云々
つっつきボイス: 「あーなるほどね! 確かにこの修正は欲しいヤツ」「というと?」「rails new
するとdefault
ってセクションができるんで、みんな慣例的にいちいちYAMLにデフォルト設定書くんだけど、そのデフォルト読み込みを書き忘れる人が続出しがちだったんで」「おー😮」
「ただねー、これをサポートするのがいいかどうかというのはあるんですよ: (他でも使う可能性のある)ピュアなYAMLとしては汎用性が下がっちゃうことにはなるんで」「むむ?」「このYAMLをピュアなYAMLとして読み込んだときに挙動が変わっちゃうから」「あ!🤭」
「ちなみにプルリクメッセージ↓に書いてある& <<: *
ってYAML標準の記法っす: これを使えばYAML.load
なんかでRailsとは無関係に読み込める」「しかし今回のようにYAMLにshared
という特殊な名前のセクションを追加してやる場合は、Railsがこのコード経由でdatabase.ymlを読み込んだ時だけはその設定が効くんですが、YAML.load
とかで読み込むとデフォルトと異なる動作になる」「😓」「言い換えれば、RailsがYAMLを読み込むときにはそういう特別扱いをする形になるんで、下手をするとbreaking changesになるかも」
I've discovered this commit from @dhh to have a shared section for
secrets.yml
today at @claudiob 's talk at RailsConf.
I really like the idea and since all the database.yml that I'm working with have some& <<: *
shenanigans, I thought it would be nice to make it available there as well.
「それでshenanigansって言葉が使われてるのか: 『ごまかし』とか『ペテン』みたいな意味があるんだそうで、私も初めて見た単語」「上のDHHの発言↑もまさにそれで、これを入れるとピュアなYAMLではなくなるからでしょう」「ただ、既存のYAML記法は引きつづき使えるので、YAML.load
とかでRails以外からdatabase.ymlを読み込む可能性のあるシステムでは、引きつづき <<: *name
を使ったほうが良さそう」「😃」
参考: Rubyリファレンスマニュアル library yaml (Ruby 2.5.0)
「それにしてもこの& <<: *
って記法のあたり覚えらんねぇw: 毎回ググってるし」「でしょうね...目に痛い🦔」「でもこれがないとYAMLの表現力がガタ落ちになっちゃうんで」
参考: YAML™ Specification Index
参考: YAML - Wikipedia
参考: yaml を DRY に書く - Qiita
「そっかー、私はYAMLは静的なデータファイル形式的な使い方しかしたことなかったのもあって、そういう動的っぽい仕様を知らなかった😓」「YAMLはこういうことができるから優秀なんですよ🧐: それこそローカライズなんかにはうってつけの機能で、こうやってデフォルトロケール向けの設定を& <<: *
で読み込んだうえで個別のロケール設定を読み込んでおけば、該当ロケールがなくてもデフォルトにフォールバックしてくれて、translation missing
にならずに済むと」「そうだったのかー!😲YAMLの機能だけでここまで実現できるということか」
参考: Rails国際化 (I18n) API | Rails ガイド -- 近々Rails 5.1対応向けに更新します。
⚓(5.2) デフォルトでGemfileと.ruby-versionにRubyバージョンが設定されるようになった
これもマージ後にスレが伸びていて、DHHが「revertをrevertした: 混乱させてすまない」と書き込んでる一幕もありました。
# railties/lib/rails/generators/rails/app/templates/Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
+ruby <%= "'#{RUBY_VERSION}'" %>
# railties/lib/rails/generators/rails/app/app_generator.rb#L52
+ def ruby_version
+ template "ruby-version", ".ruby-version"
+ end
つっつきボイス: 「へー、いつの間にこれが?」「私rails new
ばっかやってるのでこれは見かけてました」「確かにいつ入ってもおかしくない機能ではある」
「そうそう、こういうのって採用面接なんかで相手がリポジトリに上げてきたRailsアプリをチェックするときの第一関門になるんですよ😉: 普段からRailsを触っている人なら必ず.ruby-version
を置くものなんですけど、それ置いてないRailsアプリを取ってくるとたいてい動かない😎」「🤣」「個人開発者で他の人と共同開発をやったことのない人にありがちな初歩的ミス😇」
出かけるときは忘れずに。
⚓(5.2) mini_magick
をデフォルトでGemfileに追加(ただしコメントアウト状態で)
- PR: Add `mini_magick` to default `Gemfile` as comment by yhirano55 · Pull Request #30633 · rails/rails
# railties/lib/rails/generators/rails/app/templates/Gemfile#L24
+# Use ActiveStorage variant
+# gem 'mini_magick', '~> 4.8'
+
先週のウォッチでお伝えしたように、Rails 6ではImageProcessingやruby-vipsを使う流れになっています。短い命🐞。
つっつきボイス: 「あれあれ?mini_magick
は確か先週...?」「↑そういうわけでRails 5.2だけということに」
⚓(5.2) ActionDispatch::TestResponse
のレスポンスエイリアスを非推奨化
- PR: Deprecate ActionDispatch::TestResponse response aliases by trev · Pull Request #30104 · rails/rails
#30072を修正する。実際の
ActionDispatch::Response
オブジェクトは#success?
、#missing?
、#error?
をサポートしていないので、サポートされていると誤解されないようにする。代わりにRack::Response
のレスポンスヘルパーを使うこと。
同プルリクより大意
# actionpack/lib/action_dispatch/testing/test_response.rb#L22
# Was the response successful?
- alias_method :success?, :successful?
+ def success?
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
+ The success? predicate is deprecated and will be removed in Rails 6.0.
+ Please use successful? as provided by Rack::Response::Helpers.
+ MSG
+ successful?
+ end
# Was the URL not found?
- alias_method :missing?, :not_found?
+ def missing?
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
+ The missing? predicate is deprecated and will be removed in Rails 6.0.
+ Please use not_found? as provided by Rack::Response::Helpers.
+ MSG
+ not_found?
+ end
# Was there a server-side error?
- alias_method :error?, :server_error?
+ def error?
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
+ The error? predicate is deprecated and will be removed in Rails 6.0.
+ Please use server_error? as provided by Rack::Response::Helpers.
+ MSG
+ server_error?
+ end
つっつきボイス: 「ActionDispatch
は、泥臭いことをやるときにたまに使う」「コントローラがらみということですね」「たとえばrake
タスクから無理やりコントローラを叩きたい!みたいなときに、ActionDispatch
を使うとあたかもコントローラの中から呼んでるかのような振る舞いを得られる」「あー、コントローラのコンテキストで呼べるのか!😲」「そそ、コントロラーのメソッドはそのままじゃ外から呼べないんで、「ActionDispatch
から呼ばないとコンテキストが形成されない」
「何年か前に社内勉強会でも同じこと話した覚えがあるんですが、たしかいましたよねそんとき?」「...ちょっとだけ思い出した😓」「ま、使わなきゃ忘れるヤツですし😼」
⚓(5.2) 非推奨化されていたActionController::ParamsParser::ParseError
を削除
# actionpack/lib/action_dispatch/http/parameters.rb#L126
-
- module ParamsParser
- include ActiveSupport::Deprecation::DeprecatedConstantAccessor
- deprecate_constant "ParseError", "ActionDispatch::Http::Parameters::ParseError"
- end
Rails 4まではパースエラーについて以下のように対応してたようです。
参考: Rails で JSON のリクエストパラメータがパース出来なかった場合の対応 - Qiita
- リポジトリ: rails-api/rails-api
つっつきボイス: 「何が変わったのかな?と思って」「別の場所でパーサーエラーに対応するようになったとかですかね🤔」
再度y_yagiさんブログより:
Action Packの修正です。
ActionDispatch::ParamsParser::ParseError
クラスがdeprecateになりました。今後はActionDispatch::Http::Parameters::ParseError
を使用する必要があります。
rails commit log流し読み(2016/10/10) - なるようになるブログより
参考: Deprecated ActionDispatch::ParamsParser::ParamsParser · rails/rails@b3d41ea
ActionDispatch::ParamsParser
クラスが削除されてActionDispatch::Http::Parameters
に代わったので、エラー定数はこの新しいクラスに置くのがよい
b3d41eaより大意
参考: DevDocs — Ruby on Rails 5.2 / ActionDispatch::Http::Parameters
⚓Rails
⚓Yuguiさんが教える「適切なコメント」
Link: Rubyコミッター・Yuguiに学ぶ、コードに書くべき「適切なコメント」と「適切な場所」 - エンジニアHub|若手Webエンジニアのキャリアを考える!: https://t.co/Z2Q8G81XWT
— Yukihiro Matsumoto (@yukihiro_matz) May 22, 2018
つっつきボイス: 「まー昨今コードにコメントを書かないなんて人がもしいるとすれば、複雑なコードや難しいコードを普段書いていないか周りに迷惑をかけまくってるかどちらかでしょう: ま、たまにいますけど😆」「😆」
「あれはいつだったか、ソースコードに一行たりともコメントが書かれていない凄いのを見たことがありますよ」「Σ(゚◇゚;)マジデッ!?」「コードコメントがないと、他社開発のシステム引き継ぎなんかで調査・把握にかかる工数がバーンと跳ね上がりますから」「そりゃそうですね😵」「publicなメソッドの全部にみっちりコメント書くとまでいかなくても、ちょっとでもロジックが複雑なメソッドには必要なコメントを書いてもらわないと下手すればメンテ不能で作り直しだし、それ以前に触りたくない💩」「コードをクイズにしたらいかんですよね...」
⚓最近のWeb認証
YubiKeyでWebサイトの認証も出来るようになるのか /
Web Authentication API で FIDO U2F(YubiKey) 認証 | https://t.co/thFiCE56ke
https://t.co/OtX0pzQ71Y— . (@y_yagi) May 19, 2018
参考: Web Authentication: An API for accessing Public Key Credentials - Level 1 -- w3cもすなるgithub.io
参考: パスワードレス認証技術 FIDO | NTTデータ
参考: U2F - FIDO Universal 2nd Factor Authentication | Yubico
参考: Credential Management Level 1 -- W3C
今週は心なしかy_yagiさん成分が多めになりました。
つっつきボイス: 「FIDOとかYubiKeyとか、知らない用語が出てきたので」「お、例のjxck.ioさんのブログ: さすがいつも詳しい」「↓動画でもやってますが、こうやってUSBキーを挿して認証できる」「おー、それをブラウザでやれると」「まー最近流行りの仮想通貨周りなんかにはいいんじゃない?」
⚓ByebugとBootsnapを両方使う場合の注意
compile_cache_iseq把握 /
Byebug doesn't play nice with bootsnap · Issue #452 · deivid-rodriguez/byebug https://t.co/TSTl6GO5nY— . (@y_yagi) May 20, 2018
@hashwin 以下のconfig/boot.rbの設定は動きそう。bootsnapのREADMEのデフォルト推奨設定だけど、
compile_cache_iseq
をfalse
にしてある。
同issueより大意
# 同issueより
require 'bootsnap'
env = ENV['RAILS_ENV'] || 'development'
Bootsnap.setup(
cache_dir: 'tmp/cache',
development_mode: env == 'development',
load_path_cache: true,
autoload_paths_cache: true,
disable_trace: true,
compile_cache_iseq: false,
compile_cache_yaml: true
)
つっつきボイス: 「今はBootsnapがRailsでデフォルトで入るからなー」「まだissueクローズしてませんでした」「iseqはInstructionSequenceのことですよね?」「👍」「Bootsnapは高速化のためのgemだから、おそらくdevelopment環境でキャッシュされるとByebugとかそっちの方で不都合があるんでしょうね」
参考: Rubyリファレンスマニュアル class RubyVM::InstructionSequence
⚓コントローラ対決!Rails vs Hanami
Link: Controllers: the Rails way vs the Hanami way: https://t.co/a0TiciMTek
— Yukihiro Matsumoto (@yukihiro_matz) May 23, 2018
予想外に短くて読みやすい記事です。翻訳依頼かけてみます。
- Railsのコントローラ
- Hanamiのコントローラ
- 相違点
- どっちがどう良いのか
- ビュー/テンプレートへの変数の公開
つっつきボイス: 「そういえば今年もHanamiの中の人来るんだっけ?」「来ますね」「自分もまあ、APIというかマイクロサービス寄りのサーバーならRailsのような重たいものでなくてもいいんじゃね?とは思う: それこそSinatraでいいくらいだけど、Sinatraだと結局あとからあれが足りないこれが足りないみたいになりがちだし」
「Hanamiは高速化も頑張ってるという話も伝え聞くし、不可思議な挙動とかもなさそうだし、マイクロなサービスならHanamiは選択肢として悪くないんじゃないかなとも思うし」「記事の結論でも、Hanamiだとコード量は多めになるだろうとなっていて、先週のウォッチでのTrailbrazerの話をちょっと思い出しちゃいました」「その結論でもCOC(設定より規約: Convention over Configuration)について触れているようにRailsはいろんなものが背後に隠れてるから、そりゃRailsの方がコードは少なくなる😆」「😆」
「そしてTrailblazerとHanamiはおそらく立ち位置が違う: Trailblazerは規約が固めで明示的に制約をかけられる感じで、おそらくJava方面に多い固めのフレームワークに近いから、規約はそれなりにあるはず」「ふむふむ」「逆にHanamiはその結論にも書いてあるように規約が少ないから、自由度が高い分自分で書かなきゃいけないコード量も増えるということでしょうね」「😃」「じっくり取り組める案件があるならHanami使ってみたいな」
⚓rails_db: データベースビューア&クエリランナーgem(RubyFlowより)
- リポジトリ: igorkasyanchuk/rails_db
昨年のウォッチ↓でも取り上げたrails_dbがメジャーアップグレードしたそうです。
週刊Railsウォッチ(20170127)わかりやすいAWSサービス名、Rails DBは便利、TruffleRubyの驚異的速度ほか
つっつきボイス: 「前回取り上げたとき結構評判よかったですね、これ」「あー、Railsエンジン(マウンタブルエンジン)になってて、マウントするとデータベースのCRUDが出るヤツか」
「phpmyadminとかpgadminよりはイケてそうかな: ただこの種のマウンタブルエンジン型のデータベース管理ツールは、マウントするとあくまでRailsのサーバーのワーカー上で動くので、たとえば死ぬほど遅いSQLクエリをこういうので投げるとワーカーが固まる❄️」「🙁」「逆にphpmyadminみたいに別プロセス/別スレッドで動く管理ツールなら、最悪DBは重くなってもUnicornやPumaとかまでは巻き添えを食わずに済む」「そっか!」「もちろん、たとえばPumaをマルチプロセス/マルチスレッドで運用してればそこまでには至らないけど、ワンプロセス/マルチプロセスだとCPU割り当て時間が短くなってしまうかもね」「なるほどー😲」「こういうツールはいろいろ便利だけど、そこらあたりを念頭に置いて使いましょうということで😼」
⚓RailsConf 2018の動画が出揃う(Ruby Weeklyより)
全87件という膨大なプレゼン数です。以下はDHHのキーノートスピーチ動画です。
つっつきボイス: 「これをコンプリートする人、いないでしょうね...」「ダラダラ流すぐらいしか思いつかんw: 最近ジムに通ってるからそのときにでも流すかな」「お😳、マシンエクササイズあたりですか?」「肩こりとかヤバいんで筋力取り戻しにかかってる😋」
私は道具使わない方向で腹筋と下半身鍛えてます。ドンピシャの動画がなかったので以下は適当です↓。
⚓Railsのログ出力を無効にする方法(Hacklinesより)
コード1行のエントリでした。
⚓見積もりは経験
つっつきボイス: 「Railsに限らないですね」「こればっかりはね、方法論はいろいろあれど、モノにするにはもう経験積みまくるしかないマジで」
⚓PhusionのGDPR対応記事(RubyFlowより)
⚓API設計の不確定性
「API設計で後悔しなかったことなんて無いよ」、良い言葉だ
— . (@y_yagi) May 19, 2018
つっつきボイス: 「とにかくAPIはどう使われるか事前には予測つかないから😆😆」「😆」「FacebookやGoogleですらあれだけAPIが変わりまくってるぐらいだし、レガシーAPIを廃止するのもほんと大変だし、長く運営するAPIサーバーほど設計難しす😭」
⚓「Vue on Rails」やってみた
新しい記事が追加されました!: Vue on Rails で作ったアプリを振り返ってみる #RE_ENGINES #Vuejs #Rails https://t.co/D56rNVfyPuで作ったアプリを振り返ってみる/
— RE:ENGINES (@ReEngines) May 20, 2018
つっつきボイス: 「お、ちゃんとしたSPAっぽく見える😃: 参考になりそう」「Vuetify!」「いい名前!」「記事の最後にもあるように、RailsとVueの役割分担とバランスをどうするかですね: このあたりはまだまだ試行錯誤中だし」
参考: Vue.js Material Component Framework — Vuetify.js -- Material Designベースのコンポーネントフレームワーク
参考: Vuex | Vuex とは何か? -- 状態管理パターン + ライブラリ
リポジトリ: axios/axios -- PromiseベースのHTTPクライアント
⚓Ruby trunkより
⚓提案: Object#dup
にブロックを渡したい
require 'uri'
module MyUri
class << self
def foo_uri
base_uri.dup.tap { |e| e.path = '/foo' }
end
private
def base_uri
@base_uri ||= URI.parse('http://example.com')
end
end
end
つっつきボイス: 「おーなるほどワカル: 今はActiveRecordのcreate
とかにもこれあるんで」「おー」「ActiveRecordのcreate
とかbuild
は、ブロックを渡すとこんな感じでデフォルト値を設定できる😋」「それなしだと今はtap
してやらないといけない」
参考: DevDocs — Ruby on Rails 5.2 / ActiveRecord::Relation#create
# DevDocsより
users = User.where(name: 'Oscar')
users.create # => #<User id: 3, name: "Oscar", ...>
users.create(name: 'fxn')
users.create # => #<User id: 4, name: "fxn", ...>
users.create { |user| user.name = 'tenderlove' }
# => #<User id: 5, name: "tenderlove", ...>
users.create(name: nil) # validation on name
# => #<User id: nil, name: nil, ...>
参考: Rubyリファレンスマニュアル instance method Object#tap
(Ruby 2.5.0)
⚓片側のみのComparable#clamp
が欲しい
# 同issueより
# with clamp
chain.of.calculations.clamp(0..)
# without clamp
v = chain.of.calculations
v < 0 ? 0 : v
# or, with yield_self (renamed to then)
chain.of.calculations.then { |v| v < 0 ? 0 : v }
つっつきボイス: 「clamp(0..)
みたいに片方が開いたRange
オブジェクトを渡したいってことか: でないと範囲を手書きしたり、yield_self
したりしないといけない、と: 気持ちはワカル」「yield_self
😳?!」「何かで使ったことあった」「2.5から入ったんですね」
参考: Rubyリファレンスマニュアル instance method Comparable#clamp (Ruby 2.5.0)
self を範囲内に収めます。
self <=> min
が負数を返したときは min を、self <=> max
が正数を返したときは max を、 それ以外の場合は self を返します。
12.clamp(0, 100) #=> 12
523.clamp(0, 100) #=> 100
-3.123.clamp(0, 100) #=> 0
'd'.clamp('a', 'f') #=> 'd'
'z'.clamp('a', 'f') #=> 'f'
参考: instance method Object#yield_self
(Ruby 2.5.0)
selfを引数としてブロックを評価し、ブロックの結果を返します。
# 同上
"my string".yield_self {|s| s.upcase } # => "MY STRING"
3.next.yield_self {|x| x**x }.to_s # => "256"
参考: Ruby 2.5 の yield_self
- Qiita
⚓代入によるguard構文を後置のif
でも使いたい
# 同issueより
def test
if result = calculate_result # 動く
return result
end
...
end
# 同issueより
def test
return result if result = calculate_result # 動かない
...
end
つっつきボイス: 「これはやめといた方がいいと思うし: Rubocopに怒られるし」「😵」「if
の条件式に代入文を書かないことというヤツです」
⚓Ruby
⚓Ruby 2.5のブロックパラメータで使えるlazy proc
Link: Ruby 2.5 added lazy proc allocation for block parameters | BigBinary Blog: https://t.co/LV6GUPn6hL
— Yukihiro Matsumoto (@yukihiro_matz) May 24, 2018
# 同記事より: Ruby 2.5の場合
irb> require 'benchmark'
=> true
irb> def greet
irb> yield
irb> end
=> :greet
irb>
irb> def greet_with_welcome(&block)
irb> puts 'Welcome'
irb> greet(&block)
irb> end
=> :greet_with_welcome
irb>
irb> Benchmark.measure { 1000.times { greet_with_welcome { 'BigBinary' } } }
Welcome
Welcome
...
...
...
=> #<Benchmark::Tms:0x00007fa4400871b8 @label="", @real=0.004612999997334555, @cstime=0.0, @cutime=0.0, @stime=0.001524000000000001, @utime=0.0030690000000000023, @total=0.004593000000000003>
つっつきボイス: 「パフォーマンスが向上するみたいですね」「なるほど、procをyield
したものをまたyield
するときに、1回目の評価で展開するんじゃなくてlazyにやってくれるってことか😋」
「これはRubyProfのようなプロファイラで解析した結果に何らかの形でかなり影響する可能性がありますね」「😮」「主にライブラリあたりで、どこがボトルネックになっているかみたいな解析結果に影響しそうに思える: Railsアプリぐらいの規模になるとそんなに変わらないかもですが😼」
- リポジトリ: ruby-prof/ruby-prof
⚓依存性の注入(DI)はテストで必要か?(Hacklinesより)
Testdouble社のブログです。
Hacklinesの調子が悪くて、なぜかリンクをクリックすると500エラーになったので、タイトルでググりました。
# 同記事より
require 'rspec'
require_relative 'shirt_v2'
describe Shirt do
it "doesn't buy shirts when there are none left" do
fake_inventory = Object.new
fake_inventory.define_singleton_method(:check_availability) { |_product_code| false }
fake_purchaser = spy
shirt = Shirt.new('small', fake_inventory, fake_purchaser)
result = shirt.buy!
expect(result).to eq(false)
expect(fake_purchaser).not_to have_received(:purchase_item).with('abc123')
end
it "buys a shirt when there are shirts available" do
fake_inventory = Object.new
fake_inventory.define_singleton_method(:check_availability) do |product_code|
product_code == 'abc123'
end
fake_purchaser = spy
shirt = Shirt.new('abc123', fake_inventory, fake_purchaser)
result = shirt.buy!
expect(fake_purchaser).to have_received(:purchase_item).with('abc123')
expect(result).to eq(true)
end
end
参考: xUnit Test PatternsのTest Doubleパターン(Mock、Stub、Fake、Dummy等の定義) - 千里霧中
つっつきボイス: 「testdoubleってDIですよね: テストにどんな種類があるか、みたいな話はt_wadaさんのスライドか何かで見たなー」「testdouble自体よくわかってなかった...😓」「あ、これこれ↓: スライドの2ページ目」
「著者は自社であるtestdoubleが提唱する「Arrange, Act, Assert」というテスティングパターンが好みだそうです」「そういうコードならDIでやっていいんじゃないかな」
参考: Arrange Act Assert · testdouble/contributing-tests Wiki
- Arrange: テストのセットアップで必要なものはすべてここで記述する
- Act: テスト中のsubjectの振る舞いを記述する
- Assert: subjectの振る舞いが期待どおりかどうかを戻り値や副作用で検証する(spyやmockを使用)
「ところでmockとかstubって、小さな機能をテストする分にはいいんだけど、でかい機能をテストしづらいですよね」「あー」「そもそもmockやstubはテスト対象のメソッドを分割して機能を小さく保つことが前提なんで、メソッドがでかくなると途端につらくなる😭: 本当にテストできてるのか?って不安になるし、mockオブジェクトがどえらく複雑になって本末転倒感出たり」
「なんやかやで、コンポジットするにしろDIするにしろ、クラスなりメソッドなりの機能を小さく保っておかないとつらくなるのはどのやり方でも変わらないなと思うわけです」「確かにー」
⚓re2: 高速/安全/スレッド良好を謳うGoogle製正規表現ライブラリ
Russ Cox、re2の作者だったのか /
Implementing Regular Expressions https://t.co/N3KWAvbBre— . (@y_yagi) May 20, 2018
- リポジトリ: google/re2
- リポジトリ: mudge/re2 -- Rubyラッパー
# mudge/re2/より
$ irb -rubygems
> require 're2'
> r = RE2::Regexp.new('w(\d)(\d+)')
=> #<RE2::Regexp /w(\d)(\d+)/>
> m = r.match("w1234")
=> #<RE2::MatchData "w1234" 1:"1" 2:"234">
> m[1]
=> "1"
> m.string
=> "w1234"
> m.begin(1)
=> 1
> m.end(1)
=> 2
> r =~ "w1234"
=> true
> r !~ "bob"
=> true
> r.match("bob")
=> nil
参考: 開発者に聞く、Google Chromeが目指すもの - @IT -- 作者Russ Coxについて言及されています
参考: Goの正規表現エンジンを使ってファジング用ツールを書いてみる - YAMAGUCHI::weblog
つっつきボイス: 「正規表現厨としては見逃せないので😤(初めて見たけど)」「C++で書かれてる」「聞き覚えある: re2」「ラッパーもRuby以外にいろいろな言語向けのがあるけど、Infernoって?」「あれじゃないっすか?Plan 9 OSの後継のInferno OS」「何それ🤣言語じゃなくって?」
参考: Plan 9 from Bell Labs - Wikipedia
Plan 9の由来である「Plan 9 from Outer Space」です↓。
Inferno(煉獄)って名前、個人的に好きです。
参考: Inferno (オペレーティングシステム) - Wikipedia
Infernoといえばダンテ「神曲」(神聖喜劇の方が意味が近いらしい)ですが、まるでLinuxのシステム階層かTCP/IP階層か何かを逆さにしたようなピラミッドチャート的概念を伴う地獄世界が登場します。最下層はカーネルではなく、魔王が氷漬けにされています。
Wikipedia Botticelli Chart Of Dantes Hell(パブリックドメイン)より
参考: 神曲 - Wikipedia
ダンテ「神曲」は単なる古典ではなく、当時は一方言に過ぎなかったトスカーナ地方の言葉で書かれていたのが、そのまま現代イタリア語のリファレンスとして使われるようになったのだそうです。つまり現代イタリア語の究極実装とライブラリがいきなり出現したような塩梅です。イタリアの子どもたちは必ず神曲を学ぶと何かで読んだ覚えがあります。
⚓to_i
とto_int
とかってどう違うの?
- 質問: string - to_s vs. to_str (and to_i/to_a/to_h vs. to_int/to_ary/to_hash) in Ruby - Stack Overflow
# 同質問の回答より
1.to_s # returns "1"
Object.new.to_s # returns "#<Object:0x4932990>"
1.to_str # raises NoMethodError
Object.new.to_str # raises NoMethodError
{1,2}.to_a # returns [[1, 2]], an array that describes the hash
{1,2}.to_ary # fails, because a hash is not really an array.
Implicit vs explicit type conversions in Ruby (to_h/to_hash and others)の参考文献にあったStackoverflowの議論です。
つっつきボイス: 「おろ? {1,2}.to_a
...動かないし、そもそもコードおかしくね?」「[]
の打ち間違い?」(しばらく一同で試行錯誤)
「これだっっっ!↓」「=>
って...」「この回答、17件も『いいね』されてるのに😓」
{1 => 2}.to_a
# => [[1, 2]]
ここで録画が終わってしまったので、以後のつっつきは軽めとなります🙇。
追記
以前のRubyでは動いたのだそうです。
https://t.co/kNrlCL5XSS {1,2}.to_a は 1.8 だと動くので、元の日付を考えるとおかしくなさそう。
— Kazuhiro NISHIYAMA (@znz) May 28, 2018
⚓「Gaijin Engineer in Tokyo」がご本人の手で日本語化
- 元記事: 東京にて、外人エンジニア – Alejandro Wainzinger – Medium
- 英語版: Gaijin Engineer in Tokyo – Alejandro Wainzinger – Medium
3月のウォッチでご紹介した記事です。
週刊Railsウォッチ(20180323)Rails 5.2.0 RC2リリース、「サーバーレスなRubyが欲しい」、capybara風JSテストフレームワークCypressほか
同じ方による新作「東京の白人特権階級」も気になります。
⚓クラスやメソッドの命名をどうするか
つっつきボイス: 「この間タバコ中に、ネット上の英語シソーラスだとITに関係ない語がいっぱい出てきて不便だという話になったんですけど、クラスやメソッドの名前考えるときって、シソーラス使います?」「ものすごくよく使いますね🧐: 既存の名前と衝突せずに、かつ的確な名前を付けたいと思ったらシソーラスないとつらいし、使うべき」「ですよね😃: ちなみにどのシソーラス使ってます?」「まずはMacに内蔵されてるOxfordのシソーラスからかな↓」
「以下の記事にもあるんですけど、開発中のつらいタスクの半分を占めているのが『命名』でした」
- 元記事: Don’t go into programming if you don’t have a good thesaurus | ITworld -- 2013年の記事です
雑談よりですが、英語圏を含むヨーロッパのアルファベット圏の多くでは、文章において(用語ではない)同じ語の繰り返しを嫌がる傾向があります。たとえば「大佐が」「大佐の靴を履き」「大佐の葉巻を吸いながら」「大佐の家に戻った」みたいな所有格がベタベタの書き方は、特殊効果を狙っているのでもない限り「教養がない」とされるんだそうです。
代わりに「大佐は」「その男は」「彼は」みたいに使い分けようとします。日本語で言うと、「〜です。」みたいな同じ語尾を何度も繰り返すのを嫌がるのと似た感覚かもしれません。
日本ではシソーラスを積極的に使う人をあまり見ないのですが、そういうわけでアルファベット圏ではシソーラスはむしろないと文章を書くのも大変みたいです。ちなみに以下の日本語シソーラスはめちゃめちゃ優秀で愛用してます👍。
- サイト: 連想類語辞典: 日本語シソーラス
⚓deprecateしたAPIをparser gemで書き直す(Ruby Weeklyより)
s(:send,
s(:send, nil, :client), :read_events_backward,
s(:str, "Order$1"),
s(:hash,
s(:pair,
s(:sym, :limit),
s(:int, 5)),
s(:pair,
s(:sym, :start),
s(:sym, :head))))
client.read_events_backward('Order$1', limit: 5, start: :head)
~ dot
~~~~~~~~~~~~~~~~~~~~ selector ~ end
~ begin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ expression
つっつきボイス: 「deprecateされた機能の書き換えを、parser使って構文解析することでやってるみたいですね」「だからS式出力してるのか...😮」「😮」
⚓Hawker: GitHubやTwitter向けAPI不要スクレイパーgem
# 同リポジトリより
profile = Hawker.get("https://github.com/rubyhero")
profile.username # => "rubyhero"
profile = Hawker.get("https://twitter.com/pdabrowski_k1")
profile.name # => "Paweł Dąbrowski"
つっつきボイス: 「API不要ということはAPIのためのユーザー登録しなくていいので、ありがたい時がありそう😀」
⚓愛すべき8つのgemと「IceNine」(Hacklinesより)
つっつきボイス: 「とりあえず知らないgemはないかな?と思ったけど」「Timecopは似たようなものがActiveSupportにもあるけど、少しだけ書きやすくなる」「ice_nineって?」「このgemの動作は知らないんですが、この名前は一発でわかりました: カート・ヴォネガットの『猫のゆりかご(Cat's Cradle)』という小説に出てくるSFっぽい架空アイテムで、黒鉛とダイヤモンドみたいに通常の氷と結晶の相(phase)が異なるアイスナインをうっかり海に落っことすと、一瞬で世界中の海が常温のまま海底まで氷になっちゃうという究極の絶滅兵器」「はーなるほど!だからdeep_freeze
↓😀」「カート・ヴォネガット、他の小説もユーモラスで哀愁があって大好き😍」
# dkubb/ice_nineより
require 'ice_nine'
# Deep freezes most kinds of objects
hash = IceNine.deep_freeze('a' => '1')
array = IceNine.deep_freeze([ 'a', 'b', 'c' ])
range = IceNine.deep_freeze('a'..'z')
struct = IceNine.deep_freeze(Struct.new(:a, :b).new('a', 'b'))
object = IceNine.deep_freeze(Object.new)
user = IceNine.deep_freeze(User.new(name: 'dkubb'))
# Faster deep freeze that skips deep-freezing frozen objects
object = IceNine.deep_freeze!(Object.new)
# Add core extension for Object#deep_freeze (not required by default)
require 'ice_nine'
require 'ice_nine/core_ext/object'
object = Object.new
object.deep_freeze
#BrunchBookChallenge @htcity
Book #71 Cat’s Cradle by Kurt Vonnegut pic.twitter.com/QFOTjQj5LD— rakhi saxena (@rakhisaxena) December 7, 2017
アイスナインは、日本での「タケコプター」ぐらいには米国で知られている感じです。
この解説書↓はネタバレを恐れずどしどしあらすじを書いているので、古典SFを知るにはとっても便利です😋。
⚓mruby/cのロゴが決定
mruby/cのロゴが出来ました。https://t.co/zvTSun5NzW pic.twitter.com/HNTPliy41b
— mruby/c (@mrubyc_jp) May 23, 2018
つっつきボイス: 「"c"が後ろに付くmruby/cが出力するバイナリは、確かそのままROMに焼けるんですよ」「おー😀」
⚓その他Ruby
- 元記事: super vs super() in Ruby -- 先週の
super
記事よりは短いです。 -
元記事: 29+ Ruby Gems For Building Command Line Programs That Boost Productivity via @ReProfitWithYou -- RubyでCLIするのに便利なgem -- optparseより
cmdparseがいいと言っています(RubyFlowより)
https://twitter.com/hsbt/status/999262359372754946
⚓クラウド&コンテナ
⚓AWS IoT Enterprise Button
【国内販売開始】AWS IoT Enterprise Button試してみたらホンマに簡単にLambda関数を実行できた | https://t.co/b3KwRAOLPd https://t.co/SeSPEimdZ9
— . (@y_yagi) May 19, 2018
参考: AWS IoT 1-Click の概要 – 任意のデバイスに AWS Lambda トリガーをワンクリックで作成
追いかけボイス: 「ちなみに日本では売ってないっぽい: デバイスがあれば使えはするらしき(AWS Management Console側は対応してる様子)」
⚓AWSのベアメタルサーバ「i3.metal」が正式サービスに
AWSも結局古き良きレンタルサーバに回帰していくのすごい、歴史とはなんだったのか感がある。 https://t.co/kUchNZBUEr
— 7594591200220899443 (@shyouhei) May 22, 2018
先行ボイス: 「AWS、割と前から実質ベアメタルに近い環境はありましたね」「たしか前そう伺った気が」「とはいえ完全なベアメタル環境だとやれることも違うので、意味はある(ドライバ開発とか」
以下の記事にも載っている「Amazon EC2 Dedicated Hosts | AWS」がそれですね。
⚓一部領域ではOneDriveが一番人気説
つっつきボイス: 「OneDrive、Windowsの画面で一番いい位置占めてるし🤔」「😆」
⚓その他クラウド&コンテナ
- 元記事: Hosting Static Site on Dokku with Free Cloudflare CDN [Tutorial](RubyFlowより)
- リポジトリ: dokku/dokku -- ★15,000超え!
- リポジトリ: arkadiyt/aws_public_ips -- AWSアカウントに紐付けられるIPアドレスのリストを取れるRuby gem(Ruby Weeklyより)
- リポジトリ: sjmog/ralyxa -- AmazonのAlexaとやりとりできるRuby gem(Ruby Weeklyより)
医者「あなたはDHCPです」
患者「ADHDじゃなくて?」
医者「DISCOVER」
患者「OFFER」
医者「REQUEST」
患者「ACK」
医者「ね?」
患者「ほんとだ」— sat🍊 (@satoru_takeuchi) May 20, 2018
世界中で息止まってる人が結構いそう。 / AWSがブロックチェーンに本格参入 「Kaleido Blockchain Business Cloud」発表 - クラウド Watch https://t.co/sruOIohyI6
— masa寿司 (@masa_iwasaki) May 22, 2018
⚓SQL
⚓OmniDB
phpmyadminと同様のブラウザベースのDB管理ツール。オープンソースでPostgreSQL、Oracle、MySQLなどに対応。Python実装。 / “OmniDB - Open Source Web Tool For …” https://t.co/1RLmH5hmlO
— まつうちゃん (@matsuu) May 20, 2018
- リポジトリ: omnidb/omnidb
⚓SQLがNoSQLに勝利した理由
How to scale PostgreSQL 10 using table inheritance and declarative partitioningの中で引用されていた記事です。
⚓Timescaledb: オープンソースの大規模時系列データベース
つっつきボイス: 「time-scaleって時系列でいいんですよね?」「もちろん: 以前研究で時系列データベースとお付き合いしてたこともあったので」「この時計と虎をあしらったロゴかっこいいですね🐯」
同社の記事『How to scale PostgreSQL 10 using table inheritance and declarative partitioning』を近々公開します。
⚓JavaScript
⚓Chrome Devtoolsの「Network Search」とは
ネットワーク屋なのでWhat’s new in Devtoolsの”Network Search”がすごくに気なるです。 #io18jp #gdgtokyo #chromedevtool #chrome pic.twitter.com/osyEaLbXik
— MORI Tomoya (@moritomoya) May 19, 2018
⚓react-native-domとは
react-native-domは本当に変態の所業だし、React Nativeの派生としてアリかどうか(RNWebで十分ではないか)みたいな議論はあると思うんだけど、WebWorkerやwasmを最大限活用してて「Reactというパラダイムのブラウザ上でのこれから」のPoCとしてはハンパなく優秀なので、みんな読むべき。
— なかざん (@Nkzn) May 19, 2018
参考: react-native-dom の何がすごいのか - Qiita
⚓JavaScriptでFirebase認証
メールリンク認証、パスワードを覚えなくて良いのは良いよねえ / JavaScript でメールリンクを使用して Firebase 認証を行う | Firebase https://t.co/j8ZeJ5z6Md
— . (@y_yagi) May 19, 2018
参考: Firebase -- 公式サイト
参考: 「Google丸投げ」でiOSアプリ開発が恐ろしくラクになる!Firebaseの使い方 - WPJ
⚓CSS/HTML/フロントエンド
⚓Bootstrap 4関連
毎週木曜日のBPS社内勉強会で言及されていた資料をメモします。
- 元記事: Bootstrap4移行ガイド
- サイト: Bootswatch: Free themes for Bootstrap -- テーマサイト
- サイト: Bootstrap Templates & Themes from WrapBootstrap -- テーマサイト
- 元記事: 若い世代が知らない2000年代のHTMLコーディングの地獄 - ICS MEDIA
- 元記事: Borders · Bootstrap -- Bootstrapの「Utilities」はいろいろ強力
- Pure CSSでアコーディオンメニュー↓
See the Pen Pure CSS Accordion by Rau (@raubaca) on CodePen.
- 元記事: Build tools · Bootstrap -- Bootstrap 4が大きすぎる場合に分割ダウンロード
⚓ChromeブラウザのHTTP締め出し間もなく開始
HTTPSが当たり前という流れになるようです。
⚓Chromeでピクチャインピクチャ
おい、ChromeでPicture In Pictureできるようになったぞ(2018/04/15) - Qiita https://t.co/amUpeXKate
— . (@y_yagi) May 19, 2018
MacだとFenêtreがありますが、これならLinuxでもできる?
参考: [Picture in Picture] Show video in OverlayWindow. (I01cc0af0) · Gerrit Code Review -- マージコミット
⚓その他CSS/HTML/フロントエンド
女性の利用者が多いシステムの画面を設計しているときに「性別の選択肢が男性女性の順番で本当にいいのか?」という話になり、「男女平等を考えるなら円形に配置して常に回転させるべきだ」という結論に至りました pic.twitter.com/wcHr0npPDk
— BLプログラマー (@inkeinet) May 16, 2018
こんなログインフォームやばいでしょ、優勝。 https://t.co/ZFXIZNv6wB pic.twitter.com/sCPhYGdsC4
— コーイチ (@koysd) May 1, 2018
拙著第2版は6月21日発売に決定しました。Amazonでは2版の表紙がご覧いただけます。ページ数は大幅に増えて700ページ近くになる見込みですが、なんと価格は据え置きと大変お買い得ですwhttps://t.co/9tpkrA126C
— 徳丸 浩 (@ockeghem) May 24, 2018
⚓言語よろずの間
⚓Rustの公式ドキュメント日本語版
600ページ近い大作です。そして翻訳の質も極上です。
⚓Elmとは
thoughtbot、elmおしなのか / https://t.co/FfPiSewkgr
— . (@y_yagi) May 21, 2018
- サイト: elm-lang.org
参考: Elmというミニマムでフレームワークにもなる関数型altJS言語を触ってみよう!!! - Qiita
⚓プログラミングとプログラミング的思考の違い
⚓その他言語
Rustの並行性に対する態度は "Fearless concurrency" と説明されますがこれは非常に的確な表現です。
簡単とか、お手軽とか、ましてや自動的にそうなるとは一言も言ってない。
ただ、並行性に対する低レベルの操作にも怖れることなく立ち向かうことができる心強い味方であってくれるのです。— Masaki Hara (@qnighy) May 20, 2018
高校情報教科書の例示言語(ただしプログラミングの扱いはどれも軽い)
第一『高等学校情報の科学』JS
日文『新・情報の科学』JS VBA
実教『情報の科学』VBA
実教『最新情報の科学』VBA
数研『高等学校情報の科学』VBA
東書『情報の科学』VBA ドリトル— Haruhiko Okumura (@h_okumura) May 21, 2018
⚓その他
⚓GTFSとは
GTFS だ:「Googleと交通事業者が契約し、指定されたURLに「GTFS」(General Transit Feed Specification)と呼ばれる形式のファイルを置くことで、自動的にGoogleマップに情報が掲載され、ダイヤ改正などでファイルを更新すれば反映される」 https://t.co/Dyc67YuB2b
— Haruhiko Okumura (@h_okumura) May 20, 2018
参考: General Transit Feed Specification - Wikipedia
⚓らくらくTensorFlow
「shelling peas」(エンドウ豆なんかの鞘を剥く)という表現が気になります。
転送風呂
— mattn (@mattn_jp) May 21, 2018
⚓大著「Linux Inside」が公開
- 元記事: Linux Inside · GitBook
- リポジトリ: 0xAX/linux-insides
⚓その他のその他
子供の画像を計400毎学習させて与えた画像で判別してるんだけど、最近の画像は年齢差があるので判別できてるけど、息子が娘と同じくらいの年の画像はかなり誤認識する。
— mattn (@mattn_jp) May 19, 2018
明日のこのシンポジウムに「量子コンピュータが人工知能を加速する」または「量子アニーリングの基礎」を持ってくると僕と西森さんのサインが貰えるよ! https://t.co/ajI3yxU4sQ
— Masayuki Ohzeki (@mohzeki222) May 20, 2018
https://twitter.com/studio_graph2/status/998704922131509248
な、なんだって?😧
「スタバでMac」だと?😨
ふ、ふざけるな✊😡💢
できる技術者なら通勤電車内で、どこでも使えて存在感もあるテスター型ウォークマン☝️😉✨
テスター端子ぶっ刺しビジュアルで、公衆での羞恥心に耐える心も圧倒的成長💪💪💪 pic.twitter.com/lgvF9uQspH— BBコリー✂︎ (@BitBlt_Korry) May 20, 2018
これ本当にテスターとかシンクロスコープにもなるなら、欲しいです。
たまに見失いそうになった時はこの動画を見る。 pic.twitter.com/V2CGxwXfFC
— Oga (@oga_bassprogre6) May 22, 2018
シンプルで効率的なLとRの聞き分け練習用アプリ "L | R" をリリースしました。余計なステージとかレベルとかなくて、ひたすらエンドレスに聞き分けの練習だけができます。間違えると両方の音を聞き比べて確認でき、正答するまで同じ問題が繰り返されます。 https://t.co/Ay9fh8WD3w
— koher (@koher) May 18, 2018
このアプリ良い
— k0kubun (@k0kubun) May 19, 2018
実はRだけではなく、Lも、日本語の「らりるれろ」とは全然発音方法が違うことに気づくのが重要です。どっちの発音も日本語には存在しません。
日本語で「らりるれろ」と発音しても「la li lu le lo」には絶対ならないというあたりに、日本語と英語の距離の遠さを痛感します。
義務教育でこれを指摘してないどころか、L音を「らりるれろ」で指導して済ませているのはマズいと思います。
実はLの音は、Lの音を出す「直前の」音(というか口の中の形)の方が遥かに重要です。
これをすごく無理やりたとえると、ゲロの吐き始めの最初の音がLに近い音です。舌の先のやや裏側を歯の裏に軽く当てて、口は閉じずにやや左右に開いて、ゲロを吐きそうになる酔っぱらいの真似をしてみてください。下の動画のように口を閉じてはいけません。
https://www.youtube.com/watch?v=QgKK9IEemgk&t=17s
その音が出せるようになったら、そこに母音を足します。
この謎の先行音を出せれば、その後にくっつく実際のLとか他の子音やら母音とかは本当に何でもいいぐらいです。
尋ねたわけではありませんが、英語圏の人ならそのプレフィックス的な謎音の方がむしろL
の音だよと言うでしょう。今までわざと書きませんでしたが、この謎の先行音こそがL
の子音です。
これでやっと、 will
とかlittle
がなぜああいう発音なのかが理解できます。どっちも、いわゆる L
の本体の音を出してない: 上で言う謎の先行音だけを使ってます。特にlittle
の2つめのl
は、この子音がラストを飾ります。
お食事中の方、失礼いたしました🙇。
⚓番外
⚓健康情報
筋トレに限らず、最近のエビデンスブームの中で気をつけたほうがいい点がわかりやすくまとまっていて良い。 https://t.co/CFxbirUwjt
— masa寿司 (@masa_iwasaki) May 20, 2018
医師「採血からは細菌性腸炎が考えられますが、症状も改善してきてるので抗菌薬は使わずに様子見ましょう」
患者「いや、抗菌薬下さい」
医師「腸内細菌叢という由緒正しき伝統都市に過激派ゲリラが潜伏しているからと言って原爆を落とすかどうかという話をしているんです」
患者「やめておきます✋」— つねぴー (@tsuneeet) May 20, 2018
⚓乗り物特集
- 元記事: Faced with global warming, aviation aims to turn green
- 元記事: Pining for cleaner air in the Norwegian fjords - BBC News
参考: 二酸化炭素を上空にまき散らさない「電動航空機」の開発が進む - GIGAZINE
参考: 世界初の排気ガスゼロの「完全電気駆動フェリー」がノルウェーで登場 - GIGAZINE
参考: 滑ったバイクを逆噴射で立て直すスラスター安全装置、独Boschが発表。カーブの浮き砂利に効果 - Engadget 日本版
⚓鑑定やいかに
https://t.co/jizyiynqPO https://t.co/WrmQd8viMJ
— Haruhiko Okumura (@h_okumura) May 20, 2018
バイオリニストを対象としたストラディバリのバイオリンと安価なバイオリンの覆面テスト判定率は、偶然の場合とほとんど変わりなかった云々。
個人的には、いい楽器は言ってみればIDEみたいなもので、いい音を「楽に出せる」ぐらいのメリットしかないと思ってます。上手な人は何を弾いてもいい音がするという逆説的な「弘法筆を選ばず」現象にたくさん遭遇しました。
⚓銀河から酸素を検出
「132.8億光年先の銀河に酸素を検出」のニュース、大反響をいただいています。ありがとうございます。研究チームの一員である谷口義明さんが、もう少し大きな視点で銀河研究の展望を語ってくれたインタビュー記事『130億光年以上先の「宇宙最初の銀河」を探す』もどうぞ。https://t.co/ezvIywotGJ pic.twitter.com/FQHOgYF9MA
— 国立天文台 アルマ望遠鏡 (@ALMA_Japan) May 18, 2018
⚓タコやイカは地球外由来?
そういえば人間を含む多くの動物の眼球では、網膜の表側(光が当たる方)に神経がワイヤリングされている一方、イカの眼球は網膜の裏側からワイヤリングされているそうで、裏側配線の方が普通に考えて合理的だよなと思ったことがありました。
Ask A Science Blogger: Which parts of the human body could you design better? – Living the Scientific Life (Scientist, Interrupted)より
参考: 「タコやイカは地球外生物の影響から生まれた」とする説を科学者グループが発表 - GIGAZINE
参考: あの動物はどんな目を持ってるの? 生き物たちの目の種類を調べてみた | 目をゆる〜くマジメに考える 目ディア
こちらのツイートのスレも面白い内容になっています。
「ダイオウイカはトーラス状の脳を食道が貫通しており,大きすぎる獲物を食べると脳が損傷するバグがある」みたいな記述をある本で見かけて与太話を疑うも,すこし調べた範囲では別にダイオウイカに限らないようだ。進化は場当たり的。 pic.twitter.com/G4dkCwoYJJ
— ACTIVE GALACTIC (@active_galactic) May 26, 2018
⚓オープンオフィスでの集中を保つには
参考: 仕切りのない「オープンオフィス」がもたらす不快感を軽減するにはどうすればいいのか? - GIGAZINE
⚓遊星歯車
樹脂製の遊星歯車機構を高速で回してみました.速く回してもちゃんと動作してくれました.これから摩耗にも悩まされると思いますがまずは良かった.#Form2 #Fusion360 pic.twitter.com/WmdwtaAWGt
— Dr. Yasufumi Tanaka / ロボット系 博士・技術者・クリエイター (@tyx32) May 22, 2018
そういえば最近はplanetを遊星と訳すこともめったになくなりましたね。
つっつきボイス: 「こういうのね、ずうっと眺めても飽きない⚙️」
⚓鉄を作る
Primitive Technologyの新作きてた https://t.co/mYINrpgZV2
— Rui Ueyama (@rui314) May 19, 2018
つい見入っちゃいました。水たまり表面の鉄バクテリアを集めて製鉄するとか思いもよりませんでした。
つっつきボイス: 「このゆーちゅーばーさん有名で、相当お金持ちって聞いた気がする」「道理で身体のどこにも蚊に刺された痕がない😝」
今週は以上です。来週のRubyKaigi 2018でお会いしましょう!
おたより発見
https://twitter.com/shi_ma_da_ma/status/997866907372933121
週刊Railsウォッチ(20180518)Paperclip開発終了、RailsアプリをGDPR準拠に、optparseはやっぱりいい、Rubyの`super`ほか
- [rails]
もりだくさんでありがたし
バックナンバー(2018年度)
週刊Railsウォッチ(20180518)Paperclip開発終了、RailsアプリをGDPR準拠に、optparseはやっぱりいい、Rubyの`super`ほか
- 20180511 ArelがRailsにマージ、RailsのGDPRエンジン、RubyでWebAssembly、VS IntelliCodeのAIレビュー機能ほか
- 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など)です。