- 0.1. DockerでRails環境(Nginx+Unicorn+MySQL)を構築してFargateへデプロイするまで〜本番環境編〜
- 0.2. 【Rails】永続ログイン時に作成されるremember_tokenの有無をminitestで調べる方法
- 0.3. タグ検索機能 select(プルダウン)で実装してみた
- 0.4. 【Rails】redirect_toを使うとき、flash.nowは表示されないよという話
- 0.5. Hotwireを使って正規表現チェッカーを作ろう
- 0.6. gem VCRでweb mockを使う
- 0.7. 実際に使用される第3正規形のデータってどんなの?
- 0.8. 【Rails】Twitterクローンを作ってみた 〜ログイン周り編〜
- 0.9. Rails7でtailwindCSSをインストールする方法
- 0.10. MVC(Model View Controller)とは?
- 0.11. 【Docker】Rails 6系 x Docker x MySQL 8で環境構築してみた
- 0.12. deviseでの`downcase’ for nil:NilClassエラー
- 0.13. fields_forを使用して新規登録時に別レコードも作成する
- 1. 新規登録画面
DockerでRails環境(Nginx+Unicorn+MySQL)を構築してFargateへデプロイするまで〜本番環境編〜
# 概要
今回は前回の続きで、ECS Fargateへとデプロイを行う本番環境編となっています。前回の記事:
[DockerでRails環境(Nginx+Unicorn+MySQL)を構築してFargateへデプロイするまで〜開発環境編〜](https://qiita.com/GuChiM1292/items/b7c54ae1b0f831060a70)# 設定手順
[1. VPC周りの構築](#1-vpc周りの構築)
[2. RDSの構築](#2-rdsの構築)
[3. ECRリポジトリの構築](#3-ecrリポジトリの構築)
[4. ECSの構築](#4-ecsの構築)
[5. アプリのデプロイ](#5-アプリのデプロイ)## 1. VPC周りの構築
### VPC
|key|value|
|—|—|
|名前|three-mouth-vpc|
|IPv4 CIDR|10.0.0.0/16|![vpc作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2131579/ab03ea
【Rails】永続ログイン時に作成されるremember_tokenの有無をminitestで調べる方法
# どうした?
Railsチュートリアルにならって永続ログイン機能を実装しました。
永続ログイン時にはUserモデル内で定義されたクラスに`remember_token`というインスタンス変数が付与されます。
本記事は、minitestでそれの有無を調べる方法をメモとして残します。# テスト方法
## うまくいかない方法(ログイン時)
“`ruby:users_login_test.rb
assert !@user.remember_digest.nil?
“`
`@user`に`remember_token`をハッシュ化した`remember_digest`が付与されているかどうかを調べれば良いのかなと思いましたが、minitestはこれをfalseで返してきます。minitestは、モデル内で定義したインスタンス変数にテストの内部からアクセスできません。
これは、インスタンス変数とminitestのスコープが異なるためです。## cookiesに`remember_token`が存在するかをチェックする方法
cookiesに保存された`remember_token`
タグ検索機能 select(プルダウン)で実装してみた
タグ検索機能をプルダウンで実装したいとの声があったので
実装してみました!
タグ機能自体の実装に関しては、以下の記事を参考に進めていますので
DB周りの実装は以下の記事を参考にしていただけると幸いです?https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10
# 目次
本記事は以下の流れで進みます!
1. [form_tagの実装](#formtagでの見た目実装)
1. [検索機能の実装](#検索機能の実装)# form_tagでの見た目実装
## タグ機能を1つ実装した場合の検索機能
“`erb:posts/index.html.erb
<%= form_tag({controller:"posts",action:"index"}, method: :get) do %>
<%= select_tag :tag_search, options_from_collection_for_select(@tag, "id","name") %>
<%= submit_tag "検索する"
【Rails】redirect_toを使うとき、flash.nowは表示されないよという話
# どうした?
Sessionsコントローラでログイン機能を実装したところ、`flash.now`が表示されなかった。
minitestのログインテストでは
“`ruby
assert !flash.empty?
“`
は`true`を返していた。## 開発環境
“`terminal
$ ruby -v
=> ruby 3.1.2p20$ rails -v
=> Rails 6.1.7
“`# 解決方法
**before**
“`ruby:sessions_controller.rb
def create
@user = User.find_by(email: params[:session][:email])
if @user && @user.authenticate(params[:session][:password])
log_in(@user)
remember(@user)
flash.now[:info] = “ログインしました”
redirect_to root_path
else
flash
Hotwireを使って正規表現チェッカーを作ろう
[@z_ohnami](https://twitter.com/z_ohnami)です。こんにちは。
railsの7から導入されたHotwireを使って、JavaScriptをできる限り書かずに正規表現チェッカーを作ってみました。正規表現チェッカーといえば、[Rublar](https://rubular.com/)というサイトが以前から存在していて私は日頃からお世話になっていたのですが、見た目はそちらを参考にして作りました。
名前は「RegExpress」にしました。
[https://tools.bigwave.biz/regular_expressions](https://tools.bigwave.biz/regular_expressions?utm_source=qiita)
![ogp_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10138/2e00e299-d7b5-c4c4-108c-07d87ff33583.png)
以下のように、正規表現のパターンとテスト用の
gem VCRでweb mockを使う
[gem vcr](https://github.com/vcr/vcr)を使ってpush通知のテストを効率化した話を書きます。
VCRとはテストで使う『HTTP通信』を1回目に記録しておいて、2回目以降のテストでの実行はその記録を使って行うことができます。
Webmockと組み合わせて使うと非常に効率的にテストができるようになりました。## VCR
VCRの使い方の概要。– テストコード内で実行するリクエストに、外部のwebAPIなどに対してHTTPリクエストを送る箇所があれば、そこにVCRを使う旨をまず設定する
– VCRでは設定した後にHTTPリクエストを送ると、設定ファイル(ymlファイル)に、HTTPリクエストとそれに対応するレスポンスの組合せを自動で記録し、モックを作成する。VCRを有効にしてテストコードを実行すると、VCRは具体的には以下の動きになる。
1. テスト実行中に送信されるHTTPリクエストを監視
1. HTTPリクエストの送信を見つけると、設定ファイル内のHTTPメソッドとURIが一致する、HTTPリクエストを探索
1. HTTPリクエストが見
実際に使用される第3正規形のデータってどんなの?
# 初めに
基本情報技術者試験の勉強をしていた時に、個人的に納得できなかったものが第3正規形の問題です。試験問題の解法自体は理解するものの、用意されたデータがあからさますぎで実際の設計時はどうなるのだろうと疑問に思っていました。具体的に第3正規形におけるデータとはどのようなものでしょうか?# 正規化のおさらい
> 第1正規形
> ・繰り返し項目を持たない
> ・導出項目を持たない
> 第2正規形
> ・第1正規形を満たしている
> ・主キーに対してすべての非キー属性が完全関数従属
> 第3正規形
> ・第2正規形を満たしている
> ・すべての非キー属性がどの候補キーに対しても推移的に関数従属していないhttps://oss-db.jp/dojo/dojo_info_04
LPI-Japan OSS-DBのサイトに載っている正規化の説明から一部流用します。
# 第3正規形の問題でよくあるもの
個人的に納得できなかった問題のサンプルがこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.
【Rails】Twitterクローンを作ってみた 〜ログイン周り編〜
## はじめに
現在、railsを用いてtwitterのクローンを作成しております。今回はログインまわりについて私が書いたコードをもとに、アウトプットしていきます。※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS## ログインとサインアップ
#### 条件
– ログイン・サインアップ・トップページの作成
– ユーザーモデルの作成
– ログイン画面・サインアップ画面の作成
– ログイン中はトップページに自分の名前とつぶやきボタンが出る。(ボタンはまだ動作しなくて良いです。)
– ログアウトができること
– トップページはタイムライン以外の部分を作成してください。
– Deviseを使用しユーザーを作成してください。そしてログイン・ログアウト・サインアップができるようにしてください。
#### 実装流れ(簡略)
① gem(bootstrap, slim, devise等)の追加、bundle install
② deviseをインストールし、
Rails7でtailwindCSSをインストールする方法
まだアプリケーションを作成していない場合は、下記コマンドでtailwindが使えるようになります。
“`
rails new myapp –css tailwind
“`既にアプリケーションがある場合、下記二つのコマンドを実行すればインストールされます。
(参考にしたサイト→ [tailwindcss-rails](https://github.com/rails/tailwindcss-rails/blob/main/README.md “”))“`
./bin/bundle add tailwindcss-rails
./bin/rails tailwindcss:install
“`
MVC(Model View Controller)とは?
## はじめに
Ruby on Rails 等で使用される MVCについて書きたいと思います。## MVCとは?
– Model View Controller の略称
– プログラムの処理を役割毎に分けて開発を行う考え方
– Webシステムの開発で主に使用される
– 以下のフレームワークで使用されている
– Ruby on Rails, Laravel, SpringBoot 等## MVCの構成
– Model
– ビジネスロジックを書く部分
– データベースとのデータのやり取りを行う部分
– View
– ユーザーが実際に見る画面
– Controller
– リクエストやレスポンスを制御
– ViewとModelの橋渡し## 図
![MVC.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/0d506bc0-9156-ad22-c09e-11278e413164.png)
## 参考
【Docker】Rails 6系 x Docker x MySQL 8で環境構築してみた
## 条件
– docker-compose upでrails serverを起動できるようにすること
– ホストのファイルシステムとコンテナのファイルシステムを同期させること
## 1. 各種ファイル作成
任意のディレクトリファイル配下に以下のファイルを作成します。
“`
$ mkdir docker-files
$ cd docker-files
“`
– Dockerfile
– docker-compose.yml
– Gemfile
– Gemfile.lockそれぞれのファイルの中身を書いていきます。
### Dockerfile
“`dockerfile
FROM ruby:2.6
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list && \
apt-get upd
deviseでの`downcase’ for nil:NilClassエラー
## 背景
Rails6でdeviseでサインアップAPI作成中に遭遇
取り急ぎ解決したのでメモ書き程度に記載。## エラー内容
“`
$ curl -X POST http://localhost:3015/api/v1/auth -d ‘[name]=test2&[email]=test2@example.com&[password]=password&[password_confirmation]=password’
{“status”:500,”error”:”Internal Server Error”,”exception”:”#\u003cNoMethodError: undefined method `downcase’ for nil:NilClass\u003e”,”traces”:{“Application Trace”:[],”Framework Trace”:[{“exception_object_id”:15280,”id”:0,”trace”:”rack (2.2.4) lib/rack/utils.rb:464:in `[]='”},{“e
fields_forを使用して新規登録時に別レコードも作成する
# はじめに
railsを利用してポートフォリオを制作しました。制作するにあたって、会員登録時に別モデル内にレコードを作成したいと思いました。
その機能を実装したいと思った理由は、ゲームの成績を管理するスコアシートを制作したかったからです。
会員登録と同時にプレイヤー名としても勝手に登録してくれることで、スコアシートを作成する際に参加しているプレイヤーとして自身の名前が選べるようにする為です。
実装するにあたりfields_forを使用しました。伝わりづらいかもしれませんが自分なりにまとめてみようと思います。# やり方
会員登録に関してはdeviseを使用しました。
こちらが新規登録を行うページです。
“`erb:registrations/new.html.erb新規登録画面
<%= form_with model: @user, url: user_registration_path do |f| %>
<%= f.label :name, "会員名" %>
<%= f.text_field :name, autofocus:
重複のバリデーションエラーを回避するFactoryBotの書き方
# 目的
Userモデルにてemailの一意性をバリデーションとして設定している場合、下記のテストコードではエラーが発生する。
“`ruby
FactoryBot.define do
factory :user do
user_name { “tester” }
email { “tester@example.com” }
password { “password” }
end
end
“`
“`ruby
it “複数のユーザー登録” do
user1 = FactoryBot.create(:user)
user2 = FactoryBot.create(:user)
end
“`
エラーが発生しないように複数のテストユーザーを作成する。
# 実装方法
“`ruby
FactoryBot.define do
factory :user do
user_name { “tester” }
#シーケンスを利用する
sequence(:email) { |n| “tester#{n}@example.co
エラー対応:Migration Nameにて「NO FILE」
# エラー内容
modelを実装中、DBに不手際を確認。
該当ファイルを削除した結果、Migration Nameにて「NO FILE」のエラーを確認。
「rails db:rollback」を実施していないため、エラーが発生。
# 修正対応
– migrationの状態を確認
“`ruby
rails db:migrate:status
“`
– 下記のmigrationを確認
“`ruby
Status Migration ID Migration Name
————————————————–
up 20210726110200 Sorcery core
up 20210726111347 Add columns to users
up 20210804115220 Create boards
up 20210804120214 Add user id to boards
up 20210811081624 Add img
gretelを使ってパンくずリストを作成
# 目的
scaffoldアプリにてgretelを使ってパンくずリストを作成する。
最低限の内容を学習するため表示させるのはuser_newとuser_showのみにします。
# 新規の技術・機能の概要
## gretelの概要 ##
パンくずリストを作成するgem
![edit_パンくず](https://storage.googleapis.com/zenn-user-upload/bfc1d2ce13dae18ea22395b7.png)
webサイトの上部などにあるサイトページの位置等を示すリストがパンくずリストです。
gretelの設定ファイルは下記の通り
“`ruby
crumb “ページ名” do
link “ビューに表示される名前”, “リンクされるURL”
parent :親のページ名(現在の前のページ)
end
“`
表示させるコードは下記
“`ruby
<%= breadcrumbs separator: "区切り文字" %>
“`
## 執筆時のバージョン ##
Rails:5.2.6
gretel:4.3.0
# 実装方法
## 新規アプリを作
Rake + Wheneverでブログのステータスを自動的に変更するアプリを作成
# 目的
シンプルなブログアプリに記事のステータスをcronタスクにて自動的に変更する機能を実装する。
# 新規の技術・機能の概要
**Rake**
Rubyで記述されたビルドツール
**Whenever**
railsにてcronタスクを簡単に設定するgem
**執筆時の対象Version**
Rails:5.2.6
Whenever:1.0.0
# 実装方法
## セットアップ ##
“`terminal:terminal
# アプリの新規作成
rails new blog_sample
cd blog_sample
“`
“`terminal:terminal
# scaffoldにてBlogモデルを生成
rails g scaffold Blog title:string content:text
“`
“`diff ruby:db/migrate/*******_create_blogs.rb
class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs d
pundit でシンプルな認可機能アプリを作成
# 目的
PunditはRailsにおいて認可システムに必要なヘルパーなどを提供するgemです。
punditよりシンプルな認可機能アプリを作成します
> **Qiita:Pundit + Railsで認可の仕組みをシンプルに作るより引用**
> Punditというgemを使ってRailsに認可の仕組みを作ってみます。
> 認可というとcancancanが有名です。
> cancancanはユーザに対して、どんなアクションが許可するかを定義するのに対して、
> Punditではリソースに対して誰が許可されるのかを定義します。反対からの目線ですね。
> cancancanがコントローラ寄りならば、Punditはモデル寄りの責務です。また、
> cancancanがDSLなのに対し、PunditはピュアRubyな書き方になっています。**学習アプリに実装する機能**
管理ユーザーのみユーザー詳細(user_show)閲覧可能。
管理ユーザー以外の場合はエラーページを表示(403)。**執筆時の対象Version**
Rails:5.2.6
devise:4.8
pundit:2.
[Rails][shebang] bin/rails : No such file or directory 解決法
# 問題
VM上のCentOS 環境からgit cloneした
Rails projectの `bin/rails` `bin/rake` などbinstabコマンドがうまく実行できない。“`
$ bin/rails console
: No such file or directory
“`->
bin/rails ファイル中身を 削って、見ると
そもそも1行もruby実行できていない# 原因
shebang とよばれる1行目 の読み込みが悪いよう
一方で `rails c`
など 当のbinstab を使用しないと実行はできる:“`
$ rails c
/home/vagrant/.rbenv/versions/2.7.6/bin/ruby: warning: shebang line ending with \r may cause problems
..
“`
( ->
改行コードが 悪いみたいなwarning が出ている..## 解決法
全体的に改行コードが問題っぽいが、
とりあえず、
当binstab を以下でencod
【未経験】ポートフォリオ開発記録 #01
# はじめに
はじめまして!
自分はweb系の自社開発企業への転職を目指しています。
これから転職活動を進めていくにあたってポートフォリオの開発をしていきます。
その際に、機能実装の流れや詰まったことなどを備忘録的な感じで記録していこうと思っています。今回は、現在考えているサービスの簡単な概要と、使用技術についてまとめられたらと思います!
# サービス概要
早速ですがサービスの概要です。現在アイデアとして考えているサービスは、音楽再生機能付きのポモドーロタイマーです。
開発しようと思った背景としては、自分はプログラミングの勉強にポモドーロタイマーを活用しているんですが、自分の好きな音楽とポモドーロタイマーを合わせようとすると、どうしても複数の操作が必要なってしまって地味に面倒でした。
この問題は僕の身の回りにも多いようでした。
これからwebエンジニアとしてやっていくなら勉強はずっとしていくと思いますので、ポートフォリオだけで終わらず長く使えるようなサービスにできればと思い考案しました。イメージとしてはこんな感じです。
![キャプチャ.PNG](https://qii