- 1. 【Ruby】2次元配列にソートをかける方法
- 2. ②ストロングパラメーターについて
- 3. 【Ruby】配列にランダムな値を追加する方法
- 4. 【Ruby】ハッシュのキーと値のペアを配列に変換する方法
- 5. Rails apiモードでjsonではなく文字列を返す方法
- 6. rubyでの定数の宣言
- 7. 日付や数値のフォーマット
- 8. [軽量化] マルチステージビルドによるrails環境のdocker化
- 9. Ruby オプションを作れるoptparseの使い方(簡単に)
- 10. Ruby if, elseを使ったプログラムの作成
- 11. 【Ruby on Rails】Dockerからコンソールを起動させる方法
- 12. UpperCamelCase -> lowerCamelCase
- 13. 【Ruby】Googleスプレッドシートのデータをリストとして取得する方法
- 14. ぼっち演算子とnil?、blank?を組み合わせるとnilのときに結果が逆になる罠
- 15. 【Rails】郵便番号による住所検索機能を作る ※ gem 無し
- 16. Ruby on Rails マイグレーションファイルの修正方法
- 17. Deviseの日本語化
- 18. Render.com(無料枠) データベースの使い分け
- 19. 【Vuex4 + Vue3 + Rails7】JWTとVuexを使ってトークンベースのログイン機能を実装する
- 20. seed_fuのseedメソッドの引数を活用すれば、似たデータが重複して新規作成されることもないし、idをわざわざ書く必要もないぞと気づいた
【Ruby】2次元配列にソートをかける方法
# 前提条件
– Ruby 3.1.0
# やりたいこと
下記2次元配列の子要素の1番要素を昇順でソートしたい。
“`
array = [
[0,5],
[1,4],
[2,3],
[3,2],
[4,1],
[5,0]
]
“`# 方法
### sort_byメソッドを使う
“` ruby:実装
# xの引数にソートをかけたい要素を指定
array = array.sort_by {|x| x[1]}
“`
“` : 結果
array = [
[5,0],
[4,1],
[3,2],
[2,3],
[1,4],
[0,5],
]
“`# 参考
https://qiita.com/takanatsu/items/39cf827aadc7d06bf48c
②ストロングパラメーターについて
本日はストロングパラメーターについて投稿します。
○ストロングパラメーターとは
—Ruby on rilsのアプリケーションにおいて不正なデータを取得しないように指定する
アプリ内の警備員みたいなもの。(例えが間違っていたらすいません。。):sweat_smile:ストロングパラメーターを使う為には2つのメソッドを使用します。
①require(リクワイア)メソッド
—送信されたパラメーターの情報を持つparamsが使用出来るメソッドの事。
パラメーターからどの情報を取得するか選択する事が出来る。
使い方
““`
paras.require(:モデル名)
““`さらに指定したパラーメーターをより限定した時に使うのがpermitメソッドです。
②parmitメソッド
—requieメソッドと同じでparamsが使用出来るメソッド。
取得したいキーを指定出来て、その中の値のセットのみ取得出来る。
使い方
““`
params.require(:モデル名).parmit(キー名)
““`まだ僕自身ざっくりな理解ですが日々アウト
【Ruby】配列にランダムな値を追加する方法
# 前提条件
– Ruby 3.1.0# 背景
未完成のDBやスプレッドシートなどからデータを配列に格納する際、不足しているカラム値を追加する必要がある。
そこで不足しているカラム値にランダムな値を仮置きする。# やりたいこと
配列にランダムな値を追加したい。# 方法
### randメソッドを使う
“` ruby:実装
# 配列を用意する
array = [‘0′,’1′,’2′,’3′,’4’]
# 配列の5番要素に「0以上10未満の整数」を格納する
array[5] = rand(10).to_s
“`
配列の5番要素にランダム値「8」が格納された。
“` :結果
> [‘0′,’1′,’2′,’3′,’4′,’8’]
“`# 参考
https://pikawaka.com/ruby/rand
【Ruby】ハッシュのキーと値のペアを配列に変換する方法
# 前提条件
– Ruby 3.1.0# やりたいこと
作成したハッシュをリストに変換する。# 方法
### to_aメソッドを使う
下記コンソールでは次のことを実行している。
① ハッシュを作成する。
② ハッシュをto_aメソッドで配列に変換する
“` :コンソール
irb(main)> h = {“number1″=>1, “number2″=>2, “number3″=>3}
irb(main)> h.to_a
=> [[“number1”, 1], [“number2”, 2], [“number3”, 3]]
“`# 参考
https://scrapbox.io/rubytips/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E9%85%8D%E5%88%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B
Rails apiモードでjsonではなく文字列を返す方法
Rails apiモードで、jsonではなく文字列(string)を返却したい時の方法について記載する。
あまり使わない方法だと思うが、
先日token(string)のみを返すエンドポイントを作成する必要があり、
方法がわからず困ったのでメモ的に残す。# 返したい値
今回やりたいイメージ。returnを使うわけではないがイメージとしてわかりやすいので。
“`ruby:string(ただの文字列)
return token
“`通常だとこういう形式になる。
“`ruby:json(普通はこの形式で値を返す)
return { “token” : “token” }
“`# 方法
renderメソッドで `:json => “文字列”` とする
“`ruby:controller.rb
render :json => ‘This is the string’
“`
rubyでの定数の宣言
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# 定数宣言時の注意点
### 全て大文字で宣言する
“`ruby
BASE_TITLE = “EC Site”
“`### freezeする
定数を扱うときは`freeze`するよう必要がある(`ruby`における定数は意図せずに書き換えられることがあるらしい)
`freeze`していなくともアプリケーションは動いたが、`rubocop`などでスキャンすると指摘される。
> `freeze`していない状態で`rubocop-airbnb`でスキャンした際は、「Freeze mutable objects assigned to constants.」と指摘された
>“`ruby
BASE_TITLE = “EC Site”.freeze
“`### メソッド外で定義する
“`ruby
module Applicat
日付や数値のフォーマット
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# フォーマット指定による変換
日付や時刻、数値を書式を指定して文字列にする場合の記述方法について解説。
(Rubyの`Date`や`DateTime`などの日付型の値や、`Integer`、`Float`などの数値をフォーマット指定で文字列に変換する記述方法について)
# 日付のフォーマット
Rubyで日付型をフォーマット指定で文字列に変換するときは、`strftime`メソッドを使用する。
`strftime`メソッドは日付を扱う`Date`クラス、時間を扱う`Time`クラス、日時を扱う`DateTime`クラス全てに適用できる。
### `strftime`メソッド構文
“`ruby
Date.strftime([“format文字列”])
Time.strftime([“format文字列”])
DateTime.strftime
[軽量化] マルチステージビルドによるrails環境のdocker化
## rails環境のdocker化
rails環境のdocker化についてまとめます。
dockerの軽量化のためにマルチステージビルドで環境を構築します。### 各種バージョン
– rails 6.0.6.1
– ruby 3.0.2
– node 15.0.1
– postgresql 14.6-alpine### Dockerfileの作成
リポジトリに `dockerfile` を作成。`apt-get install` を使用せずに下記のようにマルチステージビルドでnodeをインストールすることで、dockerの軽量化およびbuildの時間短縮が期待できます。“` docker
FROM node:15.0.1
FROM ruby:3.0.2COPY –from=node /opt/yarn-* /opt/yarn
COPY –from=node /usr/local/bin/node /usr/local/bin/
COPY –from=node /usr/local/lib/node_modules/ /usr/local/lib/node
Ruby オプションを作れるoptparseの使い方(簡単に)
# はじめに
ターミナルで`ls -a`や`ruby -v`などオプションを指定するとそれに対応する実行がされるが、rubyで自身でオプションが作れないかと思ったところこの`optparse`の存在を知った。# バージョン
ruby 3.1.3# optparseとは
– rubyにデフォルトで搭載されている標準ライブラリの1つ。
– コマンドラインのオプション操作を取り扱う時に使われる。# optparseを使ってみる
今回はオプションで指定した数字の**5の倍数**を出力することを目標とします。まずは`optparse`を使えるようになるための下準備
“`ruby:optparse.rb
require ‘optparse’opt = OptionParser.new
opt.on(‘-n’) {|v| v}
opt.parse(ARGV)
select_number = ARGV[1].to_i
p select_number * 5
“`
ターミナルでは`-n`オプションを指定し、一旦数字の6を入れる想定とします。
“`:terminal
$ ruby
Ruby if, elseを使ったプログラムの作成
# if, elseを使ってプログラムを作成します
条件は以下の通りです。
– 条件1:第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
– 条件2:第二引数には時間を指定する(ただし、「分」は考えないものとする)
– 条件3:20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
– 条件4:上記以外の場合は「OK」と出力する“`ruby
def parrot_trouble(talking, hour)
if talking && (hour < 7 || hour > 20)
puts “NG”
else
puts “OK”
end
end# 呼び出し例
parrot_trouble(true, 6)
“`“`ruby
NG
# ターミナル出力
“`## 解説
オウムが鳴いている時間帯が20時〜7時 → NG
上記以外の場合にはOKを出力されるように記述を考えていきます。– 第一引数”talking”について
オウムが鳴いているか・鳴いていないかの真偽判定
【Ruby on Rails】Dockerからコンソールを起動させる方法
# 背景
Dockerを用いたチーム開発でターミナルから直接`rails c`を実行してもコンソールを起動できない。
“` :コンソール
$ rails c
=>
Rails is not currently installed on this system. To get the latest version, simply type:$ sudo gem install rails
You can then rerun your “rails” command.
“`# 方法
下記の順番で実行する。
“` :コンソール
$ Docker compose up -d
$ Docker compose run –rm api bash
bash-5.1# rails c
“`
`$ Docker compose up -d`
まず作成したコンテナを起動する。
`$ Docker compose run –rm api bash`
apiサービスを開始し、サービス内でbashとしてコマンドを実行する。# 参考
https://docs.do
UpperCamelCase -> lowerCamelCase
gsubがブロック受けれるの今更ながらに知ったのでメモ
“`ruby
list = [‘AlphaBeta’, ‘FooBar’]
# => [“AlphaBeta”, “FooBar”]list.map { |item| item.gsub(/^[A-Z]/) { |i| i.downcase } }
# => [“alphaBeta”, “fooBar”]
“`
【Ruby】Googleスプレッドシートのデータをリストとして取得する方法
# 前提条件
– Ruby 3.1.0
– 環境構築~GoogleAPI連携が完了していること(詳細は参考サイト参照)# やりたいこと
Googleスプレッドシートのデータをリストとして取得したい。# 方法
### 1. データ取得するメソッドを作成する
“` ruby:Spreadsheet.rb
require ‘googleauth’
require ‘google/apis/sheets_v4’module ABC
class Spreadsheet
SCOPE = [
‘https://www.googleapis.com/auth/drive’,
‘https://www.googleapis.com/auth/spreadsheets’
]def initialize
・・・
@service = Google::Apis::SheetsV4::SheetsService.new
end# スプレッドシートIDとセルの範囲を引数にデータを取得する
de
ぼっち演算子とnil?、blank?を組み合わせるとnilのときに結果が逆になる罠
考えてみればそのとおりだけども、ちょっとハマったのでメモがてら。
ぼっち演算子については[safe navigation operator (ぼっち演算子)](https://docs.ruby-lang.org/ja/latest/doc/news=2f2_3_0.html)を参照。
rubyのぼっち演算子が便利なのでよく使うのですが、
条件分岐させるときに注意が必要です。“`ruby
# hogeはnameというインスタンス変数を持つオブジェクトとします
hoge.name.blank? ? ‘空です’ : ‘空じゃないです’
“`みたいな判定のときに
“`ruby
hoge.name = ‘値あり’
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃないです’hoge.name = ”
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空です’hoge.name = nil
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃな
【Rails】郵便番号による住所検索機能を作る ※ gem 無し
## 概要
巷でよく見かける「郵便番号を入力すると該当の住所が番地以前まで自動で入力される」といった機能を Rails で作ってみました。
こういった記事はすでに世の中に溢れていますが、JQurey やら gem やらを使ったものが多く、個人的にはもっとシンプルな実装にしたかったため今回備忘録として残します。
## 下準備
※ Rails の環境構築はすでに済んでいるものとして話を進めます。
– Address モデルの作成
– Prefecture モデルの作成住所に関する各種情報を持たせるための Address モデル、都道府県用のマスターデータとして Prefecture モデルを作成します。
| Address |
| —- |
| postal_code: 郵便番号 |
| prefecture_id: 都道府県ID |
| city: 市区町村 |
| house_number: 番地 |
| building: 建物名・部屋番号 |“`
$ rails g model Address postal_code:integer
Ruby on Rails マイグレーションファイルの修正方法
本日はRuby on Rilsのマイグレーションファイルの修正方法の紹介を致します。
○マイグレーションファイルとは
データベースの設計図の事。このファイルに記載した内容がデータベースに反映されます。訂正の順序
①まず初めに修正したマイグレーションファイルが既に実行済みか確認をします。
ターミナルに rails db:migrate:stautusを入力してマイグレーションファイルがUPになっているか確認②確認出来たらrails db:rollbackで元に戻します。これで修正可能になります。
③修正したらrails db:migrateを入力すると修正完了となります。
以上で大まかな流れの説明でした!ありがとうございました!
Deviseの日本語化
メモとして書いておく。
## Gemの追加
“`
gem ‘devise-i18n’
gem ‘devise-i18n-views’
“`
`$bundle install`## 日本語対応のymlファイルを作成
`$rails g devise:views:locale ja`## i18nの翻訳を日本語にする
config/application.rbファイルの
class Applicationの中に
`config.i18n.default_locale = :ja`を追加する。## config/locals/devise.ja.ymlに以下を追加する
この記事を参照
https://qiita.com/you8/items/921e0dd1210eb0d158df
“` config/locals/devise.ja.yml
ja:
activerecord:
errors:
models:
user:
attributes:
email:
t
Render.com(無料枠) データベースの使い分け
# 新しくデータベースを作成したい場合
Render.com(無料枠)は1つまでしかデータベースを起動できないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881997/8c7f4fea-e273-da54-2910-7c58f470e06d.png)
新たに作成する際は、起動中のデータベースを停止してから行う必要があります。
Suspend Database ボタンで停止できます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881997/677ca2a5-6944-ff2e-bf69-09421b1ecb53.png)
これで新たにデータベースを作成できます。
※複数データベースを作成しても、起動できるのは1つのみです。# 体験談
Rails チュートリアルで作成した「Sample_app」を元に、
Twitterのような「tweet_app」を作
【Vuex4 + Vue3 + Rails7】JWTとVuexを使ってトークンベースのログイン機能を実装する
# 環境
ruby 3.1.0
Rails 7.0.4
vue@3.2.41
Vuex@4.1.0# 初めに
個人開発でSPAのログイン機能を実装した時のメモです。
理解不足な面も多いので、指摘いただけると嬉しいです。ログイン状態は、Railsであればセッションで管理することができます。
セッションによる認証はサーバー側で行うため、
JSなどフロント側ではあまり気にしなくて良かったのですが、
**Vue.jsのようなSPAの場合はフロント側でも制御が必要になります。**そのログイン状態の管理を**トークンベースの認証**で実装しようと思います。
**以下仕様**
・ログインはパスワードとメールアドレスで実行する
・ログイン後のページは「ログイン状態」でないと遷移できない
・ログイン画面は、「ログイン状態」では遷移できない
・ログイン後、リロードしてもログイン状態が保持される
・ログアウトすると、ログイン画面に遷移する# トークンベースの認証とは
セッションを使ったログイン(認証)との違いをざっくり整理したいと思います。## セッションを使ったログイン
セッ
seed_fuのseedメソッドの引数を活用すれば、似たデータが重複して新規作成されることもないし、idをわざわざ書く必要もないぞと気づいた
## 困ったこと
Railsのseed_fu、こういう風にidなどprimary keyを書くのを巷でよく見かけます。“`ruby:db/fixtures/users.rb
User.seed do |s|
s.id = 1 # ←
s.name = “鈴木一朗”
s.email = “ichiro@example.com”
endUser.seed do |s|
s.id = 2 # ←
s.name = “鈴木二郎”
s.email = “jiro@example.com”
end
“`idなんて自動採番されるんだから、書く必要なくない?…ほら、削除してもデータ作れるじゃん!と無邪気にどや顔していたのですが、青二才でした。
確かにデータは作れます。しかしながら、seed_fuがいいのは、2回目以降流す時に、変更点だけを追加、または更新してくれるところ。primary keyを指定してあげないと、seed_fuは既存データか新規データかを判別できず、新しいデータをcreateしてしまいます。上記の例で言うと、鈴木一朗、鈴木二朗がダブってで