- 1. RailsのEnum型を使う
- 2. 【Ruby】変数と引数の違いについて
- 3. 【Ruby】URI.escapeが使えない
- 4. Rubyで自動販売機のプログラムを作成する
- 5. Rubyでゴルフのスコア名を出力するプログラムを作成する
- 6. Rubyでカレンダーを表示するプログラムを作成する
- 7. Rubyでランダムにグループ分けするプログラムを作成する
- 8. Gemがインストールできないの解決まで(Rubyのバージョンインストールとrbenvのバージョン管理)
- 9. 【Ruby】uniqは重複を除外するだけではないよ
- 10. Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 総括版
- 11. Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- パフォーマンス最適化、アクセシビリティ、多言語対応、アナリティクス (Part 5)
- 12. Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 回答機能、「いいね」機能、セキュリティ対策、コンテンツモデレーション (Part 4)
- 13. Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- ユーザー認証システムの実装 (Part 2)
- 14. Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 設計と基本実装 (Part 1)
- 15. 激あま!RenderでRubyアプリを無料で簡単にデプロイ
- 16. コマンドライン上で Ruby の String#gsub を使ってファイルの内容の置換を行う
- 17. ActiveRecord::Core の clone と dup の違い
- 18. 文字を区切り文字で分割して配列に入れる
- 19. 【Ruby】配列への追加(push・unshift)・削除(pop・shift)が覚えずらい
- 20. M2 MacbookのRuby環境構築について
RailsのEnum型を使う
## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。
## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。## Enum型を定義する
今回はAnimalというModelを作成し、k
【Ruby】変数と引数の違いについて
# はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でとらえてはいけないよということを本記事で紹介していきたいと思います環境:ruby 3.3.5
# 変数とは
中高生数学でやった変数とは全く別物ということをまず前提で聞いてください。特に独学で勉強している方は、反射的に変数と聞けば`x`や`y`を想像してしまうのではないでしょうか。
知っている単語は無意識的に知っている知識で補おうとするので、勘違いしていることに気づかなくなってしまいます。そういったバイアスがあることを認識してさっそく変数はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でと
【Ruby】URI.escapeが使えない
## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
コード
“`ruby
URI.escape(str)
“`エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。## 参考
Rubyで自動販売機のプログラムを作成する
## はじめに
[前回](https://qiita.com/at-sacai/private/eb933e1c8f73f28e6741)に引き続き、Ruby学習のアウトプットとして今回は自動販売機のプログラムを作成しました。上記の内容について、備忘のためにメモ書きを残しておくことにします。
## 仕様
Suicaのみで購入可能な自動販売機のプログラムとします。
### Suica
– デポジットとして500円がデフォルトでチャージされているものとする
– Suicaには100円以上の任意の金額をチャージできる
– 100円未満をチャージしようとした場合は例外を発生させる
– Suicaは現在のチャージ残高を取得できる### 自動販売機の在庫管理
– 自動販売機は飲み物を3種類(ペプシ、モンスター、いろはす)を格納できる
– 飲み物は名前と値段の情報をもつ
– 初期状態で、3種類の飲み物はそれぞれ5本格納されている
– 自動販売機は在庫を取得できる|名前 |価格 |
|:——|:—|
| ペプシ |150円|
| モンスター|230円|
| いろは
Rubyでゴルフのスコア名を出力するプログラムを作成する
## はじめに
[前回](https://qiita.com/at-sacai/private/aae5231711cea1e6e706)に引き続き、Ruby学習のアウトプットとして今回はゴルフのスコア名を出力するプログラムを作成しました。上記の内容について、備忘のためにメモ書きを残しておくことにします。
## アウトプットイメージ
以下のようなテキストファイル(1行目:規定打数、2行目:実際の打数)を入力値として、ゴルフのスコア名を出力します。
入力値のそれぞれの値の範囲は以下の通りです。
– `3 ≤ 規定打数 ≤ 5`
– `1 ≤ 実際の打数`※ ゴルフのルールやスコア名の説明は省略させていただきます。
“` plaintext:case_1.text
4,4,5,3,5,4,4,3,4,4,5,4,4,3,4,4,3,5
2,3,1,5,8,3,5,1,5,6,2,5,7,2,5,5,2,6
“`
出力の例
“`
イーグル,バーディ,コンドル,2ボギー,3ボギー,バーディ,ボギー,ホールインワン,ボギー,2ボギー,アルバトロス,ボギー,3ボギー,バーデ
Rubyでカレンダーを表示するプログラムを作成する
## はじめに
以前からRubyの学習を進めており、アウトプットとしてカレンダーを出力するプログラムを作成しました。今回は、プログラムの作成の過程についてまとめていきます。私のようなプログラミング学習初心者の一助となれば幸いです。
## アウトプットイメージ
アウトプットイメージは、以下の添付画像の通り
Macのターミナルで`cal`コマンドを実行した結果と同じものを作成します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290540/50d4faaa-5f4d-f2c7-455c-7600d460fc15.png)
追加要件として、以下も満たすことにします。
– 曜日は月曜日始まりにする(`cal`コマンドの実行結果は日曜日始まり)
– `ruby`コマンドでファイルを実行する際、`-m`オプションで月を指定できるようにする
– `-m`オプションで指定した月のカレンダーを出力する(今年)
– `-m`オプションの引数を指定しない場合、今月のカレンダーを表示
Rubyでランダムにグループ分けするプログラムを作成する
## はじめに
[前回](https://qiita.com/at-sacai/private/9d46b20adf89e10e7f81)に引き続き、Ruby学習のアウトプットとして今回はランダムにグループ分けをするプログラムを作成しました。上記の内容について、備忘のためにメモ書きを残しておくことにします。
## 仕様
– 前提
– A、B、C、D、E、Fという6人のグループがあった
– 定期的に、6人でLINEのグループ通話をしている
– 課題
– 6人でLINEのグループ通話は会話しづらい
– 要件
– 3人と3人、または2人と4人にランダムにグループ分けを行いたい
– 補足
– 本プログラムは実行するたびに、結果が変わるようにすること
– 表示結果はアルファベット順に並び替えること## アウトプットイメージ
アウトプットイメージは、以下の通りです。
“` plaintext
$ ruby random.rb
[“B”, “C”]
[“A”, “D”, “E”, “F”]
“`## 検討
まずは、プログラムの処
Gemがインストールできないの解決まで(Rubyのバージョンインストールとrbenvのバージョン管理)
# 経緯
MacでGemをインストールしようとしたところエラーや、作業が詰まったところがあったため、その解決までに至る経緯をメモ。# 目指すゴール
Faker((テストデータを取得するGem)をインストールし、挙動を確認したい。# 課題
### 1.バージョンが古かった
FakerというGemをインストールを試みたところ
「fakerはRubyバージョン>= 2.7が必要です。現在のRubyバージョンは2.6.10.210です。」
とエラーが表示された。“`
$ gem install faker
faker requires Ruby version >= 2.7. The current ruby version is 2.6.10.210.
“`### 2.rbenvで上手くバージョンが切り替わらなかった
rbenvで3.0.0をインストールしglobal設定したが、ruby -v で確認すると上手く設定できていない。“`
$ rbenv global 3.0.0
$ rbenv versions
system
*3.0.0
$ ruby -v
rub
【Ruby】uniqは重複を除外するだけではないよ
# はじめに
こんにちは。ProgateでRubyを勉強したのち、「ゼロからわかるRuby超入門」でさらに学習を進めています。
この本で uniq メソッドについて学んだ際、配列の中の重複要素を除外する機能が紹介されていましたが、実はそれ以外にも興味深い機能があることに気づきました。今回は、その意外な機能について共有します。Rubyを勉強し始めたばかりなので、Rubyに詳しい方にとっては当たり前のことかもしれませんが、この記事はRuby初心者向けということでお手柔らかにお願いします。
環境:Ruby 3.3.5
# uniqとは
`uniq` は配列から重複した要素を取り除いた新しい配列を返します。
“`ruby:uniq1.rb
[1,1,1].uniq
# [1]
[1,3,2,2,3].uniq
# [1,3,2]
“`
ほかにも`uniq!`といった重複の削除を破壊的に行うコマンドもありますが、本題ではないので触れないでおきます# uniqのもう一つの機能とは?
では以下のコードを見てどういう結果が出力されるか確認しましょう。
皆さんも一緒に考えてみて
Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 総括版
## はじめに
この連載では、Rubyのマイクロフレームワークであるsinatraを使用して、中高生向け悩み相談Webサービス「Ballon」を開発する過程を詳細に解説してきました。この総括版では、5つのパートの主要なポイントをまとめ、全体像を把握しやすくします。
## Part 1: アプリケーションの概要と基本設計
### 主要ポイント:
1. 技術スタックの選定理由(Ruby、Sinatra、ActiveRecord、SQLite3)
2. アプリケーションの基本構造とMVCパターンの適用
3. データベース設計の基本(users、worries、answers、likesテーブル)
4. Sinatraアプリケーションの基本設定(セッション管理、ヘルパーメソッドなど)### コードハイライト:
“`ruby:app.rb
require ‘bundler/setup’
Bundler.require
require ‘sinatra/reloader’ if development?
require ‘./models’enable :sessions
hel
Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- パフォーマンス最適化、アクセシビリティ、多言語対応、アナリティクス (Part 5)
## はじめに
これまでの4つのパートで、Sinatraを使用した中高生向け悩み相談Webサービス「Ballon」の基本的な機能実装から、セキュリティ対策、コンテンツモデレーションまで幅広く解説してきました。この最終回となるPart 5では、以下の内容について詳しく説明します:
1. パフォーマンス最適化
2. アクセシビリティ対応
3. 多言語対応
4. アナリティクスとレポーティングまた、Ballonの開発を通じて学んだ教訓や、中高生向けサービス開発における倫理的考慮事項についても議論します。
## 1. パフォーマンス最適化
Ballonのユーザー数が増加した場合でも、高速なレスポンスを維持するためのパフォーマンス最適化技術を実装します。
### データベースの最適化
1. インデックスの適切な使用
– 頻繁に検索や結合に使用されるカラムにインデックスを追加します。“`ruby:db/migrate/YYYYMMDDHHMMSS_add_indexes_for_performance.rb
class AddIndexesForPerf
Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 回答機能、「いいね」機能、セキュリティ対策、コンテンツモデレーション (Part 4)
## はじめに
前回のPart 3では、悩み投稿機能の実装とデータベース設計について詳しく解説しました。今回のPart 4では、以下の内容について説明します:
1. 回答機能の実装
2. 「いいね」機能の実装
3. 高度なセキュリティ対策
4. コンテンツモデレーションこれらの機能追加とベストプラクティスの適用により、Ballonの機能性、安全性、そしてユーザー体験を向上させます。
## 1. 回答機能の実装
まず、回答機能を実装します。ユーザーが悩みに対して回答を投稿できるようにします。
### データベース設計
回答のためのテーブルを作成します:
“`ruby:db/migrate/YYYYMMDDHHMMSS_create_answers.rb
class CreateAnswers < ActiveRecord::Migration[5.2] def change create_table :answers do |t| t.references :user, foreign_key: true t.references
Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- ユーザー認証システムの実装 (Part 2)
## はじめに
前回の Part 1 では、中高生向け悩み相談Webサービス「Ballon」の概要、技術選定の理由、基本的な設計について説明しました。今回の Part 2 では、ユーザー認証システムの実装に焦点を当てます。セキュアなパスワード管理、セッション管理、そしてユーザーのサインアップ、サインイン、サインアウトの実装方法を詳しく解説します。また、中高生向けサービスならではの配慮事項についても触れていきます。## ユーザーモデルの設計
まず、ユーザーモデルを設計します。`models.rb` ファイルに以下のコードを追加します:
“`ruby:models.rb
class User < ActiveRecord::Base has_secure_password validates :username, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9_]+\z/, message: "can only contain letters, numbers,
Sinatraで作る中高生向け悩み相談Webサービス「Ballon」- 設計と基本実装 (Part 1)
この記事は、Sinatraを使用した中高生向け悩み相談Webサービス「Ballon」の開発過程を詳細に解説するシリーズの第1部です。
– Part 1 (本編): アプリケーションの概要、技術選定の理由、基本設計
– Part 2: ユーザー認証システムの実装と詳細な解説
– Part 3: 悩み投稿機能の実装とデータベース設計の詳細
– Part 4: 回答機能と「いいね」機能の実装、セキュリティ対策
– Part 5: パフォーマンス最適化、テスト戦略、デプロイメント手法## はじめに
こんにちは!今回は、Rubyのマイクロフレームワークである**Sinatra**を使用して、中高生向けの悩み相談Webサービス「Ballon」を作成した過程を共有します。このWebサービスは、高校2年生の秋から3年生にかけて開発しました。
Ballonは、悩みの共有とコミュニティサポートを組み合わせることで、若者の精神的健康とピアサポートを促進することを目的としています。本記事では、アプリケーションの設計思想から基本的な実装まで、詳細に解説していきます。
## 技術スタックと選定理由
激あま!RenderでRubyアプリを無料で簡単にデプロイ
## デプロイ案内はサイトに記載されている
*参考サイトRuby with Render*
https://docs.render.com/deploy-rails
:::note warn
無料枠はアプリ1個までなので、複数持つことはできません。
:::## 著者のつまずいた箇所
1. master.keyファイルが作成されていなかった。
*参考サイトmaster.key作成*
https://qiita.com/naokit-dev/items/5e09b2fb4b64a29712e4サイト内を参考にして、使用した説明とそのコマンド
*②master.keyの中身がわからない場合
credentials.yml.encに機密情報を追記した覚えがない、運用するつもりもない、
または記述した内容が消えてしまっても再現可能な場合にこの方法を試してください**一旦credentials.yml.encを削除して、
master.keyもcredentials.yml.encもない状態をつくる*そして次のコマンドを入力
“`
sudo EDITOR=”vi”
コマンドライン上で Ruby の String#gsub を使ってファイルの内容の置換を行う
## やりたいこと
– コマンドライン上でファイルの内容を置換したい
– ワンライナーで行いたい
– 正規表現を使いたい## 方法
“`shell-session
$ cat ~/Downloads/yoyo.rb
class Yoyo
MATERIALS = {
:a6061 => ‘アルミ合金 (A6061)’,
:a7075 => ‘アルミ合金 (A7075)’
}.freeze
end$ ruby -i -e ‘gets(nil).gsub(%r{:(\w+) => (.+)$}) { “#{$1}: #{$2}” }.then { puts(_1) }’ ~/Downloads/yoyo.rb
$ cat ~/Downloads/yoyo.rb
class Yoyo
MATERIALS = {
a6061: ‘アルミ合金 (A6061)’,
a7075: ‘アルミ合金 (A7075)’
}.freeze
end
“`## 解説
### ruby コマンドのオプションについて
[Ruby の起動
ActiveRecord::Core の clone と dup の違い
## clone と dup の違い
– clone
– shallow コピー
– **id を保持する**
– **タイムスタンプやロックに関する属性を保持する**
– **属性はコピーしない**
– つまり、clone したオブジェクトの属性を変更すると、元のオブジェクトの属性も (同じオブジェクトなので) 変更されてしまう
– アソシエーションはコピーしない– dup
– shallow コピー
– **id は保持しない (新規レコード)**
– **タイムスタンプやロックに関する属性は保持しない**
– **属性をコピーする**
– アソシエーションはコピーしない“`rb
yoyo = Yoyo.find_by!(name: ‘モジョ’)
cloned_yoyo, duped_yoyo = yoyo.clone, yoyo.dup# duped_yoyo は新規レコード扱い。
[yoyo.id, cloned_yoyo.id, duped_yoyo.id]
#=> [1, 1, nil]
[yoyo.new
文字を区切り文字で分割して配列に入れる
文字を区切り文字で分割して配列に入れるソースコードは下記の実装です
“`Ruby
input_line = gets.chomp
array1 = input_line.split(‘ ‘)
A = array1[0].to_i
B = array1[1].to_i
puts A + B
“`
【Ruby】配列への追加(push・unshift)・削除(pop・shift)が覚えずらい
# はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
本書で配列への追加と削除コマンドを習ったのですが、覚えずら過ぎたので自分なりにまとめてみました。
同じ境遇の方の力になれば幸いです環境:ruby 3.3.5
# それぞれの概要
まずは追加・削除コマンドのそれぞれの概要について説明したのち、整理していこうと思います
### `push`
まず、`push`は配列の末尾に要素を追加します。
“`ruby:push.rb
drinks = [“カフェラテ”, “コーヒー”]
drinks.push(“紅茶”)
p drinks # => [“カフェラテ”, “コーヒー”, “紅茶”]
“`### `unshift`
`unshift`は、配列の先頭に要素を追加するメソッドです。
“`ruby:unshift.rb
drinks = [“カフェラテ”, “コーヒー”]
drinks.unshift(“紅茶”)
p drinks # => [“紅茶”, “カフェラテ”, “コーヒー”]
“`### `po
M2 MacbookのRuby環境構築について
## Ruby の環境構築について
PC を新調して Macbook M2 になったので改めてRubyの環境構築してみてみました。
私の環境構築が誰かに役立てればと思います。
ただ、プログラミングは初心者で環境構築に関しても知見が浅いため、間違っていれば指摘していただけると嬉しいです。### 前提
VScode はインストール済みです。
PC の概要は以下です。
・Apple M2
・Mac OS sonoma 14.6.1(23G93)## ▼ Command Line Tools をインストール
Command Line Tools は Web アプリケーション開発に必要なソフトウェアをダウンロードするために必要な機能みたいです。
以下のコマンドでインストールできます。“`
% xcode-select –install
“`## ▼ Homebrewを用意しよう!
Homebrew は、ソフトウェア管理ツールです。
M2 の場合以下のコマンドでインストールできました。
“`
% /bin/bash -c “$(curl -fsSL https://