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

週刊Railsウォッチ(20191217後編)Ruby 2.7の変更点とパターンマッチング、依存性自動アップデートツール、Stack Overflowアンケート2019ほか

こんにちは、hachi8833です。平成Ruby会議01の余韻がまだ残っています🔔。

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

今回も前編に続き、TechRacho記事でもお馴染みのWingdoor様による福岡エンジニアカフェでのイベントに東京からリモート接続する形のつっつき会を元にお送りいたします。

お知らせ: 週刊Railsウォッチ「第18回公開つっつき会」(無料)

第18回目公開つっつき会は、来年1月09日(木)19:30〜にBPS会議スペースにて開催されます。今回から会場のPubスペースが隣の部屋に移ります。

訂正: 上の文の日付が誤って「1月12日」となっていました。「1月09日」が正しい日付です。🙇

週刊Railsウォッチの記事やここだけの話にいち早く触れられるチャンス!発言・質問も自由です。皆さまのお気軽なご参加をお待ちしております🙇。

Ruby

2.7の変更点たち、特にパターンマッチング

つっつきボイス:「jnchitoさんが前編後編に分けてRuby 2.7のパターンマッチング記事をすごくがっつり書いていました🎉」「🎉」「大急ぎで読んでみたんですが結構大がかりな印象でした😅」「パターンマッチングでうまくハマるとどやぁという気持ちになれそう😋」「2.7でもまだexperimentalですけど😆」「😆」「パターンマッチングのために新たにキーワードを足さないようすんごく頑張ったのがわかりました😋」

「パターンマッチングはそんなに突飛な機能ではないからキライではないですね〜☺️」「関数型言語だとたいていあるみたいですね」「あとは業務でどこまで使うかですけど😆」「今後細かく変わりそうですし😆」

参考: パターンマッチング - Wikipedia


その他のRuby 2.7関連の記事として、Ruby 2.7 Advent Calendar 2019 - Qiitaから気になったものをそこそこ拾ってみました。

sigcdump: RubyをCレベルでバックトレース


つっつきボイス:「sigcdump?」「k0kubunさんが最近作ったバックトレース用gemのようです」「シグナルを追うのかな?と思ったら、シグナルをぶちこむとその瞬間のバックトレースがtmpやstdoutにごぼっと出力されるのね↓」「瞬間瞬間の状態を追えると😳」「RubyのJITをやってるk0kubunさんらしいgemですね😋」

# 同リポジトリより
irb(main)[01:0]> require 'sigcdump'
=> true
irb(main)[02:0]> Sigcdump.dump('-')
Sigcdump at 2019-12-10 00:48:56 -0800 process 61249 (irb)
/Users/k0kubun/.rbenv/versions/ruby/lib/ruby/gems/2.7.0/gems/sigcdump-0.1.0/lib/sigcdump/sigcdump.bundle(rb_sigcdump_dump_internal+0xe7) [0x10b129aa7]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(vm_call_cfunc+0x182) [0x10768c3f2]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(vm_exec_core+0x3e2e) [0x10767287e]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(rb_vm_exec+0xa79) [0x107687819]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(rb_f_eval+0x304) [0x107681384]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(vm_call_cfunc+0x182) [0x10768c3f2]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(vm_exec_core+0x3e2e) [0x10767287e]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(rb_vm_exec+0xa79) [0x107687819]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(loop_i+0x29) [0x107697159]
/Users/k0kubun/.rbenv/versions/ruby/bin/ruby(rb_vrescue2+0x114) [0x1074d4f24]
...

SysRqキーとは

「こういうのはカーネル開発なんかでよくやるヤツ🧐: SysRqというキーがキーボードにあって、皆さんおそらく一度も使ったことがないと思うんですけど、実ははSysRqキーを使ってカーネルのメモリダンプを吐かせるみたいなキモいことができたりします」「へぇ〜!😳」「今のLinuxだとデフォルトでは無効になっているかもしれませんが、SysRqのコンフィグを有効にした状態でLinuxを起動すると、SysRqと何かのキーのコンビネーションでメモリダンプとかできたりします☺️」「ナマコを突っついてはらわたを吐き出すところをつい想像しちゃいました😆」

参考: マジックSysRqキー - Wikipedia
参考: 実は使いどころがわからないWindowsのキー、1位は「SysRq」 -INTERNET Watch Watch

「というわけでSysRqキーは一応意味のあるキーだったりします: 古式ゆかしいPC-98だともっとわけのわからないキーありますけど😆」「覚えてないキーだらけ😆」「HelpキーとかXFERとかNFERとか😆」「あったあった😆」「何に使うのかわからずじまい😆」

参考: PC-98 キーボード

Torch-rb: RubyでPyTorch


Wikimedia commonsより


つっつきボイス:「この間Chainerの後を継いだPyTorchを早速torch-rbでやってみた記事です☺️」

# 同記事より
class Net < Torch::NN::Module
  def initialize
    super
    @conv1 = Torch::NN::Conv2d.new(1, 32, 3, stride: 1)
    @conv2 = Torch::NN::Conv2d.new(32, 64, 3, stride: 1)
    @dropout1 = Torch::NN::Dropout2d.new(p: 0.25)
    @dropout2 = Torch::NN::Dropout2d.new(p: 0.5)
    @fc1 = Torch::NN::Linear.new(9216, 128)
    @fc2 = Torch::NN::Linear.new(128, 10)
  end

  def forward(x)
    x = @conv1.call(x)
    x = Torch::NN::F.relu(x)
    x = @conv2.call(x)
    x = Torch::NN::F.max_pool2d(x, 2)
    x = @dropout1.call(x)
    x = Torch.flatten(x, start_dim: 1)
    x = @fc1.call(x)
    x = Torch::NN::F.relu(x)
    x = @dropout2.call(x)
    x = @fc2.call(x)
    output = Torch::NN::F.log_softmax(x)
    output
  end
end

torch-rbは@ankaneさん作なんですね😳。最近は機械学習向けのRubyライブラリを怒涛のように作っているそうです。

その他Ruby


同サイトより

つっつきボイス:「planetrubyが公開した、来年開催されるRuby関連カンファレンスのカレンダーです📅」「そうそう皆さん、4月はRubyKaigiですよお忘れなく😋」「早めに押さえないと宿が取れないかもしれない説」「長野県松本市ですね😋」「松本市だから気合入れれば都内から日帰りできなくもないですけど😆」


rubykaigi.orgより


つっつきボイス:「おGitLab特集だ😋」「TechRachoをよくブクマしてくださっていたsue445さんがついに商業誌デビュー🎉」

DB

rqlite: 分散SQLite(DB Weeklyより)


同リポジトリより


つっつきボイス:「分散SQLiteという触れ込みですがもしかするとキワモノ?」「どの辺が分散なんだろ?😆」「デフォルトでSQLiteのインメモリデータベースを使うということらしいけど🤔」

「SQLite自体は特に書き込みの場合同時に1プロセスしかファイルを開けなかった覚えがありますね🧐」「distributed databaseでググると普通の分散データベースが出てきますけど↓」「ですよね: これはそういうのとは違うっぽい」「でもクラスタとか書いてあるし」「謎🙃」「誰か分かる人?」「わかりません😇」「😆」

参考: 分散データベース - Wikipedia

その他DB


つっつきボイス:「そういえばPostgreSQLも12が出てだいぶ経ちますね」「この記事では余分なログを減らせることをbenignログと呼んでますね」「benignは良性/悪性腫瘍の良性という意味みたいですけど見かけない単語😆」「大量のログでいつの間にかストレージがあふれるとかあるあるですね☺️」「割とマイクロコスメティックな変更っぽい😆」「よく見るとPerconaのブログだ😳」

2019-11-28 13:24:26.501 UTC [15168] LOG: incomplete startup packet
2019-11-28 13:24:26.517 UTC [15170] LOG: incomplete startup packet
2019-11-28 13:24:26.532 UTC [15172] LOG: incomplete startup packet
2019-11-28 13:24:26.548 UTC [15174] LOG: incomplete startup packet
2019-11-28 13:24:26.564 UTC [15176] LOG: incomplete startup packet
2019-11-28 13:24:26.580 UTC [15178] LOG: incomplete startup packet
2019-11-28 13:24:26.595 UTC [15180] LOG: incomplete startup packet
2019-11-28 13:24:26.611 UTC [15182] LOG: incomplete startup packet
2019-11-28 13:24:26.627 UTC [15184] LOG: incomplete startup packet
2019-11-28 13:24:26.645 UTC [15186] LOG: incomplete startup packet
2019-11-28 13:24:26.666 UTC [15188] LOG: incomplete startup packet
2019-11-28 13:24:26.687 UTC [15190] LOG: incomplete startup packet
2019-11-28 13:24:26.710 UTC [15192] LOG: incomplete startup packet
2019-11-28 13:24:26.729 UTC [15194] LOG: incomplete startup packet
2019-11-28 13:24:26.748 UTC [15196] LOG: incomplete startup packet

PostgreSQL 12ではパケットのサイズがゼロであることを検出すると無視するので、上はログファイルに出力されなくなる。
同記事より大意

クラウド/コンテナ/インフラ/Linux/Serverless

GitHub製GitHub Actionsがdeprecatedに


つっつきボイス:「AWSとGCPがそれぞれ公式のGitHub Actionsを出したので、今までGitHubが出してたActionsが用済みになったそうです」「今までのは公式ではなかった😆」「社内ではGitHub Actions使ってるプロジェクトあるけど自分がまだ触われてないな〜」


github.co.jpより

GitHubのアイコンデザインのセンスが個人的に好きです❤️。


「お集まりの中でGitHub Actions使ってる方はいます?」「はい、別のプロジェクトで使われていたのを他の人も使うようになる形で移行した感じです😋: ファイル移行はそれなりにコストかかりますが」「何から移行しました?」「TravisCIです」「なるほどTravisか〜、それなりにお金かかりますよね😆」「(GitHub Actionsに移行して)お金も助かるし実行時間も短くなった感じで💵」「マイクロソフトのありあまるコンピューティングリソースを有効活用している感ありますよね😆」「ですね😆」「無料でこれだけ使えるなら強いなって思いますし💪」

その他クラウド

つっつきボイス:「WAFって何だっけと思ったらWeb Application Firewallでした↓」「AWSにはありますね一応😆」「AWSのWAFの設定は割と大変😅」「WAFはどういうものでしょうか?」「HTTPリクエストをいい感じにチェックして、明らかにSQLインジェクションだったりしたら止めてくれたり🧐」「なるほど!」「WAFはCloudFrontの手前あたりに挟むことが多いですね」

参考: AWS WAF(ウェブアプリケーションファイアウォール)| AWS

「WAFはいろいろカスタマイズできるようなんですが、せいぜい例外を設定するぐらいで、頑張ってカスタマイズする系の記事があんまり見当たらないし、ぶっちゃけWAFはあんまり自力で設定したくない😆」「😆」

「WAFを後から入れたせいでハマるということもよくあるので、入れるなら最初から入れたい😤」「おぉ」「WordPressのサイトに後からWAFを入れると今まで動いてたのが動かなくなった、なんてことも起きますし😇: TechRachoに仮にWAF入れるとたぶん投稿できなくなる可能性あります」「ひぇっ😨」「しかもWAFが原因であることを突き止めるのが大変ですし😅: リクエストがサーバーまで届かなくなるのでサーバーのログではわからなくてWAFのログを見ないといけないとか」「うむむ😥」



つっつきボイス:「ワラタ😆」「まあ考えてみれば時間あたり何回できるかみたいな方がベンチマークらしいですよね☺️」「昔に比べてコンパイル時間が短くなったといえばX(X Window System)かな〜😆」「昔は平気で一晩かかってましたね」「コマンドもmake worldでしたし」「え、それ知らない😅」「X.Orgになる前だったかな😆」「XFree86とかありましたね」「ほとんど記憶にない...😅」(以下コンパイル話が続く)

参考: X Window System - Wikipedia


x.orgより

JavaScript

WebAssemblyがW3CのRECに(Publickeyより)


つっつきボイス:「WebAssembly(wasm)がついに」「でもW3Cがやってるの?😆」「それもそうですね😳」「なぜWHATWGではないのかと😆」「まだ仲直りしきってない?😆」

参考: HTML標準仕様の策定についてW3CとWHATWGが合意 今後はWHATWGのリビングスタンダードが唯一のHTML標準仕様に - ITmedia NEWS

mrubyをWebAssemblyで動かす(翻訳)

「まあWebAssemblyはだいぶ動くようになってきてますし」「WebAssemblyでmrubyを動かしたりは結構行われているみたいですね↑」「当初LinuxカーネルをWebAssemblyで動かす記事↓で有名になりましたね☺️」「ここまでやれればもう全部ブラウザでやればいいんじゃね?って思いますし😆」

参考: LKL.js: Linux kernelを直接JavaScript上で動かす - Blog posts by @retrage01

その他JS

つっつきボイス:「mizchiさんの教え」「ま普通は===使いますし😆」

2019年前半の「JavaScriptをちゃんとやるための地図」(追記あり)

CSS/HTML/フロントエンド/テスト

CSS Writing Mode Level 3がRECに


つっつきボイス:「これもW3C😆」「15年の歳月を経てとうとう縦書きが入ってくる🎉」「15年って😆」「BPSの超縦書↓も縦書きの仕様に絡んでたはず」「超縦書のチームでも話題になってたと思います」「村井純教授(慶応義塾大)もコメントを寄せてますね☺️」

参考: 村井純 - Wikipedia

弊社が参加しているWeb仕様に関する標準化団体 W3C にて、このような状況にどう対応するべきかの知見を標準仕様側にもフィードバックする活動を行っています。
特に、W3CにおいてCSS仕様を検討している CSS Working Group には積極的な参加を続けております。2017年4月には慶應義塾大学様のご協力もいただき、年3回程度開催される対面会議 CSS Working Group Face to Face Meeting (通称 F2F) の日本への招致も行いました。
bpsinc.jp/cho-tate-winより抜粋

「Writing Modeは横書きと縦書きがあるんですけど、使ったことある方います?」「趣味でやってみたことあるんですが、そのときはうまくいきませんでした😇」「おぉ、やってる人いる!」「lrとかrlとかlr-tbとかtb-rlとか、とにかくいろいろ指定がありますよね😆」

参考: CSS Writing Modes Level 3
参考: CSS Writing Modes Module Level 3 日本語翻訳

言語・ツール

Renovate: マルチ言語の依存性アップデートサービス


npmjs.comより

以下の翻訳記事でJS強者がこのRenovateをおすすめしていたので。

Rails 6+Webpacker開発環境をJS強者ががっつりセットアップしてみた(翻訳)


つっつきボイス:「Renovate?」「複数言語を対象に依存関係のアップデートの面倒をまとめて見てくれるようです😆」「サイトを見た感じでは、プロジェクトが依存しているライブラリをがんがん引っ張ってアップデートしてくれる感じ🤔」

「たしかPHPにも最近それ系の管理ツールってありますよね?」「Composerでしたっけ」「なるほど、依存関係をよしなにチェックして自動アップデートするようなのはPHPにもあります?」「Dependabotだったと思います」「おぉ、DependabotはRubyやJSなどにも対応してますね😋」


getcomposer.orgより


dependabot.comより

「ライブラリアップデートは自動的にやって欲しい、ホントに😭」「ホントに😭」「でも依存関係同士に含まれているFaraday(gem)が微妙にバージョン違ってコンフリクトしたことありますけどっ😆」「😆」

Stack Overflowのアンケート2019


insights.stackoverflow.comより


つっつきボイス:「今年も出た」「年末感ありますね」「かなり長いですが読んでて楽しいです😋」「言語の好き嫌いはどうやっても宗教戦争になりますし🤣」「シェアとか人気みたいな情報って相当多めに割り引いて読みたいですね☺️」

「キライな言語ランキングとかってだいたい悲しい結果にしかなりませんし😆」「憎まれっ子世にはばかるみたいな😆」(以下しばらくランキングチェックで盛り上がる)

「そういえばStack Overflowって昔ほど見かけなくなった気がする🤔」「そうかも😳」「以前は何を検索してもStack Overflowが検索結果の上位に出てきた気がするんですけど」「非英語圏からの初歩的な質問が山のように増えたからなのかなと思ったりしますけど、よくわからない😅」「日本語版Stack Overflowは結局定着したんだろうか?🤔」

その他

GopherプロトコルでSSRF攻撃

参考: Gopher - Wikipedia


つっつきボイス:「徳丸先生の記事です」「SSRFはねぇ〜、どこまで対策するかというのもあるし、知らないと踏みそうでコワいんですよ😅」「記事にも『完全な防御は無理』ってありますね🤔」「というより、SSRFはアプリケーションエンジニアが相当気をつけておかないと、ふとしたはずみで踏む可能性があるんですよ😇」「おぉ😳」


blog.tokumaru.orgより

「上なんかがまさにそうですけど、EC2リソースに対してURLアクセスでインスタンスメタデータを取ってこれてしまうので結構危ない🚫」「そういえば以前も話題に出ましたね(ウォッチ20190107)」「だからはてブみたいにユーザーが任意のURLを入力できるサービスを作るときは気をつけないと割と簡単に取られちゃったりしますね😇」

参考: SSRF(Server Side Request Forgery)徹底入門 | 徳丸浩の日記

「対策として"HttpEndpoint": "disabled"って指定できるのか😳」「でもAWSのインスタンスメタデータって欲しいときがあるのが悩ましい😅: capistranoでインスタンスメタデータから自分のEC2インスタンスIDを引っ張ってくるとかよく行われますし」「あぁ〜😳」


「そもそもGopherプロトコルが今どき使えるって知らなかったし😆」「ruby-jp Slackでもこれ知ってる人何人いるのかって話題になってました😆」「Gopherは知ってるけど使ったことないわ〜😆」

参考: Gopher - Wikipedia

昨今はGopherといえばこちらでしょうね↓。

番外

リモート飲み会出席用ロボ

参考: 分身ロボット「OriHime」


つっつきボイス:「いよいよオーラスです」「OriHimeというロボットは、もともと身体に障害のある方や、子育て/単身赴任/入院時なんかをサポートする目的で開発されたらしいんですが、その場にいなくても臨場感を体験できるものだそうです」「もう飲み会の出席これでいいや😆」「これこそ未来!🤣」「いっぺんVR飲み会ってやってみたい🍶」「OriHimeをずらり居酒屋に並べる感じで😆」「このOriHimeの姿、どこかで見たような気がする🤔」「ウルトラマンっぽいですけど😆」

「これ系で言うと、ビデオ会議で出席者をアニメキャラのアバターに差し替えてくれるヤツがいいなって思いますね😆」「😆」「声もアニキャラに差し替えて」「動きにも追従して」「そしたらそれだけでほっこりした気持ちになれる😆」

参考: テレビ会議にアバターを使うとコミュニケーションが活性化できる|いごはち@学びの実践家|note

「ご参加の皆さまお疲れさまでした」「Zoomでのリモートつっつき、思った以上にうまくいってよかった🎉」「お疲れさまでした〜


後半は以上です。

おたより発掘

バックナンバー(2019年度第4四半期)

週刊Railsウォッチ(20191216前編)Rails 6.0.2がリリース、平成Ruby会議01開催、古いRailsのfindメソッド置き換えほか

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

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

Ruby Weekly

Postgres Weekly

postgres_weekly_banner

DB Weekly

db_weekly_banner

Publickey

publickey_banner_captured


CONTACT

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