技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Ruby

クラス/インスタンスメソッドの使い分け方法

クラス/インスタンスメソッドの使い分け方法 railsのモデルファイルを書いていて間違えやすいのが、クラス/インスタンスメソッドの使い分けです。 先に結論 データすべて(モデルそのもの)に対する操作はクラスメソッド。特定のデータに対する操作はインスタ…

Everyday Rails - RSpecによるRailsテスト入門のまとめ

Everyday Rails - RSpecによるRailsテスト入門のまとめ 読みました。 超適当に内容まとめる。 全体 describe、context、before、after を使ってスペックを DRY にする マッチャはREADMEを参考にすると良い。参考リンク shoulda-matchersを利用すれば、便利な…

Bundle Updateする時は影響範囲を最小限にしようという話

Bundle Updateする時は影響範囲を最小限にしようという話 bundle updateをすると全部のライブラリの依存関係を持ったgemも含めてアップデートされてしまいます。 そうすると、影響範囲が大きすぎて予期せぬバグになるケースが存在します。 ですのでBundle Up…

Rubyの条件分岐判定方法

Rubyの条件分岐判定方法 Rubyの条件判定は癖があるのでメモ残す。 Rubyの条件分岐は他のプログラミング言語同様に条件式が成立する時に返される「true」は真として扱われます。 また成立しなかった時に返される「false」は偽として扱われます。 falseとnilは…

break, return, nextまとめ

break, return, nextまとめ たまにこの辺りの使い分けややこしくなるのでまとめます。 break breakを使うと、繰り返し処理を抜けることができます。 def block_break puts '----' (1..5).each do |i| break if i % 3 == 0 puts i end puts 'end' end 1 2 end…

ffiインストールエラー対策

bundle installで下記のエラーが出る 1 error generated. make: *** [Function.o] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/inouehiroki/ghq/github.com/SchooLynk/schoolynk-intelligence-api/vendor/bundle/ruby/2.6.…

groupを利用した少し複雑な処理方法

groupを利用した少し複雑な処理方法 タイトルがうまく思いつかないので、よくわからないと思うのですが。 下記のようなケースを想定した場合の処理について説明します。(自分用備忘録です) 例)ユーザーがゲームをした回数を調べたい、日付毎に確認したい…

requireとloadの違い

requireとloadの違い 毎回忘れるので備忘録として残します。 Rubyのrequire Rubyでrequireを利用する時は以下のようなケースです。 1. 組み込みライブブリ以外(標準ライブラリ)を読み込むとき。 2. 自分で作成したRubyプログラムを組み込む場合。 1. 組み込…

Rubyのinitializeメソッドの引数の順番の依存を取り除く方法

Rubyのinitializeメソッドは引数の順番に依存している 次の例では、Hogeのinitializeメソッドは次の3つを引数をとります。(hikisuu1,hikisuu2,hikisuu3) デフォルト値はなく、それぞれの引数が必須です。 Class Hoge def initialize(hikisuu1, hikisuu2, h…

RubyとJavaScriptの == と === の違い

Rubyの == と === の違い Rubyで等値を判断する為のメソッドで有名なのは以下の通り 1. equal? 2. == 3. eql? 4. === == ・同じデータ型で、かつ同じ値だったら、trueを返す ・値が同じであっても、データ型が異なればfalseを返す 1 == 1 => true 1 == "1" #…

配列の値をハッシュのキーとバリューに変換する方法

配列の値をハッシュのキーとバリューに変換する方法 実務で書かれていたコードでなるほど!というRubyのコードがあったので備忘録としてメモします。 配列のこういう値があったとします。 ["A", "B", "C", "D", "E", "F", "G"] これをこんな感じでhashのkey_…

rubyに値を複数代入する方法(自分用備忘録)

rubyに値を複数代入する方法(自分用備忘録) *c = (1..100).map do |n| n end cに1から100の値が代入される(Array型)

よくる例外エラー概要説明

例外エラー概要説明 NameError 未定義のローカル変数や定数、privateメソッドなどを呼び出した時に発生する。 外部ファイルや外部ライブラリのrequire忘れで発生する。 NameError:uninitializedconstantDate NoMethodError 存在しないメソッドを呼び出そうと…

Procオブジェクトを作る方法

Procオブジェクトを作る方法 Procオブジェクトを作る方法は4つ 1. Proc.new{ a, b | a + b } 2. proc{ a, b | a + b } 3. -> (a, b) { a + b } 4. lamda | a, b| a + b Proc.newとLamdaメソッドの違い ProcもLamdaもProcクラスのオブジェクトを作成できます…

ブロックをメソッドの引数にする方法

ブロックをメソッドの引数にする方法 Rubyではブロックをメソッドの引数として渡すことが可能です。 def メソッド名(&引数) 引数.call end ブロックを引数として受け取る場合は、引数の前に&をつけます。 また、そのブロックを実行する場合はcallメソッド…

文字入力を受け付けるgetsメソッド

文字入力を受け付けるgetsメソッド ターミナル上で入力を受け付ける時はkernelモジュールで定義されている、getsメソッドを利用します。 #getsメソッドを呼ぶとユーザの入力を待つ状態になる。 input=gets Hogeと入力してからリターンキーを押す input#=>"ho…

Rubyのhash

Rubyのhash hashの基本的な利用方法まとめ hashの取り出し方 ハッシュ[ キー] 例) currencies = { 'hoge' => 'soccer', 'huge' => 'baseball', 'hogehoge' => 'basketball' } currencies[' hoge'] #=> 'soccer' 'hoge' => キー 'soccer'=> バリュー hashの…

繰り返し処理でのbreake, nextの使い分け

繰り返し処理でのbreake, nextの使い分け 繰り返し処理の中で挙動を制御する方法によく使うbreakeとnextがあります。 この挙動の違いをまとめます。 break breakeを利用すると、繰り返し処理を抜ける事が出来ます。 numbers = [2, 4, 3, 6, 5] numbers. each…

Rubyでブロック作るときの{}とdo endは何が違う?

Rubyでブロック作るときの{}とdo endは何が違う? Rubyでブロックを作る時に以下のように2通りでブロックを作成することができます。 numbers.each do|n| sum+=n end numbers.each{ |n| sum+=n } この違いは? ・改行を含む長いブロックを書く場合はdo...en…

引数にデフォルト値を指定する方法

Rubyではメソッドの引数に過不足があるとエラーが発生してしまいます。 例) def favorite(sport) if sport=='soccer' '私もサッカーが好きです' else '好きなスポーツは私と違います' end end 引数が少ない favorite #=>ArgumentError:wrongnumberofargument…

Rubyの真偽値

Rubyの真偽値 Rubyの真偽値は以下のようなルールになります。 ・falseまたはnil -> 偽。 ・それ以外はすべて -> 真。 Rubyではnilの場合でも偽と判定されます。

文字列のシングルクオテーションとダブルクオテーションの違い

文字列のシングルクオテーションとダブルクオテーションの違い Rubyでは文字列を作る時にシングルクオテーションとダブルクオテーションを利用できますが。 この2つで文字列を作成した時の違いはなんでしょうか? 'hogehoge' "hogehoge" ダブルクオートで囲…

Ruby 例外処理の書き方

Ruby 例外処理の書き方 Rubyの例外処理の書き方は以下のようにbegin ~ rescue ~ end文を活用します。 begin 例外を発生させる可能性のある処理 rescue 例外が起こった場合の処理 end 例外クラスを指定する場合はこんな感じ begin 1/0 rescue ZeroDivisionErr…

Rubyの命名規則

クラス、モジュール 原則CamelCaseを使う User UserName Micropost MicropostName ネストした場合 Hoge::User Hoge::UserName Hoge::Micropost Hoge::MicropostName メソッド、変数 原則スネークケースを使う find_user new_micropost 定数 定数は全部大文字…

ぼっち演算子 &.

ぼっち演算子 &. &.という演算子を使ってメソッドを呼び出すと、レシーバーがnilであった場合でもエラーが発生しなくなります。 class User def name "名前" end end user = User.new user.name -> "名前" object = nil object&.name -> nil object.name -> …

moduleはオブジェクトを作成できない

moduleはオブジェクトを作成できない moduleはクラスと異なり、オブジェクトを作成することが出来ません。 例えばこんな時にエラーになります。 module Chatting def hello "hello" end end object = Chatting.new -> NoMethodError 「newなんてメソッドは知…

Rubyではメソッド内で最後に評価された値が返り値になる

Rubyではメソッド内で最後に評価された値が返り値になる Rubyでは、returnをつかって明示的に指定された値や、メソッド内で最後に評価された値がメソッドの返り値になります。 つまりこのコードと class User def name return "ホゲー" end end このコードの…

Rubyの三項演算子が便利

Rubyの三項演算子が便利 if boolean? var = foo else var = bar end これを三項演算子で書くと var = boolean? ? foo : bar コンパクトにまとめることが出来ます。 さらにRubyでは暗黙的にメソッドの最後に評価した式の結果を返すので、三項演算時の結果を変…