- Ruby / Rails関連
週刊Railsウォッチ: Rubyを使っている企業の時価総額リスト、irbのshow_source、GitHub Codespacesほか(20221116後編)
こんにちは、hachi8833です。アメリカ国家安全保障局(NSA)のおすすめ言語にRubyも含まれているそうです 🎉
Apparently they are also recommending Ruby! 😲 https://t.co/XvxwrCqeA4
— Aaron Patterson (@tenderlove) November 10, 2022
🔗Ruby
🔗 Rubyを使っている企業の時価総額リスト
Rubyをつかっていると公言している会社の時価総額一覧がわかるサイト https://t.co/iSAIINI9sb #rubyworld
— Nari / estie (エスティ) CTO (@tiwanari) November 10, 2022
つっつきボイス:「RubyWorld Conference 2022でMatzのキーノートスピーチで言及されていたサイトですね」「以前扱った気もしたんですが過去記事で見つからなかったので取り上げました」「リストにある企業がどの程度Rubyを使っているかはさまざまだと思いますが、こうやってビジネス系の人々にアピールできる情報があるのは若手エンジニア志望者を集めるためにも大事だと思います👍」
以下はRubyWorld Conference 2022 Day1の当該動画です(35:15)。
🔗 ruby_memprofiler_pprofとbacktracie
つっつきボイス:「上の記事はRubyKaigi 2022の発表動画とスライドで、発表者のivoさんは以前翻訳したRuby GVM記事を書いた方でもあります↓」「メモリリーク退治はほんと地道な作業の繰り返しですよね」「忘れた頃にメモリリークがやってくるとつらい」
「その中でruby_memprofiler_pprofとbacktracieというgemに言及していました」
「ruby_memprofiler_pprofは文字通りヒープのプロファイラか」「Zendeskのリポジトリだ」「pre-alpha状態ですという警告表示が目立ちますね」
参考: Zendesk | カスタマーサービスソフトウェア&サポートチケット管理システム
「こういうフレームグラフを表示できるのね↓」「フレームグラフという呼び名をつい忘れてしまいます😅」「炎のflameの方ですね」
「backtracieはバックトレースを見やすく整形してくれるgemですって↓」「iseq
やcallable_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 知られてなさそうなので説明書いた
irb に show_source があることをもっと知らしめたい - id:onk のはてなブログhttps://t.co/ujD1lGdGKD— Takafumi ONAKA (@onk) October 9, 2022
つっつきボイス:「show_source
でソースコードを表示できるのか〜」「pryにもこの機能があったなと思ったらonkさんの記事にも書かれていました」「pryの機能をk0kubunさんがirbに移植したんですね」
「pryだとこんな機能があるんですって↓」「--super
を複数回付けられるのって面白い」
pry の
show-source
は--super
がメチャクチャ便利なので、欲しい。
どんな機能かというと、show-source
でメソッドを読んでいるときにsuper
が出てきたら--super
を付けると親クラスのメソッドを表示できるヤツです。
同記事より
🔗 Lint Night #1
Rubyのプロジェクトでよく使われているRuboCop。
どういう仕組みで動いているか気になったことはありませんか?
さて、このRuboCopについてcore teamメンバーの @koic さんに勉強会で話してもらえることになりました!
ぜひLint Nightへご参加ください!https://t.co/FX456PRTsP#dena_lint_night— DeNA Tech (@DeNAxTech) November 9, 2022
つっつきボイス:「Lint Nightというイベント面白そう」「RubyでLintといえばRuboCopですね」
🔗 その他Ruby
If you have slow tests in your Rails app, the problem is usually in one of three places:
1. Factories
2. Factories
3. Factories— Nate Berkopec (@nateberkopec) September 16, 2022
「RailsのテストはFactoryというかデータ生成部分で遅くなりますよね」「そうそう」「テストが単純なうちはcreateじゃなくてbuildすればいいんですけどね」「そしてFactoryが遅くなるとFixtureが速いことに気づいて、すると今度はFixtureで外部キーを維持するのがつらくなってきたりする」「まったくそれ😆」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 GitHub Codespacesが月60時間まで無料に(Publickeyより)
つっつきボイス:「すべてのユーザーがGitHub Codespacesを使えるようになったということは今までは違ったんですね」「今までは有料のGitHub TeamとGitHub Enterpriseのみでしたね」
「自分はメインの開発で使うつもりはないけど、運用が安定して普段触らなくなったようなシステムをたまにメンテするときには、こういうのがあると開発環境構築の手間が省けるのはよさそう👍」
「ところで今だと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公式ニュースより)
- リリースノート: Release v3.1.1 · hotwired/stimulus
つっつきボイス:「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"
🔗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が使われていた
航空管制に、言語としてEmacs lispなのはともかく、ランタイムとしてヘッドレスEmacsかあ。こえー。w / “ドイツでは航空交通管制にEmacsが使われていた” https://t.co/6RUZdAF33j
— tagomoris (@tagomoris) November 9, 2022
つっつきボイス:「江添亮さんの名翻訳です」「本物のプログラマーはLispで書く」「Emacsは単なるエディタじゃなくてガチの環境」「いろいろ面白い〜」「EmacsをビルドするためにGNUのソースをテープにロードするところから始めてるとは」「テープこそ使わなかったけどシリアル転送で似たようなことやったりしたな〜」「PC88からフロッピー版ゲームをお救いするときにシリアルでやりました」(以下延々)
後編は以上です。
バックナンバー(2022年度第4四半期)
週刊Railsウォッチ: RailsチュートリアルがRails 7対応版をリリース、ViewComponentで使えるLookbookほか(20221115前編)
- 20221102後編 書籍『Programming Ruby 3.2 (5th Edition)』、ReDoSチェックサイトほか
- 20221101前編 Packwerkの詳しい解説書『Gradual Modularization for Ruby and Rails』ほか
- 20221026後編 Ruby 3.2のData.define、RubyPrize 2022最終ノミネート、Puma-dev gemほか
- 20221025前編 rodauth-rails gem作者の解説記事、turbo-railsの有料チュートリアルほか
- 20221019後編 Ruby技術者認定試験再受験無料キャンペーン、Starlink日本で販売開始ほか
- 20221018前編 Rails向けLanguage Server “refreshing”開発中、JetBrains Fleetほか
- 20221012後編 RailsとPostgreSQLで列挙型を作成する6つの方法、Ubuntu Proほか
- 20221011前編 Turbo 7.2.0リリース、GitLabのDevSecOpsサーベイ結果ほか
- 20221004後編 ヒアドキュメント拡張の提案、『組織に自動テストを根付かせる戦略』ほか
- 20221003前編 Kaigi on Rails 2022のタイムテーブル発表、書籍『Practicing Rails』ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)