箱のプログラミング日記。

えんじにあ奮闘記

gemのコードリーディングを初めてやってみる【ActiveSupport】

タイトルの通り、gemのコードリーディングを初めてやってみたので手順などメモ。 なぜやるのか 最近gemのコードを読む機会が多くて、大体はREADMEでは分からない情報を取ってきたい時にGitHubリポジトリ内で検索かけつつ読むくらいだったのだけど、 他人のコ…

Rubyでバブルソートを書いてみる

Rubyにはsortメソッドがあって、その名の通りソートしてくれるんだけど a = (1..9).to_a.shuffle => [1, 2, 8, 7, 4, 3, 9, 5, 6] a.sort => [1, 2, 3, 4, 5, 6, 7, 8, 9] これをsortを使わずに実現したい。 バブルソートで実装してみる。 バブルソートとは …

RubyでFile.openを使うときに気をつけたいこと

タイトル通り。 これまであまりファイルの扱いをするような実装をしてこなかったのでメモ。 Ruby...2.4.3 CSV...2.4.8 File.open ファイルアクセスのためのクラス。openに引数を渡すことでファイルオブジェクトを生成する。 File.openとFile.newで何が違うん…

「privateメソッド=外から呼び出せないやつ」から抜け出す【Ruby】

「privateメソッドって外から呼び出せないやつでしょ?」「レシーバを指定して呼び出せないんでしょ?」から抜け出すべく色々試してみた。 ※2.7以降はレシーバにselfをとれるようになったようなのでバージョンを変えて検証してみた。 試してみる $ rbenv loc…

NoMethodError: undefined method `new' for BigDecimal:Class と言われた時

Rubyのバージョンを2.7.0にあげてrake taskを実行したら見たことないエラーが出たので対処法をメモ。 Ruby...2.7.0 Rails...5.1.5 発生したエラー NoMethodError: undefined method `new' for BigDecimal:Class 下記の記事によると、decimal型のカラムがある…

Amazon Linuxにbundlerがインストールできない

rubyのバージョンを変えた後に新しいbundlerがインストールできずに困ったのでメモ。 Ruby2.4.3(→2.5.0) Rails5.1.5 Amazon Linux AMI release 2018.03 Rubyのバージョンを特定のディレクトリのみ変更 今回、以下のような状況だった。 元々Ruby2.4.3が入っ…

mysql2のインストールでエラーになる / opensslのパスを通す

Railsのプロジェクトでbundle installしたところ、mysql2のインストールでエラーになってしまったのでメモ。 Ruby...2.4.3 Rails...5.1.5 mysql2 発生したエラー Fetching mysql2 0.4.10 Installing mysql2 0.4.10 with native extensions Gem::Ext::BuildEr…

ffiがインストールできない

ffiが突然インストールできなくなったためメモ。 発生したエラー Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/hako/Project/sample_app/vendor/bundle/ruby/2.4.0/gems/ffi-1.9.23/ext/ffi_c /Users/hak…

【RSpec】CSVダウンロードのcontrollerテストを書く

RSpecでCSVダウンロードのcontrollerテストを書く方法をまとめていきます。 環境 ruby 2.4.3 Rails 5.1.5 rspec-rails (3.7.2) factory_bot_rails (4.8.2) 完成したソースコード 先にソースコード貼っちゃいます。 まずはコントローラー app/controllers/use…

Dockerコンテナのタイムゾーン設定を変更する

Dockerコンテナのタイムゾーン変更でハマったのでメモ。 結論から言うと、docker-compose.ymlに環境変数TZを設定すればうまくいった。 環境 Ruby 2.4.3 Rails...5.1.5 MySQL 5.7 Docker 19.03.12 Dockerコンテナ...app(Rails)/ db(MySQL)/ nginx 流れ そ…

Rubyで正規表現を使いたい

久しぶりにRuby記事。 前々から苦手意識が拭えなかった正規表現を理解できたのでまとめておく。 正規表現オブジェクト そもそも正規表現自体がオブジェクト。 きちんと考えれば分かることだけど、今までちゃんと意識したことなかった。 正規表現オブジェクト…

JavaScriptの型変換〜Rubyと比較〜

最近生のJSをきちんと勉強し始めて、知らなかったことがちょこちょこ出てきたのでRubyと比較しながら書いていきます。 JavaScriptの型変換 文字列に変換 String()関数を使用 String(1); // => "1" String([1, 2, 3]); // => "1,2,3" String(true); // => "tr…

文字列の一部を削除したい【delete / gsub】

Railsで開発していて渡ってきた文字列を操作したいなーと思った箇所があったのでメモ。 deleteメソッド delete(*strs) -> String self から strs に含まれる文字を取り除いた文字列を生成して返します。 引用:String#delete (Ruby 2.7.0 リファレンスマニュ…

複数バージョンのインストール【Ruby】

個人開発でRubyを使うときに、仕事で使っているバージョンより新しいものを使いたいな、と思って別バージョンのインストール方法を調べてやってみたので、まとめておきます。 rbenvのインストール Rubyのバージョン管理にはrbenvが必要になるのでインストー…

Homebrewってなんなんだ

最近、無事入社しました。 環境構築をしているところなんですが だいぶつまづいたついでに、今までよく分かっていなかった Homebrewって何してるの?みたいなことがだいぶ理解できたので、書いておきます Homebrewとは macOS専用のパッケージ管理マネージャ…

パーセント記法についてまとめる【Ruby】

Railsチュートリアルをやっていたところ、 こんなソースに遭遇しました。 >> a = %w[foo bar baz quux] # %wを使って文字列の配列に変換 ん??この%wって何だ。。 調べたところ、パーセント記法だった。 ドットインストールで学習済みにも関わらず、ピンと…

配列に対する繰り返し処理【map】【collect】

Rubyで配列に対して繰り返しの処理を行う時は、まずeachを使っていたのですが mapやcollectについてもきちんと勉強し、使いこなせるようにしようと思い 色々試してみました。 mapメソッドとは array.map { |item| block } mapメソッドは、要素の数だけ繰り返…

each_with_indexをうまく使う【rubyアルゴリズム】

本日もrubyのアルゴリズム問題から、勉強になった部分を抜粋。 問題 以下の配列から、数を探して何番目に含まれているか結果を返すメソッドを作成してください input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93] 自分の解答 def searc…

【rubyアルゴリズム】整数を分解したい

アルゴリズム問題を解いているとたまにある、 「二桁の整数を10の位と1の位に分解して、それらをどうこう」 みたいなやつ。 「分解」と聞いて真っ先に思い浮かぶのが 私の場合はsplitなんだけど(安易?) splitってstringに使うものだから整数にto_sするの…

elsifを使わずにfizbuzzを実現【Ruby】

有名すぎるアルゴリズムのうちの一つ、fizbuzz問題の応用編を解きました。 一般的なfizbuzz問題 1から100まで数を数える時に、3の倍数なら「fizz」、5の倍数なら「buzz」、ただし15の倍数なら「fizzbuzz」、それ以外はその数を答えなさい。 普通に解くなら、…

Rubyの繰り返し処理いろいろ

繰り返しといえばwhile文かたまにfor文という感じたったのだけど 調べたら他にも便利な繰り返し処理がいくつかあって、 用途によって使い分ける必要があるなぁと感じたので使ってみました。 今回使ったのはupto - 0.upto(10) do |i| (hamlで書いてます) iが…

モデルに書くゲッターの使いどころ

まだRubyとRailsの学習を初めて3週間程度の初学者ですが、 今日「初学者ならではの目線」である疑問が浮かびました。 def review_average reviews.average(:rate).round end 何かの値を返してくれるだけのために定義するメソッドをゲッターと呼びますが、 …

「1:多」の関係性

「1:多」の関係性とは 例)ツイッターの場合 ユーザーがツイートをすると、そのツイートに対してコメントが投稿される。 この時、 ツイートが複数のコメントをもち、一つのコメントは必ずどれかしらのツイートに所属している関係性が成り立つ。これをプロ…

メソッドってそもそも何のために使うの?

メソッドとは何なのか Rubyにおけるメソッドの考え方が難しくて、概念を理解するまでに何度もつまづいたので残しておこうと思います。 どういう時にメソッドを生成するのか ⇨何かの値を定義したい時。 それなら、変数でいいのでは? ⇨変数だと、変数に代入さ…

メソッド内でハッシュの中身を取り出す【引数】【ハッシュ】

例) def dog_info(dog,input) puts dog[input] end dog = {name: "コロン", type: => "チワワ", gender: => "メス"} puts "以下から知りたい情報を一つ選んでください ・name ・type ・gender" input = gets.chomp dog_info(dog,input) 解説) 以下の情報を…

rubyにおけるwhile文の仕組みについて

rubyにおけるwhile文の仕組み よくif文と混同されることがありますが、 while文もif分も「この条件の時にこれをしてくださいよ」と指示をするものです。 if分の場合、処理を行うかどうかの条件はtrueかfalseによって判断されます。 つまり、基本形は「これが…