- Ruby / Rails関連
READ MORE
こんにちは、hachi8833です。昨日の大江戸Ruby会議をすっかり見落としてました😇。
大江戸Ruby会議で話すので東京にいたらそこで会いましょう! https://t.co/w1ADFEMhnx
— Aaron Patterson (@tenderlove) February 8, 2020
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
参考: Rubyの並列HttpリクエストGem Typhoeusを使ってみる - Qiita
つっつきボイス:「Typhoeusというnet/http的なgemがあるのを初めて知りました」「Typhoeusをさっきググったら病気の名前が出たような覚えが(typhus: チフスがサジェスチョンされてたのでした😅)」「ギリシャ神話由来っぽい↓」「こっちでしたか!」
参考: ギリシャ神話|怪物:テューポーン、ギリシャ神話最大最強の怪物!
#Orthus, 2 headed dog of #Geryon – littermate of #Cerberus, offspring of #Typhoeus & #Echidna
Killed by #Herakles during 10th Labour pic.twitter.com/5GBC0kdmLa— Sarah (@Sarah404BC) January 15, 2020
「typhoeusはたしか前からあって、コンカレントに動作するのでベンチマークとか作るときにいいらしい☺️: 記事にはGIL(Giant Interpreter Lock)の話とかもありますし、データベース接続プールもコンカレンシーで話題になりますね」
参考: RubyのGIL(Global Interpreter Lock)について | blog.kotamiyake.me
目次より:
そういえばHydra(ヒドラ、英語圏ではハイドラっぽい発音)もギリシャ神話ネタですね。Typhoeusのスペルを何度も間違えました😅。
# 同記事より
def get_all_conversations
endpoint = "https://api.slack.com/conversations.list?token=#{access_token}&exclude_archived=true"
hydra = Typhoeus::Hydra.hydra
groups_params = "type=public_channel"
groups_request = Typhoeus::Request.new("#{endpoint}&#{groups_params}")
channels_params = "type=private_channel"
channels_request = Typhoeus::Request.new("#{endpoint}&#{channels_params}")
hydra.queue groups_request
hydra.queue channels_request
hydra.run
groups_json = groups_request.response.body
channels_json = channels_request.response.body
# 以下パース用コード
...
end
つっつきボイス:「Rubyのgemをいっぱい作っているankaneさんの記事ですが、最近Rubyで機械学習周りをいろいろやっているみたいです」「Rubyで直接書くんじゃなくて外部のライブラリを呼ぶタイプのgemを紹介しつつ、パフォーマンス的にはPythonとそう遜色ないみたいな話なのかなと眺めながら想像してみました😆」「知らない名前のgemも半分ぐらいありますね😳」
目次より:
つっつきボイス:「主に歴史を通じて文字エンコーディングを学ぼうという記事のようです」「やはり最初はモールス信号から😆」
「モールス符号はほぼ思い出せないけど、一応アマチュア無線免許持ちなので超々なつかしい〜😂」「英語でよく使うeが一番短いとかありましたね」「符号化の歴史から始めるあたりがシブい😋」「SOSのエンコードとデコードもなつかしい↓」
# 同記事より
SOS -> Encode('SOS') -> ...---... -> Decode('...---...') -> SOS
----------------------- --------------------------
Sender Receiver
「記事は大学の授業レベルぐらいの感じかな: 小学生だと難しいだろうけど、中学生高校生ぐらいならこういう話を面白がる子いるかも」
目次より:
後で気づきましたが、英文字を入力するとモールス符号と音に変換してくれるサイト↓が同記事で紹介されていました。割と簡単に作れそう😋。
# 同issueより: 2.7と現在のmasterの挙動
% echo "class C" > c.rb
% ruby -e 'begin p require "./c" ; rescue SyntaxError; end; p require "./c"; C'
つっつきボイス:「ライブラリがSyntaxError吐いた後にもう一回require
してもライブラリが読み込まれないというRuby 2.7のバグだそうです」「このバグを踏んだのか自動化で見つけたのか、それにしてもよく見つけたな〜😳」
つっつきボイス:「Rubyの型チェッカーSorbetの中の人の記事です」「C++で書かれてるから速い、と☺️」「コンパイラ作る人たちが頑張ってる領域っぽい😆」「この辺のお好きな方はどうぞ😋」
sorbet.orgより
目次より:
GlobalState
と*Ref
つっつきボイス:「かなり長い記事ですが、まずモナドがわかってません😆」「見た感じスタックマシンを作ろうとしてるっぽい🤔」「おぉ?」「Rubyで処理系を書きながらリファクタリングを進めてモナドを作っていく感じですね☺️」「なるほどそういう趣旨でしたか😳」「and_then
使ってるあたりとかちょっとモナドっぽい↓」
# 同記事より
def words_in(blogs)
Many.new(blogs).and_then do |blog|
Many.new(blog.categories)
end.and_then do |category|
Many.new(category.posts)
end.and_then do |post|
Many.new(post.comments)
end.and_then do |comment|
Many.new(comment.split(/\s+/))
end.values
end
この記事、ちょっと地味だけど、よくありがちな「正規表現の乱用パターン」が載っているから好き。
マネーフォワード社内PRに見られるRubyの書き方について – (3) 文字列の生成や検証 | Money Forward Engineers' Blog https://t.co/cUZhQgJsqx
— Junichi Ito (伊藤淳一) (@jnchito) January 31, 2020
つっつきボイス:「正規表現じゃなくても書けるところを正規表現で書いちゃってるみたいなパターン集か」「この書き方↓とかたしかにちょっとぉという気持ちになりますし😆」
# 同記事より: 完全一致を調べる(悪例)
string =~ /^fixed pattern$/
「これ↓とかはコードレビューで見かけるといいなって思いますね👍: case
文の比較がトリプルイコール===
であることをうまく利用していて、何というかRubyらしい書き方という気がします」
# 同記事より: 修正例
case string
when "fixed pattern"
...
when /pattern/
...
when "another fixed pattern", /another pattern/
...
end
「空文字のsplit
(string.split(//).each{...}
)は何がしたいのかと聞きたくなるヤツ😆」「意外によく見かけるって書かれてますね😳」
「そうそう、Rubyにはeach_なんちゃら
的なメソッドがいろいろあって、each
より短く書けるし速度も速いものが多いので🚀、うまく使い分けたいところですね☺️」
# 同記事より(修正例)
string.each_char{...}
string.each_line{...}
reverse_each_*
とかも含めるといっぱいありますね。
「String#scan
はうまく使うときれいに書けることがよくありますね😋」
# 同記事より
strings.map{|s| s.scan(/\d+/)} # => [["2019", "2", "1"], ["2019", "2", "1"], ["2019", "2", "1"]]
「gsub
を重ねまくるパターンあるある↓😆」「最初にgsub
覚えちゃうとそれで全部やろうとしちゃったりしますね(しました😅)」「Rubyを書き慣れてないとやっちゃいそう」
# 同記事より(悪例)
string # => "foo\\bar\n¥baz'qux"
string.gsub("\\", "\").gsub("¥", "¥").gsub("'", "’").gsub("\n", " ") # => "foo\bar ¥baz’qux"
「式展開#{}
は内部で必ずto_s
されるのでやらなくていいヤツ↓」
# 同記事より(悪例)
"foo #{object.to_s} bar"
「Rubyがセカンドランゲージやサードランゲージだったりするとこういう書き方するかもしれませんね: 正規表現のコード例あたりはプログラミング自体に慣れてない人が書いちゃいそうな感じかな☺️」
つっつきボイス:「出たOracleからの移行😆」「コワイよ〜😆」「大変だよねという気持ちしかない…」
「OrafceってOracleの関数をPostgreSQLのに変換してくれるツールか😳」「やっぱり必要ですよね」「そもそもOracleがいろいろ特殊だし、あんなに使われてるのにSQL標準をぶっちぎってたりするし😇」「最初にOracle触ってたらオラクルマンになれたんだろうか😆」
目次より:
NOT NULL
制約を無効にするGRANT
コマンドの違いについてNOT NULL
のチェックつっつきボイス:「Recutilsって昔からありそうな雰囲気ですね」「GNUですし何となく見たことあるし、この書式↓はRed Hat系のインストールスクリプトを思わせますね(あれはBashスクリプトだから違ってそうですけど☺️)」
# 同記事より
%rec: Service
%key: Id
%auto: Id
%type: Provider rec Provider
%type: Mileage int
%sort: Mileage
%mandatory: Id Date Mileage Description Provider
%rec: Provider
%key: Id
%auto: Id
%mandatory: Id Name
つっつきボイス:「エスキューエルは素人ってそこまで言わなくても😆」「質問をよく見たら英語圏からでした😆」「😆英語圏ならシークゥエルって普通に言いそう」「カンファレンスの英語はだいたいシークォーとか発音してますね」
「関係ありませんけど、日本人が国際カンファレンスでIPv6をついアイピーブイろくって言っちゃうみたいな😆」「はてブでもWindows 10をウィンドウズじゅうって言っちゃうとかありましたね😆」「じゅうは言わなさそうだけどブイろくは言っちゃいそう😆」「なぜかv4はブイよんとは言わずにブイフォーですけど😆」「言語学的に言いやすい方に流れるとか😆」「日本だとV6は小室系を指してしまいがちですし😆」
ウィンドウズ充なんですよ
つっつきボイス:「サーバーレス監視ツールがずらっと並んでますね」「日本だと、はてなとかが使ってるアレが有名ですね」「えっとマカレルでしたっけ?」「そうそう、高いけど😆」
参考: Mackerel(マカレル): 新世代のサーバー管理・監視サービス
つっつきボイス:「BPS社内Slackに流したヤツです」「そうそう、WSL 2で試した方います?」「まだかな〜☺️」「自分は既存の資産がありすぎるのと、これを使うためにはWindowsをプレビュー版にアップグレードしないといけないというのがあって(でないとこのチェックボックス↓をオンにできない)、さすがにメインマシンにプレビュー版を入れたくはないし🤣」
つっつきボイス:「SQLite.orgのブログです」「たしかにSQLiteはサーバーレス😆」「ファイルベースだし、ノリ的にはBerkeley DBみたいなものだし😆」
つっつきボイス:「これの嬉しみってどの辺でしょう?」「まぁクエリを投げまくるようなシステムだとBigQuery破産するからRedShiftに移りたい気持ちはわからなくもないですけど、柔軟性という点ではBigQueryの方が断然上だと自分は思いますけどね☺️」「なるほど!」
「BigQueryはスキャンするデータ量に対して課金されるので、巨大データでユーザーリクエストのたびにクエリを1件投げるようなサービスを組んでしまうと、ユーザーにも課金するとかしないと速攻で破綻しますけど、AWS RedShiftはインスタンス課金なのでコストが見えやすい: なので移行したい気持ちはわかります☺️」「ふむふむ」「ただしRedShiftはデータが入り切るかという問題があります: 一方BigQueryは上限なんか考えないでデータ突っ込みまくるという超絶富豪的運用が可能ですし💰」「データは多いけどクエリ量は少ないみたいな用途がBigQueryに向いてる感じなんですね😋」
つっつきボイス:「BPS社内Slackに貼っていただいたヤツです」「公式がAWS芸人をフィーチャーするという広告戦略がいろいろ謎😆」(以下延々)
つっつきボイス:「お、決まりましたか🎉」「名前も年号でES2020になった」「こんなにアグレッシブに仕様を改定しているのに世の中で最も広く使われている言語のひとつというのがJavaScriptの稀有なところかも☺️」「しかも後方互換性を壊さないように」「ブラウザが自動更新されるのが当たり前の世の中になってきたというのが一番大きいかもですね☺️」
つっつきボイス:「そりゃみんなJSライブラリは更新したくないでしょう🤣」「壊れるから🤣」「Rubyは特にRailsが活発なおかげで関連gemにissueやプルリク投げたりというのが行われてますけど、JSは組み合わせが無限にありすぎて下手にいじると動かなくなりそうですし😆」「記事はCloudFlareのブログでした」「なるほど、彼らはCDNをホスティングしてるから、更新されてないJSライブラリがいっぱいあるぞみたいな情報が取れるでしょうね😋」
つっつきボイス:「そのn
というツールは名前短すぎなんですが、Nodeのバージョンアップがちょっとだけ楽だったのでメモりました」
つっつきボイス:「こちらもCSSの歴史を辿る長い記事でした」「若者におすすめ😆」
「かつてはXHTMLこそ正義とか言われてた時代ありましたし⚔️」「SGMLから始めて欲しい😆」「人間らしい温かみを感じるtableレイアウト久しぶりに見た😆」「XHTMLパーサーは当時速いとか言われてたけど、その後HTMLパーサーがどんどん強くなっちゃいましたし☺️」
参考: Extensible HyperText Markup Language - Wikipedia
参考: Standard Generalized Markup Language - Wikipedia
「↓こんなのもなつかしすぎる😆」「ありましたねこういうの😆」
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
目次より:
つっつきボイス:「Browsersync、どこで見かけたか思い出せませんが😅」「名前からして、違うブラウザでまったく同じ動きをさせられる感じですけど☺️」「そんな感じですね」「PCとモバイルでレスポンシブデザインを同時にチェックしたいときとかにいいかも😋」
「忍者やトランスジェンダー系絵文字が追加されてました」「disguised face(変装)って私の顔みたい…」「smiling face with tearって嬉し泣き?」「joy(😂)と違うんでしょうか😆」「心臓の絵がリアルすぎ😆」「バレンタインでハートマークの代わりに使ったりして😆」「昆虫系もリアル…」「bubble teaの絵ってタピオカでしょう😆」
リアル絵文字は自粛しました😆。
バブル・ティー◆大粒の黒いタピオカが入ったミルクティー。台湾発祥。
つっつきボイス:「言語別だとPHP系が突出して多かったのにビックリしました😳↓」「季節変動とかカテゴリ別とかいろいろありますね☺️」
「昔は言語とかミドルウェアとかパッケージソフトウェアの脆弱性がよくCERTに上がってましたけど、最近だとRailsもCERTにあがったりとフレームワークの脆弱性が増えてるので、インジェクションとかも多くはフレームワークあたりじゃないかな🤔」「WordPressのプラグインとかも多いですし😅」「こんな脆弱性踏む人がいるの?って思うようなのも出ますし😇」
目次より:
つっつきボイス:「mimallocはマイクロソフトが作ったmallocオルタナティブだそうです」「『excellent performance』ですって」「マイマロック?」「ミーマロックと読むみたい」「OS作っているところならこういうのはやってるでしょうね☺️」
ln -s a bでaとbのどっちがシンボリックリンクでどっちが参照先なんだっけみたいなことを毎回悩んで検索するはめになるのでlnのUIは設計が悪すぎる。
ln -s –src a –dest b
みたいなUIになっていたほうがよかったはずだ。— Ryou Ezoe(江添 亮) (@EzoeRyou) February 4, 2020
つっつきボイス:「↑これ超わかる〜😭」「ln
コマンドってたまにしか使わないからさらに間違えがち😢」「どこにもリンクしてないゴミシンボリックリンク作っちゃうとかあるある😆」「一応ソースとデスティネーションの順になってるんですけどね」
参考: 【 ln 】コマンド――ファイルのハードリンクとシンボリックリンクを作る:Linux基本コマンドTips(16) - @IT
開発言語が実際に普及するのに10年位は普通な気がします。時々javaみたいに急速に普及するものもありますけどC言語も広く使われてANSI-Cができるまで10年以上経っています。
— 大網 清和 (@kiyoami) February 2, 2020
つっつきボイス:「イケナイ使い方をつい想像しちゃって😆」「前からあるっぽいですけど、ポイントはリアルタイム変換できるようになるかどうかですね: そしたらVTuberとかが一斉に使い始める📺」
つっつきボイス:「冷凍することでRAMからデータを抜き取る?」「温度が低いほど電荷のリークが遅くなるって初めて知りました」「へぇ〜これは知らなかった😆」
参考: コールドブート攻撃とは | セキュリティ用語解説 | 日立ソリューションズの情報セキュリティブログ
後編は以上です。
週刊Railsウォッチ(20200210前編)Railsのベンチマークジェネレータ、長いバックグラウンドジョブと戦う、Timestamp切り詰めの謎、Open APIツールほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。