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

週刊Railsウォッチ(20210407後編)エイプリルフールのRuby構文プロポーザル、AWSのVPC Reachability Analyzerほか

こんにちは、hachi8833です。

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗Ruby

🔗 エイプリルフールのRuby構文2つ


つっつきボイス:「mameさんがエイプリルフールに提案したこのRuby文法は強烈」「issueのタグにjokeと書いてあるのを見るまですっかり本気にしちゃってました😅」「downward assignmentという名前まで付けるとは」「あまりのことについ笑っちゃいました😆」

# 17768より
puts("Hello" + "World")  #=> HelloWorld
     ^^^^^^^x  ^^^^^^^y

p x  #=> "Hello"
p y  #=> "World"

^^^^^^^xで『この上がxだよ』、^^^^^^^yで『この上がyだよ』という二次元的な表記」「すごい構文」「mameさんよく思いつくな〜」「下向きのvvvvまで作ってますね↓」「irbではつらいのでは?というレスも付いてる(#17768)」

# 17768より
      vvvv line
while gets

「本当にこんなふうに書けたら面白いかも」「行を超える解析になると大変そう」「パーサーの前で前処理すればやれるかも?」


その後mameさんが自らissueをrejectしていました。後で気づきましたがパッチまで作ってあったんですね。


ugs.ruby-lang.orgより

以下はつっつき後に見つけたツイートです。


同じ日にmrknさんもジョーク構文をアップしていたことに後から気づきました↓。Julia言語のように「係数を掛け算記号なしで書ける」構文だそうです。

# #17769より
irb(main):001:0> x = 3
=> 3
irb(main):002:0> 2x
=> 6
irb(main):003:0> def pi = Math::PI
=> :pi
irb(main):004:0> 2pi
=> 6.283185307179586

🔗 fast_statistics: Ruby向け高速な統計ライブラリ


つっつきボイス:「統計的な処理をC++で高速化したライブラリですね」「さすがに速い」

# 同リポジトリより
require "fast_statistics"

FastStatistics::Array2D.new(data).descriptive_statistics
# Result: 
#
# [{:min=>0.1477,
#   :max=>0.6269,
#   :mean=>0.347575,
#   :median=>0.30785,
#   :q1=>0.214975,
#   :q3=>0.44045,
#   :standard_deviation=>0.18100761551658537},
#  {:min=>0.1055,
#   :max=>0.8,
#   :mean=>0.38217500000000004,
#   :median=>0.3116,
#   :q1=>0.1781,
#   :q3=>0.515675,
#   :standard_deviation=>0.26691825878909076},
#  ...,
#  {:min=>0.3918,
#   :max=>0.8546,
#   :mean=>0.639025,
#   :median=>0.6548499999999999,
#   :q1=>0.536025,
#   :q3=>0.75785,
# 同リポジトリより
Comparing calculated statistics with 10 values for 8 variables...
Test passed, results are equal to 6 decimal places!

Benchmarking with 100,000 values for 12 variables...
Warming up --------------------------------------
descriptive_statistics   1.000  i/100ms
           Custom ruby   1.000  i/100ms
                narray   1.000  i/100ms
ruby_native_statistics   1.000  i/100ms
        FastStatistics   3.000  i/100ms
Calculating -------------------------------------
descriptive_statistics   0.473  (± 0.0%) i/s -      3.000  in   6.354555s
           Custom ruby   2.518  (± 0.0%) i/s -     13.000  in   5.169084s
                narray   4.231  (± 0.0%) i/s -     22.000  in   5.210299s
ruby_native_statistics   5.962  (± 0.0%) i/s -     30.000  in   5.041869s
        FastStatistics   28.417  (±10.6%) i/s -    141.000  in   5.012229s

Comparison:
        FastStatistics:   28.4 i/s
ruby_native_statistics:    6.0 i/s - 4.77x  (± 0.00) slower
                narray:    4.2 i/s - 6.72x  (± 0.00) slower
           Custom ruby:    2.5 i/s - 11.29x  (± 0.00) slower
descriptive_statistics:    0.5 i/s - 60.09x  (± 0.00) slower

🔗 geminabox(Ruby Weeklyより)

geminabox/geminabox - GitHub


つっつきボイス:「rubygems.orgでやっているようなgemのホスティングを簡単に行えるようですね」「★が1400超えてる」「プロキシも簡単に設定できるらしい↓」

RUBYGEMS_PROXY=true rackup

「そういえばRubyGemsのgemコマンドにも似たような機能がありませんでしたっけ?」「使ったことはありませんが、そういえばあったような」

以前gem serverコマンドについて記事を書いたのを後で思い出しました↓。

gem serverでローカルgemサーバーを立ててみよう

「もしかするとこの間のminimagicの件↓でこうしたgemのセルフホスティングのニーズがにわかに高まったりするかも」「それありそうですね」

週刊Railsウォッチ(20210329前編)特集: Rails更新版の臨時リリースとmimemagic gemのGPL問題

🔗 その他Ruby

こちらは日本時間今夜18:00の開催です。もう始まっている頃ですね。

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

🔗 AWSのVPC Reachability Analyzerは便利


つっつきボイス:「VPC Reachability Analyzerは昨年末にリリースされているみたいですね」

参考: 新機能 – VPC Reachability Analyzer | Amazon Web Services ブログ

「へ〜、このツールは到達グループやセキュリティグループも可視化してくれるのがなかなかいいですね」「おぉ」「この図↓の上の端と下の端はインスタンスのアイコンなので、インスタンスからインスタンスへの接続の可視化もできるらしい」


aws.amazon.comの同記事より

「VPC接続でどこまで到達できているのかを確認するのは地味に面倒なんですが、こういうツールの存在を知っていれば便利そうですね: 今度使ってみよう👍」「いいこと知りました!」

追記(morimorihoge)

VPC Reachability Analyzerその後実際に業務で使ってみた感想です。

設定できる到達パスのsource / destination設定がAWSリソース(ENIインターフェースやEC2インスタンス、各種Gateway)であり、IPアドレスなどでの指定ができないためtracerouteなどのIPネットワーク系ツールのつもりで使おうとすると最初ややとっつきにくいところがあります。

ただ、AWSリソースベースであるが故にセキュリティグループなども参照して見てくれること、一度作った設定を再テストさせることが容易なことから、ある程度複雑な構成(複数VPCだったり、外部のAWSアカウントとVPC Peering / Transit Gateway接続する)の場合には有用なトラブルシューティングツールとして利用できそうです。知っておいて損はないツールかなと思いました。

🔗言語/ツール/OS/CPU

🔗 MacBookの物理キーボードが廃止?


つっつきボイス:「まさかこの記事もエイプリルフールじゃないかと心配になってきました」「日付は3/31だから大丈夫でしょう😆」

「MacBookのタッチバーは触ったときの手応えがなくて使いにくかったけど、あれにフォースフィードバックがあれば随分違っていただろうと思うので、Appleの新しいキーボードがそこを解決したなら見込みがあるかもしれませんね」「それたしかに!」「一方トラックパッドの場合は、随分前に物理的な押し込みスイッチがなくなってハプティック(感圧タッチ)トラックパッドに変わったときは使いにくくなるのかなと思ったけど、実際はまったく問題なく使えましたね」「あれをハプティックって言うとは知りませんでした」

参考: 次期MacBook Pro、ついにTouch Bar廃止で物理ファンクションキー復活のうわさ - Engadget 日本版
参考: 感圧タッチトラックパッドの使い方 - Apple サポート

「記事にあるAppleの新しいタッチ式のキーボードも、実際に登場して触ってみたら案外印象が変わって流行ったりするかも」「早く触って確かめたいです」「物理キーボードがなくなれば故障の可能性も減りますよね」


そういえばiPhoneの「戻るボタン」も割と前から物理ボタンではなくなっていますね。たまたまiPhoneの電源を落としたときに戻るボタンの手応えが消滅していて、初めてそれに気づきました。

参考: ASCII.jp:iPhone 7のホームボタンは“ボタン”ではない

🔗 CPUの話題2つ


つっつきボイス:「新しいモバイル向けのRyzenは、アイドル時の消費電力がかなり抑えられていたりして徐々によくなってきてるみたいですね」「モバイルRyzenの今後に期待したくなってきました」「Intel CPUが今後大きく進化するのは難しそうかなと思っています」

「ARMも新しいアーキテクチャを発表」「今さらですけど、ARMが出しているのはアーキテクチャだけということでいいんでしょうか?」「現在のARMはアーキテクチャの仕様を設計してライセンス販売しているので、そうですね」「なるほど」「そのうちQEMUでArmv9が動くようになるかも」

参考: ARMアーキテクチャ - Wikipedia

🔗 その他

🔗 最近のセキュリティ関連

つっつきボイス:「kramdownというmarkdown用gemで見つかった脆弱性が2.3.1で修正されたそうです」「3日前(3/31)に出ているからかなり最近なのか」「markdownでリモートコード実行はなかなかヤバいですね」「kramdown自体はそこそこメジャーなGemなので、CMSなどを運用・開発しているプロジェクトでは念のため確認した方がよいと思います」

gettalong/kramdown - GitHub

追記(morimorihoge)

その後確認したところ、Redmineが採用しているMarkdown対応Gemはredcarpetだったので、別途プラグインとかを入れてなければ恐らく大丈夫かなと思います。

vmg/redcarpet - GitHub


「もうひとつはphp.netにバックドアが仕掛けられてgit.php.netが奪われた: これはキツい」「この件でPHPリポジトリがGitHubに引っ越したそうですね↓」「久しぶりに大きな事案かも」「今回の場合は早期に発見・対応されたのが幸いですね」「たしかに」「PHPのnightlyビルドを自動取得していたところは影響があったかもしれませんが、リリース版PHPに影響が出たという話は見かけていないので普通にPHPを使っているところは今のところ大丈夫そうかな」

php/php-src - GitHub

「開発者のアカウントがいったん乗っ取られたらどうしようもないので、2要素認証(2FA)や多要素認証(MFA)を義務付けたのはわかる」「正直とても面倒ですが、そうするよりしょうがないですよね」

参考: 多要素認証 - Wikipedia
参考: 二要素認証と二段階認証の違いを理解していますか? | サイバーセキュリティ情報局

🔗 パブリックIPアドレスをDNS経由で知る方法(StatusCode Weeklyより)


つっつきボイス:「この記事で紹介されている方法って珍しいんでしょうか?」「どれどれ👀」

「以下↓を実行すると自分がいるネットワークのパブリックIPアドレスがわかるとある、本当かな?」(しばしやってみる)「本当に取れた!」「こっちも取れました」

# 同記事より
dig @ns1.google.com TXT o-o.myaddr.l.google.com +short

参考: dig コマンド|Linuxコマンド

o-o.myaddr.l.google.comって公に公開されているのかな?」「ググってみるとAWSのドキュメントにもこの方法が載ってた↓」「ホントだ」「他にもいくつか方法が載ってますね」「知る人ぞ知る機能という感じ」「使っても大丈夫そう」

参考: Route 53 の DNS リゾルバーの IP アドレスが ECS 拡張機能をサポートしているかどうかを確認する


後で、Googleのドキュメントにもo-o.myaddr.l.google.comについて記載があったのをやっと見つけました↓。

参考: Google Maps Platform ルート認証局(CA)の移行に関するよくある質問  |  Google Developers

🔗 EDNS

「AWSのドキュメントに出てくる”EDNS”という言葉をググったらこれが出てきた↓」「RFC7871で仕様が定義されているんですね」

参考: インターネット用語1分解説~EDNS Client Subnetとは~ - JPNIC
参考: RFC 7871 - Client Subnet in DNS Queries

EDNS Client Subnetとは、 DNSの拡張プロトコルであるEDNS01を用いて、 問い合わせ先のDNSサーバに対して問い合わせ元の情報を伝達する技術であり、 RFC78712で標準化されています。
www.nic.ad.jpより

「以下の記事↓にはEDNSはGoogle public DNSやCloudFrontやAkamaiが対応していると書かれているということは、どうやらCDNに関連する技術らしい」「知らなかった」「推測ですが、CDN業者がクライアントのDNSリクエストを最寄りのエッジに振り向けるのにEDNSのような技術が必要なのかもしれませんね」

参考: JANOG38 :: EDNS-client-subnetってどうよ? 改めRFC7871ってどうよ

増加するコンテンツトラフィックに対応するため送信側は複数個所から送信を行っている。適切な送信箇所を選択するための技術としてEDNS-client-subnetが提案され、Google public DNS(8.8.8.8)やAmazon CloudFront, Akamaiが対応している。
www.janog.gr.jpより

参考: コンテンツデリバリネットワーク - Wikipedia


「ついでにcurlコマンドでIPを取る方法も見つけた↓」「こんなのまであるんですね」「ifconfig.ioやifconfig.me、myip.opendns.comとかいろんなのが使えるらしい」「lvh.meのような感じで誰かが考えそうなサービスかも」

参考: 【Linux】curlでグローバルIPを確認 (まとめ) | Startialab Dev Blog

# dev.startialab.blogより
curl ifconfig.io

lvh.me ドメインを使って、サブドメイン形式の WordPress マルチサイトの Docker 開発環境構築をしよう


後編は以上です。

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

週刊Railsウォッチ(20210406前編)GitHubが修正したRailsセッションハンドリングの競合、erb/haml/slimの速度比較ほか

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

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

Ruby Weekly

StatusCode Weekly

statuscode_weekly_banner


CONTACT

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