- 1. 【Ruby初級】クラスメソッドを用いて野菜の金額を表示する
- 2. Rubyでハッシュを文字列にできるのに文字列をハッシュにできなくて困りました
- 3. 【Ruby初級問題】それぞれの野菜の重さは合計いくつ?
- 4. 【Rails】FontAwesomeのCDN読み込みと使い方
- 5. 【超初心者未経験】udemyで「ruby on rails」を学習してみた ①
- 6. 【Ruby】世界恐慌が本当に木曜日から始まったのかを検証してみた
- 7. OptionParser のオプショナルで non-space な指定の可否
- 8. 【参加レポ】RubyKaigi 2024 に行ってきました!
- 9. Ruby3, Rails7, MySQL, Tailwind, Dockerで作成する流れ
- 10. 【個人開発】プログラミング初心者がテスト成績を管理するアプリを作成しました。
- 11. Rails7.1以降でも ActiveStorage の has_many_attached を 編集時既存ファイルを残す(上書きしない)挙動にする方法まとめ
- 12. GPT-4o同士で会話して会議を代行するプログラムを作る(プロト版)
- 13. Rails7系にviteを使ってVue3を入れてみた
- 14. Rails 7.2をちょこっと試す(query and cached ログ編)
- 15. Rails のアップデートで、 new_framework_defaults_x_x.rb をコメントインし忘れてないですか?
- 16. 【Rails】Sorcery使用によるGoogle認証の注意点
- 17. RubyでQwen2クイックスタート(pycall.rbを使用)
- 18. Rubyのshift, unshift, pop, push
- 19. Sprockets::Rails::Helper::AssetNotPrecompiledErrorの解決
- 20. rails modelとcontollerの作成コマンド
【Ruby初級】クラスメソッドを用いて野菜の金額を表示する
# 問題
以下の要件を満たすVegetableクラスを実装しましょう。### 条件
##### クラスメソッド
メソッド名:description
処理:”新鮮で美味しい野菜です”と表示する##### インスタンス変数
name:野菜の名前
color:野菜の色##### インスタンスメソッド
メソッド名:initialize
処理:引数で名前と色を受け取り、インスタンス変数に代入します。メソッド名:details
処理:”【名前】は【色】です”と表示します。### 雛形
“`ruby
class Vegetable
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
enddef initialize
# ここに処理を記入してください
enddef インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end# 3つのインスタンスを生成してください
# クラスメソッドを呼び出し、「新鮮で美味しい野菜です」と表示してください
Rubyでハッシュを文字列にできるのに文字列をハッシュにできなくて困りました
# 結論
`eval`を使えば大体できる。使い所は`testコード`。
# 背景
ハッシュを文字列にしたログの出力結果をminitestで検証しようとした時に、文字列をハッシュに変換し、各項目に正しく値が入っていることを確認しようとした時でした。
**文字列に対してto_hashしようとしてもエラーになる。**
ハッシュオブジェクトに`to_s`すると文字列になるのに、文字列に対して`to_hash`するとエラーになります。
どうすれば文字列をハッシュに変換できるか、私なりに考えてみました。
# evalを使う
evalを利用すると簡単に文字列をハッシュに変換することができます。
“`ruby
hoge_hash = { key1: ‘hogehoge’, key2: 999 }
# => {:key1=>”hogehoge”, :key2=>999}
hoge_string = hoge_hash.to_s
# => “{:key1=>\”hogehoge\”, :key2=>999}”
eval(hoge_string)
# => {:key1=>”hogehoge”, :key
【Ruby初級問題】それぞれの野菜の重さは合計いくつ?
# 問題
以下のように、野菜の名前と重さが入った配列があります。この配列を用いて、野菜の名前とそれぞれの総重量が出力されるコードを記述してください。“`ruby
veggies_weight = [[“carrot”, [120, 150, 130]], [“potato”, [200, 250, 180]], [“onion”, [100, 80, 90, 110]]]
“`### 出力例
“`
carrotの総重量は400グラムです”
“`
## ヒント
`sum`メソッドを使いましょう。
リスト内のすべての値を合計してくれます。### 例
“`ruby
banana_price = [100, 100, 100]puts banana_price.sum
# 出力結果「300」
“`# 回答
“`ruby
veggies_weight = [[“carrot”, [120, 150, 130]], [“potato”, [200, 250, 180]], [“onion”, [100, 80, 90, 110]]]veggies
【Rails】FontAwesomeのCDN読み込みと使い方
## はじめに
この記事では、「Font Awesome」のCDN(Contents Delivery Network)を使った読み込み方法と基本的な使い方についてまとめました。
SNSのアイコンや設定、編集、削除などの機能をアイコンで表現する際に、Font Awesomeは非常に便利です。自前でアイコンを作成する手間を省き、豊富なアイコンライブラリを簡単に活用できる方法をお伝えします。この記事が皆さんの役に立てば幸いです。
## 環境
– rails
– docker
– taiwindcss## Font Awesomeセットアップ
まずはFont Awesomeの公式ページにアクセスし、アカウントを作成します。
https://fontawesome.com/
登録後、以下の手順で自分用のCDNリンクを取得します。
### 1.ヘッダーメニューまたは画面中央の「**Your Kits**」をクリックします。
![スクリーンショット 2024-06-12 10.26.50.png](https://qiita-image-store.s3.ap-northeas
【超初心者未経験】udemyで「ruby on rails」を学習してみた ①
# ① はじめに
初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!# ② 使用した教材
今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
【Ruby】世界恐慌が本当に木曜日から始まったのかを検証してみた
## はじめに
*この記事は、Rubyを使えば簡単に曜日を算出できるということを伝えたいという思いから生まれたものです。さて、皆さんは「世界恐慌」と呼ばれるものを知っていますでしょうか?
おそらくご存知でしょうが、念のため簡単に説明しておきます。
### 世界恐慌とは?
1929年10月24日にニューヨーク・ウォール街の株式取引所で株価が大暴落したことによって世界的な不景気に突入しました。
これを世界恐慌といいます。
また、この株価大暴落は「暗黒の木曜日」とも言われいます。
### 暗黒の木曜日(1929年10月24日)って本当に木曜日?
世界恐慌の始まりが「暗黒の木曜日」と呼ばれていることについて、今更不信感を覚えたのでRubyを用いて検証しようと思います。## Rubyで曜日を計算する方法は?
`.wday`メソッドを使うと、曜日を0(日曜)から6(土曜)の数字で表現することができます。
具体的な使用方法は以下のコードをご覧ください。
“`check.rb
# 今日は2024年6月3日(月)です。
week = [‘日曜日’, ‘月曜日’, ‘火曜日’, ‘水曜日’,
OptionParser のオプショナルで non-space な指定の可否
Ruby の OptionParser の挙動の考察を書き残します。OptionParser のあまり知られていなさそうなこととして、オプショナルなパラメーターをとるスイッチの定義の仕方が 2種類あり、指定時(パース時)の挙動が違うということです。
まず、ショートオプション、ロングオプションなどと呼ばれているものは、本来は「スイッチ」と呼ぶべきだと思います。
OptionParser::Switch クラスですから。そして、ハイフン1つから始まるものはショートスイッチ、ハイフン2つから始まるものはロングスイッチです。また、スイッチには、▷パラメーター(argument)をとらないスイッチ、▷必須の(mandatory な / required な)パラメーターをとるスイッチ、▷任意の(optional な)パラメーターをとるスイッチ――の3つがあります。
パラメーターをとらないスイッチは、
* `opt.o
【参加レポ】RubyKaigi 2024 に行ってきました!
# はじめに
RubyKaigi 2024 に行ってきました!
https://rubykaigi.org/2024/
この記事では、僕が聴講したセッションのうち特に印象に残っているセッションを紹介します!
# Writing Weird Code
https://rubykaigi.org/2024/presentations/tompng.html#day1
最初に紹介するのは、1日目の Keynote 「Writing Weird Code」です。
これが RubyKaigi 2024 の最初のセッションだったのですが、一番印象に残っています。
このセッションについて説明する前に、まずはこちらをご覧ください。
先月、TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞をとってきたプログラム(Quine)です。
全てのフレームが、魚達がその場所から泳ぎを再開する実行可能なRubyのコードになっています。
魚・水草・泡でコードの一部が欠落していますが、誤り訂正により復元しています。 pic.twitter.com/vQsGG5o7Of— ぺん! (@tompng) October 18, 2022
一見、動くアスキーアートのように見えますが、よく見てみると Ruby のプログラムであることがわかります。さらに、止めてコピーして実行すると、止めたところからまた動きます。
このように、プログラムを実行するとそのプログラムと同じものが出力されるプ
Ruby3, Rails7, MySQL, Tailwind, Dockerで作成する流れ
## 1. リポジトリを作成する
![スクリーンショット 2024-06-11 16.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731095/6ca9f8ed-9846-7f4f-a3d6-1aad38fc9185.png)
`rails new`すると`README.md`も作成されるので、この時はチェックしなくてもいいと思います。
## 2. 任意のディレクトリで Clone & CD
“`zsh:zsh
git clone git@github.com:yoshiki1007/rails7-todo.git
Cloning into ‘rails7-todo’…
warning: You appear to have cloned an empty repository.
“`空のリポジトリをクローンしたというメッセージが出ますが、実際に空ですので問題ありません。
“`zsh:zsh
cd rails7-todo/
“`## 必要なファイルを作成する
【個人開発】プログラミング初心者がテスト成績を管理するアプリを作成しました。
# はじめに
前職は、公立中学校で教師をしていました。
授業の中で、毎回小テストを行っていたのですが、結果が視覚的に分かりやすくなるよう、折れ線グラフにして記録させていました。その結果、生徒の小テストに対するやる気が向上していきました。
しかし、生徒一人ひとりのデータを個別に折れ線グラフにする作業が非常に手間であるという課題がありました。
また、学期末の成績を出す際、生徒が小テストや、実力テスト、定期考査など異なる種類のテストを受ける中で、成績の伸びを正確に把握することが難しいと感じていました。# サービス概要
### My Progress Report
URL: https://myprogressreports.com/
![Qiita](https://i.gyazo.com/3b9d9476285cc3be6170a7004b44fcf9.jpg)
テスト成績を管理するアプリです。
* ユーザーはテストの名前、取得点数、そして最大得点が何点かを入力し、自動的に達成率が計算されます
* これまでのテスト履歴を一覧で確認し、達成率の推移を折れ線グラフで視覚的に把握することが可
Rails7.1以降でも ActiveStorage の has_many_attached を 編集時既存ファイルを残す(上書きしない)挙動にする方法まとめ
## 超要約
ActiveStorage の `has_many_attached` に関する下記設定(Rails7.1 で廃止)の代替は
“`ruby:config/application.rb
config.active_storage.replace_on_assign_to_many = false
“`下記のモデル拡張用モジュールを作成すれば(モジュール名は何でもよい)
“`ruby:app/lib/attach_many_extension.rb
module AttachManyExtension
module ClassMethods
def has_many_attached(arg)
superdelete_ids_attr = “delete_#{arg.to_s.singularize}_ids”
public_send(:attr_accessor, delete_ids_attr)define_method :del_attr_nm do delete_ids_attr end
GPT-4o同士で会話して会議を代行するプログラムを作る(プロト版)
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/3ec95047-ec6f-5f23-60e0-5de63c7d63f9.png)
# 趣旨
AI同士で会話する方法はいくつか世に紹介されているが、自分が求める機能とは異なる部分もあるため、理想とするプログラムを自分で作ってみることにした。# 目的
AIに会議を丸投げして楽したい。# 環境
– Windows 11
– Ruby 3.3.1
– ChatGPT API(モデルはGPT-4oを指定)# 基本的なアプローチ
会話する人のペルソナを作り、ペルソナを通じてChatGPTに質問します。ChatGPTからの回答をペルソナの発言(意見)として扱います。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/713d681c-fbb4-924d-d41a-191e41f23073.png)次に別のペルソナを作り、
Rails7系にviteを使ってVue3を入れてみた
## はじめに
Rails7系にはWebpackerが非推奨なのでいままでのようにインストールことができません。そのため備忘録としてRails7にviteを使ってVue3を入れる方法をまとめてみました。
https://github.com/eyamagishi/rails_vue_app
## 実行環境
– Ubuntu:22.04.4 LTS
– Ruby:3.1.2p20
– Rails:7.1.3.4
– Vue:3.4.27## Railsプロジェクトの新規作成
Railsプロジェクトを作成するために以下のコマンドを実行します。
“`bash
rails new rails_vue_app
cd rails_vue_app
“`サーバーを起動するため以下コマンドを実行します。
“`bash
rails s
“`以下の画面が表示されれば次へ進みます。
![スクリーンショット 2024-06-09 121152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29
Rails 7.2をちょこっと試す(query and cached ログ編)
# はじめに
rails 7.2beta2 がリリースされたので、ちょっと試してみました。
rails 7.2 では、Rails のログに、実行されたSQLの数が表示されるようになりました。
## ログの確認
Rails 7.1 では、以下のようなログが出力されます。
Rails 7.2 で変るのは、最後の `Completed` の行の `ActiveRecord: 2.2ms` の部分です。“`sh
Started GET “/books” for 172.25.0.1 at 2024-06-09 08:27:47 +0900
Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
ActiveRecord::SchemaMigration Load (0.1ms) SELECT “schema_migrations”.”version” FROM “schema_migrations” ORDER BY “schema_migrations”
Rails のアップデートで、 new_framework_defaults_x_x.rb をコメントインし忘れてないですか?
tldr; Railsのアップデートするとき、`config.load_defaults x.x` に対応した `new_framework_defaults_y_y.rb` に書かれた内容をコメントインして有効にしないと意味ないので注意。
# たとえば Rails 7.0 -> 7.1 にアップデートするとき
“`ruby:config/application.rb
config.load_defaults 7.0
“`して、7.1の新設定は `new_framework_defaults_7_1.rb` でひとつずつコメントインしていく、というのが[オフィシャルの手順](https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#configure-framework-defaults)だが、このコメントインしていく作業を忘れると、そのrailsは 7.0 のデフォルト設定で動いている。 7.1 の主にBREAKINGな設定は有効になっていない
これを忘れたまま 7.2 にアップデートしようとして `conf
【Rails】Sorcery使用によるGoogle認証の注意点
## はじめに
この記事では、Gem「“`sorcery“`」を使用したGoogle認証に関する注意点をまとめました。具体的な実装方法の解説は行わず、確認すべき重要なポイントについて触れています。Google認証を導入するなら「“`devise“`」の方が一般的でおすすめですが、既に「“`sorcery“`」を用いてログイン機能を実装している方のために書いています。私自身、sorceryでGoogle認証を実装する際に情報が少なく苦戦したため、同様に苦戦している方々の助けになれば幸いです。
## 環境
– ruby 3.2.3
– rails 7.1.3
– Docker前提条件としてsoceryによるログイン機能に加えて、Google認証導入までも一通りできている(エラー・不具合込み)とします。
## 確認すべきこと・詰まるポイント
sorceryを使用してGoogle認証を導入する際の確認事項と詰まりやすいポイントについて解説します。### 承認済みリダイレクトURI
まず、Google Cloudコンソールに登録した承認済みリダイレクトURIと、Ra
RubyでQwen2クイックスタート(pycall.rbを使用)
# はじめに
LLMを使ったプログラムを書いてみようと思って、手始めに[Qwen2のクイックスタート](https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html)をRubyでやってみました。pycall.rbを経由してHuggingface Transformersを使う手法なので他のモデルでも使用可能かと思います。# 前提
– RTX 3060
– Ubuntu 20.04 LTS
– Ruby 3.3.2
– Python 3.8.10# 実装
Quickstartのサンプルコードほぼそのままです。“`ruby:quickstart.rb
require ‘pycall’
device = ‘cuda’
path = “/path/to/models/Qwen_Qwen2-7B-Instruct”quantization_config =
PyCall.import_module(‘transformers’).BitsAndBytesConfig.new(
load_i
Rubyのshift, unshift, pop, push
# 概要
キューの操作とかで登場する`shift`、`unshift`、`pop`、`push`の内容を解説するよ!
# 結論
– `shift`、`unshift`が先頭系
– `pop`、`push`が末尾系# shift系統
とりあえず`shift系統は先頭系`は一旦丸覚えする!
その上で、
shiftは英語で動かすって意味があるから、Array.shiftだと配列から取り出す(=動かす)んだな
って覚える。
`unshift`はその逆で、配列に追加するんだな
と覚える。
# p系統
とりあえず、`p系統は末尾`と丸暗記する。
その上で、`push`は押し込む感があるから配列に追加して、
`pop`はその逆で、配列から取り出すんだな
って覚える!
Sprockets::Rails::Helper::AssetNotPrecompiledErrorの解決
# はじめに
railsアプリケーション作成中にJavaScriptを導入しようとした際に、以下のエラーに遭遇したので、メモとして解説します。# 問題
![スクリーンショット 2024-06-08 18.40.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673202/df1efaa1-dcd9-c68f-22a9-4dd3090f8517.png)Sprockets::Rails::Helper::AssetNotPrecompiledErrorというエラーが表示されました。
# 解決方法
エラーに書いてある通り、以下のコードをapp/assets/config/manifest.jsに追記“`javascript:app/assets/config/manifest.js
//= link image_preview.js
“`(image_preview)の部分にはそれぞれ読み込みたいjsのファイル名を記述します。
この追記後、サーバーを再起動したら、エラーが解決
rails modelとcontollerの作成コマンド
# はじめに
ポートフォリオ作成に入って、コマンドのルールなんだったけ?
と忘れていることが多々あったので、よく使用するコマンドをアウトプットのためにまとめています!
都度追加予定です。# model作成
基本中の基本model作成です
今回は「Plan」という投稿用モデルを作成していきます“`
$ rails g model Plan
“`
この g は、generateの略です。生成という意味です🌱modelの命名規則
英数字の単数形で指定し、先頭は大文字で記述するルールがあります
もし複数の単語を組み合わせる場合は、「PostPlan」などにしましょう#### モデル作成時にカラムを追加する方法
モデルを作成するときに一緒にカラムを追加できます!(migrateを忘れずに)
今回はRelationshipモデルを作成します
モデル名 カラム名:データ型↓
“`
$ rails g model Relationship follower_id:integer followed_id:integer
$ rails db:migrate
“`# contr