- 1. 【Ruby on Rails】RSpecの導入方法
- 2. TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞を獲得されたプログラム(Quine)を動かしてみました ーー 高校生向けプログラミング講座「福岡県Rubyキャンプ」にて
- 3. Tips: 保守性を高めるため、クラス内でインスタンス変数を使うときに意識していること
- 4. Railsのアクション内で実行される「redirect_to」にて、クエリストリングを渡す方法
- 5. [m1 mac]rbenvでRubyをインストールするとBUILD FAILEDが出た際の解決方法
- 6. Rubyで設定ファイル読み込み
- 7. Rubyの総和を求めるinject(:+)は罠があるからsumにして空のケースもテストしよう
- 8. Docker×Ruby on Rails環境でデバックを行う
- 9. 有用なことは一つも書いていない記事2
- 10. Ruby 麻雀 配牌のシャンテン数をカウントしたい②
- 11. AWS EC2で立ち上げたRails(unicorn)サーバーのログ確認方法
- 12. Dockerを使ってRuby on Railsの環境構築をしてみた
- 13. sliceメソッドの使用方法
- 14. 配列と文字列の変換
- 15. ハッシュから任意のキーのバリュー(値)を取得する方法
- 16. Redmine 2.5からRedmine 4.2へアップグレードする
- 17. Rubyのクラスのアクセサについて
- 18. Rubyのクラスのメソッドの種類について
- 19. Railsで検索機能実装
- 20. 【Ruby】変数が定義されているかを確認
【Ruby on Rails】RSpecの導入方法
# RSpecの導入方法
### Gemfileに追記
GemfileにRspec, Factorybot, Fakerを追加するための記述を追記。
この時、:test do ~ endの間に追記することに注意。“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
#ここに以下3行を書き足す
gem ‘rspec-rails’, ‘~> 4.0.0’
gem ‘factory_bot_rails’
gem ‘faker’
end
“`### ターミナル実行
ターミナルで以下を実行。
“`terminal:ターミナル
bundle install
rails g rspec:install
“`以下の実行結果が表示される。
specフォ
TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞を獲得されたプログラム(Quine)を動かしてみました ーー 高校生向けプログラミング講座「福岡県Rubyキャンプ」にて
# はじめに
TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞を獲得されたプログラム(Quine)を動かしてみます。
動かしてみたきっかけとなったのは、福岡県Ruby・コンテンツビジネス振興会議さんと福岡県さんが主催された「[高校生向けプログラミング講座「福岡県Rubyキャンプ」](https://www.pref.fukuoka.lg.jp/press-release/ruby-camp2022.html)」にて、コーチとして参加したことです。詳しくは後述します。
先月、TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞をとってきたプログラム(Quine)です。
全てのフレームが、魚達がその場所から泳ぎを再開する実行可能なRubyのコードになっています。
魚・水草・泡でコードの一部が欠落していますが、誤り訂正により復元しています。 Tips: 保守性を高めるため、クラス内でインスタンス変数を使うときに意識していること## この記事は何
僕はクラス内でインスタンス変数を使うとき、保守性の高いコードを書くうえでいくつか意識をしていることがあります。
意識していることの紹介と、なぜそれを意識しているのかを紹介します。## 基本方針
まず初めに、意識していることを紹介する前に、クラスをどのような考えで作っているかを紹介します。
僕はクラスを以下のような考えで実装しています。
もちろんどれも例外はあるので、「できるだけそのようになる」ということを意識しているというつもりで読んでいただけると嬉しいです。– イミュータブルである
– メソッドの返り値はコンストラクタで受け取った値だけで決まる
– クラス内部の実装が変更に対して閉じているOpen-Closedの原則と、参照透過性が高く、安全に使いやすいクラスを作ることを意識しているため、上記のような部分を意識しています。
今回は、上記のような実装を実現するため、特にインスタンス変数を使うときに意識していることを紹介ます。
## 1. インスタンス変数は初期化を行なった後には値を変更しない
インスタンス変数は基本的に一度値を入れたら変更をしないようRailsのアクション内で実行される「redirect_to」にて、クエリストリングを渡す方法
## バージョン
– Rails 6.1.7
– ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]## 状況
controller内の処理にて、リダイレクトするときにクエリストリングが渡したい。
“`ruby
class SessionController < ApplicationController def create # ... 処理 redirect_to xxx_url # ここでクエリパラメータを渡したい end end ``` ## 結論 上記のように`xxx_url`を使った場合、キーワード引数として値を渡してもうまく反映されない。 ```ruby class SessionController < ApplicationController def create # ... 処理 redirect_to xxx_url, hogehoge: "fugafuga" # もちろんこんな形でも無理 # redirec
[m1 mac]rbenvでRubyをインストールするとBUILD FAILEDが出た際の解決方法
# はじめに
rbenvで他のバージョンをインストールした時に、はまったので共有しようと思います。# 経緯
rubyのバージョンを2.5.3で合わせる必要があり、rbenvでインストールすると下記のエラーが発生しました。“`
rbenv install 2.5.3Downloading ruby-2.5.3.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.bz2
Installing ruby-2.5.3…WARNING: ruby-2.5.3 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.ruby-build: using readline from homebrew
BUILD FAILED (macOS 12.5.1 using ruby-build 20220910.1)
“`# なぜ
Rubyで設定ファイル読み込み
# はじめに
Rubyで設定ファイルの読み込み方法を調べたので、そのメモ書きになります。
Docker上でのRailsサーバーを使用しています。# 設定ファイル用意
今回はtest.confファイルを以下内容で用意します。
“`
[api]
key = ABC
“`# Gemfile
Gemfileに以下を追加します。
“`
group :development do
gem ‘inifile’ ★追加
“`# イメージの再構築
“`
docker-compose build –no-cache
“`# ソース
“`
require “inifile” ★追記class Search < ApplicationRecord def self.searchApi() ini = IniFile.load("setting.conf") ★追記 searcher.key = ini["api"]["key"] ★追記 ``` # 起動 ``` docker-compose up -d ``` 以上で、設定ファイルが読み込めるよ
Rubyの総和を求めるinject(:+)は罠があるからsumにして空のケースもテストしよう
### 最初に
コミット権限をもらったRubyライブラリが古く、
`sum`のない時代に書かれたライブラリで`inject(:+)`で総和が求められていました。“`ruby
a = [1, 2, 3]
p a.inject(:+) # => 6
“`このように数値の要素があれば、総和を求めることができます。
このケースでは整数なので、`Integer#+`が使われます。ちなみに、`reduce`と`inject`はエイリアスです。
### 問題点
しかし、空の配列で`inject(:+)`を使うと、`0`ではなく`nil`を返してきます。
“`ruby
a = []
p a.inject(:+) # => nil
“``inject`は総和を求めるのに限られたメソッドではないので、「要素に何もないから数値の総和を求めたいのだろう」と勝手に決めつけたりせず、`:+`を使うことなく淡々と`nil`を返してきます。
この挙動を知らずに書かれているコードであったため、そのライブラリはバグっていました。
### 解決策
空の配列に対する総和を`0`にしたけれ
Docker×Ruby on Rails環境でデバックを行う
# はじめに
Dockerを使ってRuby on Railsの環境構築をした際に、デバックの仕方に困ったので、そのメモ書きになります。
今回はpry-railsを使ってのデバックです。# Gemfile
Gemfileに以下を追記します
“`
group :development, :test do
gem ‘pry-rails’ ★追加
end
“`
pry-railsがインストールされるようにします。# docker-compose.yml
Gemfileに以下を追記します
“`
app:
tty: true ★追加
stdin_open: true ★追加
“`
これはdocker runコマンドの -it オプションと同じで、
dockerでの操作結果等がコンソールに出力されるようにする設定です。# binding.pryの記述
デバックしたいRubyのソースに下記を追記してください。
“`
binding.pry
“`# Dockerイメージを再構築
これまでの変更があるので、イメージを再構築します。
“`
docker-compo
有用なことは一つも書いていない記事2
# 自分用(rubyのこと)
標準入力
数値で受け取りたい場合 → gets.to_i
文字列 → gets配列
配列→配列
連想配列→ハッシュ {“状態” => “眠い”, “機嫌”=> “悪い”}# 感想
唐突にまとめてみた
急に仕事でrubyonrailsをさわることになり、急いでrubyを勉強中(railsもしないとけない)
もともと開発関係は未経験で、Pythonを初心者に毛の生えた程度の独学していた人間に急に全く触れたことない
言語を触ることになったので吐きそうpaizaでとりあえず講義動画を見ず、演習問題を爆速で進めてます
ハッシュが許せん。なんだよハッシュて。「=>」の文字がじみにうつのがめんどくさいのでげせぬ標準入力も文字列と数値の場合で変わるのがげせぬ
統一してほしい~(あとで、数値に変換しなくていいのが楽だけど)お優しいかたで、いい教材がありましたらコメントでいただきたい
Ruby 麻雀 配牌のシャンテン数をカウントしたい②
まだ完成までは到達していませんが、まず一部の目処が立ったので、アウトプットとなります。
その点はご了承ください。# 今回の進捗
前回作成した配牌の種類カウンターを用いて、面子の判定を行うコードを作成しました。
もう少し上手い書き方はいくらでもあるかと思いますが、なかなかRubyでコード公開している人いないので、誰か拾い上げてもらえればといった希望も持ってます・・・# コード紹介
“`Ruby
j = 0
while j < 9 do if j <= 6 if mcntr[j] == 2 && (mcntr[j+1] <= 1 && mcntr[j+2] <= 1) jantocnt += 1 mcntr[j] -= 2 end if pcntr[j] == 2 && (pcntr[j+1] <= 1 && pcntr[j+2] <= 1) jantocnt += 1 pcntr[j] -= 2 end
AWS EC2で立ち上げたRails(unicorn)サーバーのログ確認方法
## 前提条件
RailsアプリをEC2(unicorn)にデプロイして、サーバー起動済みの場合のログ確認方法## 結論
該当アプリのlogディレクトリで以下のコマンドを実行すればOK
“`terminal:terminal(EC2インスタンス内)
$ tail -f production.log
“`## 詳細
デプロイしたリポジトリで以下のコマンドを実行してください!
“`terminal:terminal(EC2インスタンス内)
$ ls
Gemfile Gemfile.lock README.md Rakefile app bin config config.ru csv db lib log public spec storage tmp vendor$ cd log
$ ls
production.log unicorn.stderr.log unicorn.stdout.log$ tail -f production.log
以下にサーバーのログが流れてくる
“`## tailコマンドについて
ファイルの
Dockerを使ってRuby on Railsの環境構築をしてみた
# はじめに
DockerもRuby on Railsもどちらも扱ったことがなかったので、
まとめて学習できれば良いなと思ったのがきっかけです。
今回は簡単な画面表示までをやっていきます。
※Windows環境です# 必要なファイルの用意
docker-sampleというディレクトリを作成し、この中で作業していきます。
まず、以下4つの空ファイルをディレクトリ直下に作成します。
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh““
docker-sample/
├─ Dockerfile
├─ docker-compose.yml
├─ Gemfile
├─ Gemfile.lock
└─ entrypoint.shDockerfile
““
各ファイルの中身はこの後設定していきます。# Dockerfileの設定
DockerfileとはDockerイメージを作成するための設計書のようなものです。
今回は以下の内容で作成します。““
FROM ru
sliceメソッドの使用方法
# sliceメソッドとは
sliceメソッドとは、配列や文字列から指定した要素を取り出すことができるメソッドです。# 配列を作成します
array = [0,1,2,3,4,5,6]# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]
配列と文字列の変換
# 配列から文字列へ変換
“`rb
irb(main):017:0> [“1”, “2”, “3”, “4”].join(“,”)
=> “1,2,3,4”
“`
### 出典
https://docs.ruby-lang.org/ja/latest/method/Array/i/join.html# 文字列から配列へ変換
“`rb
irb(main):018:0> “1,2,3,4”.split(“,”)
=> [“1”, “2”, “3”, “4”]
“`
### 出典
https://docs.ruby-lang.org/ja/latest/method/String/i/split.htmlhttps://qiita.com/beanzou/items/a9253ee083aeac9fc608
# 感想
基本だけど忘れていた。
使い所が出てきてよかった。
ハッシュから任意のキーのバリュー(値)を取得する方法
# はじめに
ハッシュから値を取得する方法について、曖昧に覚えていた部分があったので整理のためまとめます。
間違った解釈をしていたらご指摘ください。## ハッシュの取り出し方
例えば以下のようなハッシュが存在するとするuser = {name: タロウ, age: 15, height}
userというハッシュ名から任意のキーのバリュー(値)を取り出すためには、
puts user[:name]
⇨”タロウ”ここで少し落とし穴がある。
railsで開発を続けていると、ついついテーブルの値を取得する延長線上でputs user.name
で値を取り出したくなるが、これでは「nameの変数が未定義ですよ」とエラーが出ます。
これはなぜ起きるのか・・・
ズバリ原因は、ゲッターセッターが定義できているかと、ActiveRecord::Baseの存在のせいです。## ゲッター、セッターとは
以下の記事を参考にしました。https://qiita.com/k-penguin-sato/items/5b75be386be4c55e3ab
Redmine 2.5からRedmine 4.2へアップグレードする
社内からの要望でRedmineをアップグレードすることになりました。
使っていたのはRedmine 2.5。これを新しいものにアップグレードします。
# どうやってすればいいのか
Redmineのインストールには若干苦手意識があったのですが、調べてみるとRedmine 1からRedemine 4にアップグレードをしている人がいました。
【1.3.0 → 4.1.0.stable】Bitnami Redmineのサーバー移行&バージョンアップデート!【引っ越し】
言われてみればそうだなと思ったのですが、Railsで組まれているのでマイグレーションしていけば最新版になるはずです。
正直アップグレード方法はこれでOKですので、この通り進めます。
ということで、これをもとにRedemine 4とRedmine 5の試用環境を作って、どちらが良いかを社内の人に決めてもらうことにしました。
試用環境はアップグレード手順の検証にも使えるので添付ファイル以外は移行して操作感を比べてもらうことにしました。# 構成
最終的にRedmine 4.2に移行することにしました。
理由はいくつかありますが、大きくは以下の3つです。– Re
Rubyのクラスのアクセサについて
Rubyのクラスについて、インスタンス変数の参照・代入とそれを可能にするattr_accessorをまとめます。
クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。
インスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドについては[こちらの記事](https://qiita.com/bellmmm/items/c06acf71aeed07b3cd7f)をご確認ください。# インスタンス変数に対する読み取りと書き込み
## インスタンス変数は直接参照・代入できない
インスタンス変数は、クラスの中では参照(値を取り出す)・代入が可能ですが、クラスの外からは直接参照・代入はできません。
例) インスタンス変数を直接参照・代入するとエ
Rubyのクラスのメソッドの種類について
Rubyのクラスについてインスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドをまとめます。
クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。# インスタンスメソッド
## インスタンスメソッドとは
インスタンスメソッドはクラスのインスタンス(実体)に紐づけられるメソッドです。
## 使い方
クラスの中にメソッドを作成するとインスタンスメソッドになります。後述するクラスメソッドとは異なり、呼び出す際にはインスタンスの作成が必要です。`インスタンス名.メソッド名`で呼び出します。
## 例)Calculationクラスのインスタンスメソッド
“`ruby
class Calculation
def addition(a, b,
Railsで検索機能実装
## 初めに
今回は実際にindexのページに検索機能を搭載していきたいと思います。## routes.rbにsearchを設定
“`routes.rb
get ‘searches’ => ‘courses#search’
“`## controllerに追加
“`app/controllers/courses_controller.rb
def search
@courses = Course.search(params[:keyword])
@keyword = params[:keyword]
render “index”
end
“`## viewページに実際に記述
“`app/views/courses/index.html
<%= form_with url: searches_path, method: :get, local: true do |f| %>
<%= f.text_field :keyword, v【Ruby】変数が定義されているかを確認
# defined?を使用する
Rubyでは変数が定義されているかを確認するために`defined?`を使用できます。
`defined?`は変数やメソッドが定義済みの場合、式の種類を表す文字列を戻り値として返します。
未定義の場合、`nil`を戻り値として返します。– 変数に値が代入されていると`”local-variable”`が返ってきます。
“`ruby
> test = 111
=> 111
> defined? test
=> “local-variable”
“`– nilが代入されていても`”local-variable”`が返ってきます。
“`ruby
> hoge = nil
=> nil
> defined? hoge
=> “local-variable”
“`– 変数に値が代入されていないと`nil`が返ってきます。
“`ruby
> defined? foo
=> nil
“`– グローバル変数に値が代入されていると`”global-variable”`が返ってきます。
“`ruby
> $global = 111
=> 11関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた