- 1. VScodeでhtml.erbファイルを編集する際入力補正を使いたい
- 2. Rubyのランダム処理について
- 3. Rubyのインスタンスメソッド、クラスメソッドについて
- 4. RubyのFileクラスについてまとめ
- 5. いいね!機能の実装方法
- 6. 【Ruby】空のハッシュに自己代入(+=)したい
- 7. Webアプリケーションをdocker化する(Ruby on Rails7.0 × postgres12)
- 8. Rubyのoptparseライブラリの使い方
- 9. Railsのform_withを自分なりにまとめてみた
- 10. 既存のRailsアプリ(Postgres使用)をDocker化する手順
- 11. ruby.wasmでRubyからJavaScriptのメソッドを呼び出すしくみ
- 12. rails newからgit pushまで(SSH接続)
- 13. ruby.wasmの初期化シーケンス
- 14. devise導入後ログアウトできないエラーの解決
- 15. RSpecを実行するとWebdrivers::VersionErrorが発生する場合の対処方法
- 16. Ruby on Railsのエラー画面の読み方
- 17. [Rails]仮想カラムをもちいて、ソート機能を実装する
- 18. ElastiCache for RedisのClusterモード(暗号化)への接続方法 Rails編
- 19. 異なるOS間でのGemfile.lockの競合を解決する方法
- 20. Railsのルーティング: resources と resource の違いとメリット
VScodeでhtml.erbファイルを編集する際入力補正を使いたい
■学習内容
VScodeの拡張機能について■理解したポイントや参考になった情報
rails課題2からローカル環境で開発することにしたのでVScodeでコーディングしていたところ、html.erbファイルのスニペットが有効ではなかったので自分なりに調べて有効化してみた。1.拡張機能でrailsと検索し、プラグインをインストール
html.erbの拡張子で文法チェックとスニペットが使えたがhtmlタグのスニペッ トは有効化されなかった2.settings.jsonに変更を加えた
html.erbでhtmlのスニペットを有効化するためにsettings.jsonのemmetにhtml.erbにhtmlをインクルードした
Rubyのランダム処理について
じゃんけんアプリ作成
・ランダム処理について
RandomクラスのRandom.randメソッドと組込み関数rand(Kernelモジュール)どちらでも呼び出せるが、Randomクラスが推奨されている。
処理が高速らしい。・eachメソッドとmapメソッド
eachは配列要素を順に取得し、処理を繰り返す。
array.each do |i|
puts i
endmapは戻り値を集めた新しい配列を作るときなどに使われる
array2 = array.map{|i| i * 2}ハッシュにも使えるが返り値は配列のため注意。
.to_hメソッドでハッシュに変換できる
hash2 = hash.map{ |key, value| [実行する, 処理 ]}
Rubyのインスタンスメソッド、クラスメソッドについて
インスタンスメソッド、クラスメソッドについて
class Hey
def a
self.b #インスタンスメソッド内でselfと書いたらインスタンス自身を指す
enddef b
puts “Hey!”
enddef self.c #メソッド定義にselfと書いたらクラス自身を指す
puts “Hello”
end
endselfの記述する位置でインスタンスを差すのか
クラスを指すのかが変わる
RubyのFileクラスについてまとめ
memoアプリ作成
・Fileクラスについて
IO(input,output)クラスを継承している
File.open(“ファイル名”, “ファイルモード”)でインスタンス化ファイルモードは”r”, “r+”, “w”, “w+”, “a”, “a+”など
r:読み取り、w:書き込み、a:追記(append), +は読み書きどちらもインスタンスメソッド
file.read()メソッド:ファイル読み込み
file.write()メソッド:ファイルに書き込みクラスメソッド
File.delete():ファイルの削除追記
インスタンスメソッド
file.closeメソッド:読み込んだファイルを閉じる
openとcloseは基本セット
いいね!機能の実装方法
## いいね機能の実装方法をこちらに記載致します。
まず最初にmoelのlike.rbを作成し、その後、ユーザーモデルと投稿にあたるモデルにhas_manyを使って関連づけます。
“`
class Like < ApplicationRecord belongs_to :user belongs_to :shop end ``` ``` class User < ApplicationRecord has_many :likes end ``` ``` class Shop < ApplicationRecord has_many :likes end ``` 続いていいね!ボタンを表示したいファイルでの書き方を説明します。 ボタンを押すことにより、見た目が変化するため、if文を設置する必要があります。 ``` <% if current_user.likes.exists?(shop_id: shop.id) %>
<%= link_to delete_like_path(shop), method: :delete, class: "like-btn"
【Ruby】空のハッシュに自己代入(+=)したい
# できなかったこと
{}を定義したhashに自己代入演算子を使ったがエラー
“`ruby
hash = {}
hash[:hoge] += 1 # => undefined method `+’ for nil:NilClass (NoMethodError)
“`# 解決策
ハッシュにデフォルト値0を設定し解決
“`ruby
hash = Hash.new(0)
hash[:hoge] += 1 # => 1
“`# Hash.new(0)とは?
ハッシュにはキーに対応する値が存在しない時のデフォルト値を設定できる。`Hash.new(0)`でハッシュを生成した場合、デフォルト値が0になる。
設定がない場合、デフォルト値はnilになる。“`ruby
hash = {} # => {}
hash.default # => nilhash = Hash.new(0) # => {}
hash.default # => 0
“`# なぜ自己代入演算子(+=)が使えたのか
自己代入演算子を使わない場合を考えて納得。
“`ruby
hash[:hoge] =
Webアプリケーションをdocker化する(Ruby on Rails7.0 × postgres12)
## はじめに
本記事はRuby on Rails7.0とPostgresql12で構築したwebアプリケーションへdockerを導入する手順をまとめたものです。
“dockerを導入する”ことにフォーカスした記事となのでrubyやRails、postgresの知識がなくてもお読みいただけます。## この記事でわかること
– Webアプリケーションをdocker化する方法
– ベースイメージのバージョンの決め方
– Dockerイメージの軽量化
– docker-composeを使うメリット## フォルダ構成
![スクリーンショット 2023-07-29 17.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636274/0b26bc04-3396-6def-d591-bded1c9b7296.png)
今回dockerを導入するにあたって追加したファイルは以下の三つです。上から順に説明していきます。
– Dockerfile
– docker-co
Rubyのoptparseライブラリの使い方
# はじめに
Rubyの学習としてカレンダーを作成した際に、オプションで月を指定できるようにするために`optparse`ライブラリを使用したので、使い方をまとめました。
# optparseとは
`optparse`は、Rubyファイル実行時にオプションを指定できるようにするライブラリです。
# 使い方
### 基本パターン
1. optparseをrequireする
2. OptionParserオブジェクトを生成する
3. onメソッドを用いて、オプションを指定するためのブロックを作成する
4. parseメソッドを用いて、与えられたARGVをparseする“`sample.rb
require ‘optparse’
opt = OptionParser.newopt.on(‘-a’) {|v| p v }
opt.on(‘-b’) {|v| p v }opt.parse(ARGV)
p ARGV
“`
“`:実行結果
$ ruby sample.rb
#=> []$ ruby sample.rb -a foo -b bar
#=> true
Railsのform_withを自分なりにまとめてみた
## はじめに
未経験からプログラミング学習中のkekiと申します。Railsのログインの仕組みを理解する中で、`form_with` の機能と個人的に難しかった疑問二点を記事にしてみました。
ログイン付近を学習中の方や、その復習をしたい方向けの内容です。
修正・追記あれば随時更新していきます。## form_withとは
**Railsで情報を送信するためのヘルパーメソッド**です。
`form_with`を使うことにより、簡単に入力フォームに必要なHTMLを作成することができます。
かつての`form_tag`や`form_for`メソッドをひとまとめにした大変便利なものです。
以下のような初期設定があります。– デフォルトでは`POST`メソッドの処理がされる
– デフォルトではid属性やclass属性は付与されない
– デフォルトで`remote: true`が付与
– 関連モデルがある場合はモデルを指定し、ない場合はURLを指定する## 主な機能
大きく6つにまとめました。
1. **自動的に送信先のアクションをcreateかupdateに振り分けてくれる**
既存のRailsアプリ(Postgres使用)をDocker化する手順
Dockerとdocker-composeについて学習し既存のRailsアプリをDocker化したので、その手順をまとめたいと思います。完成版は[こちら](https://github.com/yokoyamamn/rails-docker)です。
# 前提
– Dockerの基礎知識については学習済みと仮定します。
– 今回使用する既存のRailsプロジェクト名は`rails-docker`になります。
– DBはpostgresのversion12を使用します。
– ホストのファイルシステムとコンテナのファイルシステムを同期させます。# 手順
大まかに以下のようになります。
– `database.yml`の編集
– プロジェクト直下にDocker関係のファイル作成
– `Dockerfile`の編集
– `compose.yaml`の編集
– docker-composeで起動
– `localhost:3000/`にアクセスできるか確認## `database.yml`の編集
以下のように記述します。`password`のところは環境変数を設定します。
“`ru
ruby.wasmでRubyからJavaScriptのメソッドを呼び出すしくみ
## JavaScriptオブジェクトのメソッドを呼び出せる
[ruby.wasm](https://github.com/ruby/ruby.wasm)では実行したRubyスクリプトからJavaScriptのメソッドを呼び出せます。
たとえば次のRubyスクリプトを実行するとbodyタグを表すHTML要素が取得出来ます。“`ruby
html_element = JS.global[:document].querySelector(‘body’)
“`JavaScriptで書くと次のようになります。
“`javascript
const htmlElement = globalThis.document.querySelector(‘body’)
“`ruby.wasmの`JS.global`はJavaScriptの[globalThis](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis)を表す変数です。
JavaScript
rails newからgit pushまで(SSH接続)
# 目的
SSH接続で最初のPushをする方法のメモ
# やったこと
新しいアプリを作り、Pushしようと思ったらユーザー名とパスワードではできなかった…。
SSH接続だとできるらしいので、やる。### railsアプリの作成
環境構築は一通り終わっているので
以下でrailsアプリを作成します。
“`shell:cmd
rails new test
“`### リポジトリの作成
https://github.com/
上記から、リポジトリを作成します。
今回は、「test」という名前でリポジトリ名以外はデフォルトで作成しました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693325/589fd76c-1eed-e703-f024-8a3d82e5f619.png)
### SSH公開鍵の登録
以下のコマンドを入力してカギを作成します。
“`shell:cmd
ssh-keygen -t ed25519 -f .ssh/id_test -C ” “
ruby.wasmの初期化シーケンス
[ruby.wasm](https://github.com/ruby/ruby.wasm)をブラウザで動かすためには次のJavaScriptを使って`ruby.wasm`を初期化します。
“`html
“`上記のJavaScriptのソースコードは
https://github.com/ruby/ruby.wasm/blob/main/packages/npm-packages/ruby-wasm-wasi/src/browser.script.ts です。## 初期化シーケンス
`browser.script.ts`で行っている初期化処理をシーケンス図にします。
“`mermaid
sequenceDiagram
Note over browser.script.ts: CRubyのWebAssemblyバイナリをダウンロード
バイナリを
devise導入後ログアウトできないエラーの解決
deviseを導入してログアウトの時にcreated at に関するエラー文が出ていた。
migration fileに“`ruby
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at## Rememberable
t.datetime :remember_created_at
“`これを記述したら解決した。
RSpecを実行するとWebdrivers::VersionErrorが発生する場合の対処方法
## 発生する問題
RSpecのテストを実行すると以下のようなエラーが発生する。
“`
Webdrivers::VersionError:
Unable to find latest point release version for 115.0.5790. You appear to be using a non-production version of Chrome. Please set `Webdrivers::Chromedriver.required_version =` to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html
# ./spec/system/tasks_spec.rb:24:in `go_to_project’
# ./spec/system/tasks_spec.rb:14:in `block (2 levels) in‘
# —————–
Ruby on Railsのエラー画面の読み方
## 自己紹介
はじめまして、はると申します!
現在はスクールに通いながら学習をしており、学習開始から4ヶ月が経過しました。
## 概要
Ruby on Railsでアプリ開発中に出会うエラー画面の基本的な読み方について、
調べたりChatGPTに相談しながら、勉強を兼ねてまとめたものをアウトプットしてみます。
初学者のため、間違っている箇所もあるかもしれませんのでその際は教えて頂けると嬉しいです?
(エラー例は、Ruby 3.1.3、Rails 7.0.5で作成した学習時間を記録するアプリで、記事のために意図的に起こしたものです)
## エラー画面の見方 例①NoMethodError
![6c5c3b7e63d012d172f585deeee8bd19.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471604/8a1c7c9e-1f75-92a8-27c0-004a9ec079c1.jpeg)
項目の上から順に意味を確認していきます。
#### エラータイトル
`NoM
[Rails]仮想カラムをもちいて、ソート機能を実装する
## はじめに
#### 実装したこと
PFでコミュニティサイトを作成しており、投稿一覧にソート機能を実装しようとしております。「いいねが多い順」のソート機能の実装が思ったより難しかったのでアウトプットのため、記事に残します。#### 動作環境
Ruby 3.1.2
Rails 6.1.7.3## 手順
#### モデルとカラムの状態
~~~shema.rb
create_table “contents”, force: :cascade do |t|
t.string “title”, null: false
t.text “text”
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
endcreate_table “favorites”, force: :cascade do |t|
t.integer “content_id”
t.datetime “cr
ElastiCache for RedisのClusterモード(暗号化)への接続方法 Rails編
# はじめに
AWSでRedis(クラスターモードかつ暗号化)を作成した際、
接続が止まった状態でエラーログも何も出ない。。
ということで何に気を付ければいいか書いていく## サーバー内接続確認
まずは接続コマンドを入力する。
注意点として
`-c` クラスターモードON
`–tls` 暗号化転送ON
このオプションがないと延々と接続待ちになるので注意
“`
$ redis-cli -h [エンドポイント] -p [ポート番号] -c –tls
“`ただし、自身のredis-cliの`4.0.10`をインストールしていたが、redis-cliのオプションである`–tls`が使えなかった(ここで詰まった)
“`
Unrecognized option or bad number of args for: ‘–tls’
“`なのでバージョン6をインストールする
“`
$ sudo amazon-linux-extras install redis6
“`接続確認して完了
“`
# キー”mykey”に値”Hello, Redis!”をセットする
xx
異なるOS間でのGemfile.lockの競合を解決する方法
## はじめに
オリジナルプロダクト(ポートフォリオ)のデプロイに向けて、最新のソースコードをAWS EC2に反映させようとしたところ、`Gemfile.lock` の競合が発生しました。
その原因と解決方法についてまとめました。### 開発環境
– ローカルマシン
– OS:macOS Ventura
– AWS EC2
– OS:Amazon Linux 2
– 共通
– Ruby:3.2.2
– Rails:7.0.6
– Bundler:2.4.13## エラーメッセージ
EC2 に`git pull`で最新のソースコードを反映させようとしたところ、以下のエラーメッセージが表示されました。
“`
error: Your local changes to the following files would be overwritten by merge:
Gemfile.lock
Please commit your changes or stash them before you merge.
“`「次のフ
Railsのルーティング: resources と resource の違いとメリット
# はじめに
Ruby on Railsのルーティングには、`resources`と`resource`の二つの非常に便利なメソッドがあります。これらはRESTfulなルーティングを自動的に生成し、それぞれのコントローラアクションへのパスを簡単に作成することができます。### resources
`resources`メソッドは、指定したリソースに対する標準的なRESTfulルーティングを自動的に生成します。例えば、config/routes.rbに以下のように記述すると、
“`ruby routes.rb
resources :users
“``UsersController`のアクションに対応した7つのルーティング(index, show, new, edit, create, update, destroy)が自動的に生成されます。また、これらのルーティングに対応したパスヘルパーメソッドも自動的に提供されます。
### resource
`resource`メソッドは、`resources`と同様にルーティングを自動生成しますが、こちらは単数形リソースを表現しま