ruby
RBSのdocs/syntax.mdに記載されている untyped, void, top, bot の違いを理解したけど、また忘れそうなのでブログにまとめておく。 untyped どんな型でも代入できて、その変数を型検査の対象にしない場合に使う。 # ruby class User def greet(user) user.so…
Ruby の Enumerator を使うと簡単にRubyのコードを処理できて便利だったので、ブログに書いておく。 ast = RubyVM::AbstractSyntaxTree.parse(<<~RUBY) class User < ApplicationRecord def say(text) puts text end def sum(x, y) x + y end end RUBY enum …
Gemfile.lock のdiffから更新されたgemを探す方法を調べたのでメモ 動作確認に使ったプルリク github.com GitHub APIでプルリクの情報を取得する $ gh api '/repos/rails/rails/pulls/48955' --jq '.base.sha, .head.sha' 1e824aa8e0655b4717cf612e31010bdd8…
sinsoku.hatenablog.com の続き。 回答 3 Rubyで -0777 を指定するとファイル単位で読み込む方法を教えて頂きました。 $ cat foo.txt foo $ cat bar.txt bar $ cat buz.txt foo bar buz $ ruby -i -n0777 -e 'puts "hi, " + $_' foo.txt bar.txt buz.txt $ c…
150個を超える *.tf をまとめて編集する方法を調べたので、備忘録としてまとめておく。 経緯 Terraformのコードを複数ファイルにすべきか、それとも1つのファイルにすべきか難しいな。hclをパースして、hclを書くプログラムを書いた方が良いのかなぁ...— 神…
Ruby技術者認定試験の勉強のため、この機会にちゃんと理解しておく。 バージョン $ ruby --version ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21] 継承 子クラスに定数がない場合、親クラスの定数を参照できる。 class A FOO = "foo" BA…
Ruby技術者認定試験の勉強をしていて、初めて知った機能だったのでまとめておく。 Ruby長年やってるけど、条件式の範囲式とか初めて見た。5.times { (_1==2)..(_1==3) ? p(_1) : 0 } みたいなやつ。— 神速 (@sinsoku_listy) 2022年10月6日 公式ドキュメント …
Ruby技術者認定試験Goldの勉強をしていてRubyのバージョンによって変わっている挙動を知ったのでメモ。 検証コード module M1 def method_1 __method__ end end class C include M1 end p C.new.method_1 module M2 def method_2 __method__ end end module …
Ruby技術者認定試験の対象バージョンがRuby 3.1.xになったので、試験勉強していて気づいた挙動をブログにメモっておく。 ensure節の値は無視される ensure 節が存在する時は begin 式を終了する直前に必ず ensure 節の本体を評価します。 begin式全体の評価…
きっかけ Swiftでprotocolの実装を複数持てるのは便利そうだなぁと思ったことある。(foo as A).call だとA#call で、(foo as B).callだとB#callが呼べる的な #fukabori_rubykaigi_2022— 神速 (@sinsoku_listy) 2022年10月5日 よく考えたら as メソッドを…
Module#include は引数に複数のモジュールを受け取ることができる。 しかし、以下のサンプルコードで分かるように、モジュールの順序は3行で書いたものと逆になるので注意がいる。 module A; end module B; end module C; end class Foo include A include B…
RustでRubyのgemを書く part1 の続き。 クラスやインスタンス変数を使うメソッドを実装したので、まとめておく。 Rubyで実装したいコードのイメージ module Wasabi class Object def initialize(name) @name = name end attr_reader :name def say "say, #{n…
RubyGems 3.3.11でRust拡張の対応が実験的に入ったので、少し触ってみたメモ。 In particular, it includes experimental supppot for Rust extensions. 引用: https://blog.rubygems.org/2022/04/07/3.3.11-released.html wasabi 2019年に鹿児島Ruby会議01…
rails new してから steep check が通るまでにやってみた作業をまとめておく。 GitHub コードはGitHubで公開しているので、詳細な手順を知りたい方は参照してください。 github.com 手順 gemを入れる steepとrbs_railsをGemfileに追加する。 # Gemfile group…
既存のリポジトリでrbsをゼロから書くのは大変なので、とりあえず雑にプロトタイプを生成する方法。 ディレクトリ構造 app 以下のディレクトリ構造にあわせて sig にrbsを置くディレクトリ構成です。 app/models/user.rb sig/app/models/user.rbs シェル fin…
追記: bundle info でgemの情報を表示できるので、一覧じゃなければコレで十分かも。 $ bundle info rails * rails (6.1.3.2) Summary: Full-stack web application framework. Homepage: https://rubyonrails.org Documentation: https://api.rubyonrails.o…
rails new するときにDockerfileを使う必要は特にない。 むしろ開発時に使うDockerfileとは別物になるので、Dockerfileを作らない方が良いです。 コマンド $ mkdir example_app $ cd example_app $ docker run --rm -v $(pwd):/app -w /app ruby:3.0.0 bash …
Rails edgeでCIを動かしたい酔狂な人向けに記事を書いておく。 Rails edgeのGemfileを用意する # gemfiles/rails_61.gemfile eval_gemfile File.expand_path('../Gemfile', __dir__) dependencies.delete_if { |d| d.name == 'rails' } gem 'rails', github:…
ときどきVERSIONの定義されていないgemに遭遇するので、備忘録として書いておく。 VERSION の無いgem いくつかのパターンがある。 gemspecで文字列を直接指定しているケース database_rewinder.gemspec VERSION は定義してあるのに require されていないケー…
はじめに あとはVSCodeなどでコンテナにアクセスするなどして編集すればOKそうです(もしくはvimとか入れてコンテナ内で編集するとか) gamelinks007.hatenablog.com この記事を読んで「ホスト側で編集するようにできそう」と思ったので、試しに開発環境を作っ…
タイトルの通りなのですが、普通にやると意図した動きしなかったのでメモ。 具体的な例 factory_bot が分かりやすいです。 ルートディレクトリに Gemfile.lock がある ルートディレクトリで bundle install はしてある ルートディレクトリから gemfiles/6.0.…
12/13(金)にあった銀座Rails#16で登壇しました。 スライド speakerdeck.com 話したかったこと 1〜3年目のRailsエンジニアに参考になる話がしたい 7年やって私が覚えたことは、たぶん何かしら参考になるだろう 来週の仕事ですぐ参考になる話がしたかった 懇親…
仕事で見かけたコードを汎用化した内容にして、個人ブログにメモっておく。*1 多段ネストを reverse して Proc でラップしたり、それを RSpec で検証する方法はブログ書いてないと忘れる自信がある。 モデルの定義 class User < ApplicationRecord default_s…
平成.rb #10 でRailsのissueに取り組むきっかけが分からない人向けのメモです。 個人的に気になっているissueについて簡単にまとめました。 注意)特に初心者向けとかではありません。 STI と has_secure_password の組合せで、親クラスでvalidationsを切り…
その1って書いたけど、続くかは不明。 今回は使っているgemの読み込み時間を測ってみた。 Benchmark を仕込む config/application.rb でgemを読み込む前に Kernel.require を上書きして、計測する。 +require 'benchmark' +$result = {} +Kernel.singleton_c…
突然ですが、あなたはRailsのissueとプルリクがいくつあるかご存知でしょうか? 2019年10月17日現在、それぞれ issue 384 / PR 803 になります。 多いですよね...。 個人的に、最近このissueを減らすのを少しでも手伝えないものかとissueにコメントしてみた…
怪しい挙動を見つけたきっかけ テストコードで以下のようなことをしてました。 Rails.application.eager_load! testでもproductionと同じ環境になるように事前に読み込んでいたのですが、テストを個別に実行するときにも全ファイルを読み込んでしまうため消…
rails/rails#36895 の挙動を確認してみようかなーと思ったけど、発行されるSQLを確認する方法が分からなかったので調べた。 Rails本体のテストコードだと assert_no_queries が使えるけど、これは外で使えないので。 動いたコード assert_no_queriesの定義さ…
備忘録。 具体的な例 先日に登録されたissueを例にしてみる。 github.com 再現コードを少し書き換える v5.2.3と6.0.0.rc2でsqlite3の依存周りでエラーが出たので、Gemfileのあたりを少しだけ弄った。 # frozen_string_literal: true require "bundler/inline…
追記: activerecord/RUNNING_UNIT_TESTS に書いてあった。 自分用の備忘録。 特定のファイルを実行する方法 $ cd activerecord $ ARCONN=postgresql ruby \ -I"lib:test" \ test/cases/adapters/postgresql/range_test.rb 特定のテストケースを実行する方法 …