ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

Ruby

RubyのProcについてまとめる

RubyのProcとかMethodとかの理解が少し進んできたのでまとめる 今回はProcについて Procとは Rubyのブロック文をオブジェクト化したもの ブロック文はdo ~ endや{ ~ }でよくつかう一連の処理をまとめたもの だからといってdo ~ endを直接変数に入れるとかは…

Rubyのmoduleでサービスクラスを作る

Rubyにおけるサービスクラスの作り方で、一つ作り方を考えたので残しておきます。 サービスクラスとは複数のモデルを使ってビジネスロジックを記述を行うものです、ここでの詳細は割愛しますが、以下の記事が有名でとても勉強になります。 qiita.com 例とし…

Rubyで再帰関数について軽くまとめ

再帰関数について軽くまとめてみます、今回はRubyで書きます。 再帰関数とは 関数Aの中で同じ関数Aを使う処理を行う関数のことです。 例: def A(num) A(5) end ↑みたいに普通に呼び出すだけだと、Aが呼んだAが呼んだAが呼んだAが…と無限ループになってメモ…

Railsで特定のModelだけ別DBを操作するようにしてみた

システム間連携等の事情で、別DBを作ってデータを流し込みたくなったので実装してみました。 手順 例としてBookモデルを作り、別DBを対象にするようにします。 環境はmysqlです。元々使っているDBはmain_database、新しく使うDBはsub_databaseという名前にし…

immutableなクラスでto_hashを作るまで

Rubyにてセッタをもたないimmutableなクラスを作り、to_hashで値を取ってくるようにしたのでまとめます。 今回は例として本(Book)クラスを作ります。 完成品 class Book ATTRIBUTE_NAMES = [:name, :author, :price].freeze attr_reader *ATTRIBUTE_NAMES …

RubyのBooleanについて(一発ネタ)

今回はただの一発ネタです。 Rubyの真偽値のtrueとfalseには.!メソッドというものがあるのを知りました。 真偽値をひっくり返すものです。 true.! # false もちろん、頭に!を付けてもOKです !true.! # true trueが!メソッドでfalseになって、頭の!でtrueに戻…

Rubyのtapメソッドが便利なので紹介する

RubyのObject#tapが便利だったので紹介します。(昔からあるらしいけど) tapメソッドとは ブロック文を渡すと中身の処理を走らせてレシーバを返すメソッドです。 hoge = "test".tap do |string| puts string true end puts hoge # "test" Objectクラスに定…

rubyでサンプルデータを作る時に便利だったArray#sampleの覚書

Rubyで開発中、サンプルデータ等を用意する時に役立つメソッドがあったのでメモします。 Arrayクラスのインスタンスメソッドであるsampleメソッドというもので、「配列の中からランダムに返す」という機能です。 [1,2,3].sample => 3 # 毎回変わる 真偽値を…

Rubyのcoerceメソッドについて

Rubyの勉強していたらNumeric#coerceメソッドというものを見つけたのでメモ 機能 全ての数値オブジェクトに対して使えるメソッドで、引数で与えられた数を自分と同じクラスにして自分とセットで配列で返すものだそうです。 hoge = 1.6 hoge.coerce(5) => [5.…

改めてRubyの整数と浮動小数点数についてまとめた

はじめに 基礎からRubyの勉強をし直そうということでプログラミング言語 Rubyをガッツリ読み直していると、普段何気なく使ってる数値も深く書かれているので少しまとめます。 数値について 全ての数値オブジェクトは Numericクラスのインスタンス。整数であ…

Docker for MacでRubyの検証用環境をサクッと作る

はじめに Rubyの勉強を家でしている時に「これ実際に動かさないとわからんな」ということが度々あります。 Macだと homebrewや rbenvを使って環境構築をする場合が多いですが、今回はMacに直接インストールしたくないと思いDocker for Macで作りました。 敷…

RubyでURLをaタグに書き換える処理を書いた

DBから取ってきた文字列を表示する際に、URLが混ざっていた場合aタグに置き換えて表示する必要があったためその処理を書きました。 コードはこんな感じです。 require 'uri' def convert_url_into_a_tag(text) text.gsub(URI.regexp(['http', 'https'])) do …

今更ながらirbからpryにして色を付けた話

経緯 僕はRailsを使って開発をしているのですが、「なんで rails consoleでは綺麗に色分けされて表示されるのに、 irbではずっと白黒なんだろう」と思ってました。 よくよく見るとうちのプロジェクトで rails console時に動いているのって pry-railsってgem…

Rubyのセッターメソッドとレシーバとselfの話

Rubyでクラスを作って色々処理を書いていると、セッターメソッド周りで意図しない挙動をしたりRubocop(静的コード解析ツール)に「冗長なselfつけんじゃねーよ」と怒られたりしたのでまとめます。 問題 問題のコードはこちらです、ギターをクラス化してみま…

Rubyでプライベートクラスメソッドを定義する方法

Rubyでクラスの外から呼べないプライベートなクラスメソッドを書く時にちょっとクセがあったのでご紹介します。 方法 こんな感じに書くと宣言できます。パブリックメソッドの hogeから プライベートメソッドの fugaを呼び出してます。 class Hoge def self.h…

Rubyでprivateメソッドを無理やり呼び出す方法があった件

割と衝撃的だったのでメモ 方法 Object#sendメソッドを使います。 sample class Hoge private def test_method puts "hoge" end end hoge = Hoge.new hoge.test_method # エラー hoge.send(:test_method) # 動く 用途 これを普通に使ってるとプロジェクトが…