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

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

Time.atとTime.zone.atの違いについて

## Time.at
* Rubyの組み込みメソッド。
* 指定した時刻のTimeオブジェクトを返す。
* キーワード引数inでタイムゾーンを指定できる。
* タイムゾーンの指定がなく引数が数値の場合、生成されたTimeオブジェクトは地方時になる。

“`ruby
# Timeオブジェクト、もしくは起算時からの経過秒数を表す数値を指定する
Time.at(0) #=> 1970-01-01 00:00:00 +0000

# “+HH:MM” や “-HH:MM” のような形式の文字列か,”UTC”などでタイムゾーンを指定する
Time.at(1582721899, in: “UTC”)  #=> 2020-02-26 12:58:19 UTC
“`

## Time.zone.at
* Ruby on Railsのフレームワークにおいてタイムゾーンを取り扱うためのクラス。
* TZInfoというRubyのタイムゾーン情報を扱うためのライブラリを利用していて、`TZInfo::Timezone` インスタンスをラップして、Railsでの使用に適したインターフェースを提供する。
*

元記事を表示

【Ruby・Rails】mergeメソッドの2つの働き

## 先に結論
Rubyにおける場合と、RailsのActiveRecordにおける場合でmergeメソッドの処理が変わる。

## Rubyのハッシュの **merge** メソッド

**2つのハッシュを結合して新しいハッシュを作成します。**
このメソッドは、ハッシュのキーと値を結合し、重複するキーがある場合は後からマージされたハッシュの値が優先されます。

以下は、**merge** メソッドを使用して2つのハッシュを結合する例です。

“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { b: 3, c: 4 }
merged_hash = hash1.merge(hash2)

puts merged_hash
=> **{ a: 1, b: 3, c: 4 }**

“`

## RailsのActiveRecordにおける **merge** メソッドは

**クエリ条件を結合するためのメソッドです。**
これは、データベースクエリに対して追加の条件を結合するために使用されます。例えば、**where** や **joins** の条件を

元記事を表示

mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)

## エラー内容
`rails new`しようとしたところ次のエラーが発生。
“`
$ rails new .
:148:in `require’: dlopen(/Users/hoge/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/stringio-3.0.8/lib/stringio.bundle, 0x0009): tried: ‘/Users/hoge/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/stringio-3.0.8/lib/stringio.bundle’ (mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)), ‘/usr/local/lib/stringio.bundle’

元記事を表示

既存のrailsアプリをdockerを用いてコンテナ化する

# ゴール

既存のrailsアプリを
docker,docker-composeがインストールされているPCであれば、
**個人PCの環境に左右されることなく**[ローカル](http://localhost:3000)にて再現できるようにする。

# 事前準備
* 以下の環境にてローカルで動作確認済みのrailsアプリ
“`ver.
ruby 3.2.2
Rails 7.0.6
postgresql 12
“`

* docker,docker-composeのインストール

https://docs.docker.com/engine/install/

https://docs.docker.jp/v1.12/compose/install.html

# 手順

**1.Dockerfile、doccker-compose.ymlの作成と記述**
**2.database.ymlファイルの編集**
**3.コンテナ生成と実行**
**4.動作確認**

順番に解説していきます。

### 1.Dockerfile、docker-compose.ymlの作成と記述

元記事を表示

Railsのレスポンスに関連するメソッドまとめてみた

# Railsのレスポンス `response` について

Railsにおける`response`オブジェクトの基本的な使い方や特性についてまとめています。

## 目次
– [レスポンスの内容を文字列で取得](#レスポンスの内容を文字列で取得)
– [レスポンスのcharsetを取得](#レスポンスのcharsetを取得)
– [レスポンスクッキーをハッシュに変換して取得](#レスポンスクッキーをハッシュに変換して取得)
– [HTTPステータスコードに対応するメッセージを取得](#HTTPステータスコードに対応するメッセージを取得)
– [コンテントタイプを設定](#コンテントタイプを設定)
– [パスに格納されているファイルをレスポンスボディとして返す](#パスに格納されているファイルをレスポンスボディとして返す)

## 逆引き

## レスポンスの内容を文字列で取得

#### 説明
レスポンスの内容を文字列で取得
#### 使い方
“`ruby
response.body()
“`

## レスポンスのcharsetを取得

#### 説明
レスポンスのcharse

元記事を表示

【Ruby】すでに投稿されているものを投稿できないようにする

# はじめに
大学生限定 プログラミングコミュニティ 『GeekSalon』で活動しているWebメンターの者です!
もし少しでも興味がありましたら、ぜひお話を聞きにきてください!

# 前提
この記事でできることを紹介します!
バリデーションを使い、すでに投稿されているデータは投稿できないようにする機能をつけます

**例)Vaundyについて投稿している人がすでにいる場合、Vaundyについては投稿できないようにする**

**前提:投稿機能の実装が完了していること**

**注意モデルはmusic,カラムはcontentになっているので、各々適切なものに修正してください**

# バリデーションの追加

**そもそもバリデーションとは?**
投稿フォームで何かを投稿するとき、「入力必須項目」というのを目にしたことはないでしょうか?

例えば「名前やメールアドレス、パスワード」などです。このとき、入力必須項目に何も入力しなかった場合、投稿ができないようにしたいですね。

他にもパスワードなどは4文字以上であるとか、すでにデータベースに存在しているメールアドレスで登録できないようにする

元記事を表示

zendeskの記事をコピペする

## やりたかったこと
zendeskのブランドAの記事をブランドBにコピーしたかった。
ブランドAの記事をブランドAの別セクションに保存するということもできると思う。

## 方法
zendeskがAPIを用意してくれているのでそれを使う。
スクリプトはrailsで書いた。

[API を使用してヘルプセンターの記事のコピーを公開および同期する](https://support.zendesk.com/hc/ja/articles/4409408035610-API-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%98%E3%83%AB%E3%83%97%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC%E3%82%92%E5%85%AC%E9%96%8B%E3%81%8A%E3%82%88%E3%81%B3%E5%90%8C%E6%9C%9F%E3%81%99%E3%82%8B)

元記事を表示

【プログラミング初心者の学習方法】自走力を意識したgemの学び方、ReadMeの読み解き方

### はじめに

こんにちは、駆け出しWebエンジニアを目指して学習中の「さば?」[@saba7678pg](https://twitter.com/saba7678pg)と申します。

:::note warn
技術記事の練習も兼ねて、プログラミング勉強中の身で書かせていただきました。
引用元などの情報に注意しながら書かせていただきましたが、
至らぬ点・誤った知識等が記載されている可能性がございます。

何かございましたらお手数ですがご指摘いただけますと幸いです。
:::

### 今回の記事の対象者
– Ruby,Railsについて学習中
– 最低でもProgateは一通り終えている
– Google Chromeを使用している
– あると便利なChatGPT(本家、Bing等なんでも)

### 初学者のプログラミング勉強方法

今回はタイトルに「自走力」というキーワードを入れてあるように、
自分で調べる力を養いつつ技術を学ぶにはどうしたらよいのか、というテーマで、
**自分自身で実践してみながら**今回の記事を書いております。

勉強の仕方については人それぞれという部分もあ

元記事を表示

【Rails】ついついrubocopを通し忘れてしまう全ての方へ!commitと同時に自動でrubocopを通す設定方法!

# はじめに
お疲れさまです!
おおくまです!

以前、私は**rubocop**を現在実装中のアプリに導入しました!
(その際の記事はこちら[【Rails】rubocop導入手順の備忘録](https://qiita.com/kumaryoya/items/e2e12bb503fe56404329))
しかし!
それからというもの、~~いつも~~たま〜にrubocopを通すのを忘れてしまいます!笑
そこで!
commitすると自動でrubocopを通してくれる便利な機能があることを知りました!
今回はその設定方法の備忘録になります!

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 実装
今回使用するツールは、[lefthook](https://github.com/evilmartians/lefthook)というツールです!
これはGitフック管理ツールの1つで、特定のGitイベント(コミット前、プッ

元記事を表示

“Git SOS: 間違えて別のブランチにpushしてしまったときの対処法”

# 概要
皆さんはコミットしてpushした後に作業ブランチが間違っていることに気づいたことはないでしょうか?(僕はよくこのポカミスをよくします)
そんな時の対処法を備忘録として残しておきます。

:::note warn
私はプログラミング初学者のため間違った記述があれば教えていただけると幸いです。
:::
:::note alert
今回は個人開発ですが、–force オプションを使用してpushする場合は注意が必要です。他の人とブランチを共有している場合、この操作は他の人の作業を上書きする可能性があるので共同作業者と事前に相談してください。
:::
## 状況
個人開発の際、routes_setupブランチで作業していると思い、コミットし“push“し“Pull request“した際、ボタンが出てこず確認してみるとtop_pageブランチで作業してしまっていました。
## 対処法
###### ローカルで正しいブランチにコミットを移動する
まず、現在のブランチでの変更を確認しコミットハッシュをメモします。
“`ruby:
git log
“`
正しいブランチ(rou

元記事を表示

【Ruby】%記法について

rubyやrailsを学習する中で「%」を使った表記とちらほら出会うのでいくつか整理してみました。
※ここれは計算式の「%」は入れてません。(割って余りを出すあれ)

### %q! ! はシングルクオートと同じ意味

“`ruby
puts %q!He said, “Don’t speak.”! #=> He said, “Don’t speak.”
“`

### %Q! ! と %! ! はダブルクオートと同じ意味
区切り文字は ! 意外にも ? や カッコ( > や } ) 等、任意の記号を使える。

“`ruby
something = “Hello.”
puts %Q!He said, “#{something}”! #=> He said, “Hello.”

puts %!He said, “#{something}”! #=> He said, “Hello.”
“`

“`ruby
# ? を区切り文字に使う場合。
puts %q?He said, “Don’t speak.”? #=> He said, “Don’t speak.”

#

元記事を表示

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の書き方です。コードの可読性(読みやすくなる)がよくなり、コ

元記事を表示

OTHERカテゴリの最新記事