Ruby
前回、ruby.wasmを使ってRubyスクリプトをWasm化しました。 ruby.wasmにてRubyスクリプトをWasm化し、Wasmtimeで動かしてみた - メモ的な思考的な 次に、以前作成したRuby製の自作RDBMSをWasm化してみたことから、メモを残します。 目次 環境 Wasm化したら、…
Rubyスクリプトについて、 ruby.wasm を使うことでWasm化できると知りました。 ruby/ruby.wasm: ruby.wasm is a collection of WebAssembly ports of the CRuby. また、Wasm化したRubyスクリプトはブラウザで動かせるだけではなく、Wasm処理系でも動かせるこ…
前回の記事にて、 psql と自作のTCPサーバの間でメッセージを交換できるようにしてみました。 Rubyを使って、psqlとメッセージを交換できるPostgreSQL風TCPサーバを作ってみた - メモ的な思考的な 次は、 psql と以前作った自作RDBMSの間でメッセージ交換を…
PHPカンファレンス福岡2024のトークを見て、自分も同じようなRDBMSライクなTCPサーバを作ってみたくなりました。 PHPでデータベースを作ってみた by 富所 亮 | トーク | PHPカンファレンス福岡2024 #phpconfuk - fortee.jp PHPでデータベースを作ってみた/cr…
今まで Ruby のバージョン管理に rbenv を使っていました。 そんな中、RubyMine で mise がサポートされたことから、ためしに rbenv から乗り換えてみることにしました。 RubyMine 2024.1: Full Line Code Completion, New Terminal, Improved AI Assistant …
Rubyで echo サーバを作ろうと思い調べたところ、 TCPServer クラスがありました。 class TCPServer (Ruby 3.3 リファレンスマニュアル) リファレンスマニュアルには echo サーバの実装が記載されていました。 もう少し調べてみたところ、RubyKaigi 2009 の…
2024年はカンファレンスや個人ブログにて自作RDBMSの話をよく見かけたこともあり、昔からあった「いつかはRDBMSを作りたい」という気持ちがさらに高まった年でした。 カンファレンス Kaigi on Rails 2024 作って理解する RDBMSのしくみ | Kaigi on Rails 202…
最近、会社の合宿でLTをする機会がありました。 以前、Rabbitを使ってLTした時はとても便利だったため、今回もRabbitを使うことにしました。 Macにrabbitをインストールし、プレゼンテーマを自作してみた - メモ的な思考的な ただ、上記の自分の記事を参考に…
最近、Rubyで文字列の字句解析を行う機会がありました。 何を使えばよいか考えたときに、最初に思い浮かんだのが Regexp#match でした。 class String (Ruby 3.3 リファレンスマニュアル) 他にもないか調べたところ、文字列スキャナクラス StringScanner が…
JetBrainsのIDE (IntelliJ IDEA Ultimate や RubyMine) で Rails アプリ開発をする場合、 Railways プラグインが手放せません。 Railways - RubyMine Plugin | Marketplace 上記のプラグインページにあるように、Railwaysには rails routes の結果を一覧化す…
Rubyのオブジェクト配列にて、各要素の同一属性で同じ値が何個あるかを数えたくなる機会がありました。 例えば class Apple attr_reader :name, :grower def initialize(name, grower) @name = name @grower = grower end end apples = [ Apple.new('シナノ…
以前、factory_botの traitを使ったことがありました。 Rails + factory_botで、sub factoryやtrait・callbackを使って関連データを生成してみた - メモ的な思考的な そんな中、 rspec-parameterized を使ってテストを書くときに、動的に trait を指定してデ…
gem rspec-parameterized は、RSpecでパラメタライズドテストを書くときに便利です。 https://github.com/tomykaira/rspec-parameterized 最近だと、 table syntaxを使っていない場合は rspec-parameterized-core を使うことで native extensionへの依存をな…
最近「オブザーバビリティ(Observability)」が気になっていたので、オライリーの「オブザーバビリティ・エンジニアリング」を読みました。 O'Reilly Japan - オブザーバビリティ・エンジニアリング その本の7章ではOpenTelemetryが紹介されていました。 Open…
Railsには Concern と呼ばれる関心事を分離する機能があります。 我々はConcernsとどう向き合うか - おもしろwebサービス開発日記 そのConcernをモデルに組み込もうとした時、 モデルで include するか prepend するか Rails API: ActiveSupport::ConcernとM…
Rails + RSpecにて、Rake Taskのテストコードを書く機会がありました。 ただ、引数が必要なRake Taskのテストを書くときに悩んだことがあったため、メモを残します。 目次 環境 引数なしのRake Taskをテストする 引数ありのRake Taskをテストする [] を使っ…
5/11(木)~5/13(土)に、長野県松本市のまつもと市民芸術館で開催された「RubyKaigi 2023」に参加しました。 RubyKaigi 2023 - RubyKaigi 2023 今日の松本駅、RubyKaigi 2023仕様になってた #rubykaigi pic.twitter.com/zPbHut3mSu— thinkAmi (@thinkAmi) May…
研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ – 技術書出版と販売のラムダノート を読んだので、簡単に感想をメモしておきます。 前置き ここ2年ほど、仕事にてRubyやRailsを使ってWebアプリを開発しています。 RubyやRailsに詳しい…
Rubyでは Hash#merge を使うことで、2つのハッシュをマージできます。 Hash#merge (Ruby 3.2 リファレンスマニュアル) 2つのハッシュでキーが異なる場合は、それぞれのキーを持つハッシュへとマージされます。 h1 = { name: 'foo' } h2 = { color: 'red' } h…
前回に続き、RSpecのchangeマッチャに関する記事です。 値の変化を検証する時は change マッチャが便利です。 ただ、「こんな時どうするんだっけ」と調べることが多かったことから、 change マッチャまわりをいろいろ試してみたときのメモを残します。 目次 …
RSpecの change マッチャを使うと、処理前後における値の変化を検証できます。 https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/change/ 例えば # == Schema Information # # Table name: favorites # # id :integer not null, prim…
ハッシュに対してドットアクセスできる機能を追加しようと調べたところ、Rubyの標準ライブラリに OpenStruct がありました。 ためしに使ってみたところ、以下のようになりました。 require 'ostruct' o = OpenStruct.new({foo: 'bar'}) puts o.foo #=> bar …
以前、Railsのキャッシュストアとセッションストアとして memcached を使ったことがありました。 Rails6.1で、セッションをキャッシュとは別のmemcachedへ保存する - メモ的な思考的な そんな中、Redisを使って試してみたことから、メモを残します。 目次 環…
RailsのActiveRecordにて、SQLのJOIN句やWHERE句の条件を記載する場合、 JOIN句 joins() や eager_load() などのメソッド 13 テーブルを結合する | Active Record クエリインターフェイス - Railsガイド WHERE句 where() メソッド 3. 条件 | Active Record …
Rails + RSpec + factory_bot にて、あるモデルの関連データを生成する方法を調べたところ、factory_botのGETTING_STARTEDにいろいろな方法が記載されていました。 https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md そこで、GETTING…
Railsを使ったソースコードを眺めていたところ、モデルのメソッドにて def foo !!bar&.baz end というコードがありました。 どのような挙動になるのか気になったので、試してみた時のメモを残します。 目次 環境 モデル構造 挙動確認 否定(!)や二重否定(!!)…
RailsでActiveRecordを使ってDBからレコードを取得するときに、以下を考慮した昇順・降順ソートで迷ったことがあったため、メモを残します。 取得するタイミング データ取得時 (SQL発行時にソート) データ取得後 (Rubyのarrayになってからソート) ソートキー…
以前、RailsのActiveRecordにて、 eager_load を使って 子側が存在しない場合は結果に含めずに抽出する 子側が存在しなくても、結果に含めて抽出する をしました。 Railsで、eager_loadのLEFT OUTER JOINにて、WHERE句とON句のそれぞれで絞り込みしてみた - …
Railsでは、標準で用意されているモデルのバリデーションの他に、カスタムバリデーションメソッドを作成することで、独自のバリデーションを行えます。 6 カスタムバリデーションを実行する | Active Record バリデーション - Railsガイド そんな中、「カス…
Railsにはタイムスタンプカラム( created_at / updated_at )があり、各カラムは データ作成時 created_at と updated_at が設定される データ更新時 updated_at が更新される という挙動になります。 2.2 スキーマのルール | Active Record の基礎 - Railsガ…