Ruby

openai-ruby + LM Studioを使って、ローカルLLMとRubyでやり取りしてみた

日頃Rubyを使っていることもあり、OpenAI SDKのRuby版を公式ドキュメント調べてみました。 Libraries | OpenAI API すると、次の2つが紹介されていました。 https://github.com/alexrudall/ruby-openai https://github.com/sferik/openai-ruby 1 このうち、…

Rails 8.1で、JavaScriptなしのdialog要素を使ってダイアログの開閉を試してみた

先日、次の記事を読みました。 HTML: 「JavaScriptなし」で動く最新の多機能確認ダイアログを構築する(翻訳)|TechRacho by BPS株式会社 これを読み、Railsと組み合わせて使ったときはどんな感じの実装になるのか気になりました。 そこで試してみたことか…

Rails + prop_check にて、例示ベーステストを元に、同じ仕様でプロパティベーステストも書いてみた

日頃Railsアプリを書くときはRSpecによるテストコードも一緒に作成しています。テストコードがあることで安心してプロダクションコードを修正できるためです。 そんな中、テストコードの考え方の1つである、満たすべき性質に対して色々な入力を生成して確か…

Rails8.1系で、レプリカのあるRedis(スタンドアロンやクラスター)をセッションストアに設定してみた

前々回、前回と、Redisクラスターを使ったセッションストア設定などを試してきました。 Rails8.1系で、Redisクラスターをセッションストアとして設定してみた - メモ的な思考的な Rails8.1系で、Redisクラスターをセッションストアとキャッシュストアに設定…

Rails8.1系で、Redisクラスターをセッションストアとして設定してみた

Railsではセッションの保存先(セッションストア)を指定できます。 3.2.58 config.session_store | Rails アプリケーションの設定項目 - Railsガイド 以前、セッションストアをRedisにしたときは、スタンドアロンRedisでの利用でした。 Rails7.0系で、キャ…

Railsにて、log_argumentsやconfig.filter_parametersを使って、ActiveJobでもパラメータをフィルタリングしてログへ出力してみた

Railsでは config.filter_parameters を使うことで、ログへ出力したくないパラメータを設定できます。 3.2.34 config.filter_parameters | Rails アプリケーションの設定項目 - Railsガイド ただ、この設定がデフォルトではActiveJobでのジョブ実行時のログ…

Ruby製の自作RDBMSをruby.wasmにてWasm化し、Wasmtimeで動かしてみた

前回、ruby.wasmを使ってRubyスクリプトをWasm化しました。 ruby.wasmにてRubyスクリプトをWasm化し、Wasmtimeで動かしてみた - メモ的な思考的な 次に、以前作成したRuby製の自作RDBMSをWasm化してみたことから、メモを残します。 目次 環境 Wasm化したら、…

ruby.wasmにてRubyスクリプトをWasm化し、Wasmtimeで動かしてみた

Rubyスクリプトについて、 ruby.wasm を使うことでWasm化できると知りました。 ruby/ruby.wasm: ruby.wasm is a collection of WebAssembly ports of the CRuby. また、Wasm化したRubyスクリプトはブラウザで動かせるだけではなく、Wasm処理系でも動かせるこ…

Ruby製の自作RDBMSにて、PostgreSQLプロトコルに対応して psql でメッセージを交換できるようにしてみた

前回の記事にて、 psql と自作のTCPサーバの間でメッセージを交換できるようにしてみました。 Rubyを使って、psqlとメッセージを交換できるPostgreSQL風TCPサーバを作ってみた - メモ的な思考的な 次は、 psql と以前作った自作RDBMSの間でメッセージ交換を…

Rubyを使って、psqlとメッセージを交換できるPostgreSQL風TCPサーバを作ってみた

PHPカンファレンス福岡2024のトークを見て、自分も同じようなRDBMSライクなTCPサーバを作ってみたくなりました。 PHPでデータベースを作ってみた by 富所 亮 | トーク | PHPカンファレンス福岡2024 #phpconfuk - fortee.jp PHPでデータベースを作ってみた/cr…

Apple Silicon + macOS Sequoia にて、 mise で Ruby 3.0 系をビルドしたら maybe_unused のBUILD FAILEDになったため、対応した

今まで Ruby のバージョン管理に rbenv を使っていました。 そんな中、RubyMine で mise がサポートされたことから、ためしに rbenv から乗り換えてみることにしました。 RubyMine 2024.1: Full Line Code Completion, New Terminal, Improved AI Assistant …

RubyのSocket.tcp_server_loopでechoサーバを作り、その通信を ngrepで確認してみた

Rubyで echo サーバを作ろうと思い調べたところ、 TCPServer クラスがありました。 class TCPServer (Ruby 3.3 リファレンスマニュアル) リファレンスマニュアルには echo サーバの実装が記載されていました。 もう少し調べてみたところ、RubyKaigi 2009 の…

書籍「Database Design and Implementation」の SimpleDB をベースに、必要最低限の機能を持つ RDBMS を Ruby で実装してみた

2024年はカンファレンスや個人ブログにて自作RDBMSの話をよく見かけたこともあり、昔からあった「いつかはRDBMSを作りたい」という気持ちがさらに高まった年でした。 カンファレンス Kaigi on Rails 2024 作って理解する RDBMSのしくみ | Kaigi on Rails 202…

mac で Rabbit 3.0.3 を使ったLTした時のメモ

最近、会社の合宿でLTをする機会がありました。 以前、Rabbitを使ってLTした時はとても便利だったため、今回もRabbitを使うことにしました。 Macにrabbitをインストールし、プレゼンテーマを自作してみた - メモ的な思考的な ただ、上記の自分の記事を参考に…

RubyのStringScannerを使って、文字列をスキャンしてみた

最近、Rubyで文字列の字句解析を行う機会がありました。 何を使えばよいか考えたときに、最初に思い浮かんだのが Regexp#match でした。 class String (Ruby 3.3 リファレンスマニュアル) 他にもないか調べたところ、文字列スキャナクラス StringScanner が…

RubyMine 2023.3系から、rails routes を便利に扱える Railways プラグインが動かなくなったので、代替プラグイン Railroads を作りました

JetBrainsのIDE (IntelliJ IDEA Ultimate や RubyMine) で Rails アプリ開発をする場合、 Railways プラグインが手放せません。 Railways - RubyMine Plugin | Marketplace 上記のプラグインページにあるように、Railwaysには rails routes の結果を一覧化す…

Rubyのオブジェクト配列にて、各要素の同一属性で同じ値が何個あるかを数える

Rubyのオブジェクト配列にて、各要素の同一属性で同じ値が何個あるかを数えたくなる機会がありました。 例えば class Apple attr_reader :name, :grower def initialize(name, grower) @name = name @grower = grower end end apples = [ Apple.new('シナノ…

rspec-parameterizedにて、factory_botのtraitを動的に指定する

以前、factory_botの traitを使ったことがありました。 Rails + factory_botで、sub factoryやtrait・callbackを使って関連データを生成してみた - メモ的な思考的な そんな中、 rspec-parameterized を使ってテストを書くときに、動的に trait を指定してデ…

rspec-parameterizedで、letやlet!定義された変数の値を上書きする

gem rspec-parameterized は、RSpecでパラメタライズドテストを書くときに便利です。 https://github.com/tomykaira/rspec-parameterized 最近だと、 table syntaxを使っていない場合は rspec-parameterized-core を使うことで native extensionへの依存をな…

各RailsアプリにOpenTelemetryを組み込み、収集したデータをJaegerで表示してみた

最近「オブザーバビリティ(Observability)」が気になっていたので、オライリーの「オブザーバビリティ・エンジニアリング」を読みました。 O'Reilly Japan - オブザーバビリティ・エンジニアリング その本の7章ではOpenTelemetryが紹介されていました。 Open…

Railsで、included付のConcernをincludeしたり、prepended付のConcernをprependしてみた

Railsには Concern と呼ばれる関心事を分離する機能があります。 我々はConcernsとどう向き合うか - おもしろwebサービス開発日記 そのConcernをモデルに組み込もうとした時、 モデルで include するか prepend するか Rails API: ActiveSupport::ConcernとM…

Rails + RSpecで、引数が必要なRake Taskのテストコードを書いてみた

Rails + RSpecにて、Rake Taskのテストコードを書く機会がありました。 ただ、引数が必要なRake Taskのテストを書くときに悩んだことがあったため、メモを残します。 目次 環境 引数なしのRake Taskをテストする 引数ありのRake Taskをテストする [] を使っ…

#rubykaigi RubyKaigi 2023に参加しました

5/11(木)~5/13(土)に、長野県松本市のまつもと市民芸術館で開催された「RubyKaigi 2023」に参加しました。 RubyKaigi 2023 - RubyKaigi 2023 今日の松本駅、RubyKaigi 2023仕様になってた #rubykaigi pic.twitter.com/zPbHut3mSu— thinkAmi (@thinkAmi) May…

「研鑽Rubyプログラミング」を読みました #研鑽Ruby

研鑽Rubyプログラミング ― 実践的なコードのための原則とトレードオフ – 技術書出版と販売のラムダノート を読んだので、簡単に感想をメモしておきます。 前置き ここ2年ほど、仕事にてRubyやRailsを使ってWebアプリを開発しています。 RubyやRailsに詳しい…

ActiveSupportのdeep_mergeに対し、with_indifferent_accessと組み合わせたり、blockを渡してみたりしてみた

Rubyでは Hash#merge を使うことで、2つのハッシュをマージできます。 Hash#merge (Ruby 3.2 リファレンスマニュアル) 2つのハッシュでキーが異なる場合は、それぞれのキーを持つハッシュへとマージされます。 h1 = { name: 'foo' } h2 = { color: 'red' } h…

Rails + RSpecにて、changeマッチャまわりをいろいろ試してみた

前回に続き、RSpecのchangeマッチャに関する記事です。 値の変化を検証する時は change マッチャが便利です。 ただ、「こんな時どうするんだっけ」と調べることが多かったことから、 change マッチャまわりをいろいろ試してみたときのメモを残します。 目次 …

RSpec 3.12 + rspec-rails 6.0.2にて、change + have_attributesマッチャを使うとエラーになるため、回避策を試してみた

RSpecの change マッチャを使うと、処理前後における値の変化を検証できます。 https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/change/ 例えば # == Schema Information # # Table name: favorites # # id :integer not null, prim…

Rails + ActiveSupport::InheritableOptionsを使って、既存のハッシュをドットアクセスできるようにする

ハッシュに対してドットアクセスできる機能を追加しようと調べたところ、Rubyの標準ライブラリに OpenStruct がありました。 ためしに使ってみたところ、以下のようになりました。 require 'ostruct' o = OpenStruct.new({foo: 'bar'}) puts o.foo #=> bar …

Rails7.0系で、キャッシュストアとセッションストアをRedisにしてみた

以前、Railsのキャッシュストアとセッションストアとして memcached を使ったことがありました。 Rails6.1で、セッションをキャッシュとは別のmemcachedへ保存する - メモ的な思考的な そんな中、Redisを使って試してみたことから、メモを残します。 目次 環…

RailsのActiveRecordで、joinsメソッドやwhereメソッドで、ハッシュで条件を指定する

RailsのActiveRecordにて、SQLのJOIN句やWHERE句の条件を記載する場合、 JOIN句 joins() や eager_load() などのメソッド 13 テーブルを結合する | Active Record クエリインターフェイス - Railsガイド WHERE句 where() メソッド 3. 条件 | Active Record …