- 1. ABC367 A~DをRubyで解く
- 2. RubyのREPLとデバッグ:初心者から見たツールの進化と効率化
- 3. Rubyプログラミング考え方{その4:3行のデータの入力 (paizaランク D 相当)}
- 4. インスタンスやクラスにどういうメソッドがあるか調べる方法
- 5. 環境変数の導入方法
- 6. Rubyプログラミング考え方{その3:1行のデータの入力 (paizaランク D 相当)}
- 7. Rubyプログラミング考え方{その2:1つのデータの入力 (paizaランク D 相当)}
- 8. Rubyプログラミング考え方{その1:自己紹介 (paizaランク D 相当)}
- 9. BunとHotwire Turboのセットアップ | Railsアプリケーションの構築方法
- 10. はじめてのRuby On Railsチュートリアル
- 11. Sonic Piを触ってみた
- 12. 【自分用メモ】Hacker NewsからRubyに関するニュースだけを取得するスクリプト
- 13. オリジナルアプリの説明
- 14. RailsプロジェクトにおけるBunを使用したJS/CSSビルドのメリットと実装方法
- 15. RailsアプリケーションでAWS Parameter Storeを使用する方法
- 16. paiza「みんなでしりとり」をRubyで解いてみた
- 17. RailsのThreadの中でアクティブレコードのデータがとれない
- 18. プレビュー機能の実装
- 19. Ruby on Rails 7.2の主要な新機能・機能追加・変更点
- 20. CodeMirror6を用いたHTMLエディターの導入
ABC367 A~DをRubyで解く
# 概要
Rubyの練習のために実装例を書いてみます:::note warn
問題の解説を目的とした記事ではありません
:::# A – Shout Everyday
– 問題: https://atcoder.jp/contests/abc367/tasks/abc367_a
– 提出: https://atcoder.jp/contests/abc367/submissions/56856137時刻としてありうるのは高々24通りなので、起きている時間をすべて試して問題ないです
“`ruby
# 入力を受け取る
A, B, C = gets.split.map(&:to_i)# 起きている時間についてループ
t = C
while t != B do
# 時刻Aで起きていたらYesを出力して終了
if t == A then
print “Yes”
exit
endt = (t + 1) % 24
end# Noを出力
print “No”
“`# B – Cut .0
– 問題: https://atcoder.j
RubyのREPLとデバッグ:初心者から見たツールの進化と効率化
> Rubyの初心者として、最近私はRubyのREPL(Read-Eval-Print Loop)ツールとデバッグ機能について深く探求しました。この過程は、Rubyへの理解を深めただけでなく、ツールの進化と開発効率の関係について考えさせられる機会となりました。
### RubyのREPLツール:IRBからPryへ
Ruby公式が提供するIRB(Interactive Ruby)は強力なREPLツールですが、コミュニティ主導の需要により、Pryのようなさらに高機能なツールが生まれました。Pryはコード探索、コンテキストナビゲーション、リアルタイム編集など、より高度な機能を提供しています。例えば、Pryを使用すると、クラスやメソッドの定義を簡単に確認できます:
“`ruby
[3] pry(main)> show-source Array#mapFrom: array.c (C Method):
Owner: Array
Visibility: public
Number of lines: 17static VALUE
rb_ary_map(VALUE ary)
{
Rubyプログラミング考え方{その4:3行のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_3_line
**ステップ1: 要件の分析**
– 標準入力で3行の文字列が与えられます。それぞれの文字列をそのまま3行で出力するプログラムを作成します。
– 各行の文字列は1文字以上100文字以下で、英小文字、大文字、数字、または半角スペースを含むことができます。**ステップ2: 擬似コードの設計**
1. 標準入力から3行の文字列を順番に取得します。
2. 取得した各文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 1行目の文字列を取得
a = gets.chomp
# 2行目の文字列を取得
b = gets.chomp
# 3行目の文字列を取得
c = gets.chomp# 1行目の文字列を出力
puts a
# 2行目の文字列を出力
puts b
# 3行目の文字列を出力
puts c
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、各行の入力を取得し、末尾の改行
インスタンスやクラスにどういうメソッドがあるか調べる方法
# はじめに
実務でrubyを書いているのですが、インスタンスやクラスにどういうメソッドがあるか調べる方法を調べてみました。
環境
“`
❯ ruby -v
ruby 3.2.0
“`# クラスにメソッドが定義されているか調べる
クラスオブジェクトに対してinstance_methodsメソッドを使うと調べられます。
さらにgrepを使って絞り込みました。instance_methodsメソッドの戻り値はarrayなのでgrepメソッドが使えます
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/grep.html“`rb
irb(main):017> Range.instance_methods.grep(/each/)
=>
[:each,
:each_cons,
:each_with_object,
:each_with_index,
:reverse_each,
:each_entry,
:each_slice]
“`## 用途
対象ク
環境変数の導入方法
# はじめに
現在友人依頼のアプリケーション作成中です
環境変数の導入方法毎度忘れてしまうので、メモしておきます!# 環境変数とは
OSが持つ変数のことです
APIの秘密鍵などGitHubにあげたくない情報を、情報漏洩を防ぐために利用されます
環境変数を管理することができるgem「dotenv-rails」を使用していきたいと思います# dotenv-railsを導入
Gemfileに追記する“`Gemfile.
:
gem ‘dotenv-rails’
“`
bundle installを実行し、envファイルを作成“`
$ bundle install
$ touch .env
“`# 環境変数の設定方法
設定したい環境変数をenvファイルに入力します
“`.env
ADMIN_EMAIL=”任意のemailを入力”
ADMIN_PASSWORD=”任意のパスワードを入力”
“`今回はseedファイルで環境変数を呼び出します
“`seeds.rb
# Admin データの作成
Admin.find_or_create_by!(em
Rubyプログラミング考え方{その3:1行のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_1_line
**ステップ1: 要件の分析**
– 標準入力で1行の文字列が与えられ、それをそのまま出力するプログラムを作成します。
– 入力文字列は1文字以上100文字以下で、英小文字、大文字、数字、または半角スペースを含むことができます。**ステップ2: 擬似コードの設計**
1. 標準入力から1行の文字列を取得します。
2. 取得した文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得します
s = gets.chomp# 取得した文字列をそのまま出力します
puts s
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、標準入力から文字列を取得し、末尾の改行を削除します。
– **出力:** `puts`を使用して、取得した文字列をそのまま出力します。このコードをRuby環境で実行すると、入力された文字列がそのまま1行で出力されます。
Rubyプログラミング考え方{その2:1つのデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_1
**ステップ1: 要件の分析**
– 標準入力で与えられた1つの文字列を、そのまま1行で出力するプログラムを作成します。
– 入力文字列は、英小文字、大文字、数字からなる1文字以上100文字以下の文字列です。**ステップ2: 擬似コードの設計**
1. 標準入力から文字列を取得します。
2. 取得した文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得します
s = gets.chomp# 取得した文字列をそのまま出力します
puts s
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、標準入力から文字列を取得し、末尾の改行を取り除きます。
– **出力:** `puts`を使って、取得した文字列をそのまま出力します。このコードをRuby環境で実行すると、入力された文字列がそのまま1行で出力されます。
Rubyプログラミング考え方{その1:自己紹介 (paizaランク D 相当)}
https://paiza.jp/works/mondai/self_introduction/self_introduction__1
**ステップ1: 要件の分析**
自己紹介を行うRubyプログラムを作成します。このプログラムは次の3行を出力する必要があります。
1. あなたの名前
2. あなたが学びたいプログラミング言語
3. 意気込みや目標を示すメッセージ**ステップ2: 擬似コードの設計**
1. `name`、`language`、`hitokoto`という変数を定義します。
2. それぞれの変数に適切な値を代入します。
3. 指定されたフォーマットで出力を行います:
– 1行目: “name: 名前”
– 2行目: “language: 言語”
– 3行目: “hitokoto: 一言”**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 変数に適切な値を設定します
name = “Cody” # ここにあなたのニックネームを入力してください
language = “Ruby” # ここに学びたいプログラミング言語
BunとHotwire Turboのセットアップ | Railsアプリケーションの構築方法
## 背景
今回のプロジェクトでは、Bun を使用してJavaScriptのビルドと管理を行っているため、Railsのデフォルト設定である Turbo の自動セットアップが行われませんでした。そのため、Hotwire の主要な機能である Turbo と Stimulus をBun環境に合わせて手動でセットアップする必要がありました。## turboとは
Turboは、ページの切り替えや部分的なページ更新を速く行えるツールで、Stimulusはボタンのクリックや入力など、動的なユーザーインターフェースを簡単に作るための軽量なフレームワークです。これらのツールを手動で設定することで、Bunの高速な処理能力とRailsの効率的な開発環境をうまく組み合わせ、よりスムーズで快適なウェブアプリケーションを構築することが可能になります。## 実装手順
では早速実装の手順を説明していきます。[前提条件]
・Bun がインストールされていること。
※Bunの設定では[RailsプロジェクトにおけるBunを使用したJS/CSSビルドのメリットと実装方法](https://qiita.com/s
はじめてのRuby On Railsチュートリアル
## Ruby on Railsマスターへの道:30章で学ぶWeb開発の全て
こんにちは、Railsエンジニアの皆さん!今回は、Ruby on Railsの基礎から応用まで、30章に渡って詳しく解説していきます。
各章にはサンプルコードも含まれていますので、ぜひ手を動かしながら学んでいきましょう。
## 第1章: Railsのインストールと初めてのアプリケーション
まずはRailsをインストールし、最初のアプリケーションを作成します。
“`ruby
# Railsのインストール
gem install rails# 新しいアプリケーションの作成
rails new my_first_app
cd my_first_app# サーバーの起動
rails server
“`## 第2章: モデルの作成
データベースとの連携を行うモデルを作成します。
“`ruby
rails generate model User name:string email:string
rails db:migrate
“`## 第3章: コントローラーの実装
ユーザーから
Sonic Piを触ってみた
## 概要
Live Coding Musicを行うためのアプリである[Sonic Pi][4]を試してみた。
## インストール
以下のコマンドでインストールすると、開発環境も同時にインストールされる。
※ Mac以外は[公式HP][4]からダウンロードできる。“`sh
brew install sonic-pi
“`## 文法など
– Rubyベースなので、Rubyの関数は基本的に扱える
– Sonic Pi独自の関数もいくつか存在する
– 音量や速度に関してはSonic Pi側の関数やその引数で指定する### defとdefine
`def`は通常のRubyの関数定義に利用する。
`define`はSonic Pi独自の関数定義キーワードで、ライブ中に動的に変更することが可能。
基本的には `define` の利用を推奨。### 速度
`rate`を指定する
“`ruby
# 2倍速で再生
sample :drum_heavy_kick, rate: 2
# 逆再生
sample :drum_heavy_kick, rate: -1
【自分用メモ】Hacker NewsからRubyに関するニュースだけを取得するスクリプト
## はじめに
Hacker Newsというサイトにときどき目を通しています。
https://news.ycombinator.com/
閲覧するときはいつも、`Ruby`や`Ruby on Rails`といった単語で検索しているのですが、いちいち面倒です。
そこでAPIを用いて簡単に取得できるスクリプトをRubyで書きました。
## Hacker Newsから特定の単語で検索するスクリプト
下記が実際のスクリプトです。
過去24時間に投稿された、`Ruby`という単語を含むニュースを取得しています。
“`ruby:sample.rb
require ‘net/http’
require ‘json’
require ‘uri’
require ‘time’# Hacker News APIのURLを作成
def search_hacker_news(query)
# クエリに前後のダブルクオートを追加して完全一致を狙う
exact_query = “\”#{query}\””# 実行時点から過去24時間のタイムスタンプを計算
curr
オリジナルアプリの説明
こんにちは。看護師→プログラミング初学者の我那覇です。
今更になりますが現在どのようなアプリを作ろうとしているかを皆さんに共有しようと思います。## Wantsの説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763893/7d15a7f4-0404-50bd-914e-f988abf83667.png)### 1. (ざっくりと)何ができるのか
“Wants”は、ユーザーが希望する商品をリクエストし、それに応じて出品者が商品を出品できるウェブアプリケーションです。リクエストには詳細や希望条件を含めることができ、他のユーザーと情報を共有可能です。
### 2. 誰のどんな課題を解決するのか
このアプリは、特定の商品が見つからない、または市場に存在しないという課題を解決します。ユーザーは、ニーズを投稿することで他のユーザーやメーカーに伝えられ、転売対策にもなります。
![image.png](https://qiita-image-store.s3.ap-northe
RailsプロジェクトにおけるBunを使用したJS/CSSビルドのメリットと実装方法
## 背景
今回、個人開発の小規模アプリにおいて、軽量かつシンプルなビルドツールを求めていました。これまでWebpackerやesbuildを使ってきましたが、設定が複雑でビルド時間が長いことが課題でした。Bunを選んだ理由は、非常に高速で、設定が簡単な点に加え、JSとCSSのビルドが一貫してシンプルに管理できるからです。Bunを使ったビルドプロセスの実装手順について詳しく説明します。## Bunの速度比較
中規模のプロジェクト(約1000行のJSと500行のSassコード)をビルドする場合、Webpackerは約8〜10秒、esbuildは1〜2秒でビルドを完了します。一方、Bunはその中でも最速で、同じビルドタスクをわずか0.5〜1秒未満で処理できます。Bunの高いパフォーマンスは、ランタイムとビルド機能の統合による効率の高さにあります。※詳細は調べると検証した記事があるため、それを参照してください!
## 実装手順
### 手順 1
まず、Homebrewを使ってBunをインストールします。
“`
brew install bun
#bun -v でバージョン確認
RailsアプリケーションでAWS Parameter Storeを使用する方法
AWS Parameter Storeは、アプリケーションの設定値や機密情報を安全に管理するための便利なサービスです。
この記事では、Railsアプリケーションのproduction環境設定でAWS Parameter Storeの値を使用する方法について説明します。**前提条件**
– AWSアカウントがあること
– AWS CLIが設定されていること or EC2などに適切なロールが割り当てられていること
– Railsプロジェクトがあること# 1. AWS SDKのセットアップ
まず、AWS SDKをプロジェクトに追加します。Gemfileに以下を追加し、bundle installを実行します。
“`ruby
gem ‘aws-sdk-ssm’
“`# 2. パラメータ取得用のヘルパーメソッド
次に、AWS Parameter Storeから値を取得するためのヘルパーメソッドを作成します。config/application.rbに以下のコードを追加します。
“`ruby
require ‘aws-sdk-ssm’module ParameterStore
paiza「みんなでしりとり」をRubyで解いてみた
# 問題
あなたは友達たちと N 人でしりとりを行うことにしました。
1 人目、 2 人目、…、 N 人目、 1 人目、2 人目、… という順序で発言をします。ここで、それぞれの人は、次に挙げる 4 つのしりとりのルールを守って発言をする必要があります。1. 発言は、単語リストにある K 個の単語のうちのいずれかの単語でなければならない。
2. 最初の人以外の発言の頭文字は、直前の人の発言の最後の文字と一緒でなければならない。
3. 今までに発言された単語を発言してはならない。
4. z で終わる単語を発言してはならない。ここで、発言の途中で上のルールを破った場合、ルールを破った人はしりとりから外れます。
そして、その人を抜いて引き続きしりとりを続けていきます。このとき、後続の人は、ルール 2 を守る必要はありません。N 人がしりとりを行ったログが M 行分与えられます。
このとき、M 回の発言が終わった後、しりとりから脱落せずに残っている人のリストを表示するプログラムを書いてください。https://paiza.jp/works/mondai/b_rank_
RailsのThreadの中でアクティブレコードのデータがとれない
# はじめに
Railsで並列処理をしたところ困ったことがあったのでまとめておきます
# 問題
以下のようにスレッドでfetch_dataをするような処理を書きました
“`rb
def self.where(ids:)
threads = []
results = []
mutex = Mutex.newids.each do |id|
threads << Thread.new do result = fetch_data(id) mutex.synchronize do results << result end end end threads.each(&:join) results end private_class_method def self.fetch_data(id) api_response = SomeAPI.get(id) record = SmapleActiveRecord.find(id) # ActiveRecordから取得
プレビュー機能の実装
# プレビュー機能実装
## 概要
新規投稿、投稿編集時に選択した画像がプレビューとして表示される機能## preview.js作成
プレンビュー機能実装のため、app/javascriptの直下にファイル名 “preview.js” を作成する。## importmapの編集
configフォルダにあるimportmap.rbへ下記を追記する。
pin “preview”, to: “preview.js”## application.jsの編集
app/javascript/application.jsへ下記を追記する。
import “preview”## プレビュー機能の実装
取得した画像をブラウザへ表示するためにjavascript側で生成する。// 画像を表示するためのdiv要素を生成
const previewWrapper = document.createElement(‘div’);
previewWrapper.setAttribute(‘class’, ‘preview’);// 表示する画像を生成
Ruby on Rails 7.2の主要な新機能・機能追加・変更点
## はじめに
Rubyを使用したOSSのWebアプリケーションフレームワーク、Ruby on Rails(以下Rails)の最新バージョンである7.2(以下Rails 7.2)が[2024年8月10日にリリースされました](https://rubyonrails.org/2024/8/10/Rails-7-2-0-has-been-released)。
Rails 7.2は、開発用のDockerコンテナの設定の生成、YJITのデフォルト化、RuboCop / Brackeman / GitHub CIの設定の生成など、主に、プロジェクトを開発、運用するに当たって必要な設定をあらかじめフレームワーク側で用意したリリースとなっています。
本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://guides.rubyonrails.org/v7.2/)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Re
CodeMirror6を用いたHTMLエディターの導入
## 概要
Ruby on Railsをベースとしたアプリ制作時に、Codemirror6の導入で苦戦したため、導入方法をまとめました。Codemirror6は公式マニュアルに`Getting Started`のセクションが無く、どこを見たらいいのか分からないので、初心者にはかなりとっつきにくい文献という印象でした。
結論として、以下の`Bundling Example`のセクションを見ながら進める事でEditor構築することが出来たので、こちらの流れに沿って説明します。
https://codemirror.net/examples/bundle/
また、今回の説明ではRuby on Railsを使用していますが、Codemirrorの実装は基本Javascriptしか触ってないので、本記事を読むために必要知識はJavascript(+ Node.js)となります。
## エディターの導入
### 1. CodeMirror&HTMLパッケージのインストール
公式文書ではJavascript用エディターを導入していますが、今回私はHTML用エディターを実装したいので、H