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

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

メソッドの公開レベル

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)

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

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

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

ハッシュ関数という特別な関数にデータを入力して出力されるビット列のことです。広く使われているものとして、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発生

元記事を表示

【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. 環境変数の設定
プロジ

元記事を表示

OTHERカテゴリの最新記事