- 1. RailsのJSONカラムをちゃんとバリデーションする
- 2. [Rails]アプリの雛形作成について
- 3. Satoruyaで敢えて採用しなかったライブラリ
- 4. 3-13. 詳細ページを表示しよう
- 5. 3-12. ツイートを投稿しよう – index
- 6. 3-8. ツイートを投稿しよう – new
- 7. 管理者側ジャンル機能の作成の仕方
- 8. Carrierwaveとfog-awsを利用したS3へのアップロードが正常にできるまでに試したこと
- 9. 【Rails】DB接続のないログイン画面でバリデーションする
- 10. 【解決】EC2にてアセットファイルをコンパイルしたときにエラーが出た。
- 11. fetchメソッドの基本
- 12. Ruby on railsインストール opensslでハマった話※Mac
- 13. 【AWS】EC2インスタンスへのログイン
- 14. form_withについて
- 15. 【Rails7+Vue3】Vue.jsの自動テストを導入するまで
- 16. 新しく参画したプロジェクトで導入したブランチ運用とCI・CDの紹介
- 17. Rakeタスクのdescに実行例を書いてちゃんと活用する
- 18. mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策
- 19. railsにActionTextを導入したら、showページで投稿が変になっちゃったので対処
- 20. 【Rails】accepts_nested_attributes_forを使って子モデルも保存
RailsのJSONカラムをちゃんとバリデーションする
## 目的
RailsでJSONカラムを利用するとき、その大抵はRDSの正規化を正しくやろうとすると煩雑になりすぎるためにとった手段であることが多い(少なくとも私は)。
そういう場合対外においてJSONの形式は煩雑になるのでまともにバリデーションができていなかったり、ドキュメンテーションが難しかったりした。なので本番のJSONカラムに対してJSON Schemaを利用して「バリデーション」「ドキュメンテーション」の両方を実現していこうという話。
※ 基本的にRDSにおいてJSONカラムを利用するのは私は悪手だと考えています。その中でどうしても現状完全に正規化し切るのは難しいという前提でJSONカラムを選択せざるを得なかった時の対応だと思って読んでいただけるといいと思います。
## この記事のゴール
* RailsのJSONカラムに対してバリデーションが入っている
* JSONカラムに対してドキュメンテーションがされている(自動でドキュメントが更新される)
* 上記二つが連動することによって陳腐化しないドキュメンテーションになっている## JSON Schemaについて
今回
[Rails]アプリの雛形作成について
Rails アプリの雛形作成についてまとめます
## rails new コマンド
Railsで新規アプリケーションを作成する際に使用します。このコマンドを実行することで、Railsアプリケーションの雛形が作成されます。
“`ruby
# Railsアプリケーションを作成
% rails new アプリケーション名
“`
rails newコマンドで雛形を作成するときには、以下の2つの指定を行います。-使用するRailsのバージョンの指定
-オプションの指定### 使用するRailsのバージョンの指定
“`ruby
# Railsのバージョンを指定してアプリケーションを作成(6.0.0の場合)
% rails _6.0.0_ new アプリケーション名
“`
### オプションの指定
“`ruby
# オプションを付けてアプリケーションを作成
% rails _6.0.0_ new アプリケーション名 -オプション名
“`### -dディーオプション
作成するアプリが利用するデータベースの管理システムの種類を指定できます。
“`ruby
# デー
Satoruyaで敢えて採用しなかったライブラリ
2022年現在、SatoruyaというSNSをβテストという形で公開しています。
https://www.satoruya.com/
前に「枯れた技術の水平思考」で使うライブラリ(フレームワーク)を選定した、と記事にしました。
https://qiita.com/__satoruya/items/0a3721b5c70750d2f81f
今回はこのSatoruyaで使わなかったライブラリを紹介していきます。
# Railsを始めとするMVCフレームワーク
今回のSatoruyaの開発ではMVCフレームワークを使いませんでした。
Railsは・・・まぁ、嫌な言い方ですが、時代遅れという理由ですね。とっくに枯れた技術を通りこして悪い意味でレガシーになっています。
DjangoはPythonの豊富なライブラリが使えるというのもあり、まだまだ十分人気ですが日本語の資料が少なく、情けない話なのですが、英語のサイトを利用してまで使う必要があるのかと思って使いませんでした。
(Node.jsの方が日本語の資料は少ないだろと突っ込まれたら一切否定できませんが)
速度的にもNode.jsの方
3-13. 詳細ページを表示しよう
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回はツイートの詳細ページを作ります。
一覧ページに並んでいるツイートをクリックすると、そのツイートに関する詳細が見られるページというイメージです。
3-12. ツイートを投稿しよう – index
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# GOAL
– tweetした内容の一覧を表示する# ▼▼▼実装&解説動画
3-8. ツイートを投稿しよう – new
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回は投稿フォームを作ります。
※ 3-4の末尾にある、『復習問題』を終わらせている前提で進めています。
やっていないと途中でエラーが出てしまうので、必ずやっておきましょう。# 概要
管理者側ジャンル機能の作成の仕方
## ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。## ジャンルのモデル作成
“`
$ rails g model Genre
“`
のコマンドを打ち込み作成します。その後にマイグレーションファイルを開きカラムを追加。
“`db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1] def change create_table :genres do |t| t.string :name t.timestamps end end end ``` t.string :nameを追加してあげましょう。 nameは今回ジャンルに追加する名前の事です。 ``` $ rails db:migrate ``` 忘れずにrails db:migrateをしたら下準備は完了です。 ##
Carrierwaveとfog-awsを利用したS3へのアップロードが正常にできるまでに試したこと
# 概要
下記の記事を参考に、Carrierwaveとfog-awsを利用したS3へのアップロードができるように設定した。https://qiita.com/take18k_tech/items/2efd778c8dd9aae9496e#10-s3
本番環境へデプロイ後、動作を確認してみると、下記の状況となっていた。
– 画像をアップロードしても、
– S3バケットには何も表示されない
– /var/www/my-app/current/public/uploads配下に保存されている
– アクセスはできるが、CSSが反映されなくなっている# 環境
– アプリ
– ruby 3.0.2
– rails 6.1.4
– mysql 8.0.31– EC2AMI
– Amazon Linux2 AMI
– app server : Unicorn
– web server : Nginx# エラー①
/var/www/my-app/current/logをそれぞれ確認。
関係ありそうなのは下記のログ。
“`va
【Rails】DB接続のないログイン画面でバリデーションする
## はじめに
バリデーションは,ActiveRecordの機能として実装できますが,ActiveRecordはORMのフレームワークであるため,DB接続が必要になります.
そのため,DB接続しないモデルにはActiveRecordが使えません.
今回はActiveModelを用いて,DB接続しないモデルへバリデーションを実装する方法を整理しました.Rails初学者による記事になります.
不足,間違い等ありましたらご指摘いただけますと幸いです.## 環境
Ruby 3.0.4
Rails 6.1.7## やりたいこと
DBに接続しないsessionモデルで作成したログイン画面に,バリデーションを実装します.## 実装方針
1. sessionモデルに,`ActiveModel::Model`をミックスインすることで,バリデーション機能を有効にする.
1. sessionsコントローラで,`valid?`メソッドを用いて,バリデーションをトリガする.
1. sessionsビューのnewファイルで,エラーメッセージを出力する.## Modelでバリデーション機能を実装
【解決】EC2にてアセットファイルをコンパイルしたときにエラーが出た。
アセットファイルをコンパイルしたときにエラーが出ました。
手こずりましたが、いろいろ調べて解決することができたので、記録したいと思います。“`rails:ターミナル
$ rails assets:precompile RAILS_ENV=production
“`“`rails:ターミナル
yarn install v1.22.19
[1/5] Validating package.json…
error furima_38288@0.1.0: The engine “node” is incompatible with this module. Expected version “14.20.0”. Got “14.21.1”
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
“`上記のようにエラーが表示されました。
# エラーの原因
調べた結果、Node.jsの
fetchメソッドの基本
## `fetch`メソッドとはなんぞや
最近よく見かける`fetch`メソッドは、ハッシュのキーを指定して、そのキーに関連する値を取得することができるメソッドです。
ハッシュの中にあるオブジェクトに対して使うことができます。
## 使い方
具体的な使用方法を説明します。
### 使用例
“`rb
goriras = {“gorira1” => 100, “gorira2” => 200, “gorira3” => 300}
puts goriras.fetch(“gorira1”)
100
“`
`goriras`という名前のハッシュオブジェクトがあるとします。
上の例では、`gorira1`というキーが指定されています。
このようにすると、キー`gorira1`の値`100`を取得できます。
Ruby on railsインストール opensslでハマった話※Mac
## 1.rbenvインストール
“`
brew install rbenv
“`
“`
rbenv install 3.1.2
“`
テスト用フォルダ作成
“`
mkdir ~/ruby-test
cd ~/ruby-test
“`
テストフォルダへruby反映
“`
rbenv local 3.1.2
rbenv rehash
“`
反映確認
“`
ruby -v
“`rails インストール※bundlerはインストール済み
“`
gem install rails
“`
しかし、、
“`
ERROR: While executing gem … (Gem::Exception)
OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
“`
opensslが利用できないとのことなので
“`
brew link openssl –force
“`
しかし、
“`
Warning: Refus
【AWS】EC2インスタンスへのログイン
# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。# EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されます。「ec2-user」を使用してログインします。“`bash.ターミナル(ローカル)
% cd ~
“`
“`bash.ターミナル(ローカル)
% mkdir ~/.ssh# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
“`
“`bash.ターミナル(ローカル)
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.ss
form_withについて
### ❶form_withとは
♦︎情報を送信するためのヘルパーメソッドの一つ。
♦︎セキュリティー対策などが組み込まれた、安全なHTMLのformタグを作成できる。
♦︎つまりは投稿ページを作るときのフォームを実装するためにある。“`ruby:form_withの基本形
<%= form_with(model or scope or URL [,オプション]) do |f| %>
<% end %>
“`
この|f|はブロック変数、つまり特定の範囲内で使える変数のことです。
このdo〜endの範囲でのみ使うことができます。
変数の違いがわからない方はこちら↓
>https://www.sejuku.net/blog/12879#### form_withのオプション
| オプション |指定 | デフォルト値|
| :– | –: | –:|
| :model | モデルを指定||
| :scope| スコープを指定||
| :url | URL指定 | |
|:local|リモート送信の無効|false|
|:method|HTTPメソッドを指定|POST|
【Rails7+Vue3】Vue.jsの自動テストを導入するまで
# はじめに
今回、Rails+Vueで作っているWebアプリに、Vueの自動テストを導入することになり、試行錯誤しました。
せっかくなので、備忘録代わりに置いておきます。「Vue 自動テスト」で検索すると、TypescriptやらVue-cliやらの話が結構引っかかりますが、今回は両方とも使っていません。
# 環境
rails 7.0.2.3
vue.js 3.2.37# 参考ドキュメント
バージョンは古いですが、結局本家のドキュメントに一番助けてもらいました。
https://v1.test-utils.vuejs.org/ja/
ちなみに、新しいバージョンのドキュメントは2022.11.21現在、なぜか閲覧できません。。。# 使うテストツール
### vue-test-utils
Vue標準のテストライブラリです。
### Jest
“`vue-test-utils“`で書いたテストを実行するテストランナです。
公式ドキュメントで一番上に書いてあったし、弊社ではフロントエンドテストの実績がなく、こだわりがないのでJestを選びました。
Jest以外のランナを使っ
新しく参画したプロジェクトで導入したブランチ運用とCI・CDの紹介
最近会社で新しいプロジェクトにSREとしてジョインし、ブランチ運用やCI・CDを導入したので忘備録がてら紹介。
## 参画したプロジェクトとかに関して
今回ジョインしたのはサーバーサイドがRails、インフラがGCP、フロントはVueのプロジェクトです。自分がジョインした時点でCI・CDの仕組みはほぼ存在せず、ブランチ運用も特に定まってない状態でした。## CIの導入
ここは至って普通なので軽く済ませますが、Github ActionsでRspecによる自動テストとrubocopによるコードチェックをPR作成時に走らせるようにしました。rubocopに関しては以下のActionsを使えばそれなりにリッチな仕組みが簡単に実現できるのでとても便利ですね。
https://github.com/reviewdog/action-rubocop## ブランチ運用
### 基本はGitflow
基本的にはGitflowに近い運用を採用しました。ただし、厳密なGitflowは今回のチームでは大げさに思えたので一部簡略化してます。使うのは以下のブランチです。– main
– deve
Rakeタスクのdescに実行例を書いてちゃんと活用する
仕事でRuby on Railsを使っていて、Rakeタスクもよく使っている中で、
実行例もコマンドで確認できるようにした話です。## Rakeタスクとは
Rubyで書かれたコードをタスクとして作成しておき、必要に応じて呼び出し実行できる機能です。https://opiyotan.hatenablog.com/entry/rails-rake-task
## 実行コマンド忘れる問題
Rakeタスクの種類が増えてくると、Rakeコマンドで実行する際に、正しいコマンド名や引数の渡し方などを毎回忘れてしまうという問題が出てきました。
“`ruby
namespace :hoge do
# 実行例: bundle exec rake ‘hoge:fuga[1, 10, 20, 30]’
desc ‘ほげほげする’
task :fuga, %i[hoge_id] => :environment do |_, args|
# 処理
end
end
“`
こんな感じでコード内にコメントで実行例が記述されていたりはしたのですが、毎回Rakeファイルのコードを探すのが
mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策
## 実行環境
– M1 mac
– Rails 7.0.4
– ruby 3.1.0## エラー内容
`rails s`を実行しようとすると次のようなエラーが出てきた。
“`bash
$ rails s
/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require’: dlopen(/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: ‘/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle’ (mach-o file, but is an incompatible archit
railsにActionTextを導入したら、showページで投稿が変になっちゃったので対処
プログラミング学習2か月ちょいのクソ雑魚初心者です。
現在ポートフォリオでActionTextを導入した際に起こったエラーについて忘れないためにメモ書きと同時に、こちらへ初投稿しようと思い立ちました。# 発生した問題
Ruby on Railsで投稿サイトを作っていて、下の画像みたいな感じに投稿画面にActionTextを導入しました。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/6438cce8-4a4e-5d75-fccc-fc89e6f5d2df.jpeg)# で、投稿フォームは問題なかったけど投稿後のshowページが…
試しにテストで投稿します。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/19c7312e-aea3-d702-84a3-a76d45a19134.jpeg)
すると、、、
![333333333
【Rails】accepts_nested_attributes_forを使って子モデルも保存
## まえがき
推奨されてないaccepts_nested_attributes_forを使わずに、親モデルに紐づくレコードの一括保存をしようとしたが結局うまくいかずaccepts_nested_attributes_forを使ったときの備忘録。以下の記事を参考にしましたが、私はうまくいきませんでした。
https://zenn.dev/murakamiiii/articles/5ecefb7a58d1ef
## accepts_nested_attributes_forを使ってみる
親クラスに“`accepts_nested_attributes_for :テーブル名“`を追加“`ruby :event.rb
class Event < ApplicationRecord has_many :possible_dates, dependent: :restrict_with_exception accepts_nested_attributes_for :possible_dates end ``` ```ruby :possible_dates.rb c