- 1. Ruby 会議2022レポート(1日目と2日目)
- 2. アルゴリズムでよく使う手法(Ruby)
- 3. has_manyのsourceオプションはいつ使うのか
- 4. RSpec使い方まとめ
- 5. [Ruby]二重ハッシュからの特定の値の取得方法
- 6. 独自フレームワークをVercel for Gitに対応する
- 7. 指定された範囲の数値(時間)によって処理が異なるプログラム
- 8. 特定の文字列検知
- 9. Ruby On Rails で 主キーに UUID を使用する
- 10. GitHubにほったらかし収入源botコードをあげたが反応がないのでQiitaにさらす(アダルト注意)
- 11. shopify-api-ruby の ShopifyAPI::ResourceName.all でデータを全件取得する方法
- 12. Raspberry Pi Pico 用の mruby を Build するためのコンテナ作成用 Dockerfile を書いてみた
- 13. Ruby on Railsでrails sが起動しない rails aborted! TZInfo::DataSourceNotFound
- 14. slice!メソッドの備忘録
- 15. [Rails] コメントの削除方法
- 16. RubyでCSV操作する
- 17. フレームワークやプログラミング言語を年収や求人数からスコア化してみる
- 18. each_with_indexを使ったプログラム
- 19. ただMacのターミナルでRubyとRailsを最新バージョンにしたかっただけなのに。。
- 20. 【Ruby】Rubyのわかりにくい文法
Ruby 会議2022レポート(1日目と2日目)
こんにちは!ruby2年目エンジニアのHiraです!
今回は、Ruby会議2022に参加してきたので紹介したいと思います!イベントのタイムスケジュールとセッション
https://rubykaigi.org/2022/schedule/#day1
去年と同様であれば、youtube上でも今後配信されるのでこちらも是非!
https://www.youtube.com/channel/UCBSg5zH-VFJ42BGQFk4VH2A/playlists?app=desktopせっかくなので、画像もぺたり
![9614BDF9-C7E8-41E2-BA1E-28DD256A7C78.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539384/2dbd5bb8-a4b5-3f62-b2fc-0c20f2a5ff0f.jpeg)# セッション
すべてを見ることはできなかったので、個人的に気になったトピック## 一日目
### Ruby meets WebAssembly
スライドh
アルゴリズムでよく使う手法(Ruby)
# アルゴリズムでよく使う手法まとめ
paizaでアルゴリズムの練習問題でよく使い、よくつまずくポイントを残します。## 向きについて
マスを進んでいく問題で向きを変えながら一マスずつ進む問題での向き判定“`rb
# 左から上、右、下、左
move = [[-1, 0], [0, 1], [1, 0], [0, -1]]# 向き
now = 0# 初期位置
y, x = [3, 3]# 向きによってy, xを変える
# 向きの値を4で割り、その値によってmoveに入っている変化する値を取得できる。
ny = y + move[now % 4][0]
nx = x + move[now % 4][1]# 方向変換がある場合、値を1増減することで4で割って出るあまりの値を変える。
if d == ‘L’
now -= 1
else
now += 1
end# 枠が指定されている場合はみ出さないように判定する
h = 10
w = 10
0 <= ny && ny <= h - 1 && 0 <= nx && nx <= w - 1 ``` ## 累積
has_manyのsourceオプションはいつ使うのか
has_manyメソッドのsourceオプションは次の場合に使用します。
1. 多対多のアソシエーションに別名をつける
2. has_manyで指定するモデル名が重複している例として、ユーザーが投稿を作成・いいねできる関連付けを行います。
![qiita-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1881292/053db736-90b1-83ee-8377-7dc51705ef82.png)#### いいねした投稿を取得する
“`ruby
#models/user.rb
class User < ApplicationRecord has_many :posts has_many :likes end #models/like.rb class Like < ApplicationRecord belongs_to :user belongs_to :post end #models/post.rb class Post < ApplicationRec
RSpec使い方まとめ
## Let メソッド
各example共通の変数を作れるらしい
“` let(:変数名){変数の値} “`という感じで書く
なおletで作った変数は、各exampleの内部で値を変えても
別のexampleの内部には影響しない“`ruby
RSpec.describe Card do
let(:card){
Card.new(“Ace”,”Spades”)
}
# letメソッドを使って各example共有の変数cardを作る
# letブロックの内部は必要なときにのみ計算される
it “has a rank and we can change it” do
expect(card.rank).to eq(“Ace”)
card.rank = “King”
expect(card.rank).to eq(“King”)
end
# 上記exampleでcard.rankを書き換えているが
# 他exampleの内部には影響はない
it “has a suit” do
expect(card.suit).to eq(
[Ruby]二重ハッシュからの特定の値の取得方法
プログラミング初心者です。
自身の備忘録として、記事を投稿していきたいと思います。## 二重ハッシュからの特定の値の取得方法について
まずハッシュから特定の値を取得するには
“`ruby
ハッシュ[取得したい値のキー]
“`で取得できます。
次にハッシュが二重になっている場合は
“`ruby
ハッシュ[取得したい値のキー][取得したい値のキー]
“`で取得できます。
よって 以下のハッシュから「John」を取り出すには
“`ruby
user_data = {user: {name: ‘John’}}
puts user_data[:user][:name]
“`となります。
独自フレームワークをVercel for Gitに対応する
# はじめに
[Vercel for Git](https://vercel.com/docs/concepts/git)を使うとpull request発行時にプレビュー環境へのデプロイを行ったりmainへのマージに連動した本番デプロイが出来ます。Next.jsのような有名なフレームワークであったり、標準的な手順でビルド・デプロイが可能なものであればサクッとレポジトリをインポートしてやれば使用可能になるこの便利機能ですが、そうすんなり行かないプロジェクトでこの機能を使うための対応作業を行ったので本記事で内容を紹介します。# 対応内容
今回はruby.wasmを使ってSPAを構築するパッケージ”[Bormaŝino](https://github.com/keyasuda/bormashino)”を使用した[プロジェクト](https://github.com/keyasuda/bormashino-app-template)をVercel for Gitに対応させました。
このプロジェクトをビルドするには以下の環境が必要となります。
– rbenvが導入済みである、もしくはrub
指定された範囲の数値(時間)によって処理が異なるプログラム
今日も学んだ事を忘れない為にメモします
### プログラム内容
第一引数に音が鳴った場合はtrueを指定し、鳴らない場合はfalseを指定する。(trueとfalseは真偽値)
第二引数に時間を指定し、指定した時間内(今回は21時から翌朝8時)に鳴った場合は”NG”を出力。
指定した時間内に鳴らない場合は”OK”を出力する。### 記述内容
“`
def siren_sound(sound, hour)
if sound && (hour < 8 || hour > 21)
puts “NG”
else
puts “OK”
end
endsiren_sound(false, 12)
siren_sound(true, 22)
“`
“`:出力結果
OK
NG
“`第一引数soundの条件式は真偽の判定を行うだけなので、trueが入っているときに真(true)と判断される。
肝心なのは第二引数のhourの条件式。
2つの条件式が真(true)のとき「NG」が表示され、それ以外のとき「OK」が表示されるようにしたいので、それらを結ぶ
特定の文字列検知
# check_nameメソッドを実装
以下の雛形から次の条件の処理を実装する。・名前を入力すると「登録が完了しました」という文字列を出力すること
・名前の中にピリオド(.)がある場合は、「 “!エラー!記号は登録できません”」という文字列を出力すること
・名前の中に空白(半角のみ)がある場合は、「 “!エラー!空白は登録できません”」という文字列を出力すること
“`hinagata.rb
def check_name(str)
# 処理を記述
endputs “登録したい名前を入力してください(例)YamadaTaro”
str = gets
check_name(str)
“`# include?メソッドを使う
include?メソッドはその文字列内や配列内に指定した値が含まれているかどうかを判定するメソッド。
“`example.rb
puts “hello”.include?(“llo”)
# => true
array = [“apple”, “banana”]
puts array.include?(“なす”)
# => false
“`
Ruby On Rails で 主キーに UUID を使用する
# Ruby On Rails とは?
– Ruby On Rails (以下、Rails)については[こちら](https://ja.wikipedia.org/wiki/Ruby_on_Rails)をご確認下さい。# UUID とは何か?
– UUID とは **Universally Unique IDentifier** のことで普遍的な一意の識別子のことを指す。# なぜ Rails で主キーに UUID を使用するのか?
– 例えば MySQL であれば主キーに **AUTO_INCREMENT** を使用するケースが多いと思いますが、そうすると該当ページへアクセスする場合、 Rails では URL が `https://example.com/users/1` というようになってしまい、 **1** の部分が **2** だったらどうなのか、 **10**、**100** だったらどうなのか・・・というような感じで簡単に推測されてしまいます。
– [cancancan](https://github.com/CanCanCommunity/cancancan)
GitHubにほったらかし収入源botコードをあげたが反応がないのでQiitaにさらす(アダルト注意)
# はじめに
![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850355/ea25f804-5cf8-f15d-82d8-6bcb6bfae8bb.png)
こんな感じでDUGA(アダルト動画サイト、わりとマニアックな作品が多い)で販売されているアダルト動画情報をツイッターに自動で定期的に投稿するbotを作成しました。リンクはアフィリエイトになっているので、夢の**不労所得獲得装置**が完成します。私自身、いつくかこのようなbotを作成して月額約5万円の不労所得を得ていますが、最近はアイデア的にも技術的にも頭打ちで、「こうしたらもっと儲かる」とか「もっとこういう情報が欲しい」とか「このコードの書き方は危ない」といったアドバイスをいただきたく、GitHubにRubyコードとbotの設定のしかたなどをアップロードしました。もっと勉強して月額50万円をめざしたいと思います。
https://github.com/dugabot0/duga_bot
レポジトリはこちら。GitHub
shopify-api-ruby の ShopifyAPI::ResourceName.all でデータを全件取得する方法
## 背景
– Shopify の 公式 Ruby 用 API クライアント「[shopify-api-ruby](https://github.com/Shopify/shopify-api-ruby)」を使って Shopify 各リソースのデータを全件取得したい。
– `ShopifyAPI::ResourceName::all` を実行しても一部データしか取得できなかった。“`ruby
# 例) 商品データを全件取得したい
products = ShopifyAPI::Product.all
products.size=> 50
“`## 原因
どうやら、`all` メソッドで取得できるのは最初の50件までみたいです。(おそらく裏側で limit 句みたいなものが働いている?)
## 対策
`fetch_next_page` メソッドを使う事で次の50件が取得できました。
“`ruby
products.fetch_next_page
“`また、次のデータが存在するかどうかは `next_page?` メソッドで確認できます。
“`ruby
Raspberry Pi Pico 用の mruby を Build するためのコンテナ作成用 Dockerfile を書いてみた
# はじめに
@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。
最初にいつも通りのお断りをば。
自分、仕事では一切マイコンボードを利用した業務に携わったことがございません。
以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。
… はい。
# Raspberry Pi Pico 用の mruby を使えるようになっていた(凄い! 嬉しい!)
いつものごとくネットをサーフィンしていて、[Raspberry Pi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/) 用の mruby を使えるようにしてくださった方がおられることに、先日気が付きました。
Raspberry Pi Pico って [MicroPython](https://micropython.org/) とか使って弄くっても良いんですが、やっぱり Ruby 言語使って操作したいんですよ、自分は。
早速、使えるようにしてく
Ruby on Railsでrails sが起動しない rails aborted! TZInfo::DataSourceNotFound
# 内容
[Progateのサイト](https://prog-8.com/docs/rails-env-win)の通りに環境構築をしていた時に出たエラー
rails sが通らない/サーバーが起動しない# 構成
Windows 11 Pro 21H2
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]
Rails 7.0.4# エラー内容
rails aborted!
TZInfo::DataSourceNotFound: tzinfo-data is not present. Please add gem ‘tzinfo-data’ to your Gemfile and run bundle install# 改善方法 2工程
1, プロジェクト内のGemfileの40行目を変更する
gem “tzinfo-data”以降をコメントアウト
“`diff:
– gem “tzinfo-data”, platforms: %i[ mingw mswin x64_mingw jruby ]
+ ge
slice!メソッドの備忘録
今日も学んだことを忘れない為にメモします
### slice!メソッドとは
配列や文字列から指定した要素を削除し、削除した後の要素を返すメソッドでもとの配列や文字列を変化させる破壊的メソッドの一種
“`
string = “abcdefg”
string.slice!(2)puts string
#=> “abdefg” #2番目の要素のcが取り除かれている
“`このslice!メソッドを用いて任意の文字を削除したのち、残った文字を出力するプログラムを実装できる。
### 記述内容
“`
def missing_char(str, n)
str.slice!(n – 1)
puts str
endmissing_char(‘hogehoge’, 1)
missing_char(‘hogehoge’, 3)#=> “ogehoge”
#=> “hoehoge”
“`
第一引数に対象の文字列、第二引数に何番目の文字を消すのか指定し、missing_charメソッドを呼び出す。
strには文字列”hogehoge”,nには指定した数字が入る
strにsl
[Rails] コメントの削除方法
# はじめに
この記事は、コメント機能が実装できているのが前提で進めています。それでは実装していきましょう。実装内容の一覧
1. ルーティングの設定
2. コントローラーの設定
3. ビューの設定# 1. ルーティングの設定
削除機能を実装するので、以下のように、routes.rb に destroy アクションを加えましょう。“`ruby:routes.rb
resources :gurumes do
resources :likes, only: [:create, :destroy]
#追記箇所
resources :comments, only: [:create, :destroy]
#ここまで
end
“`# 2. コントローラーの設定
comments_controller.rb にも、以下のように destroy アクションを加えましょう。“`ruby:comments_controller.rb
#追記箇所
def destroy
comment
RubyでCSV操作する
# 前提
– Ruby 3.1.2
– [ドキュメント](https://docs.ruby-lang.org/ja/3.1/class/CSV.html)
– 以下コードは`require ‘csv’`している想定# 読み込み
仕様としては、[RFC4180](https://datatracker.ietf.org/doc/pdf/rfc4180.pdf) に準拠している
※ 例えば、フィールドをクォートで囲むことで、カンマを含んだ文字列を扱える等が定義されているまた、バリデーションは必要に応じて別途行うこと
例. `raise MalformedCSVError if csv.first != CSV_HEADERS`## ファイルから
### 一行ずつ
“`ruby
CSV.open(file_path, ‘r’).each do |row|
p row
end
# 結果
# […]
# […]
# …
# => nilCSV.foreach(file_path) do |row|
p row
end
# 結果
# […]
# [..
フレームワークやプログラミング言語を年収や求人数からスコア化してみる
## サイトはこちら
https://flamevalue.short-tips.info/
## 注意事項:鵜呑みにしない
本サイトは現在でも改修、改良が進んでいる状態です。従って評価基準はこれからも絶えず変更されます。
また、根拠のもととなるCareerJetは完全な求人サイトとは言い難いです。
何が言いたいかというと評価基準も元となるデータもバラバラですが、
どうか寛容な目で見守ってやってください。
# フレームワークランキング
## 第一位:Ruby on Rails
https://flamevalue.short-tips.info/Ruby%20on%20Rails
### 状態
– 平均下限年収 : 616万円
– 平均上限年収 : 777万円
– 総求人数 : 7023件
– リモート率 : 65%
– フォロワー(Qiita) : 12.62人
年収からリモート率までトップ。
採用数のみ、フレームワーク故(目的が絞られているが故)にプログラミング言語よりは低いスコアになっているが、フレームワーク界隈ではトップ。というかr
each_with_indexを使ったプログラム
# each_with_indexメソッド
eachメソッドは配列の要素を一つずつ取り出せるものの、取り出す要素が何番目のものかを取得することはできない。
“`each_with_index“`メソッドなら要素の繰り返し処理と同時にその要素が何番目に処理されたものなのかも同時に取得できる。# 使い方の例
“`
配列データ.each_with_index do |x, i|
処理内容
end
“`
each_with_indexメソッドはブロック変数がeachメソッドより一つ多い。
変数xは配列の各要素、変数iは配列の順序(インデックス)となる。
インデックスは0から始まる整数で要素が増える毎に1ずつ増える。# サンプル
下記のような配列データから任意の数字を探して何番目に含まれているかと言う結果を返すsearchメソッドをeach_with_indexメソッドを使って作成する。
“`
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`“`sample.rb
d
ただMacのターミナルでRubyとRailsを最新バージョンにしたかっただけなのに。。
## はじめに
久々に簡単なアプリを作成しようとして、(作成前ついでにRubyをRailsのバージョンを最新にしておくか)と軽い気持ちでバージョンアップを試みたら思いのほか詰まったので備忘録として残しておこうと思います。バージョンアップの流れとしては
**1.Homebrewとrbenvのアップデート**
**2.Rubyのアップデート**
**3.Railsのアップデート**
という感じです。早速やっていきましょう。## 1.Homebrewとrbenvのアップデート
アップデートするコマンドの流れはこちら
“`
$ brew update # Homebrewをアップデートする
$ brew upgrade rbenv && brew upgrade ruby-build
“`
まずターミナルにて“brew update“を実行します。すると早速エラーが
![スクリーンショット 2022-09-17 11.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1089852/
【Ruby】Rubyのわかりにくい文法
### ハッシュの記法の色々
“`Railsコンソール
# ハッシュのキーを文字列で
>> user = { “name” => “tarou”, “email” => “tarou@example.com” }
=> {“name”=>”tarou”, “email”=>”tarou@example.com”}# ハッシュのキーをシンボルで
>> user = { :name => “test”, :email => “test@example.com” }
=> {:name=>”test”, :email=>”test@example.com”}>> user[:name] # :nameキーにアクセス
=> “test”>> user[:test] # 存在しないキーに対応する値にアクセスするとnil
=> nil
“`そして、Rubyでおそらく一番よく目にする、
この記法に至る“`
>> user = { name: “test”, email: “test@example.com” }
=> {:nam