Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20200226後編)dry-rbを使うべき理由、最近のRubyオンライン教材、AWSから乗り換えた話ほか

こんにちは、hachi8833です。リモートワークの追い風が吹いているのかもしれません。自分は特にリモートワーク志向ありませんが。


つっつきボイス:「ビッグウェーブ😆」「リモートワークは人によって向き不向きがどうしてもあるので、そこ次第でしょうね☺️」「ですね」「あとメンバー全員がリモートワークについて寛容でないと成り立ちませんし」「リモートワークの難しさってありますね」「自分はリモートで仕事し続けてますし、結果出してれば何も言うことはありませんし😆」「情報の共有が甘い人はたぶんリモートに向いてない🤔」

「がっつり自炊はしないけど、蓄えはいろいろあるので折に触れて作ったりしますね🥘」「パスタは超便利🍝: 20キロぐらいまとめて買ってるので余裕」「自分はレトルトのパスタソースと乾麺と調味料とかかな〜」「冷凍パスタも好きです😋」「冷凍はちょっと割高かも」「味のバリエーション的にはとても助かります」

「十割そばはいいですよ👍」「知らない世界😅」

「完全食も最近は割とおいしいのが出始めてるみたい」「昔の桂花ラーメンはキャベツ入れて完全食と言ってましたね😆」

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください

Ruby

RubyGems.orgへの攻撃方法をひょんなことから発見した話


つっつきボイス:「gemを作っていた同僚がたまたまドメイン名をhttps://rubgems.orgとタイポしていたのを見かけて、もしかすると攻撃に使えるのではと思ってやってみたらできちゃった(ので関係者に知らせて塞いでもらった)んだそうです」「原文ではMITM(中間者攻撃)と書いてあるけど、これってそうかなぁ〜?😆」「私もそこがちょっと引っかかってました😆」「中間者攻撃は、文字通りクライアントからはわからないように通信の途中に割り込む手法なので、この記事にあるようなやり方を中間者攻撃って言うんだろうか?🤔」「もやもやする…😅」

参考: 中間者攻撃 - Wikipedia

「記事の後半によると、脆弱性を知らせようとしたメアドが無効だったりと多少じたばたしたようです」「以下はrubygemsとbundlerに立ったissueです」

「スクワッティングという言葉を今更知りました😅」「ほら、『ドメイン 女性 振り向き』あたりで検索すると出てきそうな、おそらく世界で一番人目に触れたに違いないあの画像と関連するヤツですよ🤣」「あ〜、ひと頃やんなるほど目にしたアレ🤣」

参考: サイバースクワッティング - Wikipedia

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-transactiondry-container
    • Operationクラス(2つのクラスを飲み込んでいる)
      • Containerクラス
      • Transactionクラス
    • 共通ロジックの再利用例
    • dry-valiodationによるスキーマバリデーション
    • 操作のステップ
  • まとめ
    • この方法が万能というわけではなくメンテ問題が魔法のように消えるわけでもない
    • しかしロバストネス、テスタビリティ、スケーラビリティをビジネスロジックに提供してくれる
    • ビジネストランザクションに責任を持つロジックが見つけやすくなる
    • スコープや関連付けといったRailsモデルにありがちなものをスキップできる

3年前に以下の記事を書いたときのdry-rbは16個でしたが今見ると21個に増えてますね。

Ruby: Dry-rb gemシリーズのラインナップと概要

Net::HTTPをAPIクライアントにする必要はない(RubyFlowより)


つっつきボイス:「Ruby標準ライブラリのNet::HTTPはたしかにプリミティブすぎて使いづらい😆」「記事はFaradayとか他にもっといいものがあるんだからという感じ」「Faraday以外にもありますけど😆」


記事ななめ読み:

  • 専用gemのない外部APIにアクセスしたいときがある
  • Net::HTTPでやるとタイムアウトエラーまみれになりがち
  • 本番でのいろんなコケ方を考えておく必要がある
    • リクエストがリダイレクトされる
    • ネットワークエラー
    • リクエストが多すぎてサーバーがあふれる
    • 結果が返るのが遅い
    • 転送速度の上限
  • Net::HTTPはベアメタルすぎ
  • Faradayでやれること
    • 認証
    • リトライの頻度を指数関数的に下げる
    • パラレルリクエスト


lostisland.github.io/faradayより

その他Ruby


同リポジトリより


つっつきボイス:「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に乗り換えた話


upcloud.comより

記事より: 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分間は暗号化が効かないので、夜のうちにさっと済ますとかになりますね😆」「うーむ」

Let’s EncryptがVerisignと棲み分けできる理由: SSL証明書の「DV、OV、EV」とは何か

その他クラウド

↑つっつき時は英語でしたが今日見ると日本語になってました。


参考: Linux カーネル の /dev/random について - myokotaの日記

つっつきボイス:「お/dev/randomの話😋」「昨年の乱数記事↓でも/dev/randomが話題になってましたね☺️」「上の記事にもあるけどエントロピーが足りなくなるとブロックするとかあった🎲」

乱数について本気出して考えてみる


「うちのラズパイまだ起動してなかった😆」「うちはまだ配線終わってません😆」「まあラズパイでも普通にLinux動きますし: ただし外部出力すると爆熱になる🔥」「どんな出力ですか?」「HDMI🔌: さすがにヒートシンク付けないと放熱がヤバい😇」

JavaScript

fishery: ThoughtbotのJavaScript/TypeScript向けファクトリーライブラリ

// 同記事より
// 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

形式的な仕様記述

つっつきボイス:「はてブに上がっててみんな『なるほどわからん』という感じでした😆」「こうやって仕様を形式的に記述するのは、その中で全部完結できるといいんですよね😋」「😋」「こういう手法は昔からいろいろあるんですが、今ひとつ普及しませんね🤣」「🤣」「どちらかというとコンピュータサイエンス寄りの手法で、いわゆる『バグのないプログラムを作るには』みたいなヤツ」「宣言的に書く感じですね」

参考: 形式仕様記述 - Wikipedia

「そういえば自動車業界なんかでは、エンジン内部の制御に使うソフトウェアを書くときにそういう形式言語的なものを使ってるという話を小耳に挟んだことがあります👂」「バグがあると人が死ぬようなミッションクリティカルな方面では使っていることありますね: 宇宙関係やプラント、あと金融とか」「放射線医療機器とか」「そういう方面では形式仕様記述のニーズありますね☺️」

「まあWebではまずやらないと思いますが🤣」「と思います🤣」「基幹系でないWebでそこまで仕様ががっちり固まることはめったにないでしょうし」「まあ最近だと基幹系もビジネスロジックに合わせて変更を強いられたりしますけど😅」

その他言語


つっつきボイス:「ブクマが凄いことになってますね」「しかもほとんど無言ブクマ😆」「大学の授業の教材なんですね」「しかもプログラミング演習と銘打たれているということは大学1年とか2年向けの授業🎓」

「本編も普通にいい感じですけど、特に2冊目のコラム編は楽しいトピックがいろいろ盛り込まれていて、世間話感サイコー❤️」「サイコー😍」「ちょうど教授が授業中に雑談で話すような感じなんですよね: 自分が勉強会で話すときのスライドも話すことの2割ぐらいしか書いてなくて、後はそのとき思いついたことを話してますし😆」「😆」「読み物として面白い😋」

「自分で作る教材だと、あんまり盛り込んだら読まれなくなるかなと思ったりすることもありますけど、こうやって広くパブリッシュされる本では面白さも重要な要素だと思います📖」「この間の文字コードの歴史みたいな話(ウォッチ20200212)は、今問題を解決したい人にとってはそんなに役に立たないけど😆、その分野に興味を持って勉強している人にとっては面白く読めたりしますし」「わかります🥰」「ターゲティングが肝心☺️」

その他

メモリダンプを模様で読む男


つっつきボイス:「これはありますね」「ありますね」「バイナリエディタのマッピングツールで色を眺めて『この辺からプログラムコードが始まる』『この辺からデータ』みたいに目ヂカラでわかる人、います」「私はできませんけど😆、そういう話はしょっちゅう見聞きしてました」「自分もできませんけど😆、壊れたデータをどうにかせざるを得なかったときにやりましたし」「この色とこの色とか、色の散らばり具合とか、バイナリも一応傾向がありますね」「ぐちゃらっとなってたら圧縮ファイルとか😆」

「こういうのはゲームのセーブデータの解析してる人たちが強い😆」「あ〜そうそう😆」「ゲームの認証解除したり😆」

私は復活の呪文の時代どまりなのでアウトオブスコープです😅。

以下はつっつき後のツイートです。

ここから始まった2題

なお、「MacintoshのGUIの父」という認識をされることについては「違います」と否定した上で、「でも、親子鑑定をしたら、祖父母の1人ではあるかも」とコメントしています。
同記事より

参考: ラリー・テスラー - Wikipedia

つっつきボイス:「かつてゼロックスでコピペを生み出した方でした」「当時そういうのをやってたのはゼロックスとかAT&Tぐらいだったのかも」「あとベル研とか」

「当時viのモード切替がめちゃめちゃ大変だったので、それが嫌でモードレスにやれるようにしたらしいと聞きました」「へぇ〜」「当時はviユーザーを仮想敵にしていたんじゃないかという噂もあるみたいです😆」「モード切り替えって人間に負担大きいですよね☺️」

「ここから始まったといえばこれも↓」「お〜村井先生の最終講義聞きに行きたかった😂」「書き起こしかなり長いです」「村井先生といえばワイルドで楽しい武勇伝が盛りだくさんな方ですけど、公開して大丈夫な話だったのかしら😆」「最終講義だし、さすがにオフレコ話はないか😆」(以下延々ここだけの楽しい話)

番外

吹く楽器は厳しそう


つっつきボイス:「楽器を演奏するための脳のエリアを損傷していないことを確認するために、手術中にバイオリン弾いてもらったんだそうです」「あ〜そういうこと😆」「意識があるまま脳を手術するのって昔の方がやってたかも😆」「脳そのものには痛覚がないって昔知ってびっくりした覚えあります🧠」

参考: 脳は痛みを感じない | メディカルクリニック柿の木坂 | 都立大学 内科 神経内科


後編は以上です。

バックナンバー(2020年度第1四半期)

週刊Railsウォッチ(20200218後編)rubyapi.orgで高速検索、RuboCopとJUnitFormatter、AWS Organizationsでの管理ほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。

RubyFlow

160928_1638_XvIP4h

Hacklines

DB Weekly

db_weekly_banner

Publickey

publickey_banner_captured

GitHub Trending

160928_1701_Q9dJIU


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。