Ruby関連のことを調べてみた

Ruby関連のことを調べてみた
目次

Bulletがいつも正しいわけではない?!

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

私は普段のプログラミング学習中にRailsのgemでN+1問題や不要なeager loading(includes)を検知してくれるBulletを使用しながらアプリの制作をしています。
自分でも気付き難いN+1問題などもありますので、普段は自動検知して教えてくれて助かっています。

今回はそんなBulletが検知してくれるN+1問題や不要なincludesがどうやらいつも正しくはないようだ、との考えの基に記事を書いています。

まずは検知メッセージと実際のコードをご紹介します。

対象のeager loading(不要なincludes)検知メッセージ
![スクリーンショット 2024-09-13 13.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/66e71273-d0cb-d454-8a51-e376edbda527.png)

元記事を表示

ケント・ベックに学ぶ良いコードの書き方🗒️

こんにちは、しが あきとし([@akitosihga](https://x.com/akitoshiga))です。

先日あるMeetUpで良いコードの書き方について考える機会がありました。
『良いコード』の定義は幅広く様々な解釈があると思います。
その中でも、自分が敬愛するプログラマーのケント・ベックから学んだ事に焦点を当てて良いコードの書き方についてまとめました。

## ケント・ベックとは
* テスト駆動開発(TDD)で有名なプログラマー
* アジャイル開発におけるエクストリームプログラミング(XP)の考案者としても有名
* アジャイル開発関連の書籍に度々登場するCRCを発明したのも彼だったりする
* 代表的な著書は「テスト駆動開発」「エクストリームプログラミング」

TDDのイメージが強い彼ですが、実はコーディングに対して並々ならぬ情熱を持っているのです。

彼の著書「実装パターン」では以下のように語っています。
> 『 70年の人生は、20億秒を少し超えるに過ぎない。誇りの持てない仕事で無駄にする時間はない。良いコードを書くこと自体が喜びであり、そのコードを他の人が理解し、評

元記事を表示

link_toメソッドを使った範囲リンクとネストした個別リンクの実装方法

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

#### link_toメソッドを使って範囲リンクと複数のlink_toをネストさせてそれぞれのリンクを設置する

この記事ではWebサービス(Xのクローンサイト)を作成中に遭遇したちょっとした壁?についてお伝えしています。

Webサービス上で他のページへのリンクを貼る際にlink_toメソッドは皆さんお使いになると思います。

以下はリンクのサンプル画像とサンプルコードです。

`ホーム`のところにカーソルを合わせてクリックすれば`root_path`へのリンクにアクセスできます。

![スクリーンショット 2024-09-12 20.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/dcc486de-01ce-f2d8-0814-dc8595d1a56f.png)

“`ruby:_nav.html.slim
ul

元記事を表示

Heroku(本番環境)のみエラー発生、開発環境は問題無し

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

### 開発環境で機能を実装し終わって、いざHeroku(本番環境)へPushした時にエラーが発生しました。
NoMethodError in CommentsController#create
undefined method’parent_id=’ for #<保存しようとしたデータ>

![Heroku デプロイ後のエラー画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/328aad5d-6767-159f-7815-0f6e62cbf644.png)

このエラーが開発環境で出ていたら、空(Nil)のデータをcreate → save しようとしているのかな、ということでbinding.pry等でデバッグして変数内の値をチェックしてみよう等といった動きを取ろうと考えるのですが、既に開発環境では動作の問題が無いことを確認できていました

元記事を表示

【Ruby】sub・gsub・tr で文字を置換しよう!(tr と gsub の相違点)

## 概要
subなどのメソッドを使用すると任意の文字を置換可能
stringのみ可能

~~~ ruby
text = “今日はピクニックに行けなかった…”

# 引数を指定することで文章を置換
text = text.sub(“行けなかった…”, “行った!”)

p text

# result
“今日はピクニックに行った!”
~~~

~~~ ruby
# 直接要素につけることも可能
p “hamburger”.sub(“burger”, “ster”)

# result
“hamster”

# Integerには不可能なので注意
p 4444444.gsub(4, 0)

# result
=> : undefined method `gsub’ for 4444444:Integer (NoMethodError)
~~~

## sub
**sub(第一引数, 第二引数)**
・初めに第一引数にマッチした文字列だけを第二引数の値に置換
・再代入必要

~~~ ruby
text = “ハンターハンター”

text = text.sub(“ハンター”, “

元記事を表示

チーム開発で作る、時間管理アプリ『YALOOP』ー 未経験から始めた3人の挑戦

## はじめに
私は2024年7月より、内定直結型エンジニア学習プログラム「アプレンティス」に6期生として参加しています。
アプレンティス|活躍するエンジニアの育成・マッチングサービス
プログラムの一環で、3名のプログラミング未経験者によるチーム開発を行いました。本記事では、その過程や開発したアプリケーション「YALOOP」について紹介します。

## チーム開発の開発要件
テーマは「自分たちの役に立つものを開発する」こと。技術スタックはHTML、CSS、JavaScript、MySQL、Rubyで、フレームワークは使用せずに進めました。

## 完成アプリ「YALOOP」の概要
YALOOPは、タスク管理と時間計測を行うアプリです。主な機能は以下の通りです
#### タスクを記入してStartボタンを押した時
・左側のカウウントが進みます
・ページはリロードさせずにfechAPIによる非同期処理でデータベースに保存し、右側にタスクが反映されます
・タスク記入欄は操作できなくします
・StartボタンがStopボ

元記事を表示

Turbo でフレームを更新した後、別コントローラーの Trubo をコールする

## はじめに
勉強中のため、誤りやもっといいやり方があるかも知れません。
その場合は、ご指摘いただけますと幸いです。

また、可能な限りわかりやすく記載するつもりですが、不明瞭な点、追記した方がいい点などがございましたら、合わせてご指摘願います。

## この記事の目的
「AのTurboを呼び出した後に、Aで取得した値を使って、BのTurboを呼び出したい」という目的を果たします。
`connect()`が無限に呼び出されたりして、なかなか完成形に持っていけなかったので備忘録を兼ねて残します。

## view の定義
変数名などは、適当に付けています。
下記から `a-turbo` をコールします。
“`slim
= f.association :call, collection: hoge, required: false, include_blank: false,
input_html: { data: { action: “change->a-turbo#replace” } }
“`

`a_turbo_frame` を更新した

元記事を表示

【個人開発】サウナ後のご飯「サ飯」の情報共有ができるアプリを開発しました。

# はじめに
はじめまして![タク](https://x.com/sttk_91) と申します。
未経験からWebエンジニアへの転職を目指して、
働きながらプログラミングスクールで学習を続けております。

この度、「[**サ飯の時間**](https://sameshi-time.com)」というアプリをリリースしました!
サウナ後のご飯「サウナ飯」、通称「サ飯」を記録・共有することで、

**▶︎ サウナ愛好家の方へ**
 「サ飯」を通して新しいコミュニティ
 サウナ ⇨ サ飯のモデルコース

**▶︎ サウナ初心者の方へ**
 サウナへの新しい入り口

を提供することを目指したCGMサービスです。

# サービス

![sameshi_ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878469/28948717-44d8-2093-0bc0-48c00c42168a.png)
**開発期間:3ヶ月**

サービスURL

https://sameshi-time.com

Githu

元記事を表示

Web開発エンジニアになるために

# 目次
1. Webエンジニアとは
1. そのために必要な知識
1. 現在の研究と業務のつながり
1. まとめ

# Webエンジニアとは
主に, フロントエンドとバックエンドの2つに分ける. ユーザからみてわかるフロントと在庫数やカード情報の照会等を行うバックエンドから成る.

# そのために必要な知識
1. インターネットについて
1. OSについて
1. データベースについて
1. APIについて
1. プログラミング
1. セキュリティ

多くの知識を必要とする.
>引用 https://tech-parrot.com/engineer/backend-engineer-roadmap-and-skills/#i-2

# 現在の研究と業務のつながり
セキュリティについて学ぶ ➡ 必須の知識となる(特に, バックエンドエンジニア)

# まとめ
多くの知識を必要とするため, 勉強量も凄まじいことになる. 現研究と並行して空き時間でGoやRubyの勉強を行う必要があるのではないか. シンプルに用語の理解を深める必要もある.

元記事を表示

【個人開発】初めてgemを作って公開してみた話

こんにちは!MaTTaと申します。
これまでWEBアプリ開発の記事をいくつか書いて来ましたが、今回は少し趣を変えてオリジナルのgemを開発したのでその経験をまとめてみます。

:::note warn
初学者につき、誤りを含む場合があります。
また、当Gemは各自のOpenAI API KEYの使用を前提にしておりその分の費用が発生します。
:::

## 開発経緯
プログラミングスクールの先輩が「アプリもいいけどGem作りもいい経験になるよ」と仰っていたのが最初のキッカケでした。「gemを作る」なんて今まで思いつきもしなかったのですが、よくよく考えるとGemって何なのかしっかり理解していないようにも思い、これもいい機会だなと。

刺激をくれた先輩の記事はこちらです。手順についてはそのまま参考にさせて頂きました。

[🐾動物言語🐾(pad_character)を『gem』で作ってみた!🐈](https://qiita.com/hfslca7439/items/6fda805d95bbd5d2fecc)

https://qiita.com/hfslca7439/items/6fda80

元記事を表示

Rails サーバーランチャーが見つかりません

# RubyMineでデバッグしようとしたら「Rails サーバーランチャーが見つかりません」って怒られた話

こんにちは!今日は、RubyMineでRailsプロジェクトをデバッグしようとしたときに遭遇した問題と、その解決方法について共有したいと思います。

## こんな困ったことが…

デバックやりやすいと聞いたのでRubyMineに乗り換えたのにこんなエラーが出てきました!

“`
エラー: Rails サーバーランチャー ‘/プロジェクトの名前/bin/rails’ がプロジェクトに見つかりませんでした
“`

「えっ、なんで?昨日まで普通に動いてたのに…」って感じで、ちょっと焦りました。

## 原因はこれだった

調べてみると、どうやらプロジェクトの`bin/rails`ファイルがどこかに消えちゃったか、うまく設定されてないみたいなんです。

このファイル、実はRailsアプリを動かすのに超重要な役割を果たしているんですよ。これがないと、RubyMineさんが「Rails、どこ〜?」って感じで迷子になっちゃうわけです。

## 解決方法はこれ!

さて、問題が分かったと

元記事を表示

Ruby 3.0.4 -> 3.2.2、Rails 6.1.0 -> 7.1.4の作業ログ

# 基本手順
大変勉強になりました。ぜひご一読ください。

https://qiita.com/jnchito/items/0ee47108972a0e302caf

## Gemfile更新
“`diff
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

– ruby ‘3.0.4’
+ ruby ‘3.2.2’

# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
– gem ‘rails’, ‘~> 6.1.0’
+ gem ‘rails’, ‘~> 7.1.4’
“`

## Dockerfile更新
“`diff
– FROM ruby:3.0.4
+ FROM ruby:3.2.2

# environment
ENV APP_ROOT /app
“`

# トラブルシューティング
## bundle installでversion conflict発生

元記事を表示

【Ruby】RuboCop を GitHub Actions に導入した

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約半年が経過しました🐣

## 概要
新規プロジェクト開始時に、Rails アプリ内に RuboCop を導入し、
GitHub Actions に設定する手順をまとめました。

### 環境
– Ruby 3.3.4
– Rails 7.1.3.4

の環境で動作確認済み

:::note warn
間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## なぜ RuboCop が必要なのか、自分なりの考え
### なぜ RuboCop というツールを使うのか
プロジェクト内のコーディング規約を、RuboCop のカスタマイズ設定としておけば、
レビューでいちいち指摘するまでもないようなことも各自で修正できますし、
後からプロジェクトに入った方も申し送りせずとも同じルールで記載ができます。

また、厳しくコードレビューを行っていても、人間な

元記事を表示

自分たちの役に立つものを開発せよ(初めてのチーム開発)

# はじめに
私は、内定直結型エンジニア学習プログラム「[アプレンティス](https://apprentice.jp/lp)」に6期生として参加しています。
その中でチーム開発に取り組んだので、学んだことや実際にどんなことをしたのかを書いていきます。
至らない点もあるかもしれませんが、優しい目で見守っていただけると幸いです。どうぞよろしくお願いいたします。

## 実際に作ったプロダクト
#### 時間管理アプリ(YALOOP)
– 学習時間の計測
– グラフによる学習時間の可視化(1日分、1ヶ月分)
– 1日の振り返りのための日報

![スクリーンショット 2024-09-10 16.38.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835540/d1a5fc06-2f7c-74ea-313c-d984080256da.png)

## チーム開発の概要

### テーマ 『自分たちの役に立つものを開発せよ』
#### チーム開発の要件

– ベースとなる技術は HTML/CSS/Ja

元記事を表示

【個人開発】海外旅行初心者さん向けのサポートアプリを作成しました✈️

## はじめに

初めまして!
私はプログラミングスクールRUNTEQでRuby on Railsを学習しているもちと申します。
この度、卒業制作として **「Travel Starter」** というアプリを本リリースしました!
海外旅行が不慣れな人に向けて必要な情報を一元管理し、必要な準備のサポートをするサービスです。
アプリを使うことで、海外旅行に行く際の不安を軽減し、旅行のハードルを下げることを目指しています。

実は今回が初めてのQiita投稿です。卒業制作の記事はこちらで書きたいという入学時からの目標がありました。
読みづらい箇所もあるかと存じますが、ぜひご覧いただけると幸いです。

### サービスはこちら
https://adventure-travel-starter.com/

### GitHubリポジトリ
https://github.com/miki-ymmt/travel_app

[![Image from Gyazo](https://i.gyazo.com/73404179f8e5a5eb6ed9aeee4657c64a.png)](ht

元記事を表示

dotenv-railsを使ったグループへのGmail送信機能

この記事では、dotenv-railsを使ってGmailのメール送信機能を実装し、イベント通知を行うシステムをRailsで構築する方法について説明します。
今回はグループに入っているメンバーに,グループリーダーがメールを一括送信できるような機能を作成していきたいと思います.
## 1. dotenv-railsの導入
まず、dotenv-railsをGemfileに追加します。

“`:Gemfile
gem ‘dotenv-rails’, groups: [:development, :test]
“`

※dotenv-railsとは

dotenv-railsは、Railsアプリケーションで環境変数を管理するためのGemです。`.env`ファイルに設定した環境変数をアプリケーション内で利用できるようにし、セキュリティや設定の管理を簡単にします。特に、開発やテスト環境での機密情報の管理に役立ちます。

その後、`bundle install`コマンドを実行します。

## 2. 環境変数の設定
プロジ

元記事を表示

『"』や『&』などの謎の文字列がでてきた【特殊文字】

## 解決策
HTMLを覗いていると時々出会う **“`"“`** や **“`&“`** などの “&~~~;” は特殊文字と呼ばれるもの。

HTMLから情報を取得する際は下記のように置き換えよう。

~~~ ruby
# 出現頻度が高い文字

# ダブルクォーテーションを変換
.gsub(‘"’, ‘”‘)
.gsub(‘"’, ‘”‘)

# アポストロフィを変換
.gsub(‘'’, “‘”)
.gsub(‘'’, “‘”)

# アンパサンド(アンド)を変換
.gsub(‘&’, ‘&’)
.gsub(‘&’, ‘&’)
~~~

## 特殊文字とは
HTMLで ” **<** " や " **"** " などを文字列として表したいときに使う方法 「**文字実体参照**」と「**数値文字参照**」の2種類の表示方法がある

代表的なものは以下
| 文字 | 文字実体参照 | 数値文字参照 | 説明 |
| ——— | ————- | ————-

元記事を表示

Ruby gem 開発!中国語(簡体字・繁体字)と日本語を判別するgemを作ってみた(中編)

こんにちは、九兵衛です。前回の記事 (https://qiita.com/kyubey1228/items/e1ade213a04daad6713e) では、Ruby gemの基本的な構造と設定について説明しました。
今回は、実際にgemの中身を実装していく過程を共有したいと思います。
正直なところ、この過程は予想以上に複雑で、多くの発見と驚きがありました。

**1. データファイルの準備と驚きの発見**

まず最初に、中国語の文字を判別するためのデータファイルを用意しました。主に2つのファイルを使用しています:

1. `Unihan_Variants.txt`: Unicode consortiumが提供する中国語変体字のデータ
2. `traditional_chinese_list.txt`: 追加の繁体字リスト

これらのファイルを詳しく調べていく中で、私は中国語の文字の複雑さに圧倒されました。例えば、「門」という字は日本語でも使いますが、中国語では簡体字で「门」と書きます。しかし、「門」自体も繁体字として使われているのです。このような複雑な関係が無数にあることを知り、言語

元記事を表示

【update_attributesが使えない】NoMethodError in RegistrationsController#update【Rails】

## はじめに

Ruby on Railsにて、以下のエラーが発生しました。

“`ruby
NoMethodError in RegistrationsController#update
undefined method `update_attributes’ for #
“`

## TL;DR

update_attributesではなくupdateを使用することで解決しました。

Rails6からupdate_attributesは非推奨になっているようです。

## 参考

[https://railsguides.jp/6_0_release_notes.html#active-record-非推奨化](https://railsguides.jp/6_0_release_notes.html#active-record-%E9%9D%9E%E6%8E%A8%E5%A5%A8%E5%8C%96)

https://github.com/rails/rails/blob/v6.0.2.1/activerecord/lib

元記事を表示

複数の配列をまとめるArray#zip関数を使ってコードをスッキリさせる

# 悩み
以下のコードを見てください。
“`ruby
array_1 = [1, 2, 3, 4, 5]
array_2 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
array_3 = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]
array_1.each_with_index do |v1, i|
v2 = array_2[i]
v3 = array_3[i]
pp “#{v1}, #{v2}, #{v3}”
end
“`
このコード、以下の部分がなんとなく嫌じゃないですか?
“`ruby
v2 = array_2[i]
v3 = array_3[i]
“`
なにかうまく書く方法がありそうな気がします。
今回はそんな悩みを解決する関数を見つけたので共有したいと思います。

# 結論
以下のように `Array#zip` を利用しようって話です。
※ただし、大容量の配列の場合はパフォーマンスが悪いので注意。
“`ruby
array_1 = [1, 2, 3, 4, 5]
array_2 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e

元記事を表示

OTHERカテゴリの最新記事