- 1. 文字列の結合の種類
- 2. RSpecの導入と単体テストコードを書く
- 3. RailsのCredentialsの作り方
- 4. 【Rails】定数の呼び出し方
- 5. 【Rails】lib配下にクラスを自作し読み込む方法
- 6. ユーザーログインの有無で表示を変える実装!
- 7. Ruby、Railsのコーディング規則まとめ
- 8. サクッとRailsの開発環境をDockerで構築してみる
- 9. sassc のインストールがおそすぎる
- 10. rSpec 複数のセレクターを所得して配列みたいに指定する
- 11. kaminari のメソッドのレシーバーが配列のときどうするか
- 12. 【初心者向け】Rubyインストール時の注意点
- 13. rSpec all メソッドより page.all メソッドのほうがいい気がする
- 14. rspec 画像が投稿できることをテストする
- 15. ActiveStorageでアップロードしたファイルをsidekiqで遅延少なく処理する(sidekiqのコードリーディング)
- 16. Ruby 「unterminated string meets end of file」とエラーが出たら?
- 17. Nokogiriを使った基礎的なWebスクレイピングを学びました
- 18. 【個人開発】不幸な体験を暴露してお金をもらうアプリを作ってみた
- 19. 変数の命名規則について!
- 20. 連想配列(ハッシュ)の基本について
文字列の結合の種類
RubySilverの勉強中、文字列の結合のメソッドがいくつか出てきたので備忘録として記していきます。
##文字列の結合
文字列を結合する方法は主に + 演算子とconcatメソッド、<< の3種類あります。 concatと << は破壊的メソッドなのに対し、 + 演算子は非破壊的メソッドです。 ### + 演算子の使い方 ```ruby:例 s1 = Leo s2 = Messi puts s1 + s2 # => LeoMessi
“`### concatの使い方
“`ruby:例
s1 = Leo
s2 = Messis1.concat(s2)
puts s1
# => LeoMessi
“`### << の使い方 ```ruby:例 s1 = Leo s2 = Messi s1 << s2 puts s1 # => LeoMessi
“`参考記事
[【Ruby】concatを使って文字列や配列を結合する](https://style.potepan.com/articles/27074.html)
RSpecの導入と単体テストコードを書く
#①.nicknameに対するバリデーションを設定
サンプルアプリを例として、事前準備します!
実装時においては、nicknameに対してバリデーションを設けていません!
今回はバリデーションに関するテストを実装します!
そこで、「nicknameを入力しないと、ユーザーが登録できない」というバリデーションを設定します!
user.rbを開き、以下のように記述します!
“`php:app/models/user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :eats h
RailsのCredentialsの作り方
Rails触った事ないけどある日突然production.keyを作成する事になり四苦八苦したので記録。
#Railsのproduction.keyとは
production環境の暗号化されたファイル**production.yml**を復号するためのキー。
暗号化されたファイルにはプロジェクトの機密情報が含まれ、暗号化されたファイルをバージョン管理し、キーはバージョン管理から外す。
production.ymlというのは作成時に環境を指定したからこの名前になっており、基本的にはcredentials.ymlというのが暗号化されたファイルの名称。#Credentialsの作り方(基本)
####既存のキーの確認方法
下記のような感じで確認する“`shell
$ EDITOR=”vi” bin/rails credentials:show
# aws:
# access_key_id: 123
# secret_access_key: 345# Used as the base se
【Rails】定数の呼び出し方
##環境
Ruby 3.0.2
Rails 6.1.4.1##定義と呼び出し方
“`ruby
class Hogehoge
TARGET_ARTICLES_COUNT = 100.freeze
end
“`“`ruby
Hogehoge::TARGET_ARTICLES_COUNT
# => 100
“`他のクラスやモジュールで定義された定数を参照するには“`::演算子“`を使って定数のパスを指定。
トップレベルの定数を確実に参照するにはパスを“`::“`から始めると外部の定数を絶対パスで指定できる。##参考
https://railsguides.jp/constant_autoloading_and_reloading.html
【Rails】lib配下にクラスを自作し読み込む方法
##環境
Ruby 3.0.2
Rails 6.1.4.1rakeタスク内のメソッドをクラスに切り出してリファクタリングしたいときに使える。
“`lib/tasks/XXXXXX.rake
namespace :XXXXXX do
task hogehoge: :environment do
hogehoge = Hogehoge.new
end
end
“`“`lib/hogehoge.rb
class Hogehoge
def hugahuga
…
end
end
“`
##設定方法“`config/application.rb
module Futurama
class Application < Rails::Application ... config.paths.add 'lib', eager_load: true end end ``` ##参考 https://qiita.com/mk_0409/items/e930945a0c505ccbac9b
ユーザーログインの有無で表示を変える実装!
#投稿者本人か確認して表示を変更
例でアプリを見ていきます!
今の状態だと、誰でも他ユーザーが投稿を編集・削除できます!
「ユーザーがログインしている」かつ「投稿したユーザーである投稿だけに許可」という実装をしましょう!
編集ボタンと削除ボタンの表示部分をif文で囲います!
“`php:app/views/eats/index.html.erb
<% @eats.each do |eat| %><%= image_tag 'arrow_top.png' %>
- <%= link_to '詳細', eat_path(eat.id), method: :get
Ruby、Railsのコーディング規則まとめ
#はじめに
企業や組織が公表しているRuby、Railsのコーディング規約をまとめました。チーム開発のように既にコーディング規約が定まっているのではなく、個人で開発している方は自分の好みの規約を導入してみてはいかがでしょうか?![rails.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764771/4659b6e3-d675-1bb5-9eb0-417521fda010.jpeg)
#企業
#Cookpad
https://github.com/cookpad/styleguide/blob/master/ruby.ja.md
#Shopify
https://ruby-style-guide.shopify.dev/
#Airbnb
https://github.com/airbnb/ruby
https://qiita.com/tomoharutt/items/51254ae5dafba645dc6d
#Rubyの組織など
#Rubyスタイルガイド
https://g
サクッとRailsの開発環境をDockerで構築してみる
## 環境
– macOS Catalina 10.15.6
– Docker 20.10.10
– docker-compose 2.1.1## DockerでRailsの開発環境を構築する
公式ドキュメントを参考にDockerでRailsの開発環境を構築する。
[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)### ファイルを作成する
以下のファイルを作成する。
“`bash
$ mkdir hello_app/
hello_app$ cd hello_app
hello_app$ touch Dockerfile
hello_app$ touch docker-compose.yml
hello_app$ touch Gemfile
hello_app$ touch Gemfile.lock
“`“`docker:Dockerfile
# syntax=docker/dockerfile:1
FROM ruby:2.5
RUN apt-get update -qsassc のインストールがおそすぎる
前々から思ってたけど `bundle install` のとき `sassc` のインストールがおそすぎる
そのせい `Docker` のイメージを作る際に タイムアウトエラーみたいになるのが頻発。
腹が立ったので調べた
## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
`bundler 2.2.24`https://qiita.com/croquette0212/items/d2f48f30c3ed7dcd0e3c
どうやら環境の問題ではなくこの `gem` が悪いらしい
上の記事を参考にさせていただいて
“`
gem ‘sassc’, ‘2.1.0’
“``sassc` のインストールと 2.1.0 というバージョンを明示してやると解決
rSpec 複数のセレクターを所得して配列みたいに指定する
## 前提
`rSpec` を使ってテストを書いている## 本題
複数の同じクラスがあってその特定の要素を使用したいとき
“`
find(“.class”)[0]
“`みたいな書き方はできない
`find` メソッドは一意な要素しか所得しない
上みたいの書き方をしたかったら
“`
page.all(“.class”)[0]
“`みたいにする
kaminari のメソッドのレシーバーが配列のときどうするか
[![Image from Gyazo](https://i.gyazo.com/e846e13b8ee9d3c57c91b2345395b4bf.png)](https://gyazo.com/e846e13b8ee9d3c57c91b2345395b4bf)
上の画像では右側のユーザーが `current_user` なんだけど
自身のアカウントは検索画面で表示されないようにしたかった## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`## 前提
`user` の認証機能があるアプリ
`slim` を使って書いている
`kaminari` のページネーションで `user` の一覧を表示している
検索機能を実装している## next メソッド
まず考えたのは `next` メソッド
“`:user_html.slim
– @users.each do |user|
– if user == current_user
= next
“`
こんなかんじで繰り返し処理のなかで `current_user`【初心者向け】Rubyインストール時の注意点
###環境
・Windows10(64bit)
・Ruby2.6~3.0
・Windowsファイアウォール:無効
###Rubyインストール時の注意点
インストーラとしては、以下のように「Ruby+Devkit (バージョン) (x64)」を使用することが多いと思います。
その場合、Ruby本体とMSYS2が連続してインストールされます。https://prog-8.com/docs/ruby-env-win
インストーラをダウンロードできたら、実行する前にセキュリティソフトを一時停止した方が無難です。
Avastの場合、`C:\Ruby(バージョンの数値)-x64\msys64\usr\bin`の以下ファイルが脅威と判定されました。
・gpg.exe
・gpg-agent.exe
・gpg-connect-agent.exe:::note warn
一連のインストール完了後は元に戻すことをお忘れなく。
:::###MSYS2インストール時の注意点
MSYS2インストール関連でエラーが出た場合、放置せずMSYS2の再インストールを行いましょう。
表示されるエラーを1つずつrSpec all メソッドより page.all メソッドのほうがいい気がする
`ajax` な動作をテストしようとしたとき
“`
all(“input”)[0].set(“title1”
click_on ‘レビューを投稿する’
“`みたいなテストを書いた。
このテストがとおったりとおらなかったり
適当に `speep` メソッドを散りばめても同じだった
## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`## 前提
`rSpec` が導入されている
レビューを投稿するというボタンをクリックすると `ajax` でデータが反映される## 結論
以下みたいにしたらうまくいくようになった
“`
page.all(“input”)[0].set(“title1”)
click_on ‘レビューを投稿する’
“``all` に `page` をつけてやる
推測なんだけど、`all` だけだと範囲がひろすぎて `set` メソッドの処理が追いついてないのかも
それならメソッド内での処理の話だから `sleep` メソッドをいれても関係なかったのもわかるrspec 画像が投稿できることをテストする
`rSpec` で画像が投稿できることをテストする
##開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`## 前提
`rSpec` が導入されていること
`test.jpg` がテスト用の画像## 画像のテスト方法
① テスト用の画像を用意する
② テスト中にその画像をセットする
③ セットした画像のセレクターをテストhttps://study-diary.hatenadiary.jp/entry/2020/10/16/133144
こんへん参考にしながら
自分の場合は
[![Image from Gyazo](https://i.gyazo.com/3372aa5432a4ddd3ba34a052601e109a.png)](
://gyazo.com/3372aa5432a4ddd3ba34a052601e109a)こんな画像でテスト
コードは
“`
attach_file ‘inputFile’, “#{Rails.root}/spec/factories/test.jpg”, make_visible: trueActiveStorageでアップロードしたファイルをsidekiqで遅延少なく処理する(sidekiqのコードリーディング)
## やりたいこと(背景)
フロントエンドからファイルをActiveStorageでアップロードし、そのファイルを利用した処理を行う必要がある。
該当のファイルへの処理は数秒かかるためweb apiはすぐに返し、該当の処理を非同期実行することにした。
該当処理のOK / NGの結果に応じてユーザーに再度アップロード要求する必要があり、ユーザーには解析中という表示で待たせている。(処理に時間がかかりすぎた時の対応は別途検討してますが今回は省略)
サーバー処理が終わったらActionCableを利用してフロントに判定結果を返す。![ファイルアップロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/bfe20204-3c54-c8f5-0ee2-7b85a44b58a0.png)
![解析job.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/5e11f891-f19b-8de0-33d
Ruby 「unterminated string meets end of file」とエラーが出たら?
Rubyで 「unterminated string meets end of file」 エラーが表示されたら
「””」 でできちんと囲めという意味を表します。たとえば
“`
puts “hello
“`
のようにきちんと「””」で囲っていないとこのエラーが出るので気をつけましょうNokogiriを使った基礎的なWebスクレイピングを学びました
Webスクレイピングについて基礎的な学習をしたので、アウトプットさせていただきます。
# Nokogiriとは
Nokogoriとはgemで提供されているWebスクレイピングライブラリのことで、gemを使ってライブラリをインストールすると使えるようになります。“`
$ gem install nokogiri
“`
#### Webスクレイピングとは
Webサイトから情報を取得して、その情報に加工を加えて新たな情報を生み出すことです。
APIとの違いとして、APIはサービス側が開発者向けに一定の条件のもと、公式に機能の一部を使用できるようにしていますが、Webスクレイピングは公式のサービスとは言えず、無作為に使用していると利用規約に引っかかる可能性があり、その点の注意が必要になります。#### Webスクレイピングの活用方法
例えば、価格.comから好きな家電の価格を取得して、一覧表をCSVで記録するといった具合に必要な情報を自動化して取得し、業務の効率化やAPIにはないデータの取得に役立つ等のメリットがあります。
逆にデメリットとしては、DOM構造が変わったりすると、【個人開発】不幸な体験を暴露してお金をもらうアプリを作ってみた
## はじめに
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684591/68e8d2f2-12c2-fd10-00f7-8c137a2dbc94.png)
皆さんにお聞きします。
何か不幸な体験をして、それを友達や家族に話したとき、一度は「同情するなら金くれよ!!」と思ったことあるのではないでしょうか?そんな不幸な体験をされた人たちが「少しでも報われたら」という思いで~~クソ~~アプリを作りました。
https://fuko-ziman.herokuapp.com
## アプリの使い方
自分が体験した不幸を投稿し、twitterでシェアします。
「みんなの不幸一覧」を押すと、投稿された記事を全て見ることができます。[![Image from Gyazo](https://i.gyazo.com/b9cf5d724292be22edbff98bd445f94b.png)](https://gyazo.com/b9cf5d7242
変数の命名規則について!
#変数の命名規則
前回の続きです!
変数には名前をつけることができます!
名前は自由に決められますが、一定のルールがあり、それを守らなくてはいけません!
“`php
命名規則 説明1,変数の中身が何かわかる! どんな名前もつけられますが,aaaのような意味のない名前は避けましょう!
2,小文字で始める! 大文字からも開始できますが、とくに理由がない場合は避けましょう!
3,_(アンダーバー)で始めない! _からも開始できますが,とくに理由がない場合は避けましょう!(2文字目以降には使えます!)
4,数字で始めない! 1文字目に使うとエラーが生じます!(2文字目以降には使えます!)
5,日本語を使わない! 文字列以外では日本語は使えないため,変数名も日本語は使えません!
6,スペースを含めない! 名前にスペースが入るとエラーが生じます!
7,予約語
連想配列(ハッシュ)の基本について
#連想配列(ハッシュ)
key(ラベル)とvalue(key)を使って、よりもわかりやすくした配列を
***ハッシュ***と言います。普通の配列だと
“`rb
japanese = 60
english = 40
science = 30
history = 70
math = 40#平均点
puts (60 + 40 + 30 + 70 + 40)/5# もしくは
puts (japanese + english + science + history + math)/5“`
こんな感じになります。
しかしここで問題があります。“`rb
scores = [60,40,30,70,40]
puts (scores[0] + scores[1] + scores[2] + scores[3] + scores[4])/5
“`
これだけ見て何のスコアかわかるでしょうか。そこで“`ハッシュ“`が登場します。
“`rb
scores = {“japanese”=>60,”english”=> 40,”science”=> 30関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた