- 1. macOS Monterey (x86_64-darwin-21) で libv8 の install を行う方法
- 2. Rails7.0.4 Ruby3.1 Mysql8.0 docker-compose で環境構築する。ついでにTailwindCSS と DaisyUI も入れちゃう。
- 3. [Ruby]Dateクラスについて
- 4. 比較演算子を使った条件分岐
- 5. RubyKaigi 2022 参加レポート
- 6. Rubyは死んでないし、終わってないし、稼げる言語(RubyKaigi2022に参加しました)
- 7. 偶数の数をカウントして出力するメソッド
- 8. Ruby 会議2022レポート(1日目と2日目)
- 9. アルゴリズムでよく使う手法(Ruby)
- 10. has_manyのsourceオプションはいつ使うのか
- 11. RSpec使い方まとめ
- 12. [Ruby]二重ハッシュからの特定の値の取得方法
- 13. 独自フレームワークをVercel for Gitに対応する
- 14. 指定された範囲の数値(時間)によって処理が異なるプログラム
- 15. 特定の文字列検知
- 16. Ruby On Rails で 主キーに UUID を使用する
- 17. GitHubにほったらかし収入源botコードをあげたが反応がないのでQiitaにさらす(アダルト注意)
- 18. shopify-api-ruby の ShopifyAPI::ResourceName.all でデータを全件取得する方法
- 19. Raspberry Pi Pico 用の mruby を Build するためのコンテナ作成用 Dockerfile を書いてみた
- 20. Ruby on Railsでrails sが起動しない rails aborted! TZInfo::DataSourceNotFound
macOS Monterey (x86_64-darwin-21) で libv8 の install を行う方法
## はじめに
macOS Monterey (x86_64-darwin-21) 環境下で [mini_racer] が依存する [libv8] gem を install する必要があり対処方法をまとめました
## TL;DR
– macOS Monterey (`x86_64-darwin-21`) 環境下では “libv8” gem の install は出来ない
– 前 macOS Big Sur (`x86_64-darwin-20`) 用のファイルを取得し patch をあてセットアップを行うと簡単## なぜ macOS Monterey で簡単に install できないのか
[All versions of libv8] を確認してみると `x86_64-darwin-21` 用の binary が提供されていません。
binary が提供されていない = source から build する必要があります[libv8] の README に記載されている Platform は以下のみとなり `x86_64-darwin-21` 環境下だと簡単に in
Rails7.0.4 Ruby3.1 Mysql8.0 docker-compose で環境構築する。ついでにTailwindCSS と DaisyUI も入れちゃう。
# はじめに
勉強用にちいさなアプリを作成することがありますが、環境構築がめんどくさくて止めちゃうことありますよね?
環境構築で詰まらないように記録しておきます。Rails の環境構築の記事はたくさんありますが、できるだけ最新のバージョンでやってみました。
Rails 7.0.4
Ruby 3.1
Mysql 8.0
# 参考https://docs.docker.com/samples/rails/
https://qiita.com/croquette0212/items/7b99d9339fd773ddf20b
# プロジェクトの作成
“`sh
mkdir test-app
cd test-app
“`# 設定ファイルの作成
“`Dockerfile:Dockerfile
FROM ruby:3.1RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /mya
[Ruby]Dateクラスについて
# Dateクラスとは?
Rubyの標準ライブラリの機能# 使い方は?
以下一文を記載します
“`ruby
require “date”
“`# 例えば・・・
今日の日付を取得したい時は
“`ruby
Date.today
“`
で取得できます。今日の曜日を取得したい時は
“`ruby
Date.today.wday
“`
と記述しますが、**wday**は曜日を0(日曜日)から6(土曜日)の整数で取得するので、
配列を定義して日曜日(0番)〜土曜日(6番目)まで文字列を格納する必要があります。
その**wday**で取得した値を配列より取り出し、曜日を取得します。“`ruby
require “date”
day = Date.today.wday
days = [“日曜日”, “月曜日”, “火曜日”, “水曜日”, “木曜日”, “金曜日”, “土曜日”]
puts days[day]
“`
例:dayの値が5の場合
daysの5番目の値である金曜日が出力されます。
※配列は0から数えます
比較演算子を使った条件分岐
今日もアウトプットの練習。
# 問題
ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。10以下なら10以下の数字です
10より大きい数値なら10より大きい数字です
10以下でかつ0以下なら0以下の数字です
ソースコードは以下の雛形を使ってください。
“`
1
2
3
input = gets.to_i# ここからソースコードを書いてください
“`#### 数値の比較なので比較演算子を使う
|演算子|例文|意味|
|:-: |:-:|:-:|
|== |a == b|aとbが等しい|
|!= |a != b|aとbが等しくない|
|> |a > b |aはbより大きい|
|< |a < b |aはbより小さい| |>= |a >= b |aはb以上|
|<= |a <= b |aはb以下| #### 自分の解答 ```practise.rb input = gets.to_i if input <= 10 && input <= 0 puts "0以下の数字です" elsif inp
RubyKaigi 2022 参加レポート
# はじめに
RubyKaigi2022にオンラインで参加してきました。
私自身のRubyを業務で使った経験は1年半ちょっとです。
そのうち半年は一人で開発をしていたのでほとんど独学で、今の職場で色んなRubistに出会って改めて学び直してる途中です。
なのでRubyとはまだそこまで仲良くない上に、初めて参加したRubyKaigiでしたが多くの学びが得られた良い体験でした。# 発表
全体スケジュールは以下です。
https://rubykaigi.org/2022/schedule/#day1## [Ruby meets WebAssembly](https://rubykaigi.org/2022/presentations/kateinoigakukun.html#day1)
https://speakerdeck.com/kateinoigakukun/ruby-meets-webassembly
簡単に言えば、JavaScriptのようにRubyをブラウザ上で実行が出来る仕組みです。
恥ずかしながらWebAssemblyも盛り上がってることは知っていたのですが、こ
Rubyは死んでないし、終わってないし、稼げる言語(RubyKaigi2022に参加しました)
# はじめに
エンジニアです。Rubyでの開発は3年です。
Qiita初投稿+RubyKaigi初参加なので、色々慣れていないです。
この記事は優しい気持ちで眺めていただけると?# この記事は何か
RubyKaigi2022 で三重に行って松坂牛を食べてきた話です。
Rubyの諸々の話も聞いてきました。# このイベントで理解した(であろう)こと
コンテンツ盛りだくさんすぎて、~~(全然、頭に入らなかった)~~
メモするためのPCのバッテリーが枯渇して全然メモ取れなかった ~~(言い訳)~~
ので理解度は低めなのですが、– 松坂牛は美味しい。
– 赤福は美味しい。
– RubyはWebAssemblyに対応してブラウザで動くようになったらしい
– Rubyはマルチスレッドの処理を M:Nモデルで扱えるようになるらしい
– RubyはRust製のコンパイラによって早く+メモリ効率良くなるらしい
– 古いバージョンのRubyは最新のmacOSでビルドできない
– Rubyのパパはネット上のRuby批判を憂いている***!!!! Rubyは死んでないし、終わってないし、稼
偶数の数をカウントして出力するメソッド
今日も学んだ事を忘れない為にメモします。
### プログラム内容
配列にある値の中から偶数の数をカウントして出力する。
対象の数値が偶数かどうかを判断するeven?メソッドを使用する。### 記述内容
“`
def count_evens(nums)
count = 0
nums.each do |num|
if num.even?
count += 1
end
end
puts count
endcount_evens([5,6,8,12,14,19])
count_evens([1,3,7,10,13])
“`
“`:出力結果
4
1
“`列の中の偶数の数を出力するためにカウントした数を保持するための変数が必要なので、変数countを用意する。
ここで注意するのは変数countを書く場所。
配列から値を取り出す為のeach分の中にcount = 0を書くとループ処理で毎回数字が0に上書きされてしまうのでeach分の外に書く。配列に入っている数字をeach文で取り出し、even?メソッドで一つずつ偶数か
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