Ruby関連のことを調べてみた2023年10月03日

Ruby関連のことを調べてみた2023年10月03日
目次

websocketを使いたい人のためにまとめたよ

まずWebsocketが使われる理由から

### Websocketが使われる理由
一言でいえば、
リアルタイム性、効率性、およびパフォーマンスの向上。

詳しく解説すると理由はいくつかあって、

#### 1. リアルタイム通信
WebSocketは、リアルタイムの双方向通信を可能にします。これにより、ユーザーとサーバー間で即時にデータを交換でき、リアルタイムアプリケーション(例:オンラインゲーム、チャットアプリ、ライブスポーツのアップデートなど)のパフォーマンスが向上します。
#### 2. 効率的なデータ転送
WebSocketは、持続的な接続を通じてデータを送受信するため、データ転送のオーバーヘッドが少なくなります。これにより、ネットワークの効率が向上し、レスポンスタイムが短縮されます。
#### 3. サーバーのリソース最適化
WebSocketは、オープンな接続を維持しながらも、リソースの消費を最小限に抑えます。これにより、サーバーの負荷が軽減され、大量の同時接続を効率的に処理できます。
#### 4. 低レイテンシ
WebSocketは、データの送受信における遅延を削減

元記事を表示

flutter build iosでWarning: CocoaPods is installed but broken. Skipping pod install. You appear to have CocoaPods installed but it is not working

flutter build iosを実行したら
Warning: CocoaPods is installed but broken. Skipping pod install. You appear to have CocoaPods installed but it is not working
というエラーが発生しました。

# 解決策
rbenv versions
でバージョンを確認

*2.7.6
3.0.1
3.1.2

と過去にinstallしたrubyのバージョン一覧が出てきます。

sudo rbenv uninstall 3.0.1

sudo rbenv uninstall 3.1.2

と不要なrubyのバージョンを削除したことで解決しました。

元記事を表示

APIとはそもそもなんぞや

# APIとはそもそも何ぞや
APIとは他社が提供するサービス内の情報や機能を扱えるようにする仕組み
リクエスト<=>レスポンス

# RESTful API
RESTful APIとは・・・4つの原則から成り立ってる

– アドレス可能性

バラバラのURIより1意のURI目指そうぜ。
(ご飯、パン、味噌汁じゃなくて、食料みたいな)

– ステートレス可能性

すべてのリクエストが完全に分離してセッション管理など行われていないこと。
(渡されたレスポンスを前提にしない)

– 接続性

情報に「別の情報へのリンク」を含めることができることを指し、リンクを含めることで別の情報に接続することが可能になる。

– 統一インターフェイス

情報の取得、作成、更新、削除といった操作一式はすべてHTTPメソッドを利用。

元記事を表示

Renderデプロイ時の! Unable to load application: ArgumentError: Missing `secret_key_base` エラーの対処法

# 概要
個人開発の際Renderでデプロイしようとしたところ
“`ruby
! Unable to load application: ArgumentError: Missing secret_key_base for ‘production’ environment, set this string with bin/rails credentials:edit`
“`
というエラーが発生し苦戦したので備忘録として残しておきます。
※初学者で知識に乏しいため誤った記述があればコメントいただけると幸いです。
## secret_key_baseとは
Railsのアプリケーションでは、“secret_key_base“というシークレットキーが必要です。これは、暗号化やセッションの検証など、さまざまなセキュリティ関連のタスクで使用されます。production環境で、このキーが設定されていないことが原因で今回のエラーが発生しました。
## 対処方法
対処方法は簡単です。
ローカル環境で、以下のコマンドを実行してRailsのクレデンシャルを編集します。
“`ruby:bash

元記事を表示

プログラムを書いて趣味環境をちょっと幸せにした話〜初めてのスクレイピング〜

私は趣味でとあるカードを集めているのですが、
その数が70枚くらいを超えてから、
どのカードが獲得済みなのか、実際に今何枚なのかを把握するのが大変になってきました。

2年前の私だったら、何度もカード見返したり数えたりすることしかしなかったのでしょうが、
今の私は「情報をどっかから取得して自分のほしい形に整形して管理すればいいじゃない」と言えるようになりました。

そこで、今回は私の集めているマンホールカードの情報を検索サイトの情報を参考にCSVファイルにまとめていきたいと思います。

まさかマンホールカードを知らない人はいないと思いますが、もし万が一知らない場合はこちらのサイトを見てみて下さい。きっと虜になるはずです。

https://www.gk-p.jp/mhcard/?pref=zenkoku#mhcard_result

さて、今回は下水道広報プラットフォームの情報を取得し、データを整形、CSV出力していきたいと思います。

なお、今回は個人利用かつ勉強目的でスクレイピングを行っていますが、営利目的で使用する場合などはスクレイピングは行わなず、「マンホールカードのデータ利

元記事を表示

【Ruby】知っておくといつか役立ちそうな配列・ハッシュのメソッド6選

## はじめに
もうすぐ入社1年になるエンジニアです。
最近、開発チームの勉強会で「良いコード悪いコード」という本を読みました。その本の、コレクション(※)に関する説明で、車輪の再発明をせずに標準ライブラリに用意されているメソッドを使おうと書かれていて、確かにあるものは使うべきだなと思いました。
そこで、配列とハッシュのメソッドを調べてみたので、知らなかったけど使う機会がありそうなメソッドや知らない人は車輪の再発明してしまいそうなメソッドを6つ紹介しようと思います。

※ コレクション:複数のデータをまとめて格納するためのデータ構造。rubyでは、配列やハッシュなどがある。

## 配列・ハッシュ共通のメソッド

### `select`メソッド
selectメソッドは、配列の各要素に対して条件式を満たす要素のみで構成される新しい配列を返します。ハッシュの場合も同様です(例を参照)。

“`
# 基本構文
配列.select { |変数| 条件式 }
ハッシュ.select { |変数1, 変数2| 条件式 }

# 配列の例
array = [1, 2, 3, 4, 5]
new_

元記事を表示

Webpacker::Manifest::MissingEntryErrorの解決方法

## 【開発環境】
Ruby 2.7.5
Rails 6.1.7.6

### どういう時にエラーが発生したか
1. Railsで新規アプリケーションを実装した際、users_controller.rbを新規作成
1. indexアクションを定義後、`app > views > index.html.erb`を新規作成
1. rails sコマンドで立ち上げた際に、以下のエラーが作成した。

※以下のようなエラーのキャプチャ
![スクリーンショット 2023-10-02 6.16.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3568360/bb86f239-2f7a-660e-b3a2-3533b8a1297a.png)

### エラー解決のためにやったこと
[Webpacker::Manifest::MissingEntryErrorが発生]https://qiita.com/kndknd/items/18187f1c2199651d08d5
上記のサイトでは以下の2コマンドでOKとのこと

元記事を表示

Deviseで複数モデルを使用したログインの実装

## やりたいこと
親ユーザーの認証ではデフォルトのemailとpasswordでの認証を使用してログイン。
子ユーザーの認証では、nicknameとパスワードで登録と認証ができるようにする。
また、子ユーザーを作成できるのは、親ユーザーのみ。
family(親ユーザー)
|colum|validation|
|:–|:–:|
|email|null:false|
|password|null:false|
|family_name|null:false|

user(子ユーザ)
|colum|validation|
|:–|:–:|
|nickname|null:false|
|password|null:false|
|family_id|null:false|

## 手順
#### root用のコントロ3ーラーとビューを作成
“`rails g controller home index“`
“`ruby:home_contoroller.rb
class HomeController < ApplicationController def index e

元記事を表示

Rubyで使われる%w記法(配列がいっぱいある時にめっちゃ便利!)。知っていたら実務で最強!

# この記事の背景
現場RSpecでテストを実装している時に、テストデータが以下のようになっていました。
(以下のサンプルは例で実際の現場のものではないです)
“`spec.rb
:abc=>[“1900”, “株式会社nori”, “inu town【1900】”, “ロンドン”, “福岡2-9-11”, “カフェ”, “30”, “中村”, “2”, “山口”, “03-4578-5598”, “20221124”, “1689”, “5”],
“`
このような配列がある時に、RuboCop(コード解析ツール)を使用した時に、配列が多すぎる!
と怒られてしまいました。実際人間の目から見ても見づらいです。
***現場では自分がいなくなった後の人がコードを読みやすくしなければいけない***ので
修正する必要が出てきました。

その時に“`%w“`の書き方を学びました。

# %w記法とは
***配列を作成したいときに「[ ]」(ブラケット)や「” “」(ダブルクォーテーション)を省略して記述する***ためのRubyの書き方です。コードの可読性(読みやすくなる)がよくなり、コ

元記事を表示

Rails7 link_toで”turbo-method: :post”を設定しているのにGETのHTTPメソッドとして認識される

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0

## 解決したい内容
* 以下のように`turbo-method: :post`を設定している`link_to`タグにおいて`[POST]`メソッドではなく、`[GET]`メソッド扱いされる。

“`erb
<%= link_to hoge_path(hoge), data: { turbo: false, "turbo-method": :post } %>
“`

“`

Routing Error
No route matches [GET] “/hoge”
“`

## 解決手順
* `turbo: false`と`”turbo-method”: :post`は共存できない。`turbo: false`の記述を削除して、以下のようにすることで解決。
“`erb
<%= link_to hoge_path(hoge), data: { "turbo-method": :post } %>
“`

## 補足
* link_toはデフォルトでは`[

元記事を表示

Rails7 Bootstrap slimのfile_fieldの見た目をアイコンにする

This article shows how to change the appearance of slim’s file_field to Bootstrap icon.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0
* Bootstrap 5.2.3
* テンプレートエンジンとしてslimを使用

## 解決したい内容
* formタグの中のfile_fieldの見た目を以下の①通常の見た目でなく、②アイコンの見た目にしたい

①通常の見た目
![通常のfile_field.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490253/67393a91-ff95-26cc-0d80-425007138bfd.png)

②アイコンの見た目(画像左のimageアイコンをクリックして画像添付としたい)
![iconに変更したfile_field.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

【Rails】devise-token-authを用いたユーザー登録機能の作成

devise_token_authを用いたログイン機能の実装を備忘録として残します。

・Gemファイルの準備/インストール

Gemfileにdevise_token_authをGemに準備する。
以下の内容をGemfileに記載し、`bundle install`を行う。

“`ruby:Gemfile
gem “rack-cors”
gem ‘devise’
gem ‘devise_token_auth’
gem ‘devise-i18n’
“`

下記の2つのコマンドを実行することで、devise_token_authをインストールする。
“`
rails g devise:install
rails g devise_token_auth:install User auth
“`

・ログイン機能の実装

まずは認証のコントローラーを準備するため、下記のコマンドを実行する。
“`
rails g controller api/v1/registrations
“`
できたコントローラーファイルを下記のように修正する。
classを設定することで、Devis

元記事を表示

Rails7 Heroku OmniauthのGitHub認証の際に”OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch”エラーが発生する

This article shows how to resolve CallbackError when GitHub authorizing at Heroku.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0
* 開発環境
* Docker使用
* 本番環境
* Herokuにデプロイ(stack heroku-22)

### gem
* devise 4.9.2
* omniauth 2.1.1
* omniauth-github 2.0.1

## 解決したい内容
* ローカルの開発環境でOmniauthによるGitHub認証ができることを確認済み。
* Heroku本番環境においてGitHub認証を実行すると、以下エラーが発生してGitHub認証に失敗する。
* `”OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch”`

## 解決手順
* `config/initializers/devise.rb`に以下を追記する。`https://hog

元記事を表示

Rails7 リファクタリング 複数Modelで共通した処理をModuleに切り出す

This article shows how to reafactor common methods across multiple models.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0

## 実装したい内容
* 以下の記事の続きです。
* [Rails7 リファクタリング ポリモーフィックな参照を持つレコードの新規作成を共通化する](https://qiita.com/KOH6/items/68287399989bfcd9258d)
* ポリモーフィック関連の共通処理を例として記載しますが、複数モデルに同じ処理を記載している場合同様にリファクタリング可能です。
* 以下のように3つのモデルで全く同じ処理を記載しているケースを想定。(関係する処理のみ抽出して記載)

“`rb:like.rb
class Like < ApplicationRecord # 複数モデルで以下のような全く同じ処理を記載している after_create :create_notification private def create_

元記事を表示

Rails7 リファクタリング ポリモーフィックな参照を持つレコードの新規作成を共通化する

This article shows how to make a common code to create records when using Polymorphic Associations

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0

## 実装したい内容
* ポリモーフィック関連を使用して複数のテーブルへの参照を1カラムで定義する。
* SNSアプリを作成する上での通知機能の実装を想定する。UserモデルとPostモデルに参照を持つNotificationモデルのレコードを作成する。
* NotificationモデルはPostレコードに対していいね(Like)、コメント(Comment)、リポスト(Repost)された際に作成されるものとする。
* ポリモーフィックなカラムとしてNotificationテーブルには`action`カラムを定義する。

関係するアソシエーションを下記する。
“`rb:notification.rb
class Notification < ApplicationRecord belongs_to

元記事を表示

Rails7 ストロングパラメータ取得メソッドに画面入力された項目以外を追加する

This article shows how to create/update a record with adding parameters other than Strong Parameters.

## 環境情報&前提条件
* Ruby 3.2.1
* Rails 7.0.0

## 解決したい内容
* formを使って画面で入力された情報を元にレコードの新規作成/更新を行いたい。
* コントローラで受け取る情報については、StrognPrametersを使用して意図しない項目が設定されることを防ぎたい。
* 一方で、画面で入力された項目以外にパスパラメータやURLのクエリパラメータで指定された内容等を自由に追加したい。

## 解決手順
* StrongPrametersでparamsを取得した後に、自分が追加したい項目を`merge`して返すようにする。

“`rb
# 例)Commentレコード作成時にパスパラメータで渡ってきたPostテーブルのIdを追加する場合
class CommentsController < ApplicationController d

元記事を表示

Rails:devise_token_authで発生するNoMethodError: undefined method `downcase’ for nil:NilClass エラーについて

環境
ruby 3.2.2
rails 7.0.8
devise 4.9.2
devise_token_auth 1.2.2

# 1.エラー
Railsのログイン認証用のgemであるdevise_token_authを使ってログイン機能を実装しようとしたところ、APIにリクエストを送った時点でRails側のログでこのようなエラーが表示されました。

“`text
NoMethodError in Api::V1::Auth::RegistrationsController#create
undefined method `downcase’ for nil:NilClass
“`

# 2.対処法
config/initializers/devise_token_auth.rbに:’authorization’ => ‘authorization’を追加

“`ruby:config/initializers/devise_token_auth.rb
config.headers_names = {:’access-token’ => ‘access-token’,

元記事を表示

「プロを目指す人のためのRuby入門」でRuby学んでみた

# はじめに
Rubyを勉強するために手にとった「プロを目指す人のためのRuby入門」所謂チェリー本を読了したので、読んだ所感を書きます。Rubyの入門書で迷っているひとの参考のひとつになればと思います。
# 本の目次
この本の目次は以下のようになっています。
詳しい内容は省きますが、自分が勉強したいことにマッチしているか購入する前に参考にしてください。

– 第1章 本書を読み進める前に
– 第2章 Rubyの基礎を理解する
– 第3章 テストを自動化する
– 第4章 配列や繰り返し処理を理解する
– 第5章 ハッシュやシンボルを理解する
– 第6章 正規表現を理解する
– 第7章 クラスの作成を理解する
– 第8章 モジュールを理解する
– 第9章 例外処理を理解する
– 第10章 yieldとProcを理解する
– 第11章 パターンマッチを理解する
– 第12章 Rubyのデバッグ技法を身につける
– 第13章 Rubyに関するその他のトピック

実践的な内容が学べる参考書でRubyを学び始めるとき、もっとRubyの理解度を上げたいときにおすすめです。
一方で、いままでプロ

元記事を表示

Rails Tutorial 第10章

## 演習1
>target=”_blank”で新しいページを開くと、古いブラウザでセキュリティ上の小さな問題が生じます。それは、リンク先のサイトがHTMLドキュメントのwindowオブジェクトを扱えてしまう、という点です。具体的には、フィッシング(Phising)サイトのような、悪意のあるコンテンツを導入されてしまう可能性があります。Gravatarのような著名なサイトではこのような事態はめったに起きないと思いますが、念のため、このセキュリティ上のリスクも排除しておきましょう。対処方法は、リンク用のaタグのrel(relationship)属性に、”noopener”と設定するだけです。リスト 10.2で使ったGravatarの編集ページへのリンクでこの設定を行ってください。

edit.html.erbにのaタグに以下を付け足します

“`

<%= gravatar_for @user %>
元記事を表示

【chart.js】x軸ラベルの重複を排除して先頭の値だけ出力したい!

# ? 前提
– **chart.js 0.1.4** (下記を参考に導入)
https://qiita.com/kei-kun1960/items/b84a7e421e3ed2620be9
– **Rails 6.1.7.3**
– **ruby 2.7.5**

# ? 実践
## 【課題】chart.jsでx軸ラベルで重複を除きたい
例えば同じ日のデータが複数ある場合に
x軸ラベルに同じ日付が並ぶと凄く見づらいし冗長。

こんな感じ?![スクリーンショット 2023-10-01 15.42.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073335/b0ce9181-5e1a-871e-3d07-42e074107406.png)

## 【解決法】 データラベルの配列に「空白」を格納する
chart.jsへ渡すx軸用のデータを編集する際に、配列の一個前の要素と比較し空白を格納していきます。

“`ruby:model
# グラフのx軸ラベルを返す
def graph_label

元記事を表示

OTHERカテゴリの最新記事