- Ruby / Rails関連
週刊Railsウォッチ(20200226後編)dry-rbを使うべき理由、最近のRubyオンライン教材、AWSから乗り換えた話ほか
こんにちは、hachi8833です。リモートワークの追い風が吹いているのかもしれません。自分は特にリモートワーク志向ありませんが。
乗るしか無い、このリモートワークビッグウェーブに。 / はてなブログに投稿しました
リモートワークで始めるランチ自炊生活 - masa寿司の日記 https://t.co/dR1bwoHdc8 #はてなブログ— masa寿司 (@masa_iwasaki) February 18, 2020
つっつきボイス:「ビッグウェーブ😆」「リモートワークは人によって向き不向きがどうしてもあるので、そこ次第でしょうね☺️」「ですね」「あとメンバー全員がリモートワークについて寛容でないと成り立ちませんし」「リモートワークの難しさってありますね」「自分はリモートで仕事し続けてますし、結果出してれば何も言うことはありませんし😆」「情報の共有が甘い人はたぶんリモートに向いてない🤔」
「がっつり自炊はしないけど、蓄えはいろいろあるので折に触れて作ったりしますね🥘」「パスタは超便利🍝: 20キロぐらいまとめて買ってるので余裕」「自分はレトルトのパスタソースと乾麺と調味料とかかな〜」「冷凍パスタも好きです😋」「冷凍はちょっと割高かも」「味のバリエーション的にはとても助かります」
「十割そばはいいですよ👍」「知らない世界😅」
「完全食も最近は割とおいしいのが出始めてるみたい」「昔の桂花ラーメンはキャベツ入れて完全食と言ってましたね😆」
久しぶりに桂花ラーメン行ったら完全食がなくなって代わりにキャベツ盛り桂花ラーメンってメニューが増えてた。と言っても二郎の野菜マシみたいなものではなく、常識的な量入ってるだけなので変な期待はしない方がよし。
— 竹林 (@takeb) March 27, 2011
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
⚓Ruby
⚓RubyGems.orgへの攻撃方法をひょんなことから発見した話
つっつきボイス:「gemを作っていた同僚がたまたまドメイン名をhttps://rubgems.org
とタイポしていたのを見かけて、もしかすると攻撃に使えるのではと思ってやってみたらできちゃった(ので関係者に知らせて塞いでもらった)んだそうです」「原文ではMITM(中間者攻撃)と書いてあるけど、これってそうかなぁ〜?😆」「私もそこがちょっと引っかかってました😆」「中間者攻撃は、文字通りクライアントからはわからないように通信の途中に割り込む手法なので、この記事にあるようなやり方を中間者攻撃って言うんだろうか?🤔」「もやもやする...😅」
「記事の後半によると、脆弱性を知らせようとしたメアドが無効だったりと多少じたばたしたようです」「以下はrubygemsとbundlerに立ったissueです」
- Domain Squatting rubgems.org to MITM gem downloads · Issue #2952 · rubygems/rubygems -- 対応済み
- Domain Squatting rubgems.org to MITM gem downloads · Issue #7387 · rubygems/bundler(参考)
「スクワッティングという言葉を今更知りました😅」「ほら、『ドメイン 女性 振り向き』あたりで検索すると出てきそうな、おそらく世界で一番人目に触れたに違いないあの画像と関連するヤツですよ🤣」「あ〜、ひと頃やんなるほど目にしたアレ🤣」
typo squatting = 1文字違いのドメイン名を押さえる行為
後でキーワードを日本語英語でいろいろ変えて検索してみましたが、あの振り向き画像を見つけられませんでした。別にいいんですが。
「rubygems.org本体が乗っ取られたならともかく、1文字違いのドメイン名とかまで無限に対処できませんし😆」「そうですね」「連絡された方も対応に困りそうなissue😆」「日本語ドメインみたいなUTF-8ドメイン名まで考えたらきりがない😆」「ドメインスクワッティングはわかるけど中間者攻撃と呼ぶのはやっぱり引っかかるなぁ😆」
記事概要:
- rubygems.orgを使った攻撃を試す
gem
コマンドでやった場合bundler
でやった場合- 結論
- ダミーを置いたら100 IPほど釣れた
- この問題を関係者に連絡するのに手間取った
⚓Rubyオンライン学習教材5つ(Hacklinesより)
つっつきボイス:「最近のRubyオンライン教材ってどうなってるかなと思って」「ほほぅ☺️」
記事の人が以下のサイトに5つの教材リストを置いてあります↓。
⚓dry-rbを使うべき理由(Hacklinesより)
つっつきボイス:「dry-rbはいいですね🥰: 半端なライブラリを再発明しないで済むためにも、dry-rbにどんなものがあるかぐらいは知っておきたい☺️」「ですね☺️」「こんなライブラリ欲しいな〜って思っているとdry-rbに既にあることが割とありますし😆」「とにかく存在を知っておくことが重要🧐」
記事ななめ読み:
- ビジネスロジックの置き場所にもいろいろあるが、短期プロジェクト(と一部の長期プロジェクト)に向いたやり方というものはある
- 問題
- MVCパターンではロジックをモデルに配置し、コントローラを薄くするのが常套手段
- モデルが育つと分割がつらくなり、SOLIDの原則(特に単一責任の原則)も破られがち
- dry-rbとは
- 一種のgemエコシステムであり、必要なものをRubyアプリに取り込んでプラットフォームにできる
- コントローラで使う例(dry-transactionやdry-container)
- Operationクラス(2つのクラスを飲み込んでいる)
- Containerクラス
- Transactionクラス
- 共通ロジックの再利用例
- dry-valiodationによるスキーマバリデーション
- 操作のステップ
- まとめ
- この方法が万能というわけではなくメンテ問題が魔法のように消えるわけでもない
- しかしロバストネス、テスタビリティ、スケーラビリティをビジネスロジックに提供してくれる
- ビジネストランザクションに責任を持つロジックが見つけやすくなる
- スコープや関連付けといったRailsモデルにありがちなものをスキップできる
3年前に以下の記事を書いたときのdry-rbは16個でしたが今見ると21個に増えてますね。
⚓Net::HTTP
をAPIクライアントにする必要はない(RubyFlowより)
つっつきボイス:「Ruby標準ライブラリのNet::HTTPはたしかにプリミティブすぎて使いづらい😆」「記事はFaradayとか他にもっといいものがあるんだからという感じ」「Faraday以外にもありますけど😆」
記事ななめ読み:
- 専用gemのない外部APIにアクセスしたいときがある
- Net::HTTPでやるとタイムアウトエラーまみれになりがち
- 本番でのいろんなコケ方を考えておく必要がある
- リクエストがリダイレクトされる
- ネットワークエラー
- リクエストが多すぎてサーバーがあふれる
- 結果が返るのが遅い
- 転送速度の上限
- Net::HTTPはベアメタルすぎ
- Faradayでやれること
- 認証
- リトライの頻度を指数関数的に下げる
- パラレルリクエスト
- サイト: Homepage | Faraday
- リポジトリ: lostisland/faraday: Simple, but flexible HTTP client library, with support for multiple backends.
⚓その他Ruby
- リポジトリ: Hackplayers/evil-winrm: The ultimate WinRM shell for hacking/pentesting -- Ruby製ハッキング/ペネトレーションテストツール(GitHub Trendingより)
つっつきボイス:「Ruby製のハッキング/ペネトレーションテストツールだそうです」「WinRMってどういう意味かしら?」「わがんね😆」
「それにしてもメタル風味溢れるジャケですね🎸」「この手のペネトレーションとかポートスキャナー的なツールはだいたい中二感がそこはかとなく漂います😆」「20年ぐらい前はこういう絵柄をよく見かけた気がするんですけど最近あまり見ないのは自分が知らないだけ?😆」「もしかすると流行が次に進んでたりして😆」「こういうのは万国共通なのかな?🤔」
参考: 「お前らは厨二病を患ったことがある?」海外アニメオタクの反応 | 翻訳だだだ! 【海外の反応】
参考: 中二病[zhōng èr bìng] | 中国語を学ぶ~ん
参考: 中二病を意味する英語スラング Edgelord とは|英語ネットスラング辞典
私の中二はこういうの↓でした😇。1969年にあったはずのないカオナシ巨大ロボが目印です🥫。
⚓DB
⚓データエンジニアの需要が倍増とのレポート(DB Weeklyより)
つっつきボイス:「データベースエンジニアじゃないという 🤣」「ETLとか言ってるからデータアナリストとかそっち系でしょうね☺️」
参考: Extract/Transform/Load - Wikipedia
「この手の話は微妙で、ニーズがあるということは需要に対して供給が足りないわけですけど、うんとたくさん欲しいかどうかは別😆」「たしかに😆」「仮に1000人欲しいところに200人しか市場にいなければ倍率500%になりますけど、そこに10000人参入してきたら速攻あぶれるでしょうし😆」「パイの大きさ注意😆」
「おそらくこの分野で本当に求められているのは、単にその辺に転がっている素材を集めて加工するだけの人よりも、ちゃんと実施計画まで立てて回せる人だと思いますし☺️」
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓AWSホスティングをやめて売り出し中のUpCloudに乗り換えた話
- 元記事: Why we left AWS - DEV Community 👩💻👨💻
-
サイト: UpCloud - High performance cloud hosting. World's fastest cloud servers.
記事より: EC2インスタンスのメール配信、ここがつらい
- AWSでPTR(またはrDNS)レコードを設定するにはリクエストチケットを送る以外に方法がない
- AWSのElastic IPアドレスはスパムで汚れがち
- オープンリレーの疑いで(実際は違ったのに)ポート25番を突然ブロックされることがある
つっつきボイス:「UpCloudってヨーロッパ系のクラウドホスティングサービスみたいですね」
「あ〜たしかにAWSはメール送信というかポート25番にとても厳しいんですよ: それはわかる😢」「ちょっと変な動きするとブロックされる感じですか」「当然なんですが、AWSはスパムメールの温床として使われることについてとてもセンシティブなので、何かあったらカジュアルに即塞ぎにかかる可能性はありますね🧐」「メール送信が中心のサービスだとAWSでは大変そう😅」
「記事ではElastic IPにも不満述べてますけど、引越し先のUpCloudがAWSと同じぐらい大きくなれば結局同じことになるのではという気がしますし😆: 記事にあるElastic IPの"bad reputation"というのがそれです」「おぉ?」
「Elastic IPはユーザーが取得して解放することができるので、悪い業者は取得したIPがスパムブラックリストに乗るまでスパムを送りつけて、IPがリストに乗ったら別のIPにさっさと乗り換えたりするんですよ」「あ〜なるほど」「なのでAWSでElastic IPを取得してみると既にブラックリストに乗ってるなんてことがあったりします😇」「取ったばかりでそれだったら悲しすぎ😭」「ユーザーが簡単にElastic IPを取れるようになってたら、そりゃそうやって使われるでしょうし😆」
「陳情書を提出しないとPTRレコードを設定できないのはそのとおりで、手続きが面倒😤」
⚓さくらのSSL証明書発行時間短縮
つっつきボイス:「社内Slackで喜びの声が上がってたので」「前は2時間だったのが10分に短縮されたと」「まあ2時間は最長の場合で、実際には30分ぐらいかかってましたけど😆」
「ちなみに他のホスティングサービスからさくらのレンタルサーバーに移行するときにLet's Encryptを使おうとすると厄介です: さくらのLet's Encryptの認証はDNSじゃなくてHTTPで行うので、先にAレコードをさくらに向けておかないと証明書が取れないという😢」「あ〜」「なので移行前から証明書で暗号化してたサイトをさくらに移すときに、暗号化が効かなくなる期間がどうしても発生してしまう😇」「そうでしたか😅」「今度から10分まで短縮はされましたけど、やはり10分間は暗号化が効かないので、夜のうちにさっと済ますとかになりますね😆」「うーむ」
⚓その他クラウド
↑つっつき時は英語でしたが今日見ると日本語になってました。
/dev/randomもはや(多くの場合)ブロッキングしなくなるよ。安心してねhttps://t.co/6pZNQ4368U
— btrfs ninja (@naota344) February 19, 2020
参考: Linux カーネル の /dev/random について - myokotaの日記
つっつきボイス:「お/dev/randomの話😋」「昨年の乱数記事↓でも/dev/randomが話題になってましたね☺️」「上の記事にもあるけどエントロピーが足りなくなるとブロックするとかあった🎲」
うぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ!
Ubuntu のオフィシャルリリースとして Raspberry Pi 3 向けのイメージが配布されてる!https://t.co/TTHhuiSb5H— mattn (@mattn_jp) February 19, 2020
「うちのラズパイまだ起動してなかった😆」「うちはまだ配線終わってません😆」「まあラズパイでも普通にLinux動きますし: ただし外部出力すると爆熱になる🔥」「どんな出力ですか?」「HDMI🔌: さすがにヒートシンク付けないと放熱がヤバい😇」
⚓JavaScript
⚓fishery: ThoughtbotのJavaScript/TypeScript向けファクトリーライブラリ
- リポジトリ: thoughtbot/fishery: A library for setting up JavaScript objects as test data
- 元記事: Announcing Fishery – a JavaScript and TypeScript Factory Library
// 同記事より
// factories/user.ts
import { Factory } from 'fishery';
import { User } from '../my-types';
export default Factory.define<User>(({ sequence, factories }) => ({
id: sequence,
name: 'Bob',
address: { city: 'Grand Rapids', state: 'MI', country: 'USA' },
posts: factories.post.buildList(2),
}));
つっつきボイス:「factory_botでお馴染みのThoughtbotがJavaScriptのファクトリーライブラリを出したそうです」
fishery: 漁業
「ははぁたしかにfactory_botライク」「この書き方が果たしてわかりやすいかどうかはともかく😆、factory_botを使い続けているRailsエンジニアには敷居が低いのかも?🤔」「JSだとまた違うんでしょうね」「JSのテスティングツールはいっぱいあってようわからん😆」「ファクトリーはデータ生成するんだから、どちらかというとフロントよりサーバーサイドで欲しいんじゃないかしら: クライアント側でビジネスオブジェクトを作るのはなくもないだろうけど、どのぐらい必要なんだろう?🤔」
⚓CSS/HTML/フロントエンド/テスト
⚓Chromeの動画広告をGoogle自ら減らす方向に
つっつきボイス:「Google自らが動き出しました」「や〜YouTube見てると煩わしい動画広告だらけ🤣」「だらけ😆」
「Firefoxとかが動画広告を締め出しにかかってきたからChromeも付いてこざるを得なくなったのかしら🤔」「おかげで今度は広告画像をJavaScriptでパラパラ漫画的に配信する輩が登場して、そっちの方が重いという、何だかなあという流れになってきてますし🤣」「🤣」
⚓その他フロントエンド
つっつきボイス:「おほ、SPDYからHTTP/2に移行したのか」「すげえ」「LINEはエンジニアどっさり集めてますし」「そういえばLINEは割とJava文化圏なんですよ☺️」「知らなかった〜」
「ほほぅ〜WebアプリでNFCタグとな」「NFCは前からありますけど、Webでやれるというのが新しい」
「NFCといえば、最近になってコンビニの端末がNFCクレジットカードにようやく対応し始めましたね😋」「おぉ」「なおNFCクレカは非接触なのでICクレカとは別物です」「このNFC Pay↓とかがそうなんですね」「NFCクレジットカードだとスキャナーとかを通さなくてよくなるので、SUICAの代わりにこれにすれば入退出も気にしなくていいし、こっちの方がいいんじゃね?って😋」
参考: NFCとは?スマホやカードをかざせば決済ができる便利な機能とサービス|Have a good Cashless.~ いいキャッシュレスが、いい毎日を作る。~
参考: 日本で「NFC Pay」はいつ普及するのか:モバイル決済最前線 - Engadget 日本版
⚓言語・ツール
⚓git rebase --onto
を思い出せ
つっつきボイス:「今回は割とThoughtbotのブログから拾ったんですが、ブランチを付け替えられるgit rebase --onto
をこれで知りました」「もうコマンドラインでrebaseしてないし😆」「😆」「CLIはコンフリクトの処理がめんどくさすぎて😇」
参考: git rebase --onto どこへ どこから どのブランチを - Qiita
⚓形式的な仕様記述
つっつきボイス:「はてブに上がっててみんな『なるほどわからん』という感じでした😆」「こうやって仕様を形式的に記述するのは、その中で全部完結できるといいんですよね😋」「😋」「こういう手法は昔からいろいろあるんですが、今ひとつ普及しませんね🤣」「🤣」「どちらかというとコンピュータサイエンス寄りの手法で、いわゆる『バグのないプログラムを作るには』みたいなヤツ」「宣言的に書く感じですね」
「そういえば自動車業界なんかでは、エンジン内部の制御に使うソフトウェアを書くときにそういう形式言語的なものを使ってるという話を小耳に挟んだことがあります👂」「バグがあると人が死ぬようなミッションクリティカルな方面では使っていることありますね: 宇宙関係やプラント、あと金融とか」「放射線医療機器とか」「そういう方面では形式仕様記述のニーズありますね☺️」
「まあWebではまずやらないと思いますが🤣」「と思います🤣」「基幹系でないWebでそこまで仕様ががっちり固まることはめったにないでしょうし」「まあ最近だと基幹系もビジネスロジックに合わせて変更を強いられたりしますけど😅」
⚓その他言語
つっつきボイス:「ブクマが凄いことになってますね」「しかもほとんど無言ブクマ😆」「大学の授業の教材なんですね」「しかもプログラミング演習と銘打たれているということは大学1年とか2年向けの授業🎓」
「本編も普通にいい感じですけど、特に2冊目のコラム編は楽しいトピックがいろいろ盛り込まれていて、世間話感サイコー❤️」「サイコー😍」「ちょうど教授が授業中に雑談で話すような感じなんですよね: 自分が勉強会で話すときのスライドも話すことの2割ぐらいしか書いてなくて、後はそのとき思いついたことを話してますし😆」「😆」「読み物として面白い😋」
「自分で作る教材だと、あんまり盛り込んだら読まれなくなるかなと思ったりすることもありますけど、こうやって広くパブリッシュされる本では面白さも重要な要素だと思います📖」「この間の文字コードの歴史みたいな話(ウォッチ20200212)は、今問題を解決したい人にとってはそんなに役に立たないけど😆、その分野に興味を持って勉強している人にとっては面白く読めたりしますし」「わかります🥰」「ターゲティングが肝心☺️」
⚓その他
⚓メモリダンプを模様で読む男
つっつきボイス:「これはありますね」「ありますね」「バイナリエディタのマッピングツールで色を眺めて『この辺からプログラムコードが始まる』『この辺からデータ』みたいに目ヂカラでわかる人、います」「私はできませんけど😆、そういう話はしょっちゅう見聞きしてました」「自分もできませんけど😆、壊れたデータをどうにかせざるを得なかったときにやりましたし」「この色とこの色とか、色の散らばり具合とか、バイナリも一応傾向がありますね」「ぐちゃらっとなってたら圧縮ファイルとか😆」
「こういうのはゲームのセーブデータの解析してる人たちが強い😆」「あ〜そうそう😆」「ゲームの認証解除したり😆」
私は復活の呪文の時代どまりなのでアウトオブスコープです😅。
以下はつっつき後のツイートです。
富士通のOSチームにいたけど、これ普通だったりする。先輩にメモリダンプ見せると、この辺怪しいんじゃ?ってずばり指摘されてビビる。。あと意図的にマークになるもの埋めて模様が見やすくするのとか色々ノウハウあったっけ。 https://t.co/Nzb73Fyxcv
— \助けよや/ (@yoya) February 20, 2020
⚓ここから始まった2題
なお、「MacintoshのGUIの父」という認識をされることについては「違います」と否定した上で、「でも、親子鑑定をしたら、祖父母の1人ではあるかも」とコメントしています。
同記事より
つっつきボイス:「かつてゼロックスでコピペを生み出した方でした」「当時そういうのをやってたのはゼロックスとかAT&Tぐらいだったのかも」「あとベル研とか」
「当時viのモード切替がめちゃめちゃ大変だったので、それが嫌でモードレスにやれるようにしたらしいと聞きました」「へぇ〜」「当時はviユーザーを仮想敵にしていたんじゃないかという噂もあるみたいです😆」「モード切り替えって人間に負担大きいですよね☺️」
「ここから始まったといえばこれも↓」「お〜村井先生の最終講義聞きに行きたかった😂」「書き起こしかなり長いです」「村井先生といえばワイルドで楽しい武勇伝が盛りだくさんな方ですけど、公開して大丈夫な話だったのかしら😆」「最終講義だし、さすがにオフレコ話はないか😆」(以下延々ここだけの楽しい話)
⚓番外
⚓吹く楽器は厳しそう
つっつきボイス:「楽器を演奏するための脳のエリアを損傷していないことを確認するために、手術中にバイオリン弾いてもらったんだそうです」「あ〜そういうこと😆」「意識があるまま脳を手術するのって昔の方がやってたかも😆」「脳そのものには痛覚がないって昔知ってびっくりした覚えあります🧠」
参考: 脳は痛みを感じない | メディカルクリニック柿の木坂 | 都立大学 内科 神経内科
後編は以上です。
バックナンバー(2020年度第1四半期)
週刊Railsウォッチ(20200218後編)rubyapi.orgで高速検索、RuboCopとJUnitFormatter、AWS Organizationsでの管理ほか
- 20200217前編 Railsのオプション引数退治、HSTSのデフォルトmax-ageが1年から2年に変更、semantic_logger gemほか
- 20200212後編 Rubyistが解説するUnicodeとUTF-8、Sorbetが速い理由、CSSの歴史、2019年の脆弱性まとめほか
- 20200210前編 Railsのベンチマークジェネレータ、長いバックグラウンドジョブと戦う、Timestamp切り詰めの謎、Open APIツールほか
- 20200204後編 Ruby3.0の他のbreaking change、Rubyのシリアライザ、GitHubのcode ownersほか
- 20200203前編 Railsの各種高速化コミット、OpenAPIの使い所、パンくずリストgem loaf、Railsビュー最適化ほか
- 20200128後編 もう一つのgemマネージャgel、”Did you mean”の仕組みを追う、DXOpalでブラウザゲームほか
- 20200127前編 Railsでキーワード引数warning退治始まる、ライブラリとフレームワークの違い、ShopifyのRails高速化記事ほか
- 20200121後編 RubyKaigi 2020受付開始、RubyGemsとBundlerの今後、ファイル同期ツールMutagenほか
- 20200120前編 福岡でも公開つっつき会、Railsのconnection_specification_nameでprimaryという名前が非推奨に、structure.sqlとschema.rbほか
- 20200115後編 Ruby 2.7関連情報、Bootstrap 5は今年前半リリースか、PostgreSQLでやってはいけないリストほか
- 20200114前編 config_forのbreaking change、Active Storage variantをDBでトラッキング、SprocketsとWebpackの違いほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。