マイペースなRailsおじさん

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

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…

ここ数日のニュース・投稿に一言

↓のような経緯があり、今週のニュースをたくさん読んだ。 あとあと反省することになりそうだから書いておこう。数日前、情報収集の体制を整えようとしてfeedlyを整理した。フィードはこんなかんじ。良い点:知らないキーワードがたくさん目に入る困る点:興…

非同期処理のことを考えていたら頭がバグった

この記事 Rubyで非同期処理しよ~、って思ってちょっと調べ始めた。調べれば調べるほど訳わかんなくなって来てしまい、頭が飽和してきた。もうなんかほんとによくわかんない。今の頭の中のダンプをとっておき、ちょっと頭をリフレッシュしたくなってきた。 …

SOLID, KISS, YAGNIをどう活かすのか

SOLID, KISS, YAGNIはいずれもソフトウェア開発において重要とされる原則です。原則というくらいなので、様々な形態を持つソフトウェア開発において共通して適用することができます。逆に言えば、特定のコンテキストに依存しない程度に抽象化されていると言…

developer-roadmapを見ながら足りない知識を洗い出す

エンジニアになって2年半、ここのところ勉強したいことが多すぎてどれからやろうか、と考えてしまう時間が増えてきました。WebDveloper Roadmapに載っているものから優先して取り組んで行こうと思ったので記録しておきます。私のスキルの振り返りなので、他…

"Ask Me Anything" by DHH での質問と答え part2

ここにいる全員にあなたのようにStimulusとturbolinksを使うことを薦めますか? まず第一に、ブログ、カンファレンスあるいはtwitterで人気のあるものと、実際に作られているアプリケーションで人気のあるものには違いがあります。 私は、それらの間には大き…

"Ask Me Anything" by DHH での質問と答え part1

www.youtube.com これの質疑応答を日本語にしようとしましたが、ボリュームがすごくて全然ゴールが見えません。多分part5くらいまで行きます。 多分50%くらいは間違ってるんだと思います! 編集リクエスト、指摘、訂正お待ちしてます!! 誰か同じようなもの…

勉強会レポート UIT#6 進化する React.js

UIT#6 フロントエンド開発の勉強会。LINE株式会社が運営していて、1クォーターに1回のペースで開催している。 テーマ: 進化する React.js 場所: LINE本社 カフェテラス(新宿ミライナタワー23階) 参加費: 0円 参加人数: 100人 参加方法: connpassで抽選 htt…

やりたいことに気がついたかもしれない

なんか今日仕事していたら、ふと、自分が心からやりたいことに気づいたような気がするので、忘れないうちに今の思いを綴っておく。 今、やりたいこと 大規模だったり、やりたいことが複雑だったり、パフォーマンスが必要だったりして、技術的に困難なシステ…

大きなタスクを細分化して立ち向かう

大きなタスクをもらいました。 そしてその大きなタスクは、さらにどんどん大きくなっていきます。 タスクをちぎるといいよ、という話をツイッターで見かけたので実践してみた。 計画 〇〇機能を実装する という、大きなタスクを30~60分程度でこなせる大きさ…

OCS(Open Collaboration Services)

nextCloudにrubyからファイルをアップロードしようとしたら、OCSを使う必要があった。OCSってなんやねん&日本語の情報少ないねんな状態だったので概要書く。英語版wikipediaの日本語訳。 Open Collaboration Services Open Collaboration Service(OCS)は、…