週刊Railsウォッチ(20190821-2/2後編)11のgemにバックドア、ruby-jp Slackがとてもアツい、Fullstaq Rubyでチューンアップ、HTTPサービス監視chaoほか

こんにちは、hachi8833です。Macbook Pro 2019のメモリ、やっぱり32GBにしとけばよかったと思い始めてます。

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

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

第14回目公開つっつき会は、9月5日(木)19:30〜にBPS会議スペースにて開催されます。皆さまのお気軽なご参加をお待ちしております🙇。

臨時ニュース: 11のgemでバックドアが見つかる⚠

最初にバックドアが見つかったのはrest-clientだったようです↓。

影響を受けた11のgemとバージョン、yankされたgemとロックされたRubyGems.orgアカウントは以下で確認できます。

RubyGems.orgにアカウントをお持ちで多要素認証を未設定の方は、以下を参考に設定してください。

【重要】RubyGems.orgに多要素認証(MFA)を設定してください(RubyKaigi 2019)

Ruby

ruby-jp Slackの賑わい

後追い感ありありですが、8月初旬あたりからruby-jpというSlackワークスペースが急速に盛り上がっています。最初に私が見かけた時点では400人超えでしたが、本記事執筆時点では1500人を超えています。Rubyのコミッターやベテラン勢、初心者中級者を問わない多様かつ巨大な世界が広がっています。


ruby-jp.github.ioより

ruby-jp Slackワークスペースへの参加リンクや行動規範などについてはすべて上のランディングページにまとまっています。


なお以下の記事↓によると、もともとrailsdm.slack.comがruby-jp.slack.comにリニューアルしたとのことです。今頃気づきました😅。vim-jpもとても盛り上がってるんですね。

参考: Ruby界隈の大統一Slackワークスペースがほしい - pockestrap

ひと頃よりは書き込み量も少し落ち着いたようですが、情報の濃厚さとあまりの面白さについつい見入ってしまう人が続出なようです。「週末しか見ない」みたいな強い意志が必要かもしれません。


つっつきボイス:「お、盛り上がり中のruby-jp」「あの人とかあの人とか、強い人いっぱい集まってそう💪」「情報量すごくて追い切れなくて😅」

Runbook: 対話的コマンドDSL(Hacklinesより)

# 同リポジトリより
Runbook.book "Restart Nginx" do
  description <<-DESC
This is a simple runbook to restart nginx and verify
it starts successfully
  DESC

  section "Restart Nginx" do
    server "app01.prod"
    user "root"

    step "Stop Nginx" do
      note "Stopping Nginx..."
      command "service nginx stop"
      assert %q{service nginx status | grep "not running"}
    end

    step { wait 5 }

    step "Start Nginx" do
      note "Starting Nginx..."
      command "service nginx start"
      assert %q{service nginx status | grep "is running"}
      confirm "Nginx is taking traffic"
      notice "Make sure to report why you restarted nginx"
    end
  end
end


同リポジトリより


つっつきボイス:「Runbookは対話型コマンドをDSLで記述して一連の操作を自動化したりできるそうですけど、これはあるとうれしいものでしょうか?」「この種のツールって、ツールを作った人にとっては書きやすいみたいなことになったりしますけど😆」

# 同記事より
# restart_nginx.rb

Runbook.book "Restart Nginx" do
  description <<-DESC
This is a simple runbook to restart nginx
  DESC

  section "Restart Nginx" do
    step "Stop Nginx"
    step "Wait for requests to drain"
    step "Start Nginx"
  end
end


同記事より

「へ〜、ちょっとcucumberっぽい雰囲気のコード」「面白い〜😆」「もしかしてTcl/Tkもこういう感じなのかな〜って」「懐かしい響き!😂」「Tcl/Tkを触ったのって学生時代にほんの一瞬だったんでほぼ何にも覚えてないけどっ😆」

参考: Tcl/Tk - Wikipedia

「とにかく上みたいなDSLを書くとCLI画面でメニューを選択したりできて、下に順次書き足していくみたいなことができると」「悪くなさそう😋」「ssh integration↓とかもあるみたいなのでデプロイツール作ったりもできそうだし」

# 同記事より
Runbook.book "Restart Nginx" do
  section "Restart Services" do
    servers (0..50).map { |n| "app#{n.to_s.rjust(2, "0")}.prod" }
    parallelization(strategy: :groups, limit: 5, wait: 2)

    step "Restart services" do
      command "service nginx restart" 
    end
  end
end

「まあこのツールに問題があるとすれば、動かすためにRubyが必要ってことかも😆」「😆」「Go言語とかで書かれてればバイナリ配布もラクラクですけど、Rubyで書かれてるからRubyをインストールするところから始めないと😆」「たしかに〜」「デプロイツールのコードをRubyで書くのはいいんだけど、動かす部分はシングルバイナリであって欲しい気持ち🥺」「capistranoなんかもそうですけど、capistranoを動かすための環境づくりが割としんどいんですよね😭」「だからCIにデプロイボタンを付けるのがやっぱりいいよねという話になりますし☺️」

ciao: Dockerで動かせるRuby製お手軽HTTPチェッカー(Ruby Weeklyより)


同サイトより


つっつきボイス:「シャオ?」「中国語っぽい響き🇨🇳」「イタリア語の「チャオ」でした↓🇮🇹」「どういうツールかな?」「見た感じではAPIヘルスチェッカー的な何かかな」

ciao (/tʃaʊ/) – check in and out – borrowed from Italian ciao for greeting someone.
同リポジトリより



同サイトより

「ローカルでもproductionでも使えるとありますね」「AWS Service Health Dashboard↓的なステータスダッシュボードをさっとやれるということか」「ciaoはRailsみたいだけど、こういう機能を提供するマウンタブルエンジンってあったような気がするな🤔」


status.aws.amazon.comより

docker run --name ciao -p 8090:3000 brotandgames/ciao

「お、docker runで一発で動くのか↑😳」「起動して監視したいサービスをポチポチ登録する感じ」「とりあえず監視を立ち上げるとかによさそうですね😋」「今BPS社内でnagiosでやっているような監視のうちHTTP/HTTPSチェックはこれでもやれる感👍」「メール送信機能とかもひととおりあるっぽい✉」

後でdocker runやったらスコッと動きました😋。

「今はnagiosで監視してますけど、考えてみれば今どきのWebサービスはHTTPとかHTTPSのチェックしかしませんし、ロードバランサーも立ててあったりするから、ものによっては各ホストの死活まで監視しなくても、このぐらいのサービスレベルのチェックでもよかったりするのかも、って今ちょっとだけ思いました☺️」「このciaoでやるかどうかはわかりませんけどっ😆」

Evil Martiansが見たFullstaq Rubyの第一印象(Ruby Weeklyより)


同サイトより


つっつきボイス:「Fullstaq Rubyは以前のウォッチで取り上げようと思ってそのときは結局載せなかったんですけど、production向けにチューンアップしたRubyという触れ込みで、乗っかるのにちょっと勇気がいるかなと思ってたらEvil MartiansがとりあえずFullstaq Rubyをproductionで使ってみたという記事です」「MRIのforkですか」

「More secureって言い切ってるけどマジで?😆」「機能を絞ってるとか?」「わぉなつかし〜!Ruby Enterprise Edition(REE)だって😂」「昔のRailsでよく使われてたヤツでしたっけ」「使ったことあります?」「自分はBPSに来るまでRuby使ってませんでしたけど😆」「じゃRuby 1.9より後?」「だと思います☺️」

参考: Ruby Enterpriseエディションが終わる。Phusionは、Passengerに注力。 — 2012年の記事です

「Evil MartiansはRuby 2.6.3をFullstaq Ruby + jemallocをやってみたそうです」「jemallocってあったな〜」「mallocより強力なアロケーターでしたっけ」「Noah Gibbsさんの翻訳記事でjemallocのこと書いてあったかな?…と思ったらNate Berkopecさんの記事でした↓」

Ruby: mallocでマルチスレッドプログラムのメモリが倍増する理由(翻訳)

「Fullstaq RubyがRuby本体にパッチを投げずにforkした理由って何だろう?🤔」「jemallocに副作用でもあるのかしら?」「高速化ならRuby 3×3プロジェクトがあるくらいだからマージされそうなものですけど」

参考: jemalloc.net
参考: jemalloc について調べたのでまとめた - zonomasaの日記


jemalloc.netより

「jemallocのサイト↑を見るともともとFreeBSDのアロケータだったらしい」「jemallocが新しすぎるとか?」「jemallocはglibcとは別みたい」「追加でjemallocをインストールすることはできるはずだけど」「mallocとの互換性が微妙に低いとか?」「上のNateさんの翻訳記事でもjemallocはJVMとjRubyとかでは問題起きるかもしれないってありますね」「たぶんそんな感じの理由で本家に取り入れられてないのかな?🤔」「詳しい人の情報求む🙏」



同記事より

「とりあえずFullstaq Rubyにしてみたらメモリが1/4、Sidekiqのジョブワーカーが2/3に減ったということみたいです↑」

「記事の結論は、Fullstaq Rubyへの移行は割とストンとできた、でも速くなるかどうかは状況次第」「そりゃそうだ😆」「メモリの使い方とかで変わってきますし😆」

追記(2019/08/21)

昨日のGinza.rb #74でもFullstaq Rubyが取り上げられていたことに今頃気づきました(Twitter: #ginzarb)。

その他Ruby

つっつきボイス:「この間BPSの社内Slackに貼っていただいたツイートです」「そうそう😆Rubyのコードをやばくしてみたという」「アツいツイート」「@1[@2]をツッコむあたりとか😆」「『インスタンス変数とまざるとファンシー』とか😆」「@blockarg = @1とかたしかにファンシー😆」「こういうのをさらっと思い付けるのがスゴい」

「numbered parameterを入れたいってどういう意図のプロポーザルなんだろ😆」「ワンライナーをとても短く書けるとかじゃないかな〜」「そうかも」「Rubyでワンライナーを書いていると、たまにちょっと冗長かなって思えるときがあるといえばあるんですよね: Rubyで便利なのはやっぱりブロックですけど、numbered parameterがあるとそういうのをコンパクトに書けたりするのかな?って」「こともある、みたいな😆」


「ずっと絶版の『リファクタリングRuby』の復刊リクエストに私も投票してみました」「だいぶ前の本だし、Rubyも以前と変わった部分もありますからね〜☺️」「なお英語版は健在です」


↓つっつき後に見つけたツイートです。

Ruby trunkより

提案: RUBY_ON_BUG環境変数の追加

RUBY_ON_BUG='gdb -p' ruby xxx.rb

つっつきボイス:「RUBY_ON_BUG環境変数でフックしてデバッグする機能か」「ko1さんのプルリクで、今見るともうマージされてますね」「rb_bug()って内部関数なのね」「むしろ今までなかったとは」

参考: CRubyコードリーディング(3) : rb_bugの実行行出力 - Qiita

DB

PostgreSQLの日本人コミッターが語る歴史


つっつきボイス:「これスゴい記事でしたね」「これまでも何度か話したことあったと思いますけど、PostgreSQLは元々研究者たちがデータベースの研究のために使ってたんですよ☺️」「初期はユーザーが数十人になっただけで落ちたりしてたとは」「当時はプロダクションでの利用とかまったく想定にありませんから無理もない😆」

「昔過ぎて知らないけど😆、オープンソースやフリーソフトウェアでフル機能を装備したRDBMSというとPostgreSQLしかなかった時代ってあったんじゃないかな〜」「それありそう😳」「下手するとオープンソースという概念も生まれてたかどうか」「1986年に始まったらしいし」「めちゃ昔!」

「そんな頃だとネットもろくになさそうですし、それこそソースコードをDATで物理回覧したりしてたんでしょうね」「当時ならソースコードのサイズも今よりずっと小さそうですけど、DATで回覧する方が安くて早かったかも😆」

参考: DAT - Wikipedia

その他DB


つっつきボイス:「Life after Hadoop?」「Hadoopが登場して人生が変わったみたいな感じかも」「とにかくGoogleのMapReduceがあまりにも偉大だったなと」「そのオープン版がHadoopでしたっけ」「MapReduceのアーキテクチャクローンがHadoopですね: 大量のデータをストリームで処理したい、しかもロジカルなコードで処理を書きたいとなるとMapReduceあたりを使わないと相当しんどいでしょうね」「なるほど!」「SQLでは書けない処理って結構ありますし☺️」

参考: MapReduce - Wikipedia


hadoop.apache.orgより

「そういえばデータサイエンスの教科書にもMapReduceとHadoopの記載がありました」「データサイエンスもそうでしょうけど、どちらかというとビッグデータ系に多い印象かな〜: 自分はHDFSをちょっと使ったことがあるぐらいですけど」「HDFS?」「Hadoop用の分散ファイルシステム」

参考: HDFS(Hadoop Distributed File System)とは - IT用語辞典 e-Words

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

JetsでサーバーレスRubyアプリを2分で作る(Hacklinesより)


rubyonjets.comより


つっつきボイス:「例のRuby on Jetsの記事です」「最近Jetsをぼちぼち使ってますけど、本当にさらっと作れますね😋」「お〜😳」「まあJetsはごりごりアップグレードされてるのでbreaking changesあったりしますけど😆: この間もverify authenticated tokenみたいなのが突然追加されて動かなくなったり😇」「そんな感じですか」「つかRailsと比べれば機能はまだ全然足りないですし、Jetsをデバッグしながら作らないとうまく動かなかったりしますし😆」「なるほど発展途上」「ごくちょろいものを作るには十分ですけど、本格的に使おうとするとRailsに比べて完成度はまだまだなので、Jetsがバグってる可能性を常に意識するぐらいのつもりでやらないとですね☺️」

「とはいえjets deploy一発でデプロイできるだけでも、やっぱりものすごく便利👍」「お〜!」


「そういえばちょうど以下のstitchというのもRuby Weeklyでも見かけたんですけど、こちらはJetsとはちょっと違うかな?」「こっちは見た感じLambdaとかは関係なさそう」「あやっぱり😅」「Railsでマイクロサービスとかを作るときのAPI key authenticationとかAPIのバージョン付きリクエストとかを面倒見てくれるっぽいですね: マイクロサービスでなくてもWeb APIとしてRailsを使う場合にこういうのがあると便利なのかも?」

class Api::V1::WidgetsController < ApiController
  def create
    widget = Widget.create(widget_params)
    if widget.valid?
      head 201
    else
      render json: { 
        errors: Stitches::Errors.from_active_record_object(widget) 
      }, status: 422
    end
  end

private

  def widget_params
    params.require(:widget).permit(:name, :type, :sub_type)
  end
end

その他クラウド


つっつきボイス:「Lambda Functionのコストを下げる記事だそうです」「お、ピタゴラスイッチきたゾ↓😆」「サーバーレスもこんなんなっちゃうんですね」「さっきのJetsでも、アクションの数だけLambda Functionできるからすぐこのぐらいになりますよ😆」「やっぱし〜😆」


同記事より

「記事はというと、実行数にduration、メモリアロケーションにデータ転送とかをCloudWatch Logsで測定してレポートして、Grafanaでビジュアライズして、CloudWatch Logs Insightsでメトリックス監視して、Slackにも通知して…というあたりまではやってる感」


同記事より

「これはたぶんAWS Cost Explorerの画面っぽい↓」

参考: AWS Cost Explorer(コストと使用状況の経時的変化を可視化)| AWS

「とまあこんな感じでコストを可視化しましょうということで😆」「定番というか王道というか、やれることを普通にやってる記事でしょうか」「コスト削減の前に計測しましょうと😆」

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

Blenderとは


blender.jpより


つっつきボイス:「業務開発とは関連ないんですけど、オープンソースの3Dツールってどんなのだろうと思って」「Blender使ってるところはめちゃ多いですね、Mayaとかが高すぎるというのもあるでしょうし💵」

参考: Maya - Wikipedia

言語・ツール

Paperpile: Googleドライブベースの文献管理ソフト


paperpile.com/welcomeより


つっつきボイス:「論文執筆関連ツールも知らない世界ですけど一応」「論文管理って結局必要なんですよね: 読んだはずの論文がどこ行ったかわからなくなっちゃうことはとてもよくあるので😆」「やはり〜」「ダウンロードしたPDFが見つからないとか、どこから取ってきたかわからなくなるなんてのもざらですし」「macOSのSpotlightでも手に負えなくなったりしそうですね😅」「自分で論文を書くときに参考文献集を作ろうとすると、紙ならラベル貼ったり物理的な位置を覚えやすいという側面もあるといえばありますね」「なるほど!」「何にしろ、こういうツールで管理しないとホントつらい😭」

その他

つっつきボイス:「この人なかなか頑張るな〜」「『この土日で完成させたい』ってなんかスゴい😳」「ツイートの続きで『x86のパイプラインのしくみがマジ頭おかしい』とかありました😆」「可変長命令だからハードウェアでパイプラインはどうしても難しくなっちゃいますけどね〜」

参考: パイプライン処理 - Wikipedia

「まあCISC CPUはだいたいそのあたり謎いですけど🤣」「自作に向いたCPUってどういうのがいいんでしょう?」「MIPS」「やっぱし🤣」「CPUのお勉強といえばだいたいMIPSですし☺️、コンピュータアーキテクチャの授業でもMIPSやってたな〜」「MIPSってRISCなんでしょうか?」「はい: とても小さくて命令少ないし、当然固定長ですし、なおMIPSといってもいろいろ種類あります😎」

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


つっつきボイス:「TOEICのスコアを要求される時代😇」「それ相当の英語力が必要ってことかなと」「ちなみにいつだったかSFCは修士課程と博士課程の卒業要件にそれぞれTOEICの点数が設定されてたのを覚えてます」「マジで🤣」「きびし〜😭」「翻訳やってるなら英語は専門なんじゃなくて?」「それがそうでもなくて、英語力はとっても尻上がりです😇」

「TOEICのリスニングの英語ってめちゃめちゃなまってたりするのがつらいっすよね😆」「その分割と現実的なお題が多かったりしますね: サポート電話で方言英語丸出しの質問に答えるシチュエーションとか」「会話が微妙に噛み合ってなかったりとか現実っぽい😆」

参考: 院試のTOEIC目安点数と有効期限:大学院入試に間に合わない? | 理系days

番外

銀河中心の超巨大ブラックホール

↓この本によると、ブラックホールがほぼ確実に存在するとわかったのはかなり最近のことらしいです。

参考: ブラックホールがわずか2時間で75倍も明るく輝き天文学者も「前代未聞」と驚嘆 - GIGAZINE


後半は以上です。

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

週刊Railsウォッチ(20190819-1/2前編)祝: Rails 6がついにリリース、RailsガイドもRails 6に対応、Arelはpublicだったかほか

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

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

Ruby Weekly

RubyFlow

160928_1638_XvIP4h

Hacklines

Hacklines

Postgres Weekly

postgres_weekly_banner

DB Weekly

db_weekly_banner

JavaScript Weekly

javascriptweekly_logo_captured

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ