マイペースなRailsおじさん

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

2020-01-01から1年間の記事一覧

RubyでWebスクレイピングしたい(ChromeDriverインストール編)

Seleniumを使って、Google画像検索から画像をスクレイピングすることにしました。 環境 Ubuntu 18.04.2 LTS WSL2 on Windouws 10 ruby 2.7.2 selenium-webdriverをインストール まずはruby経由でWebDriverへのリクエストを送信するためのgem、selenium-webdr…

RubyでWebスクレイピングしたい(ツール選定編)

自作したスクレイピングツールで画像をあつめたい 現在開発中のアプリケーションで、エフェクターボードの画像が100枚くらい欲しかったので、Google画像検索から画像を集めることにしました。 画像収集は機械学習などでかなり需要があるらしく、自作せずとも…

やる気が出ないエンジニア、目標がわからなくなってしまったエンジニア、伸び悩んでいるエンジニア…みんな今すぐ「情熱プログラマー」を読もう

とにかくおすすめな「情熱プログラマー」 エンジニアのChad Fowlerさんが自身の経験を元に、エンジニアがどう生きていくべきか、について書いた本です。 技術革新によって自分の仕事がなくなるかもしれない、あるいは稼げなくなるかもしれない、という危機に…

Tennis-Refactoring-KataでRubyのリファクタリングの練習をやってみた

Refactoring Kataでリファクタリングを練習しています。今日も頑張りました。 Tennis-Refactoring-Kata github.com 概要 テニスのスコアリングをするプログラムのリファクタリングを行う テストは書いてある 同じ仕様のプログラムが3パターン用意されていて…

gemの概要を雑に把握するシリーズ③ rack/rack

rackgithub.com 概要 WebサーバーとWebフレームワークの組み合わせを自由に選択できるように、統一的なインターフェースを提供するライブラリ。 Middlewareを選択することで、双方向の通信の間に特定の処理を割り込ませることができる。 各ソフトウェアで必…

Refactoring Kataを使ってRubyのリファクタリングを練習する

Refactoring Kata CodeKataというサイトがありまして、これはプログラミングの練習をしたい人のための問題集です。この様な練習問題を総称して「Code Kata」あるいは「Coding Kata」と呼んでいます。Emily Bacheさんは、リファクタリングに焦点を絞ったCode …

Active RecordとNull Objectパターン

Active RecordでNull Objectパターンを使うことはできるのか考えてみました。 RubyでNull Objectパターン RubyでもNull Objectパターンを使えます。下記の記事を御覧ください。 ytnk531.hatenablog.com Active RecordとNull Objectパターン どんなときに使い…

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…