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

週刊Railsウォッチ: Rubyを使っている企業の時価総額リスト、irbのshow_source、GitHub Codespacesほか(20221116後編)

こんにちは、hachi8833です。アメリカ国家安全保障局(NSA)のおすすめ言語にRubyも含まれているそうです 🎉

参考: アメリカ国家安全保障局 - Wikipedia

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 Rubyを使っている企業の時価総額リスト

つっつきボイス:「RubyWorld Conference 2022でMatzのキーノートスピーチで言及されていたサイトですね」「以前扱った気もしたんですが過去記事で見つからなかったので取り上げました」「リストにある企業がどの程度Rubyを使っているかはさまざまだと思いますが、こうやってビジネス系の人々にアピールできる情報があるのは若手エンジニア志望者を集めるためにも大事だと思います👍」

以下はRubyWorld Conference 2022 Day1の当該動画です(35:15)。

🔗 ruby_memprofiler_pprofとbacktracie

zendesk/ruby_memprofiler_pprof - GitHub

ivoanjo/backtracie - GitHub


つっつきボイス:「上の記事はRubyKaigi 2022の発表動画とスライドで、発表者のivoさんは以前翻訳したRuby GVM記事を書いた方でもあります↓」「メモリリーク退治はほんと地道な作業の繰り返しですよね」「忘れた頃にメモリリークがやってくるとつらい」

Rubyの(グローバル)VMロックをトレースする(翻訳)

「その中でruby_memprofiler_pprofとbacktracieというgemに言及していました」

「ruby_memprofiler_pprofは文字通りヒープのプロファイラか」「Zendeskのリポジトリだ」「pre-alpha状態ですという警告表示が目立ちますね」

参考: Zendesk | カスタマーサービスソフトウェア&サポートチケット管理システム

「こういうフレームグラフを表示できるのね↓」「フレームグラフという呼び名をつい忘れてしまいます😅」「炎のflameの方ですね」


同リポジトリより

「backtracieはバックトレースを見やすく整形してくれるgemですって↓」「iseqcallable_method_entryなどがこんなふうに表示されるとバックトレースを多少追いやすくなりそう👍」

# ivoanjo/backtracieより
$ bundle exec pry
[1] pry(main)> require 'backtracie'

[2] pry(main)> class Example
[2] pry(main)*   def foo
[2] pry(main)*     bar
[2] pry(main)*   end
[2] pry(main)*   def bar
[2] pry(main)*     Backtracie.caller_locations.first
[2] pry(main)*   end
[2] pry(main)* end

[3] pry(main)> Example.new.foo
=> #<Backtracie::Location:0x0000561b236c9208
 @absolute_path="(pry)",
 @base_label="foo",
 @debug=
  {:ruby_frame?=>true,
   :should_use_iseq=>false,
   :should_use_cfunc_name=>false,
   :vm_method_type=>0,
   :line_number=>3,
   :called_id=>:foo,
   :defined_class_refinement?=>false,
   :self_class=>Example,
   :real_class=>Example,
   :self=>#<Example:0x0000561b236f3a08>,
   :self_class_singleton?=>false,
   :iseq_is_block?=>false,
   :iseq_is_eval?=>false,
   :cfunc_name=>nil,
   :iseq=>
    {:path=>"(pry)",
     :absolute_path=>"(pry)",
     :label=>"foo",
     :base_label=>"foo",
     :full_label=>"foo",
     :first_lineno=>2,
     :classpath=>nil,
     :singleton_method_p=>false,
     :method_name=>"foo",
     :qualified_method_name=>"foo"},
   :callable_method_entry=>
    {:path=>"(pry)",
     :absolute_path=>"(pry)",
     :label=>"foo",
     :base_label=>"foo",
     :full_label=>"Example#foo",
     :first_lineno=>2,
     :classpath=>"Example",
     :singleton_method_p=>false,
     :method_name=>"foo",
     :qualified_method_name=>"Example#foo"}},
 @label="foo",
 @lineno=3,
 @path="(pry)",
 @qualified_method_name="Example#foo">

🔗 irbで使えるshow_source

つっつきボイス:「show_sourceでソースコードを表示できるのか〜」「pryにもこの機能があったなと思ったらonkさんの記事にも書かれていました」「pryの機能をk0kubunさんがirbに移植したんですね」

pry/pry - GitHub

「pryだとこんな機能があるんですって↓」「--superを複数回付けられるのって面白い」

pry の show-source--super がメチャクチャ便利なので、欲しい。
どんな機能かというと、show-source でメソッドを読んでいるときに super が出てきたら --super を付けると親クラスのメソッドを表示できるヤツです。
同記事より

🔗 Lint Night #1


つっつきボイス:「Lint Nightというイベント面白そう」「RubyでLintといえばRuboCopですね」

参考: Lint Night #1 - connpass

rubocop/rubocop - GitHub

🔗 その他Ruby

「RailsのテストはFactoryというかデータ生成部分で遅くなりますよね」「そうそう」「テストが単純なうちはcreateじゃなくてbuildすればいいんですけどね」「そしてFactoryが遅くなるとFixtureが速いことに気づいて、すると今度はFixtureで外部キーを維持するのがつらくなってきたりする」「まったくそれ😆」

Rails 7 API: ActiveRecord::FixtureSet(翻訳)

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

🔗 GitHub Codespacesが月60時間まで無料に(Publickeyより)


つっつきボイス:「すべてのユーザーがGitHub Codespacesを使えるようになったということは今までは違ったんですね」「今までは有料のGitHub TeamとGitHub Enterpriseのみでしたね」

参考: Codespaces | GitHub

「自分はメインの開発で使うつもりはないけど、運用が安定して普段触らなくなったようなシステムをたまにメンテするときには、こういうのがあると開発環境構築の手間が省けるのはよさそう👍」

「ところで今だとVSCode devcontainerが先行していますよね↓: GitHub CodespacesとdevcontainerはどちらもMicrosoftなので若干かぶっている感はありますが」「たしかに」「VSCode devcontainerが先に普及したこともあってGitHub Codespacesも一般に使えるようにしたのかもしれないと想像してみました」

参考: Developing inside a Container using Visual Studio Code Remote Development
参考: Visual Studio Codeで使えるリモート環境のdevcontainerが意外と便利そうだったのでまとめ

「GitHub CodespacesではJetBrainsやJupyterLabのIDEが使えるのが地味に嬉しいポイント」「ブラウザ内でIDEが動くんでしょうか?」「JetBrains IDE自体は今でも可能ですが、GitHub CodespacesがブラウザIDEも提供するかどうかはこの記事だけだとわからないですね」「なるほど」「ただJetBrains IDEはCPUとメモリをめちゃくちゃ食うので、果たしてミニマムなインスタンスでまともに動くかどうか」「う〜む」


「あとGitHubからこんなのも出ていました↓」「アレクサみたいに"Hey GitHub、リポジトリ消して"とかできたりして」「英語っぽくギッハブとか言わないとわかってくれなかったりして」

「見た感じではAI支援も含めて音声でコードを生成するようですね: PCで使おうとは思わないけど案外スマホでコードを書くには便利かも」「外でやるのはちと人目をはばかりそうな気が😆」「ユースケースはすぐには思いつかないかな」「とりあえず作ってみたのかも」「どんなきっかけでブレイクするかわからないですしね」

🔗 Tailscale


つっつきボイス:「BPS社内Slackに以下の記事↓が貼られたことでTailscaleを初めて知りました」「Tailscaleは昔からあって自分もよく使うんですが、個人または小規模開発で使う印象の強いTailscaleをメルカリのような大きな企業が導入するというのが個人的にちょっと珍しいと思いました」「そういうことなんですね」

参考: メルカリが Tailscale を使用してリソースアクセスとセキュリティを改善し、VPN をシンプルにした方法 · Tailscale

「TailscaleはVPNサービスと理解していいんでしょうか?」「言葉だけで言えばたしかにVPNサービスなんですが、主にゲーム業界で思い込まれているような"日本にいながらにして米国のIPでアクセスする"的なVPNサービスとは違って、Tailscaleは"真の意味でのVPNサービス"と言えるでしょうね」「というと?」「つまり双方のノードがTailwindアプリをインストールすると双方のプライベートIPで通信できるようになります: 日本から米国IPでアクセスするようなものではありません」「あ、ピアツーピアなんですね」

「ちなみに私は自宅のVMサーバーに外出先からアクセスするときにTailscale使ってます」「自分も外出先から自宅のメインPCに接続するのに常用しています」「なるほど」「マルチプラットフォームのアプリが提供されているし、Tailscaleアプリを起動してログインするだけで使えるので便利👍」「半年経過すると自動的にログアウトするという設定があったことを忘れてあせったことはありますけど」「Tailscaleはユーザー体験がとにかく最高ですね: Tailscaleの他にもうひとつぐらいリモートアクセス方法を確保しておけば安心度高い」「個人や小規模開発なら無料枠で20デバイスまで登録できるのでまったく問題なく使えるけど、BPSの規模だと有料になります」

「昔からエンタープライズ向けの高度なVPNサービスは既存のものがいろいろあって、高度な監視やログ出力や脆弱性発生時の強制アップデート機能やリモート消去といった、エンタープライズに不可欠な機能を提供するのが普通なんですよ」「ふむふむ」「でもTailscaleは純粋にVPNしか提供しないにもかかわらず大々的に導入した事例があるのが面白い点ですね」

🔗JavaScript

🔗 Stimulus 3.1.1リリース(Rails公式ニュースより)


つっつきボイス:「Rails公式情報からです」「Stimulus 3.1.1は主にバグ修正のようですね」

後で自分のアプリで./bin/importmap outdatedで更新を確認してから、importmap.rbを手動編集してStimulusを更新しました(bundle update stimulus-railsでは更新されません)。

# config/importmap.rb
pin "application", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
-pin "@hotwired/stimulus", to: "https://ga.jspm.io/npm:@hotwired/stimulus@3.0.1/dist/stimulus.js"
+pin "@hotwired/stimulus", to: "https://ga.jspm.io/npm:@hotwired/stimulus@3.1.1/dist/stimulus.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
-pin "tailwindcss-stimulus-components", to: "https://ga.jspm.io/npm:tailwindcss-stimulus-components@3.0.3/dist/tailwindcss-stimu
+pin "tailwindcss-stimulus-components", to: "https://ga.jspm.io/npm:tailwindcss-stimulus-components@3.0.4/dist/tailwindcss-stimu
pin "stimulus-textarea-autogrow", to: "https://ga.jspm.io/npm:stimulus-textarea-autogrow@4.0.0/dist/stimulus-textarea-autogrow.
pin "stimulus-scroll-to", to: "https://ga.jspm.io/npm:stimulus-scroll-to@4.0.0/dist/stimulus-scroll-to.es.js"

Rails 7: importmap-rails gem README(翻訳)

🔗CSS/HTML/フロントエンド/テスト/デザイン

🔗 RailsのContent Security Policy(CSP)(Ruby Weeklyより)


つっつきボイス:「RailsのCSP記事です」「Railsだとこういう感じで設定しますね↓」

# 同記事より
Rails.application.configure do
  config.content_security_policy do |policy|
    policy.default_src :self, :https
    policy.font_src    :self, :https, :data
    policy.img_src     :self, :https, :data
    policy.object_src  :none
    policy.script_src  :self, :https
    policy.style_src   :self, :https
    # Specify URI for violation reports
    # policy.report_uri "/csp-violation-report-endpoint"
  end

  # Generate session nonces for permitted importmap and inline scripts
  config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
  config.content_security_policy_nonce_directives = %w(script-src)

  # Report violations without enforcing the policy.
  # config.content_security_policy_report_only = true
end

参考: §9.1 Content Security Policy(CSP)-- Rails セキュリティガイド - Railsガイド

「CSPのような後付けセキュリティはいろいろ面倒だけど、今はほぼすべてのブラウザがCSPを解釈できるようになりましたね」「そういえば自分のアプリでもCSPを設定しようと思いつつ怖くてまだ試せていませんでした」「CSPのテストツールがいろいろあるので、それを使えばやりやすいと思いますよ↓」

参考: CSP Evaluator
参考: Check if Content Security Policy is implemented - Geekflare Tools

🔗言語/ツール/OS/CPU

🔗 IANAの各国版テスト用トップレベルドメイン


つっつきボイス:「これはexample.comを調べていて見つけたヤツですね」「日本語の.テストドメインがテスト用に使えるんですか」「アラビア語とかヒンズー語とか韓国語まであって読めなさすぎる...」


同記事より

🔗 ドイツでは航空交通管制にEmacsが使われていた

つっつきボイス:「江添亮さんの名翻訳です」「本物のプログラマーはLispで書く」「Emacsは単なるエディタじゃなくてガチの環境」「いろいろ面白い〜」「EmacsをビルドするためにGNUのソースをテープにロードするところから始めてるとは」「テープこそ使わなかったけどシリアル転送で似たようなことやったりしたな〜」「PC88からフロッピー版ゲームをお救いするときにシリアルでやりました」(以下延々)


後編は以上です。

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

週刊Railsウォッチ: RailsチュートリアルがRails 7対応版をリリース、ViewComponentで使えるLookbookほか(20221115前編)

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

Rails公式ニュース

Ruby Weekly

Publickey

publickey_banner_captured


CONTACT

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