Rails関連のことを調べてみた2022年05月24日

Rails関連のことを調べてみた2022年05月24日
目次

【Rails】link_to で「ブラウザ上に表示する文字列」と「指定するURL」が同一のときは nil を使う。

## はじめに
未経験からエンジニアに転職しました。
まだまだわからないことだらけですが、毎日楽しく働いています!
業務や個人開発での発見やエラー解決などをアウトプットしています。
今回は、
##### link_to で「ブラウザ上に表示する文字列」と「指定するURL」が同一のときは nil を使う。
という内容です。
初学者向けの内容です。

# 結論
~~~
<%= link_to nil, 'https://qiita.com/' %>
~~~
上記のように書く。
下記と同じ結果になる。

~~~
<%= link_to 'https://qiita.com/', 'https://qiita.com/' %>
~~~

# 参考
https://github.com/rails/rails/blob/f33d52c95217212cbacc8d5e44b5a8e3cdc6f5b3/actionview/lib/action_view/routing_url_for.rb#:~:text=def%20url_for(options%20%3D%20nil)

元記事を表示

フルスタックエンジニアへの道 part 1 ~Rails 7 × Dockerの環境構築 1

# はじめに

ゼロから100まで、すべて自分の力でウェブアプリケーションを作り上げることのできる技術と経験を得ることで、プロジェクト・マネジメントができるリーダーになりたい…フロントエンド、バックエンド、デザイン、インフラなど関係なくなんでもできる最強のエンジニアになりたい…Modern-day Da Vinciになりたい…(笑)。

この目標を達成するための方法を考えてみた結果、**現場で行われている開発プロセスを自分ひとりでやってみるのが一番速いんじゃないか**という仮説を立てた。

そこで、私個人の成長記録として、この「フルスタックエンジニアへの道」という連載をやっていこうと思う。

読者諸兄におかれましては、この記事で技術的な知識を得るというよりも、私が**どんなことをどんな順番で勉強したのかを参考にしていただいたり、シンプルに頑張ってるヤツ(私^^;)を見て仕事や勉強へのモチベーションとしていただければ**なと思います。

### なぜそう思った?

エンジニア歴5ヶ月目の私は、現在Rails 6を使った社内アプリケーションの開発をやっている。(で、明後日デプロイする笑)。

元記事を表示

現在時刻に最も近いキリの良い時刻を取得する方法

送信の予約機能で、現在時刻に最も近い10分単位の時間を取得したいことがあり、その計算方法が勉強になったので記載します。
例えば現在時刻が15:55なら16:00を取得したいという趣旨です。

## 作成したメソッド

“`ruby
def round_off(seconds = 60)
Time.at((to_f / seconds).ceil * seconds)
end
“`
上記のようにメソッドを定義し、以下のように呼び出すことで実現できました。

“`ruby
Time.now.round_off(10.minutes)
# もし現在時刻が16:55なら、17:00の時刻が取得できます。
“`

## 何をしているか

先輩に教えてもらいながら書いたのですが、理解するのに時間がかかったのでメモしておきます。

1.指定した秒数で割り算をし、切り上げる
“`ruby
(to_f/seconds).ceil
“`

2.その数字にもう一度指定の秒数を掛ける

“`ruby
(to_f/seconds).ceil * seconds
“`

上記をすることで

元記事を表示

DockerからRailsのコントローラとルーティングを設定する

仮想環境下でコントローラやルーティングの設定はしたことがあったが、Dockerではなかったので備忘録として簡単に記載する。

homes_controllerを作成する

“`言語:ターミナル
docker-compose exec web rails g controller homes
“““

app/viewsの配下にhomesディレクトリが作成されていることを確認し、top.html.erbのファイルを作成する。
![スクリーンショット 2022-05-22 17.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/c762b51c-c0a3-78ca-92af-d59d2142ddb6.png)

トップページだと分かるように下記のように記載する。
“““言語:top.html.erb

ここはTopページ

“““

コントローラに以下のように記載する。
“`言語:routes.rb
class HomesController <

元記事を表示

【個人開発】英語の発音精度を診断するアプリ「Speaking Checker」を作りました

## はじめに
初めまして、よしたかと申します!

突然ですが、皆さんは英語が得意でしょうか?
私は「読む・書く」は得意ですが、「聞く・話す」は苦手です。「読む・書く」については高校時代の先生の教え方がうまかったおかげか今も得意なのですが、「聞く・話す」については海外留学や英会話スクール等に通ったことがなく、外国人の方と話す経験がほとんど無かったので苦手です。
他の方はどうなのか?と思い調べてみると、下記のビジネスパーソン向けに行われた調査データによると、英語が得意と答えた人は約3割なのに対して、英語が苦手と答えた人は約7割と多数を占めていることが分かります。
参考: [「英語学習の実態と意欲」に関する調査結果](https://www.iibc-global.org/iibc/press/2019/p123.html)

私は一人でも多くの方に英語を好きになって欲しいです。そのため、ゲーム感覚で英語の発音練習ができないかと思い、「Speaking Checker」を開発しました。

▼サービスサイト

https://www.speaking-checker.com/

## サービ

元記事を表示

Railsのdecoratorでtagヘルパーを使いたい。例えばtag.span(“hello”)などと。

## やりたい事
Railsのdecoratorで、スマートにHTMLタグを生成したい。
今回は例えで`”hello“`をば。

`”hello“.html_safe`でもできるけど、tagヘルパーを使ってもうちょいスマートに。

– tagヘルパー参考サイト
– https://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-tag
– https://techracho.bpsinc.jp/hachi8833/2022_01_13/48191

## 実装!

単にこう書いただけではエラーになる。
“`ruby:app/decorators/hello_decorator.rb
>> tag.span(‘hello’)
=> undefined local variable or method ‘tag’ for # Did you mean? tap
“`

##

元記事を表示

rspecでETagのテストを追加した

## 背景
Android端末とサーバーの同期(一方通行)を実装するために、ETagを使いました。サーバーのコードを変更したため、テストを追加した

## サーバー側
“`ruby
def sync
return unless stale?(@program)

render json: { success: 1, data: @program }
end
“`

## Rspec
“`ruby
context “on a subsequent request” do
before(:each) do
# first time request
get api_sync_path, params: { device_id: device.id }
assert_response 200, response.body
@etag = response.headers[“ETag”]
end

context “check ETag exist” do

元記事を表示

新規登録機能を作成する

# ログイン機能作成する
まずusersテーブルにパスワードカラムを作成することから初めて
それからHTMLで画面を作って、railsで中身を作成していこうかな。
よし始めよう!

# MySQLを使ってusersテーブルでパスワードカラムを作成する
“`
mysql> ALTER TABlE users
-> ADD password varchar(50) AFTER name;
ERROR 1046 (3D000): No database selected
mysql> show databases;
+—————————+
| Database |
+—————————+
| garden_development |
| garden_review_development |
| garden_review_test |
| garden_test |
| information_schema

元記事を表示

【Rails】Railsでカバレッジを計測する

# 初めに

`Rails6`のプロジェクトにカバレッジを導入したので、そのやり方を記事にしておきます。

## 環境

– Rails 6.1.4
– Ruby 2.7.4
– simplecov 0.21.2

# simplecov を導入する

カバレッジを測定するためのジェムである`simplecov`を追加します。

“`ruby:Gemfile
group :test do
gem ‘simplecov’, require: false
end
“`

`simplecov`の設定を追加する。

“`ruby:spec/rails_helper.rb
require ‘spec_helper’
require ‘simplecov’
SimpleCov.start ‘rails’

RSpec.configure do |config|
# 省略
end
“`

これで`Rspec`実行後に、`coverage/index.html`に実行結果が出力されます。

# 参考

[simplecov – Github](https://github.com/si

元記事を表示

Gemをインストールする時に関連するGemを自動でインストールする

Rubyでは標準でRubyのライブラリを管理するRubyGemsというコミュニティがあり、gemというコマンドを使用することでRubyGemで管理されているライブラリを取得できます。

RailsではGemfileというアプリケーションで使用するGemの情報を記述している管理ファイルです。
Gemfileにgemコマンドの後ろに取得したいGem名を記述し(既に取得しているGemのバージョンの変更も可)、installを実施することができますが、Gemは様々なGemが複雑に関連して動作する為、取得したいGemと関連するGemも取得する必要がある場合がある。

インストールを実施する際
“`ターミナルの作成中アプリのディレクトリ
% bundle install
“`
このコマンドを使うと取得したいGemに関連するバージョンのGemを一緒にインストールしてくれる。
これはbundlerというGemが働いてくれている。

:::note info
bundlerというGemを使うと関連するGemファイルも一緒に取得してくれる
:::

元記事を表示

RailsのAction Cableで任意のメッセージ形式でやりとりする

## 背景

REST API, WebsocketのAPIを提供するとあるサービスのMockを素早く作るため、Railsを選定したが、メッセージの形式がRailsと合わなかった。

メッセージ送信では、 `command`, `data`, `identifier`を送る必要があるが、

“`json
{
“command”: “message”,
“data”: “{\”message\”:\”test message\”,\”action\”:\”speak\”}”,
“identifier”: “{\”channel\”:\”RoomChannel\”}”
}
“`

例えば、 `command` をやめて `cmd` だけで任意のアクションを指定できるようにしたい。

## 注意

今回はローカル起動用のMockの作成を目的としていたためoverrideを試しました。
副作用の検証まではしていませんし、通常はRailに乗る方が良いので使い所は注意しましょう。

## サーバーが受け取るメッセージを任意の形

元記事を表示

volume使用時のPermissionError

# 環境
– WSL2 – Ubuntu20.04
– Docker 20.10.1
– ruby 3.1.2
– rails 6.1.5
# 問題
Volumeを使いローカルにデータを保管すると,フォルダがroot権限で作成される.
# 原因
DockerはWSL環境ではユーザーを指定していない限りコンテナがrootユーザーで実行される.
ちなみにMacOSではこの問題は起こらず,コンテナはローカルユーザーで実行されるらしい.
個人的にDockerの主なメリットにOS間の差異の吸収があるのに[それどうなの?」と感じる.
今後改善されていくのかな?知っている方はコメントお願いします.
# 対策
Docerfileのentrypointでユーザー作成と権限変更を行う

“`Dockerfile:Dockerfile
FROM ruby:3.1.2

# yarnインストール用に追加
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnp

元記事を表示

【Ruby on Rails】Herokuのデプロイ時のエラーについての対処法

RailsチュートリアルでHerokuにアップする時があり、
`git push && git push heroku master`と打つとエラーになりはまってしまったのでその対処法を記述しておきます。

Herokuをデプロイするために打ったコマンド
“`
$ git commit -am “Add hello”
$ heroku create
$ git push && git push heroku master
“`

出てきた内容

“`
hogehoge toy_app % git push -f heroku main
Enumerating objects: 89, done.
Counting objects: 100% (89/89), done.
Delta compression using up to 4 threads
Compressing objects: 100% (72/72), done.
Writing objects: 100% (89/89), 22.14 KiB | 2.21 MiB/s, done.
Total 89 (delta

元記事を表示

部分テンプレートを使って記述を楽にしよう

WEBアプリケーション作成をしようとプログラミングを学んでいるとファイルは違うけど中身の記述は同じ記述をするファイルを作成することが多々あります。

毎回同じコードを入力するのがめんどくさいので部分テンプレートを使ってコードを使い回しする方法を紹介します。
今回はRubyonRailsのフレームワークを使用してWEBアプリを作成する際に使用するrenderメソッドについて解説していこうと思います。

今回はWEBアプリでユーザーが画像やテキストを投稿するWEBアプリ作成する際に新規投稿フォームと編集フォームの中の形が同じ場合を想定して記述していきます。

:::note info
部分テンプレートなしver.
:::
“`new.html.erb  #新規投稿ページ

投稿する

<%= form_with(model: post, local: true) do |form| %>
<%= form.text_field :image, placeho

元記事を表示

Rails データベースの更新

データベースの更新
“`データベースの更新
rails db:migrate
“`

元記事を表示

[個人開発]ランニングシューズ選びに困っている方向けのアプリ「Shoes For Runners」を開発しました

# はじめに
簡単な質問に答えることでおすすめのシューズを提案するアプリ「Shoes For Runners」を開発しました。

**サービスを作ったきっかけ**
私が陸上部に所属していたので、部活の後輩や家族からシューズの選び方についてよく聞かれました。その時に、ネットで調べても、おすすめのシューズが複数個紹介されるものの、結局どれを買えば良いのか分からないという意見をよく聞きました。そこで、簡単に自分にあったシューズがわかるアプリを作ってみようと思いました。

# サービス概要
スクリーンショット 2022-05-06 8 36 35
ランニングシューズについて何を買えば良いかわからない人におすすめのシューズを提案するアプリです。簡単な質問に答えることで自分に合ったシューズを知ることができます。

# アプリURL
ht

元記事を表示

パスワードに英数字混合のバリデーションを設定する方法

deviseにはデフォルトでバリデーションが設定されていますが、英数字混合のバリデーションはデフォルトにはないため別途記述する必要があります。
記述内容は以下二文をuserモデルに記述するだけ。
“`ruby:user.rb
VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze
validates :password, format: { with: VALID_PASSWORD_REGEX }
“`

この正規表現を用いたバリデーションの記述により、パスワードに英数字混合のバリデーションを設定できました。
正規表現を用いれば英数字の他に全角かな/カナ漢字など、細かくバリデーションを設定することができます。

元記事を表示

Redisについて

## はじめに
RaisのプロジェクトでRedisを使っているのをよく見ていたが、使用するメリットなどをよくわかっていなかったので簡単に調べてみた。

## 詳細

### そもそもRedisとは
– 「Redis は、リモートディクショナリサーバー の略で、高速でオープンソースのメモリ内 key-value データストアです。」
– 読み方はレディス。
– 名称の由来は、`Remote Dictionary Server`から来ているそうです。

## メリット/デメリット

**メリット**
– 高速で動作する(RDBMSに比べ数千〜数万倍早いらしい)
(例えば、結果が頻繁に変化しないようなAPIのレスポンスを`cache`に溜めておくことで毎回`API call`が発生しないようにしてパフォーマンスの向上を図る。などがメジャーな用途になります。)
– Rails 5.2からデフォルトでRedisのキャッシュストアが対応され、キャッシュの導入が簡単になっている

**デメリット**
– RDB(Relational Database)のように複雑なデータは扱えない(リレーションを設

元記事を表示

M1MacのローカルでDockerを使ってRailsの環境を構築する。

Dockerでの環境構築につまづいたこととコントローラとルーティングでTOPページを表示させるのにつまづいたので備忘録として簡単に設定をやってきたことを記載します。

行ったことはほぼこの動画通りなので、記載内容について詳しく知りたい方はこちらを参照ください。
とてもわかりやすく解説されていました。

最初に準備したものは
デスクトップにフォルダを作成して以下のファイルを用意した。
・Dockerfile
・docker-compose.yml
・srcディレクトリの配下にGemfile

![スクリーンショット 2022-05-22 15.11.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/843fdc4b-c86b-4d0f-e254-e73cc1091177.png)

src以下のGemfile以外はこの後の操作で作成される。
![スクリーンショット 2022-05-22 15.11.5

元記事を表示

RailsアプリをHerokuにデプロイする方法

# 想定環境
Rails 5.0.7.2
(Rubyバージョンは後ほど指定する。著者は当初2.6.3を使用←herokuがサポートしていないため後ほど変更が必要)
# herokuへのデプロイ手順
## 1.herokuにアプリを作成
“`
heroku login -i
“`
でherokuにログイン(パスワードはAPIkeyでないとログインできない可能性あり)
“`
$ heroku create アプリ名
“`
## 2.本番環境用にGemfileとdatabase.ymlを変更
“`diff_ruby:Gemfile
# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 5.0.7’, ‘>= 5.0.7.2’
# Use sqlite3 as the database for Active Record
– gem ‘sqlite3’, ‘~> 1.3.6’
# Use Puma as the app server
gem ‘puma’, ‘~> 3.0’
#

元記事を表示

OTHERカテゴリの最新記事