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

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

yarn install –check-filesをしたらnode-sassが読み込まれないエラー

自分用備忘録として作成
(初心者のため、もし違っていたら教えていただけると幸いです。)

課題でクローンしたアプリケーションを立ち上げるためにyarn install –check-filesをしたら、
error /Users/yec2016/workspace/dpro/rails_refactoring_task/node_modules/node-sass: Command failed.とエラーが出た。

環境は、
mac
node -v 18.18.0
node-sass -v 4.14.1
yarn -v 1.22.22

解決方法としては、node-sassのバージョンに対応できるnodeバージョンまで下げる。(pythonが読み込めないというエラーもあったため、pythonをインストールしたが、意味がなかった。)

#node-sassのバージョン確認
npm list node-sass
football_info_for_refactoring@0.1.0 /Users/xxx/workspace/xxx/rails_refactoring_task
└─┬ @

元記事を表示

YAMLの作法

今回は、インターンの中で利用した、ymlについて話していきたいと思います。
# YAML (YAML Ain’t Markup Language)とは?
ymlとは、一言で言えば、
【データを直感的かつ人間が読みやすい形式で記述するためのデータ表現形式】です。
“`
name: John Doe
age: 30
email: john.doe@example.com
“`
:::note info
こんな感じで使う
:::
# 今回どんな時に使ったか
Webサイトの中で用いられている、英語の情報を日本語表記に変換するのに使いました。
例えば、
“`
ja:
hello: “こんにちは”
user:
name: “名前”
email: “メールアドレス”
messages:
welcome: “ようこそ、%{name}さん!”
goodbye: “さようなら!”
“`
これをconfig/locales/ja.ymlに記述します。そしてビューで表示させるには、
“`
<%= I18n.t('hello') %>
<%= I18n.t

元記事を表示

Railsでアバター画像が設定されていないときにプロフィール編集ページにリダイレクトする設定方法

## やりたいこと
ユーザー登録後、プロフィール画像を登録していない場合にはプロフィール設定のページに遷移したい
※抽象化すると、特定の条件を満たすとき、特定のページに遷移させたい

### 前提
– Railsを使用
– User has_one Profile の関係
– ユーザーがSign upしたタイミングではprofileはつくられない

## 課題
– プロフィールは自動で生成されないため、`unless current_user.profile.avatar.attached?`のような条件文だと、.nilクラスのエラーが出る
– application_controllerにプロフィール編集画面へのリダイレクトを記載すると、リダイレクトが繰り返されしまう

## 解決策
### 条件文の記載方法
application_controllerに以下を記載。
“`
before_action :check_avatar

private
def check_avatar
if user_signed_in?
unless current

元記事を表示

【Rails】グループ機能の実装手順

この記事では、Railsでグループオーナーが作成したグループに、ユーザーがグループに参加・離脱できるようなグループ作成機能を実装する方法をまとめています。

## 作製するモデルのアソシエーション
今回作成するテーブルは`GroupUser`と`Group`のふたつです。

![スクリーンショット 2024-09-14 204259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882438/2a5cb3bb-4522-1448-b5b0-fb7e73f0735f.png)

### Groupテーブル
グループの情報を保存します(`name`、`introduction`、`image_id`など)。
`owner_id`フィールドにより、グループの所有者(ユーザー)を表します。
### GroupUserテーブル
中間テーブルで、ユーザーがどのグループに所属しているかを管理します。
`user_id`と`group_id`で`User`と`Group`を関連付けています。

# 実装手順
## 1

元記事を表示

メソッドの公開レベル

Rubyにおけるメソッドの公開レベルには、public、protected、privateの3種類があります。それぞれメソッドへのアクセスを制御するために使いますが、特にprivateメソッドを指定する際にはいくつかの注意点があります。
1. privateメソッドの基本的な性質
privateメソッドは、そのメソッドが定義されたオブジェクトの外部から呼び出すことができません。クラスのインスタンスメソッドの中でしか呼び出すことができず、レシーバ(オブジェクト)を指定することもできません。
“`
class Example
def public_method
puts “This is a public method.”
private_method
end

private

def private_method
puts “This is a private method.”
end
end

e = Example.new
e.public_method # “This is a public method.” “This is

元記事を表示

ハッシュ値の性質 ハッシュの衝突耐性とは

今回はハッシュ値についてまとめてみます。

ハッシュ値から元の値を推測するのが難しいことは理解していましたが、いろいろ混乱するような性質があったため、改めて頭の整理を兼ねてこの記事にまとめました。

## そもそもハッシュ値とは

ハッシュ関数という特別な関数にデータを入力して出力されるビット列のことです。広く使われているものとして、SHA-256、SHA-512、RIPEMD-160などがあります。

ハッシュ関数が出力するハッシュ値には、異なるデータから同じハッシュ値が生成されないという特徴があり、この「同じハッシュ値が生成されないこと」を衝突耐性と呼びます。

この特徴から、ハッシュ関数は入力データが少しでも変わると出力されるハッシュ値も大きく変わります。これを利用してデータの改ざんチェックやデジタル署名の作成にも応用されています。

# ハッシュ値の性質
引用元:[ハッシュ値にはたくさんの特徴や役割がある!具体的な使い方を理解しよう!](https://www.gmosign.com/media/work-style/hassyuti/#index_id7)

思った以上に色

元記事を表示

Object でも Hash みたいに分割代入したい

# やりたいこと

Object でも Hash みたいに分割代入 (destructuring assignment) したい。

“`rb
# Hash オブジェクトは右代入を使って分割代入ができる。
heterogeneity = { brand_and_name: ‘mowl – ヘトロジェニティ’, color: ‘紫’ }
heterogeneity => { brand_and_name:, color: }
[brand_and_name, color]
#=> [“mowl – ヘトロジェニティ”, “紫”]

# ちなみに Data オブジェクトでもできる。
Yoyo = Data.define(:brand_and_name, :color)
heterogeneity = Yoyo.new(brand_and_name: ‘mowl – ヘトロジェニティ’, color: ‘紫’)
heterogeneity => { brand_and_name:, color: }
[brand_and_name, color]
#=> [“mowl – ヘトロジェニティ

元記事を表示

Rubyでの配列における |(和集合)と ||(論理演算)の違いを調べた

最近、Ruby Silverの資格試験の勉強をしています。全然Rubyのこと理解してないんだなぁと絶望しつつも伸びしろを感じております😚

以下の問題を考えていた際に、配列に対する `|` と `||` の違いが気になったので調べてみました。


問題:

XXXXに記述することで、実行結果が30以上になるプログラムを選択してください。

“`ruby
a = [-1, 2, 3, 4, 5]
b = (4..6).to_a

puts XXXX
“`

選択肢:

1. `a.inject(:+) + b.inject(:+)`
2. `(a | b).inject(:-).abs + (a & b).inject(:+).abs`
3. `(a | b).inject(:*) + b.inject(0) { |x, y| x + y ** 3 }`
4. `((a || b).map(&:succ).inject(:*) * (a && b).inject(:*).abs2 + 29)`

この問題の`a | b` と `a || b` の結果がどうなるか分からな

元記事を表示

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

Github

元記事を表示

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発生

元記事を表示

OTHERカテゴリの最新記事