- 0.1. Rubyの基本的な知識(備忘録)
- 0.2. Railsに簡単な検索フォームを作ってみた(Ransack)
- 0.3. 何か作れるようになるまで
- 0.4. 空白か先頭か(あるいは空白か文末)という正規表現
- 0.5. 【Rails】Model名とControllerのModule名が重複してNoMethodErrorが発生した時の対応
- 0.6. railsで新規プロジェクトを作成する手順
- 0.7. Rubyでスマートに+09:00を出したかった
- 0.8. 【Rails】レコードを配列の順番に並び替える
- 0.9. Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件
- 0.10. 【備忘録・Ruby】to_○メソッドまとめ
- 0.11. 【rails】chartkick導入ガイド
- 0.12. 【Ruby】あるメソッド内で別のメソッドを呼び出す時に意識すること
- 0.13. インフラエンジニアがRubyでAPI作ってみた②
- 0.14. Rubyではメソッド名と同じ名前のローカル変数を宣言しないようにしよう
- 0.15. Ruby 変数のスコープ レキシカルスコープ
- 0.16. Rubyのテスト(Minitest)を初めて使ってみた
- 1. テストを書くことについて
- 2. テストの実行と解説
Rubyの基本的な知識(備忘録)
プログラム言語「Ruby」とは?
①入力する文字数が少ない。
②初心者でもわかりやすく、理解しやすい言語である。
③日本人により開発された言語であるため、日本語の情報が豊富に存在する。
④Ruby On Railsと言われる補助言語(フレームワーク)のようなものがあり、いろんな機能を素早く実装できる。
⑤スタートアップ等の企業で採用されることが多い。(とのこと。)【主観】
個人的に他の言語「Python、Java」等の言語を調べたが確かに、Rubyの方が記述量は少なく理解しやすかった。今後も学んだことを発信していきたいと思います。
Railsに簡単な検索フォームを作ってみた(Ransack)
自分の作成している掲示板サイトに簡単な検索フォームを作りたいと考え、Ransackというgemを使い、記事を参考にしながら作成しました。
参考記事
環境とver
ruby ‘2.7.5’
rails ‘6.1.4’
Dockergithub
https://github.com/takoyan33/railsdock4まず最初に
“`Ruby:Gemfile
gem ‘ransack’
#ransackを追加
“`“`Ruby:ターミナル
bundle install
#dockerの場合、docker-compose run web bundle install
“`
これでransackを入れることができました。
次にコントローラーに記述します。
自分の場合、kaminariのgemを入れているのと、降順に表示したいので、
色々後ろについています。
普通に追加する場合は、.page(params[:page]).per(8).all.order(id: “DESC”)の後ろは消して大丈夫
何か作れるようになるまで
# あらすじ
ひょんなことからフロントエンドコーダーとしてインターンで採用され、WEBサイトをコーディングしてきたが、今一度立ち返って自分の能力を評価すると「HTMLとCSSしかちゃんとかけてないじゃん」となった。
将来は立派なエンジニアになりたい私はこの1年間で立派なポートフォリオを作って大学を卒業しようと心に決めた。。# 技術選定
とりあえずRubyとReactを選びました。理由は特にないです。
なんでもいいからとりあえずプログラミングをできるようになりたいという理由だけなので、特に深く考えずに「プログラミング言語 おすすめ」で検索して無難そうなものを選んだ感じです。# 今後の予定
各言語でキャッチアップを始めています
– Ruby
– まずはRubyだけで色々なものを作ってみる
– 目的としては、「基礎文法の理解」と「のちのフレームワークの理解を早めるために言語の仕様はしっかり理解しておく」
– Paizaとか使おうかな
– React
– チュートリアル
– 脳死で作れるようになる→PropsやStateの理解を完璧にする
空白か先頭か(あるいは空白か文末)という正規表現
正規表現で少し詰まったので、記事としてアウトプットしておく。
Ruby 2.7.6で検証しています。
## やりたいこと
(空白か先頭)特定の文字列(空白か文末)という正規表現を書きたい。改行は入らないので考慮を今回はせず1行の文字列で考えます。
この正規表現を特定の文字列strに対して、`reg(str)`としましょう。具体的には
“`ruby
> ‘ 大阪市’.match?(`reg(‘大阪市’)`)
=> true> ‘ 大阪市’.match?(`reg(‘大阪’)`)
=> false> ‘ 大阪 市’.match?(`reg(‘大阪’)`)
=> true
“`のようなイメージ。純粋にinclude?関数を使うと、後者はtrueになってしまうので別途正規表現を作る必要が出てきました。
## こんな正規表現を書いた
“`ruby
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪市’}[\s|\z]/)
=> false
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪’}[\s|\z]/)
=> false
“`通常の
【Rails】Model名とControllerのModule名が重複してNoMethodErrorが発生した時の対応
備忘を兼ねて
## Moduleとモデル名が重複するとNoMethodErrorになる
ファイル構成
“`
app
├── controllers
│ └──user
│ └── hoges_controller.rb
└── models
└── users.rb
“`“`rb:hoges_controller.rb
module User
class HogesController < User::ApplicationController def index User.where(id: ids) end ## その他メソッド省略 end end ``` ```:エラー内容 NoMethodError in User::HogesController#index undefined method `where' for User::Module ``` ## エラーの原因 モデル名とコントローラー側で定義したモデュール名が重複しており、`User
railsで新規プロジェクトを作成する手順
備忘録。
railsで新規プロジェクトを作成する。### ツール
– SourceTree### 環境
“`
ruby -v
#=> ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]rials -v
#=> Rails 6.0.2.1
“`### rails new
“`
rails _6.0.2.1_ new appname –database=postgresql –skip-bundle
“`– `\_6.0.2.1_`
railsのバージョンの指定– `appname`
アプリケーションの名前を記述する– `–database=postgresql`
データベースの指定– `–skip-bundle`
Gemfileを読み込まないようにする:::note
「なぜGemfileを読み込まないようにするのか?」
Gemfileには、railsのバージョンに関する記述がある。その記述は、railsの最新版をインストールするように指定している。
この環境だと、
Rubyでスマートに+09:00を出したかった
皆さんはアプリケーション開発中に、タイムゾーンを意識することはどれくらいあるでしょうか?
普段の開発だと、一度設定してしまえば中々意識しにくいものですが、たまたま今回こちらに関して触る機会があったので記事にすることにしました。
## 今回やりたかったこと
UTCからの時差を`+09:00`のような、`±xx:yy`(xxが時間、yyが分)の形式で取得することです。
というのも、Elasticsearchに時差を考慮した日程の絞り込み検索を行いたい、と考えていました。
Elasticsearchでcreated_atが2022年4月のドキュメントを探したい、という場合以下のような絞り込みを行います(下記はクエリの一部を抜粋)。“`json
{“filter”:{“range”:{“created_at”:{“gte”:”2022-04-01″,”lt”:”2022-05-01″}}}
“`しかし、これではタイムゾーンが何も配慮していないため、時間の絞り込みはUTC基準で行われ、日本時間だと9時間ずれてしまいます。
この場合、そもそもcreated_atを9時間ずらして入
【Rails】レコードを配列の順番に並び替える
# 初めに
## 環境
Rails 7.0.2
Ruby 3.1.1## やりたいこと
配列の順番にレコードを並び替える。
# 本文
通常 where に配列を渡して、レコードを取得すると id 順に並び替えられて取得されます。
ですが`in_order_of`を使用することで配列の順番に並び替えられます。“`ruby
arr = [11,2,4,6,8,1]users = User.where(id: arr)
# puts users.ids -> [1,2,4,6,8,11]users = User.where(id: arr).in_order_of(:id ,arr)
# puts users.ids -> [11,2,4,6,8,1]
“`ちなみに `Rails 7.0.0`になってから追加されたメソッドでデータベースが `Mysql` や `postgresql` でも関係なく動きます。
# 参考
[in_order_of – Rails ドキュメント](https://railsdoc.com/page/in_order_of)
Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件
いつも通りRailsアプリをHerokuにデプロイしようとすると、以下のようなエラーが出た。
“`
>> git push heroku master
Enumerating objects: 67, done.
Counting objects: 100% (67/67), done.
Delta compression using up to 16 threads
Compressing objects: 100% (50/50), done.
Writing objects: 100% (54/54), 23.86 MiB | 311.00 KiB/s, done.
Total 54 (delta 17), reused 22 (delta 4), pack-reused 0
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504
send-pack: unexpected disconnect while reading sideband packet
fatal: the remo
【備忘録・Ruby】to_○メソッドまとめ
## 初めに
こんにちは、だいごです。
今回はRubyのto_○メソッドをまとめていきます。
よかったらご覧ください。## to_○メソッドまとめ
今回まとめていくto_○メソッドは以下に記すものになります。
– to_sメソッド
– to_iメソッド
– to_aメソッド
– to_fメソッド
– to_hメソッド
– to_symメソッド今回はまとめないメソッドはこちらになります。
– to_cメソッド(=複素数に変換)
– to_rメソッド(=有理数に変換)### to_sメソッド(s:string)
文字列以外のオブジェクトを文字列に変換するメソッド。“`ruby
オブジェクト.to_s# 使用例
10.to_s
=> “10”
nil.to_s
=> “”
hoge.to_s
=> “hoge”
“`### to_iメソッド(i:integer)
文字列を整数に返すメソッド。
また、小数を整数に変換することもできる。
もし、文字列に整数と認識できないものがあれば、その場合は0を返す。“`ruby
文字列.to_i# 使用例
“10”
【rails】chartkick導入ガイド
# はじめに
個人開発の過程でkickchartを利用する機会があったのですが、日本語の記事でわかりやすいものがあまり見つからなかったので公式ドキュメントを日本語化&個人的に役に立った内容を記載しておきます!kickchartを利用する際の参考にしてください!!# 導入
まずはkickchartの導入からです。rails のバージョンによって導入方法が違うので注意してください!
どのバージョンであってもまずはgemファイルに以下の記述を書き加えてください!!“`ruby:gemfile.rb
gem “chartkick”
“`## rails7の場合
configのimport.rbに以下の記述を追加してください。
“`ruby:config/importmap.rb
pin “chartkick”, to: “chartkick.js”
pin “Chart.bundle”, to: “Chart.bundle.js”
“`また、app/javascript/application.jsに以下の記述を追加してください。
“`ruby:app/j
【Ruby】あるメソッド内で別のメソッドを呼び出す時に意識すること
こんにちは。
早く駆け出したい @iloveomelette です。突然ですが、みなさんはあるメソッド内から別のメソッドを呼び出したい時のインスタンスメソッドとクラスメソッドの使い分けはできますでしょうか。
恥ずかしい話ではありますが、私はあやふやでよく`NoMethodError`を出していました。今回、勉強したことをここにアウトプットしていきますので、
私と同じく使い分けが曖昧な方はサラッとでも良いので、参考にしてくださると幸いです。尚、ご指摘箇所がございましたら
ご教授いただけますと幸いです。## 問題
いきなりですが、問題です。
以下の`Actress`クラスにある`yoshioka`メソッドはブロック内にある`arimura`メソッドを呼び出すことはできるでしょうか。“`ruby
class Actress
def self.yoshioka
arimura
enddef arimura
puts ‘Hello World!!’
end
endActress.yoshioka
“`正解は…
“`zs
インフラエンジニアがRubyでAPI作ってみた②
## 前置き
前回の記事に引き続き、今回もRubyでAPIを作成していきます。
Docker Desktop,SequelAce, Rubyがインストールされている方は同じように作ることができます。https://qiita.com/KentaroYoshizumi/items/f8c6d002972b61e10001
参考記事:
https://qiita.com/mokio/items/7d36a7aa79a4bf5066e9
今回は前回よりも少しだけ難易度をあげて、
①ローカルにMySQLコンテナを作る。(アクセスできることを確認する)
↓
②ローカルでAPIを作る。(DBに値を登録する。)
↓
③コンテナ内のDBを参照してみる。といった流れで進めようと思います。
## ①ローカルにMySQLコンテナを作ってアクセスしてみる。
まずは今回作成する一連のファイルを配置するためにディレクトリを切っていきます。
“`
$ mkdir API_sample
“`
作成したディレクトリに移動します。“`
$ cd API_sample
“`このディレク
Rubyではメソッド名と同じ名前のローカル変数を宣言しないようにしよう
## はじめに
問題です。次のプログラムを保存して実行したとき、ターミナルにはどのような結果が表示されるでしょうか?“`ruby
# fromからtoまでの連続した整数を配列として返す
def numbers(from: 0, to: 10)
(from..to).to_a
enddef main
p numbersnumbers = numbers(from: 3, to: 7)
p numbers
p self.numbers
p numbers()
endmain
“`はい、答えはこうです。
“`
$ ruby sample.rb
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`予想は当たりましたか?
## 簡単に解説
`main`メソッドの振る舞いにコメントを付けていきます。Ruby初心者の方もこれでなんとなく理解でき
Ruby 変数のスコープ レキシカルスコープ
## はじめに
RubyとJavaScriptの違いに手間取ったので備忘録**JavaScriptのコード**
“`js
let sample = “tee”const hello = () => {
if(sample === “tee”) {
return “teeです”
} else {
return “該当しません”
}
}console.log(hello()) //出力結果 “teeです”
“`**Rubyのコード**
“`rb
sample = “tee”def hello
if sample == “tee”
return “teeです”
else
return “該当しません”
end
endputs(hello())
# 出力結果
# undefined local variable or method `sample’
“``JavaScript`では関数の外側(レキシカルスコープ)の変数を参照可能です。
`Ruby`ではできない。これちょっとひっかりました・・・
初めて
Rubyのテスト(Minitest)を初めて使ってみた
Rubyのテストフレームワークを使ってみました。
テストを書くことについて
前提として、テストを書くことは非常に重要で、
環境が壊れていないこと、コードが記載通りに実行できることの確認をすることができます。環境が壊れていなくても、
バージョンの違いなどによって、動くはずのコードが実は動いていない!!など、起こり得ることです。基本的に、以下の順序で行うものだと学びました。
① 意図的にエラーが起こることを確かめる(異常系)
② ①を変更して、正常に動作することを確かめる(正常系)今回は、RubyのテストフレームワークのMinitestについてです。
上記の、①、②の順序でテストを実行してみます。テストの実行と解説
コードをまずは書いてみましょう。
“`
require ‘minitest/autorun’class RubyTest < Minitest::Test def test_ruby assert_equal 1, 1 + 1 end end ``` まずは、以下でMinitestライブラリを呼び出
Anitage+
https://bitsend.jp/
Ruby on Rails 6.1.5 を Ruby 2.7.6 から Ruby 3.0.4 にあげるときにやること
掲題の作業を実施したところ、色々とハマったので、備忘録として残しておきます。
## 環境
* Ruby 2.7.6 -> 3.0.4
* Ruby on Rails 6.1.5## Ruby 3.0.4 にあげるときに必要なこと
### (WEBrick 以外を使っていない場合) WEBrick をインストールする
#### 理由Ruby 3.0.0 より WEBrick が標準ライブラリから削除されました。そのため、Ruby 3.0.0 以降で WEBrick を使いたい場合は、別途インストールが必要になります。
https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/
### bootsnap 1.9.3 以上にする
Ruby 3.0.4 で `rails s` を実行すると以下のエラーが発生します。
“`
% bundle exec rails s
$RUBY_HOME/3.0.0/gems/bootsnap-1.9.1/lib/bootsnap/compile_cache/iseq
Ruby 配列の中にあるハッシュをeachで回す方法
## 実現させたこと

上の写真の左側は画像、右側はaタグでそのアカウントに飛ぶようになっている。
ここまでやったこと順番に解説する。## 実装手順
### データ取得
“`
apps/controllers/application_controller.rbinsta_accounts = LvtInstaAccount.all
@insta_info = []
insta_accounts.each do |insta_account|
data = {}
data[“screen_name”] = insta_account.screen_name
data[“profile_picture_url”] = insta_account.profile_picture_url
インフラエンジニアがRubyでAPI作ってみた
## 自己紹介
はじめまして。
普段はインフラエンジニアとして業務に当たっております。
未経験からエンジニア転職をした身なので、業務の中でこんなにもコードを書かないものかと、転職前とのギャップに驚いています。
あまりにコードを書かなくて成長を実感しなくなったため、業務外でAPIを作って遊んでみることにしました。
どうぞお付き合いください。## 今回作るAPI
バンド名とバンドID,曲の名前を返す簡単なものを作成したいと思います。
ただし最初はローカルにサーバーを立てて実行しますが、次回にはDB側をコンテナに、最終的にはAPIもDBもコンテナで動かすという風に、徐々に難しくしていけたらと思います。## 手順(1)
①railsプロジェクトを立ち上げる
↓
②modelを作る
↓
③仮のデータを流し込む
↓
④ルーティングを設定する
↓
⑤コントローラを記述する
↓
⑥実際に叩いてみるシンプルですがこの手順でいこうと思います。
のちに難しくしていきます。
あくまで作って動かしてみることを目的としていますので。### railsプロジェクトの立ち上げ
ターミナルから以下を実