- 1. 【Ruby on rails】テストについてまとめてみた
- 2. Railsの form_with を用いた投稿の作成と編集の処理の流れ② pryでインスタンスの中身も確認。
- 3. Progate +α メモず【Ruby on Rails ⑥⑦】
- 4. 既存のプロジェクトを Docker 化する手順について (Rails + PostgreSQL)
- 5. 【Docker】アーキテクチャの違いでつまづいたので調べてみた
- 6. [Docker] Terraformで開発環境のMinIOにバケットを作成する方法
- 7. Railsのcollectionルーティングについての言語化メモ
- 8. Railsでlink_toのmethod: :deleteが使えない
- 9. dependabot によるライブラリのアップデート手順書
- 10. 掲示板のお気に入り機能の多対多アソシエーションイメージ
- 11. seleniumのsystem specでheadless chromeを利用している際, Chrome120に更新されてから通らなくなった原因の解消
- 12. Progate +α メモず【Ruby on Rails ④⑤】
- 13. 【Rails】ERB Formatter/Beautifyがうまく動かない
- 14. rails クイズアプリ作ってみた
- 15. Railsの form_with を用いた投稿の作成と編集の処理の流れ① pryを使用してインスタンスの中身も確認してみる。
- 16. RailsでDALL-E3のAPIを使ってみる
- 17. Progate +α メモず【Ruby on Rails ②③】
- 18. rails バリデーション機能について
- 19. 名前の由来 機能 (初心者向け)
- 20. sidekiqに触れてみた
【Ruby on rails】テストについてまとめてみた
# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!
今年も記事の更新をしていきたいと思います。よろしくお願いします。プログラムの「テスト」って何をするんだ?何からしたら良いんだ?と思っていませんか。
プログラムのテストとは、コードが正しく動くことを確かめる作業のことです。
私自身、最近初めてrailsでテストコードを書いたので今回はその時の学びを含めて記事にまとめたいと思いました!Rails 7.1.1というバージョンでのテストに焦点を当てて、
(現在の最新バージョンは[7.1.2](https://rubygems.org/gems/rails/versions/7.1.2)です。2023.11.10にリリースされています。)
テストフレームワーク「Capybara」の使い方や、テストでよく使われるメソッド、注意点などを紹介します。少しでもお役に立てたら嬉しいです!
# 目次
– [テストの基本概念](#テストの基本概念)
– [Railsのテスト環境の設定](#Railsのテスト環境の設定)
– [単体テスト
Railsの form_with を用いた投稿の作成と編集の処理の流れ② pryでインスタンスの中身も確認。
:::note warn
現在、プログラミングスクールにて、主にRubyやRuby on Railsを勉強している者です。この記事を通して少しでもお役に立てられますと幸いです。また、説明不足や誤りがございましたら申し訳ございません。
:::この記事は、前回の「Railsの form_with を用いた投稿と編集処理の流れ① pryを使用してインスタンスの中身も確認してみる。」の続きとなります。
https://qiita.com/zakkiiy/items/933dceb2982b4ac8684d
今回は主に、form_withヘルパーを用いた編集処理の流れについてみていきたいと思います。
## 前提
– MVCの流れや一対多の関連付けについての多少の理解。
– Sorcery gemを使用しているため、current_userメソッドを使っています。
– 機能は最低限となっているため、パーシャル(フォーム用)等は使用しておりません。
– ルーティングは resources :posts を使用しており、標準的なRESTfulルートが生成されています。“`ruby:a
Progate +α メモず【Ruby on Rails ⑥⑦】
# はじめに
Ruby on Rails学習レッスン⑥は⑤の応用だったので、特に新しい要素はなし。
細かなミスを繰り返しながら学びました。
⑦はユーザー画像の表示!ひそかに楽しみにしてたところ🥳# メモず
## `$ rails g migration file_name`
マイグレーションファイルのみを作成。
## マイグレーションファイルの書き方
“`rb
class MigrationName < ActiveRecord::Migration[5.0] def change method_name :table_name, :column_name, :data_type end end ``` Ruby on Railsのマイグレーションファイル内の`change`メソッドは、データベーススキーマの変更を定義するために使われます。このメソッド内で行うことができる代表的な操作は以下の通りです。 ### 代表的なメソッド #### テーブルの作成 ```ruby def change create_table :users do |t| t.string
既存のプロジェクトを Docker 化する手順について (Rails + PostgreSQL)
## **はじめに**
今回は[Rails](https://d.hatena.ne.jp/keyword/Rails)のプロジェクトを Docker 化を紹介します。よろしくお願いします。
## **Docker 化することの意味**
Docker 化することで開発環境を共有でき、さらに Dockerfile を共有することで複数人で共通の環境を構築できます。OS ごとに挙動が変わることがなく、また、コンテナという仮想環境で作業するので自分の PC にあれこれインストールしなくて済みます。
## **Docker 化の手順**
1\. [github](https://d.hatena.ne.jp/keyword/github)から Web アプリの[ソースコード](https://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9)を引っ張ってきます。(今回は[Rails](https://d.hatena.ne.jp/keyword/Rails)アプリ)
2\. Dockerfile、docker-c
【Docker】アーキテクチャの違いでつまづいたので調べてみた
どうもこんにちは。
今回は、Dockerを使用してRailsの環境構築をしていた時につまづいた、「x86_64」「amd64」「arm64」の違いについて調べてみました。
私が使用しているPCはApple Silicon M2チップのMacBookProです。
# アーキテクチャについて
## x86_64/amd64
この二つのアーキテクチャは、呼び方が異なるだけで同じアーキテクチャを指しているようです。
主にデスクトップやサーバー向けのアプリケーションで使用されています。
## arm64
ARMベースのデバイスやサーバーで使用されるアーキテクチャで、特に省電力性や効率性が求められる環境での使用に適しています。
# Dockerコンテナへの記述
ARMアーキテクチャを採用しているPCの場合、`docker-compose build`を実行した時にアーキテクチャが違いますとエラーが出ることがあります。
その場合、`docker-compose.yml`にplatformを指定することで解決できます。
“`yml
db:
image: mysql:8
[Docker] Terraformで開発環境のMinIOにバケットを作成する方法
# 概要
`MinIO`というAWS APIと互換性を持つストレージサービスを開発環境で使用しています。
今まで`Shell`を実行してバケットを作成していましたが、この度`Terraform`を使用してバケットを作成するようにしてみました。# 実装
Docker環境で実装します。
### Dockerfile
ベースイメージに`Debian`を指定し、`MinIO`と`Terraform`をimageにインストールします。
ちなみに`amd64`を指定していますが、M1でも動きました。Intelを考慮する必要のない場合は`linux-amd64 / inux_amd64`の部分を`arm`に変更した方がいいかもしれません。
* `Terraform`のバージョンは現時点での最新にしているので適宜修正してください。
* `Rails`を使用していたらイメージはRubyだったりするのですが、アーキテクチャの部分も適宜変更してください。“`Dockerfile:Dockerfile_minio
FROM debian:latestRUN apt-get updat
Railsのcollectionルーティングについての言語化メモ
Railsガイドを読んでいて、[2.10.2 コレクションルーティングを追加する](https://railsguides.jp/routing.html#:~:text=2.10.2%20%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)の部分で何をやってるのか可能な限り言語化したメモ
間違ってたら教えてください。例として挙げられていたルーティング↓
“`routes.rb
resources :photos do
collection do
get ‘search’
end
end
“`これをターミナルで確認する↓
“`
search_photos GET /photos/search(.:format)
Railsでlink_toのmethod: :deleteが使えない
# 環境
Ruby:3.2.1
Rails:7.0.0# Rails5.1からlink_toのdeleteメソッドがGetメソッドになる
“`
<%= link_to 'ログアウト', 'パス', method: :delete %>
“`
リンクを押すと以下のエラーが発生します。![スクリーンショット 2024-01-15 16.30.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465903/061c87bd-4545-3863-36b5-96d99eae9a48.png)
methodをdeleteに指定したのに、Getメソッドで送られています。
開発者ツールでHTMLを確認してみたところ、deleteになっていることが確認できます。“`
ログアウト
“`# 原因
link_toの場合、deleteメソッドはJavascriptでGetをDeleteに変換さ
dependabot によるライブラリのアップデート手順書
## 個人用作業手順書
### 手順1_対象のGemを調査する(大事)
– RUNTIME依存とDEVELOPMENT依存性チェック(**Rubyの場合**)
– [RubyGem](https://rubygems.org/)ドキュメントから対象Gemを検索する
– 依存Gemのバージョンが足りないことをチェック、足りない場合アップデートできません
– 例:↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658393/87e08951-6801-6275-2e41-9c483032500d.png)– バージョン差分確認:
– バージョン差が特に大きいの場合、確認作業は重くになるので、一つだけアップデートしても問題ないです
– 変更履歴チェック:
– ChangeLogとCommitsをベースにチェック
– ![image.png](https://qiita-image-store.s3.ap-northeast-
掲示板のお気に入り機能の多対多アソシエーションイメージ
掲示板のブックマーク機能を作成していて、ググっていくうちに混乱して多対多のアソシエーションのイメージが訳わからなくなったのでメモです。
実務未経験エンジニアなので間違ってたらご指摘お願いします。前提として、User、Board、Bookmarkというモデルがあります。
Userから見てBoardは一体多の関係にあります(これは簡単)。
逆に言えばBoardから見てUserは多対一です(これもまぁそうだよねという感じ)。
では、Bookmarkを追加するにあたって、UserとBoardに多対多の関係を持たせてください←?UserとBoardの間にはすでにアソシエーションがあるのにいかに?
Bookmarkはどこいったんだ?絵として描き描きしていて気づいたのですが、Bookmarkを中間テーブルにすることで多対多のアソシエーションが成り立つのですね。
もっと具体的にいうと、UserはBookmarkを通してBoardと多対多(その逆も然り)のアソシエーションになる、ということです。絵にするとこんな感じ
![Untitled Notebook-4.jpg](https://q
seleniumのsystem specでheadless chromeを利用している際, Chrome120に更新されてから通らなくなった原因の解消
ruby3.1
rails 7.0
selenium-web-driver 4.16
capybara 3.39.2結果としては、headless chromeを使う際のオプション名が原因でbrowserNameがchromeとなるはずがchrome-headless-shellになっていた。
chromeはヘッドレスモードが2種類あり、古い方がchrome-headless-shellとなるようだ。
chrome-headless-shellは別で専用のバイナリが公式から用意されていて、そちらをDLして使う事も可能らしい。修正前
“`ruby
Capybara.register_driver :chrome do |app|
options = Selenium::WebDriver::Options.chrome
options.args << '--headless' options.args << '--no-sandbox' options.args << '--disable-dev-shm-usage' end ``` 修正後 ```ruby
Progate +α メモず【Ruby on Rails ④⑤】
# はじめに
気持ちよくコーディングできてるけど、こんな後からどんどん追加機能作ってきれいなままなの、すごい
Progateのカリキュラムの設計がいいのかな?と思ったけど、JSに置き換えて考えてみると、Ruby on Railsの力がなかなか大きい気がしてきた— たま / SamuraiStats⚾ (@SamuraiStats) January 13, 2024
Ruby on Railsの力を実感してきた今日この頃です。
MVCの分離とか、メソッドがちゃんと独立して
【Rails】ERB Formatter/Beautifyがうまく動かない
VSCodeの拡張機能であるERB Formatter/Beautifyをインストールした時にエラーで少しハマったので、同様の問題で悩んでいる方のために解決策を共有したいと思います。
環境はmacM2です。## エラー
– VSCodeの拡張機能からインストール
– Gemfileに gem ‘htmlbeautifier’ を追記して bundle install
これで動くはずなんですが、フォーマットを実行してみると以下のようなエラーが“`
Error occurred while formatting: Command failed with exit code 1
“`
“`
Failed with exit code: 1. ‘/Users/hogehoge/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/htm
lbeautifier-1.4.2/bin/htmlbeautifier:12:in `rescue in beautify’:
Error parsing standard input: invalid
rails クイズアプリ作ってみた
# やること
– 問題数合計50問程度からランダムで10問を選び出題する
– ユーザーのログインなしで回答できる
– 回答は全クイズにおいて4択の選択式
– 回答後に正答率を表示# 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/58d45ce2-e5b8-d150-ffd8-48bdd1632565.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/f27661a4-825f-ba38-c4ef-598ee5387f55.png)# データベース構成
テーブル名: questions
– content (質問の内容を格納する文字列)
– option1, option2, option3, option4 (選択肢の文字列)
– correct (正解の選択肢を表す整数)テーブル名: user_answers
– q1_id
Railsの form_with を用いた投稿の作成と編集の処理の流れ① pryを使用してインスタンスの中身も確認してみる。
:::note warn
現在、プログラミングスクールにて、主にRubyやRuby on Railsを勉強している者です。この記事を通して少しでもお役に立てられますと幸いです。また、説明不足や誤りがございましたら申し訳ございません。
:::## 前提
– MVCの流れや一対多の関連付けについての多少の理解。
– Sorcery gemを使用しているため、current_userメソッドを使っています。
– 機能は最低限となっているため、パーシャル(フォーム用)等は使用しておりません。
– ルーティングは resources :posts を使用しており、標準的なRESTfulルートが生成されています。“`ruby:app/config/routes.rb
Rails.application.routes.draw do
resources :users, only: %i[new create]
resources :posts
end
“`“`
# 今回使用されるルーティングposts_path GET /posts(.:format) posts#in
RailsでDALL-E3のAPIを使ってみる
Ruby on Railsを使用してDALL-E3 APIを介して画像を生成する方法を紹介します。
## 環境
:::note info
ruby 3.2.2
Rails 7.0.8
:::## 完成図
### 生成前
![rails-dall-e3-before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849608/2a5a9781-d604-bda1-d1fe-cbaac9f18d92.png)### 生成後
![rails-dall-e3-completed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849608/5fdc3de8-c9f2-8662-2b03-47a8d326013c.png)
## アプリケーション作成
DALL-E3を使った画像生成は、servicesディレクトリ下のopen_ai_service.rbファイルです。https://github.com/shan
Progate +α メモず【Ruby on Rails ②③】
# はじめに
今回はデータベース周りが主軸……と思ったけど、結果的にいろいろと。
なんかいつの間にRails②を終えて③に入ってました。怖。
なのでまとめて投稿します。今回も、気になる見出しがあれば見ていただけると嬉しいです!
# メモず
## `@変数`:Controllerとviewからアクセスできる
なんで`@`つけると参照できるの?別ファイルじゃないの?
→個人的には`html`と`script`の関係性に置き換えて納得しました。RUNTEQだと `html`と`css`の関係がわかりやすいでしょうか。
– `html`の中に`css`がある(`stylesheet = css`)
– `html`で`class`や`id`をつけることで、`css`からもアクセスできる
(`css`の場合はより広く、より深くアクセスできますが)
– `@`をつけてない変数とは、`css`でいうところの`class`も`id`もない`html要素`のイメージ
(繰り返しになりますが、`css`だとタグでもアクセスできる。まあイメージということで)## マイグレーションファイル
rails バリデーション機能について
## 結論
validation:検証
オブジェクト(Hoge.newなどで生成されたものなど)がデータベースに保存される(newだけでは保存されない、save,
criate,updateメソッドで初めてデータベースに保存される)前に、本当にデータベースに保存していいのか検証してくれる機能## とてもシンプル
“`app/models/hoge.rb
class Hoge < ApplicationRecord validate :カラム名,presence: true end ``` presence: 出席する = 空文字を防ぐ ## もしユーザーが空文字を入力していたら? ``` nil => false
“`
と判断される。## バリデーションヘルパー
目次.2 で詳細が記載されています。
https://railsguides.jp/active_record_validations.html以上です。
名前の由来 機能 (初心者向け)
2022/07/13 編集中
私はプログラミング初学者です。
学習する度に、新しい知識の情報量に圧倒されます。
とくに学習を始めた最初の頃は意味が全く分からない単語も多く、学習に対して強い抵抗感を感じました。。
なので、初学者向けに少しでも抵抗感を軽減することができればと思い、機能と名前の由来について記事にすることにしました。# Ruby
元々、6月に生まれたpealというプログラミング言語が存在していた。pealの発音は6月の誕生石である真珠(Pearl)と同じである。
Rubyは7月に生まれた。「Perlに続く」という意味で、7月の誕生石のルビーから名付けられた。# gem
RubyGemsが公開しているRubyのパッケージのこと# Rails
Rubyなどの言語を使って簡単にアプリなどを制作できるような枠組みである。お膳立てという意味合いで「レール」と名付けられた。
RailsでWebページを装飾するには?# rbenv
# パッケージ
関連するさまざまな要素を1つにまとめたものや、市販・出来合いの製品などの意味で使われる。 特定の業務用に作成されたプログラム
sidekiqに触れてみた
# はじめに
業務の中で非同期処理を行いたいタスクがあり、システムにsidekiqを新しく導入することで実装しました。
改めて復習も兼ねて記事を書くことにしました。# 実装
### sidekiq用のサーバーを構築
“`docker-compose.yml
sidekiq:
uild:
context: .
dockerfile: Dockerfile
volumes:
– .:/app
env_file:
– .env
ports:
– 3000:3000
command: bundle exec sidekiq -C config/sidekiq.yml
“`### GemFileにsidekiq追加し、bundle install実行
“`ruby:GemFile
gem ‘sidekiq’
“`### sidekiqの各種設定
1\. アダプターをSidekiqにする
ActiveJobをsidekiqと連携させる。
“`config/applicatio