マイペースなRailsおじさん

Ruby、Ruby on Rails、オブジェクト指向設計を主なテーマとして扱います。だんだん大きくなっていくRuby on Rails製プロダクトのメンテナンス性を損なわない方法を考えたり考えなかったりしている人のブログです。

2020-10-01から1ヶ月間の記事一覧

RubyのNull Objectパターン

Rubyの場合はNil Objectパターンと呼ぶことになるんでしょうか? Null Objectパターン Null Objectパターンは、値が存在しない場合の処理を共通化したい場合に使えるデザインパターンです。 こちらの解説がわかりやすいです Nullオブジェクトパターンの紹介…

n+1クエリの自動テストが書けるgem、n_plus_one_control

N+1問題 N+1問題は、ループ内の処理を通過するたびにSQLが発行されるというパフォーマンス上の問題です。Railsにおいては、includesメソッドを使って、preloadあるいはeager loadを使って回避できます。 こちらの記事がわかりやすいです 【Ruby on Rails】N+…

Railsの設計について思うこと

Railsと設計 Railsは、Active Recordを中心に据えてコードを書いていきます。そうなると、自然とテーブル設計に強く依存したアプリケーションになって行くので、アプリケーションが複雑になっていくとツライ!となることがあります。こういった、Railsのアー…

Ruby on Railsがわからないときに見る場所

RailsはSQLからJavaScriptまで広い範囲を扱えるため、詰まりポイントが非常に多いです。私がRailsに慣れなかったころに確認していたことを振り返ってまとめてみます。 どこがつまりポイントになるか Railsが扱う要素技術は非常に多いので、初心者にとっては…

Rails6 + Webpackerな環境でyarnで入れたbulmaを使う

bulmaは美しいCSSフレームワークです。Railsで使おうとする場合、bulma-railsというgemを使ってもいいのですが、せっかくyarnが入っているので、yarnでインストールすることにしました。 bulma-railsは、本家よりすこし遅れてアップデートが反映されていくの…

Stimulas、いつつかうん?

Stimulas Stimulasは、少ないコード量で動的な表現をすることに主眼を置いて開発された、軽量なJavaScriptフレームワークです。DHH率いるBaseCampが公開してます。 主に提供している機能はこの2つです。 DOM要素のイベントと、そのイベントにフックするJSの…

gemの概要を雑に把握するシリーズ② ruby-i18n/i18n

概要 Ruby用の国際化(i18n)機能を提供するgem。ymlで書かれた設定ファイルを、規定の構造で設定しておくと、I18.tメソッドで翻訳を取得できる。 github.com 仕組み I18n.tの引数と、現在設定されているロケールを頼りにymlに書かれた対応関係に従って翻訳を…

Fiber Schedulerの使い方

この記事では、Ruby3で追加される予定のScheduled Fiberを紹介します。Ruby 3.0.0 preview1の情報であり、この機能はまだまだ議論と開発の真っ只中です。実際に正式にリリースされるのものとはインターフェースや実装が異なることをご理解ください。 Ruby本…

gemの概要を雑に把握するシリーズ① intridea/multi_json

github.com 概要 システムで利用可能なJSONパーサーのうち、最適なものを選んで使ってくれるJSONパーサーのラッパー。 できるだけ早いものを使うようにしていて、独自に優先順位を付けている。 候補がなにも使えない環境の場合はOkJSONを使う。 仕組み Adapt…

Fiberとnio4rでサーバー

Fiberとnio4rを組み合わせてサーバーを作りました。あたまバグりそうになるのでよかったら見てってください。 Fiberとnio4rを組み合わせる Fiberは、軽量なスレッドを作成できます。このスレッド上で、途中まで実行した処理を中断し、再開することができます…

nio4rでselect

TCPコネクションのようなIOを複数扱うとき、書き込みや読み込みが可能になっているものを一つ選びたい、ということがあります。RubyにはIO.selectというメソッドがあり、これを使えばそのようなことができます。 IO.selectは、Rubyが動く環境ならどこでも動…

Socket.tcp_server_loopでかんたんHTTP

ちゃんとしたHTTPサーバーを作るのって難しいんですが、それっぽいものを作るなら実はそんなに難しく無いです。 HTTPサーバーの処理の流れ とってもざっくり説明すると、HTTPサーバーの処理はこんな流れです。 TCPコネクションを確立する HTTPリクエストを受…

extendを使ったStrategyパターン風のアルゴリズム切り替え

リファクタリング:Rubyエディション作者:ジェイ・フィールズ,シェーン・ハービー,マーティン・ファウラー発売日: 2020/03/21メディア: 単行本に、extendの興味深い利用方法が出てきていたのでご紹介。この本の、8.13 タイプコードからモジュールのextendへ(R…