- 1. プロを目指す人のためのRuby入門のためにRuby2.4.1をインストールする
- 2. Kinx アルゴリズム – ハノイの塔
- 3. Rubyとは?
- 4. 【Rails】メソッドの分類
- 5. wdayメソッドを使い指定した曜日を取得する方法
- 6. 【Rails】i18nによる日本語化
- 7. RailsプロジェクトのRubyバージョンを変更する
- 8. Super-Linterを使ってGitHub ActionsでRubyのlintを実行する
- 9. 【Ruby】Rubyにおける二次元配列の初期化と扱い方
- 10. Rails 割と使うのにど忘れするコトをまとめてみた。
- 11. rails turorial 11章あたりでハマるだろうこと
- 12. resourcesとresourceの違いについてまとめてみた
- 13. hashについて ruby
- 14. 複数モデルにデータを保存したい
- 15. ruby で GoogleDriveにアクセスする方法 2020年度版
- 16. 【Rails 5.0】モデルにカスタムバリデーターを実装する
- 17. Rails 5 cloud9で誤って作成したマイグレーションファイルを削除する方法
- 18. Effective Rubyを読んで勉強になったこと
- 19. railsのlocal環境をhttpsにしてみた。
- 20. RSpecの自動的にロードされるパスについて
プロを目指す人のためのRuby入門のためにRuby2.4.1をインストールする
# はじめに
[プロを目指す人のためのRuby入門](https://ruby-book.jnito.com/)を学習するためにRuby2.4.1を入れます。# 環境
– macOS Catalina Version 10.15.6
– rbenv 1.1.2
– Ruby 2.4.1# 条件
– rbenvがインストール済みあること
– 特定のフォルダのみRuby 2.4.1を有効にしたい場合# 手順
1. Ruby 2.4.1をインストールする `rbenv install 2.4.1` ※結構時間がかかります。
2. Ruby 2.4.1を有効にしたいフォルダを作る (例)`touch ./ruby-book-codes`
3. フォルダに移動する (例)`cd ./ruby-book-codes`
4. Ruby 2.4.1を有効にする `rbenv local 2.4.1`Enjoy Ruby life!!
Kinx アルゴリズム – ハノイの塔
# Kinx アルゴリズム – ハノイの塔
## はじめに
**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。「プログラム=アルゴリズム+データ構造」。アルゴリズムの実装例をご紹介。
元ネタは「C言語による(30年経っても)最新アルゴリズム事典」。今回はライフゲームです。
* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。最新アルゴリズム事典にはこういうのも結構載ってる。パズル的な。
Rubyとは?
#Rubyとは?
Rubyは「Webアプリケーション」を作るためのプログラミング言語です。ここでWebアプリケーションとWebサイトの違いが分からない人向けに説明しておくと、
Webサイトとは、訪問者が見ることしかできないものです。
俗に言う、ホームページと言うやつですね。
WebサイトはHTML,CSSを用いて作られます。一方で、Webアプリケーションは訪問者が見る+操作(検索や登録など)できます。
例えば、Amazonでユーザー情報を登録したり、商品を検索したりしますよね。
それをできるものがWebアプリケーションです。#Rubyの特徴とは?
1.スクリプト言語である
スクリプト言語とは、簡単に言うと、記述したプログラムをすぐに実行して、
動きを確認できる言語です。Ruby以外のプログラミング言語(例えば、JavaやCなど)は、
プログラミングを実行するには、コンパイルする必要があります
(コンパイルとは、人間が書いたソースコードを、機械が読み取れるように変換する作業)。
Rubyは、記述したコードをすぐに実行・確認できるので、
円滑にプログラミングを進められます。
【Rails】メソッドの分類
一口にメソッドと言っても様々なメソッドがあるので、整理する為に記事にしました。
#Railsのメソッドの原則
– Railsではメソッドをdef〜endで定義します。
“`Ruby:
def メソッド名
end
“`上記以外にも以下のようなメソッドがある。
#Rubyが用意してくれるメソッド
– newメソッド、eachメソッド、sortメソッドなど
#Railsが用意してくれるメソッド
Railsが用意してくれるメソッドには主に以下の2つに別れる。
①ActiveSupportコア拡張機能
– present?メソッド、tryメソッド、時間計算を行うメソッドなど
②ActiveRecordのメソッド
– allメソッド、saveメソッド、orderメソッドなど
#オブジェクト自身が持っているメソッド
**@user.name**のように、インスタンスから値を取り出すのにオブジェクト自身がもっているメソッド(ここではnameのこと)を使うことができる。
参考サイト:https://diveintocode.jp/blogs/Technology/
wdayメソッドを使い指定した曜日を取得する方法
指定した日付の曜日を取得する方法について学んだのでまとめてみたいと思います。
例えば今日が何曜日かを設定したいとしてまずDateクラスtodayメソッドを使用して日付を取得します。
“`ruby
require “date”
today = Date.today
“`ここで注意しなければならないのがDateクラスを使う際にはrequireで呼び出さなければならないという点です。
次に日曜から土曜日までの配列を取得します。
“`ruby
wdays = [“日”, “月”, “火”, “水”, “木”, “金”, “土” ]
“`最後にwdayメソッドで配列から今日の日付の曜日を取得します。ここでなぜ配列を日曜日から順番に定義したかというと**wdayメソッドは曜日を0(日曜日)から6(土曜日)の整数で取得するからなんです。**
“`ruby
puts wdays[today.wday] + ‘曜日’
火曜日
“`繰り返しになりますがwdayメソッドは整数で値を取得しているので[today.wday](中身は本日の場合火曜日なので2)という番
【Rails】i18nによる日本語化
# はじめに
– Railsのデフォルト言語の日本語化(2パターン)
– 多言語のymlファイルを導入(2パターン)
– `config/locales`で階層的に多言語ファイルの管理—
– 筆者のスペック
– Rails学習歴:4ヶ月
– 条件
– Rails 6.0.3.2
– Ruby 2.6.6そのため間違いなどがある可能性があるので**鵜呑み厳禁!**
# Railsのデフォルト言語の日本語化(2パターン)
どちらか片方の設定で日本語の言語設定は完了します。
##1. `config/application.rb`に設定情報を追加
– `config/application.rb`に`config.i18n.default_locale = :ja`を記入することで日本語を利用できます。
– `:ja`の部分を他をローケルキーに変えることで他の言語に設定することもできます。“`ruby:config/application.rb
module App
class Application < Rails::Application ...
RailsプロジェクトのRubyバージョンを変更する
# はじめに
Railsの既に作成済みのプロジェクトのRubyバージョンが誤っており、Rubyを再度インストールしたが途中エラーが発生したので、備忘録として残しておきます。今回は、プロジェクトのバージョンを「2.6.3」→「2.5.3」にバージョン変更しました。
もし「間違っている」とか「もっと簡単にできる」とかあれば、ご指摘いただけますと助かります。:bow_tone1:# 環境
– macOS Catalina 10.15.6(19G73)
– Rails 5.2.4.3
– Ruby 2.6.3 (※変更前)
– Ruby 2.5.3 (※変更後)## Rubyのバージョンを確認する
“`terminal:
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
“`バージョンが2.6.3であることを確認。
## Rubyをインストールする
“`terminal:
$ rvm install 2.5.3
“`インストールが完了するまで待ちます。
## RVMのRu
Super-Linterを使ってGitHub ActionsでRubyのlintを実行する
## 前提
[Super-Linter](https://github.com/github/super-linter)のv3を使います。
## 特定の言語のlintだけ実行する
Super-Linterは、デフォルトではリポジトリに含まれるファイルのうち、Super-Linterでlintできる言語[^1]すべてについてlintを実行する。特定の言語についてだけlintを実行するときは、次のように`VALIDATE_<言語名>: true`を`env`として指定する。
例えば、Rubyのlint(すなわちRuboCop)だけ実行したいときの設定ファイルは次のとおり:
“`yml:.github/workflows/linter.yml
name: linteron: [push, pull_request]
jobs:
build:
name: Lint code base
runs-on: ubuntu-latest
steps:
– uses: actions/checkout@v2
– name: Lint
【Ruby】Rubyにおける二次元配列の初期化と扱い方
#はじめに
Rubyのアルゴリズムを本気で学び始めた当初、二次元配列に苦しめられましたが、少しずつ扱いに慣れてきたので、備忘録&誰かの助けになればな…と思い書かせていただきます。
##二次元配列とは?
配列の中に、配列が格納された形の配列のことです。
また2よりも更に大きい次元の配列を多次元配列と言います。“`ruby:arr.rb
#一次元配列(通常の配列)
colors = [“Red”, “Green”, “Blue”]#二次元配列
colors = [[“Red”, “Green”, “Blue”], [“Yellow”, “Purple”, “Orange”]]“`
##二次元配列の初期化の方法
二次元配列を初期化(生成)する上で一つ注意点があります。以下を参照ください。
“`ruby:arr.rb
arr = Array.new(2, Array.new(3, 0))
#=> [[0, 0, 0], [0, 0, 0]]
“`
一見、二次元配列になっているのですが、実はこれ、二次元目の配列が全て同一のオブジェクトとして生成されてしまっています。
Rails 割と使うのにど忘れするコトをまとめてみた。
Railsを約3年程やってみて、**それなりに使うけど毎日使うわけでもない**のでいざ書くとなると**「どう書くんだっけ?」**とついド忘れしてしまう項目をまとめてみた。
# Enum
個人的に「あれ・・・思い出せない」になる回数1位参考:[【Rails】Enumってどんな子?使えるの?](https://qiita.com/ozackiee/items/17b91e26fad58e147f2e)
### 記述例
“`ruby:menu.rb
class Menu < ApplicationRecord enum category: { japanese: 0, chinese: 1, western: 2, other: 3 } end ``` ```yml:ja.yml ja: enums: menu: category: japanese: 和食 chinese: 中華 western: 洋食 other: その他 ``` ### よく使うメソッド ```console # 設
rails turorial 11章あたりでハマるだろうこと
# 送信するメールがエンコードされててリンクを踏めない
サインアップ時、nameに日本語を入れる
railsのログをみてみると
“`
http://localhost:3000/account_activations/AOSiSUDhma-B1bwZe3Wd_g/edit?email=3Dhoge
resourcesとresourceの違いについてまとめてみた
Railsで何らかのリソースに対するCRUD処理を行うためのルーティングを生成する方法として、resourcesメソッドとresourceメソッドがあるので、今回はその違いについてまとめてみました。
## resourcesとは
resourcesメソッドは、コントローラーの7つのアクション(index、show、new、create、edit、update、destroy)をひとまとめにしたメソッドで、複数のリソースに対するCRUD処理を行うためのルーティングを生成します。“`:config/routes.rb
Rails.application.routes.draw do
resources :games
end#リソース名が複数形
“`
上記のように記載すると、7つのアクション(index、show、new、create、edit、update、destroy)全てを設定したことと同じになります。
確認のため、ターミナルにて`rails routes`コマンドを入力してみると、以下のルーティングが生成されています。“`:ターミナル
Prefix Ve
hashについて ruby
# ハッシュとは
ハッシュは配列のインデックス部分をキーというものに置き換わり、バリュー(値)をそのキーに紐づいてデータを管理してくれるものです。簡単にデータの集計とかをやってくれるので、配列でデータ集計するよりお手軽です。
例えば、下記のような処理を書いて、ユーザーのリストのようなプレーンテキストがあったとします。“`hash.rb
name_count = {}
STDIN.each do |line|
line.chomp!
count = name_count[line] || 0name_count[line] = count + 1
endp name_count
name_count.keys.sort.each do |name|
value = name_count[name]
puts “#{name}が#{value}個発見されました”
end
“`“`logfile
Joutarou
Noriaki
Polnareff
Avdol
Joutarou
Noriaki
Joseph
Igy
J
複数モデルにデータを保存したい
某メルカリのコピーサイトを作成中。
商品の画像登録にて、複数の画像登録となるとカラムが増えて美しくないので
別モデルでimageテーブルを作成することに#fields_for
>form_for内で異なるモデルを編集できるようになる。例:Productモデルに紐付くImageモデル
これを使うとform_withとかで別モデルに保存とかできるようになるっぽい
アソシエーションとかで紐づいてることが前提#Model
product(商品)とimageは1対多
`accepts_nested_attributes_for` で一緒に保存したいモデルを指定“`product.rb
class Product < ApplicationRecord has_many :images accepts_nested_attributes_for :images end ```
imageとproduct(商品)は多対一となってます
複数保存する場合は `mount_uploaders` と複数形にする必要があるので注意“`image.rb
class
ruby で GoogleDriveにアクセスする方法 2020年度版
GoogleDriveへのAPIアクセスがしょっちゅう変わってるので、2020年度版をご紹介。
## サマリー
– [QuickStart](https://developers.google.com/drive/api/v3/quickstart/ruby) のページだけで完結できる!
– クライアントタイプは「Desktop app」を選べ!
– 旧バージョンの方法はもはや使えないので、適当にググると死ぬ!QuickStart と公式ドキュメント以外見るな!GoogleCloudの管理画面にアクセスして、やれプロジェクト作れだとかやれサービスアカウントを作れだとかいろいろ選択肢が多いので、「このルート」というのを用意しました。
## QuickStart のページにアクセス
https://developers.google.com/drive/api/v3/quickstart/ruby
このページの上から行くのが一番素直です。
## Enable the Drive API のボタンをクリック
本当はGoogleCloudのコンソールから通るのがいいはずなので
【Rails 5.0】モデルにカスタムバリデーターを実装する
## はじめに
Railsのバリデーションですが、自分で作ることができます。## モデル内に自作する
Personのname属性に”ウンコ”という文字列が含まれていたらDBに登録できないようにします。
下品な名前は許しません()“`person.rb
class Person < ApplicationRecord before_save :include_unko private # Personモデルでしか使わないのでPrivateメソッドにしておく def include_unko if name.include?("ウンコ") errors.add(:name, "に下品な言葉が含まれています") end end end # キャンチョメとウンコティンティンをPersonに登録してみましょう。 person_1 = Person.create(name: "キャンチョメ") person_1.valid? # => true
person_1.erros # => nilperson_2 = Person.cr
Rails 5 cloud9で誤って作成したマイグレーションファイルを削除する方法
記事の趣旨 ※あくまで個人で開発されている方を対象としています
削除したマイグレーションファイルが生きている
編集してマイグレーションファイルを作成しなおした対処
![299b83e2ab2fec0c25f32edba537db10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682652/1cce7ad4-71ab-6e8e-9af0-431e8ea62b20.png)
どうしよう。。。。強行手段
1.$ rails db:migrate:status
![a51f3909b9dfe0d66a0e5c910853ba46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682652/1d09f670-b35e-1eac-d235-3986ff63f0ef.png)
1.モデルに作成されたファイルを削除しましょう。(例です)
(例)complete.rb 削除2.不要なマイグレーションファイル
Effective Rubyを読んで勉強になったこと
## はじめに
Effective Rubyを私が読んで勉強になったことを書いてます。
本書を読んだのは2回目ですが、1回目は何がどう役立つのか全くわかりませんでした。
2回目の今回もいまだに「これって一体どういった場面で効果的なの?」、「そもそも何いってんのこれ?」って部分は多数というかそっちの方が多い気もしますが、以前より「なるほど!」と思った部分があったので、「なんかコーディング力上がってない気がする」って悶々としている人は読んでみると発見があるかもしれません。本全体の内容を紹介するものではなく
RoRを書いていて、「あ〜こう書けば良かったんだ!」と自分のアンテナに引っかかったところだけを書いていくので、本全体の内容を知りたい方は以下の記事など参照すると良いと思います。
https://qiita.com/fujigaki/items/9d64fa49efcbe7017d8c## 勉強になったこと
### 項目2 オブジェクトを扱うときにはnilかもしれないことを忘れないようにしよう
“`ruby
undefined method ‘XXXX’ for nil
railsのlocal環境をhttpsにしてみた。
## 環境
>ruby 2.5.1
rails 6.0.3.2
mac catalina 10.15.5## mkcert install
[Git mkcert](https://github.com/FiloSottile/mkcert)“`
$ brew install mkcert
“`
localにCAを作成“`
$ mkcert -install
“`
## 証明書とキー発行
作成中のapplicationのフォルダへ移動
該当アプリの.gitignoreに下記追加。※Gitに挙げないため。“`
localhost.pem
localhost-key.pem
“`
以下を実行“`
$ mkcert localhost
“`
これで、
localhost.pem
localhost-key.pem
の2つのファイルが出来上がります。## config/puma.rbを編集
“`ruby:config/puma.rb
if ENV.fetch(‘RAILS_ENV’) { ‘development’ } == ‘developme
RSpecの自動的にロードされるパスについて
# 要約
RSpec実行時に自動的にロードされるパスがあります。(下記の2つです)– `./lib`
– `./spec`Railsプロジェクトを触っていると、
そもそもRSpecの自動的にロードされるパスを気にする必要はあまりないのですが、
`Rubyのみのプロジェクト + RSpec` で動作を確認する時は知っておきたい情報ですね。これがgem内のどこで設定されているのかを調べました。
ついでに [default_path](https://www.rubydoc.info/gems/rspec-core/RSpec%2FCore%2FConfiguration:default_path) についても記載しています。# 対象のバージョン
– [rspec-core](https://github.com/rspec/rspec-core): `3.9.2`# ロードの設定箇所
では、実際にgem内のどこでパスをロードしているのかを確認します。## `$LOAD_PATH` に パスを追加するメソッド
[$LOAD_PATH](https://docs.ru