- 1. Ruby実行するコマンド
- 2. Rails7にpostCSSを導入する
- 3. 【Rails】Twitterクローンを作ってみた 〜ユーザー詳細ページの作成〜
- 4. 「プロを目指す人のためのRuby入門」備忘録
- 5. 単体テストコードで重複したメールアドレスを通さないようにする
- 6. 【エラー解決方法】Rails7:ActionDispatch::Request::Session::DisabledSessionError
- 7. TimeWithZoneクラスについて
- 8. rubyzipを用いて、一時退避させたファイルをzipに圧縮し送信する
- 9. LambdaからDynamoDBへデータを登録する(Ruby)
- 10. エンティティの洗い出し
- 11. Ruby – no implicit conversion of Symbol into Integer
- 12. Rubyでクラシカルなアルペジオを作ってみた (Mac環境)
- 13. RabbitMQ入門【チュートリアル触ってみた】
- 14. aggregate_failuresを使ってRspecのシステムテストを高速化した
- 15. ActiveSupport::Concernとは
- 16. 【Rails】POST送信でCSVファイルをダウンロード
- 17. Dateクラスを色々と使ってみる
- 18. 楽天GORA API導入について(Ruby)
- 19. Timeクラスを色々と使ってみる
- 20. ruby arrayの組み込みメソッドを層別してみた
Ruby実行するコマンド
ファイル名.rbで実行できないと悪戦苦闘していたが、解決。
“`
「ruby ファイル名.rb」
“`Rubyを実行する際は`ruby`というコマンドを書いてからファイル名を書かないと実行されない。
Rails7にpostCSSを導入する
# 前提
– 事前にyarnのインストールが必要
どうやら「Rails new」時に、`postcss`や、`esbuild`が「yarn」を使用してインストールされる模様
※別にnpmでいいや〜の私はこのせいで少し戸惑った?## プロジェクトの作成
“`bash
rails new . -j esbuild -c postcss
“`
– jオプションで`JavaScript`のビルダー指定
– cオプションで使用するCSSフレームワークに`postCSS`を指定色々インストールされる(適当)
### package.jsonにscriptsが登録
`yarn` + 以下のコマンドで、ビルド処理が可能。
– `yarn build` => JavaScriptのバンドル
– `yarn build:css` => CSSファイルのバンドル処理`gem “jsbundling-rails”` と `gem “cssbundling-rails”`を使用しているよ〜
“`json
“scripts”: {
“build”: “esbuild app/java
【Rails】Twitterクローンを作ってみた 〜ユーザー詳細ページの作成〜
## はじめに
[【Rails】Twitterクローンを作ってみた 〜ログイン周り編〜](https://qiita.com/bloom__fu/items/d005686cbdaa83d2c0c2)の続きです。ログイン周り編を前提に進めていきますので、まだご覧になっていない方はそちらからご覧ください!※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS## ユーザー詳細ページの作成
#### 条件
– トップページの「つぶやく」の上にある自分の名前をクリックするとユーザー詳細ページに飛ぶ
– 自分のプロフィールを編集できる
– 退会ボタンから退会することができる
ユーザーのプロフィールの内訳は名前、自己紹介文、プロフィール画像とします。プロフィール画像に関しては後のセクションでやるのでまだこのセクションでは編集できなくて良いです。ユーザー退会はユーザーを実際に削除するのではなく論理削除してください。
#### 実装流れ(簡略)
① Userモ
「プロを目指す人のためのRuby入門」備忘録
# 概要
プロを目指す人のためのRuby入門を読み、知識を定着させたいと思い、アウトプットさせて頂きます。## ブロックを使用したメソッドの書き方
記事などを読み、今までは一体何の処理をしているのかわからなかった記述も、この書籍でRubyの深い部分を学ぶことで、理解につながることが多々ありました。“`ruby:ruby
[‘ruby’, ‘java’, ‘python’].map { |s| s.upcase } #=> [“RUBY”, “JAVA”, “PYTHON”]
# 上記一文の書き換え
[‘ruby’, ‘java’, ‘python’].map(&:upcase) #=> [“RUBY”, “JAVA”, “PYTHON”][1, 2, 3, 4, 5, 6].select { |n| n.odd? } #=> [1, 3, 5]
# 上記一文の書き換え
[1, 2, 3, 4, 5, 6].select(&:odd?) #=> [1, 3, 5]
“`
こちらでは、mapメソッドやselectメソッドにブロックを渡す代わりに、
単体テストコードで重複したメールアドレスを通さないようにする
重複したメールアドレスについて単体テストコードでつまづいたので記録。
ファクトリーボットでインスタンスを作成したあと、
セーブメソッドで保存。
あとは記述の通り。“`ruby
it “重複したメールアドレスは登録できない” do
@user.save
another_user = FactoryBot.build(:user)
another_user.email = @user.email
another_user.valid?
expect(another_user.errors.full_messages).to include(‘Email has already been taken’)
end
“`
【エラー解決方法】Rails7:ActionDispatch::Request::Session::DisabledSessionError
# 概要
– https://qiita.com/kazama1209/items/caa387bb857194759dc5
上記の記事でログイン機能を作成したのですが、ログイン画面からユーザーを「ID」と「パスワード」により認証するパスワード認証はできたのですが、リロードした際のトークン認証がうまくいきませんでした。### エラー内容
“`Ruby
api_1 | app/controllers/api/v1/auth/sessions_controller.rb:3:in `index’
api_1 | Completed 500 Internal Server Error in 19ms (ActiveRecord: 2.7ms | Allocations: 684)
api_1 |
api_1 |
api_1 |
api_1 | ActionDispatch::Request::Session::DisabledSessionError (Your application has sessions disabled. To w
TimeWithZoneクラスについて
## 環境
Ruby2.6
Rails5.2## はじめに
Railsでシステム日付を取得する場合は、Ruby標準のTimeメソッド、Dateメソッドは使わずに、Railsで用意されている、TimeWithZoneクラスを使うことになります。TimeWithZoneクラスはActive Supportの拡張メソッドです。Ruby標準のTimeメソッド、Dateメソッドを使ってシステム日付を取得すると、OSが持っている日付がそのまま取得されるのに対し、TimeWithZoneクラスを使うと、OSのシステム日付がどうであれ、config/application.rbで設定しているタイムゾーンに該当する日付に変換して取得してくれます。
例えば、OSのタイムゾーンがUTC(協定世界時)である場合、Ruby標準のメソッドを使うと、UTCの日付がそのまま取得されます。しかし、TimeWithZoneクラスを利用すると、OSのタイムゾーンがUTCであっても、Railsで下記の設定をしている場合、JST(日本標準時間)に変換して取得してくれます。
“`config/application.
rubyzipを用いて、一時退避させたファイルをzipに圧縮し送信する
# やりたいこと
rubyxlで編集したエクセルファイルを数十個出力し、それらをzipファイルで圧縮しsend_dataで送信したい。# 使用するgem
https://github.com/rubyzip/rubyzipGemfileに以下を記入し、bundle installを実行します。
“`
# zipファイル作成
gem ‘rubyzip’“`
# 使用例
複数箇所で使用したかったので、moduleにしました。
“`
# zipファイルを作成require ‘rubygems’
require ‘zip’
# windows文字化け対策
require ‘nkf’module CompressFilesToZipService
module_functiondef call(filenames, folder, zipfile_name)
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
filenames.each do |filename|
LambdaからDynamoDBへデータを登録する(Ruby)
# はじめに
LambdaとDynamoDBを使用すればIOT用のグラフページを作成できるのではと思ったのでその備忘録。
この記事では図中上の「IOTデータ保存」部分を実施。![Lambda-DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/82933046-6bbe-6525-d7a2-d8d23116a3ec.png)
# DynamoDBの設定
パーテーションキーとソートキーがある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195542/dcdf7d30-7cf0-90cc-c534-582bb2e6db46.png)
上記例ではパーテーションキーがidでソートキーがtime
パーテーションキーのみ、またはパーテーションキーとソートキーの2つを指定する事が可能。今回のIOT機器の場合、idが機器固有の番号、timeがデータを計測した際の時間としています。
理由としてと
エンティティの洗い出し
最近フリマアプリを実装するにあたってエンティティの洗い出しとER図、readmeを書くのにめっちゃ時間かかったので復習。
結論からいうとER図はこんな感じになった。
![スクリーンショット 2022-10-26 9.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884270/3c3285f3-f061-b9a2-ee60-6c9bba870c92.png)フリマアプリのER図を書く時に一番困ったのは、中間テーブルの存在。
自分の浅い認識では中間テーブルというのは多対多のテーブルの関係の間にはさまってるイメージだったけど、今回は出品情報を一旦まとめるテーブルと、受け取り先をまとめるテーブルを作って、その間を取り持つような形になった。
ユーザー情報はdeviseをつかって。あとでバリデーションとか設けるときにメールアドレスとパスワードはdeviseの使用で勝手に記述されるので、二重記述にならないように注意。
で、テーブルの設計はこうなった。
![スクリーンショット 2022-10
Ruby – no implicit conversion of Symbol into Integer
# TypeError: no implicit conversion of Symbol into Integer
配列に対してシンボルでハッシュを呼ぼうとするとエラー
“`rb
[][:a]
# TypeError: no implicit conversion of Symbol into Integer
“`# TypeError: no implicit conversion of String into Integer
配列に対して文字列でハッシュを呼ぼうとするとエラー
“`rb
[][“a”]
# TypeError: no implicit conversion of String into Integer
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
Rubyでクラシカルなアルペジオを作ってみた (Mac環境)
## これは何?
元ミュージシャンの私が、今現場で使っているRubyでなんとか作曲っぽいことができないか試みた記事です。
OSは、Montereyを使用しており、特に有料ツールなども使用しておりません。## 用語の説明
– アルペジオ
– 和音を構成する音を一音ずつ順番に弾いていくことで、リズム感や深みを演出する演奏方法。
– MIDI (MIDIデータ)
– 音楽の演奏情報をデータ化し、電子楽器やパソコンで再生できるようにしたものです。
– MIDI音源 (ソフトウェア音源)
– MIDIの情報に従って演奏をする機器## 下準備編
### MacのMIDI出力を準備する
1. Launchpad から MIDI で検索し、`Audio MIDI設定` を開きます。
2.
RabbitMQ入門【チュートリアル触ってみた】
## はじめに
RabbitMQによるメッセージのやり取りを行うシステムに関わっているものの体系的な知識がなかったため、RabbitMQ公式のチュートリアルを触ってみました。
https://www.rabbitmq.com/getstarted.htmlそこで得た知識と追加で調べた情報などを記載します。
### 想定読者
– RabbitMQをこれから使う人
– RabbitMQを使っているけどよくわかってない人
– 記憶を失った時の自分## RabbitMQとは
RabbitMQはオープンソースのメッセージブローカー。
ブローカー(Broker)は直訳で「仲立ち人」。複数のメッセージングプロトコルに対応しているがコアとなるのはAMQP。
### 登場する概念
| 名前 | 説明 |
|–|–|
| Producer | メッセージを送るプログラム(=Publisher) |
| Exchange | Producerのメッセージはここに送られる。後述のtypeに応じてQueueへ送信 |
| Queue | メッセージを格納する場所 |
| routing ke
aggregate_failuresを使ってRspecのシステムテストを高速化した
Rspecのシステムテストで実行時間が30分以上かかるテストがありました。example数は約100件です。
何とかならないものかと考えた結果、`aggregate_failures`を導入することにしました。これによりテスト実行時間を約10分まで短縮することができました。# aggregate_failuresとは?
it内であるexpectが失敗した時に、次のitに移行せず、it内の全てのexpectを実行してくれるメソッドです。通常であれば1つのexpectが失敗した時点で次のitに移行してしまいます。`aggregate_failures`は全てのexpectを実行して、失敗したexpectが複数件あればそれらの情報を全て出力してくれます。
# どんなテストだったか?
こんなテストでした。
beforeを使っていて、itごとにFactoryBotでuserをbuild→ログイン処理をしています。
“`ruby
describe ‘XXX’, type: :system, js: true dobefore(:each) { @user = FactoryB
ActiveSupport::Concernとは
## ActiveSupport::Concernとは
Modelやcontrollerで重複した処理をActiveSupport::Concernを使用することでよりDRYに記述できる機能## 使用するには
1. `app/models/concerns/`or`app/controllers/concerns/`にファイルを作成
– ファイル名はmoduleと同じにする
2. `included do end` の中に処理を書く
– スコープだけでなく、メソッドを定義したりもできます
– `extend ActiveSupport::Concern`を忘れないように
3. 使用したいmodelファイルの中でincludedする
4. concernに追加したメソッドを使用する際はそのまま呼び出せます#### 例
“`ruby:app/models/concerns/m.rb
module M
extend ActiveSupport::Concernincluded do
scope :disabled, -> { where(
【Rails】POST送信でCSVファイルをダウンロード
# やりたいこと
### CSVファイルダウンロード機能をPOST送信で実現したい。CSVファイルはブラウザから取り出すことができるので、ブラウザのHTMLからアクションを起こし、ブラウザにCSVデータを返却する方法が良さそう。また、セキュリティ的な観点で、CSVファイル生成に必要なデータは、サーバー側(controller側)でDBから引くようにします。
**方法**
①`xxx.csvファイル`をgetアクセスで読み込んでダウンロード(CSV形式での返却ファイル指定する必要あり。)
↑はググってよく見る方法
②HTMLの`form`からPOST送信のレスポンスをブラウザで受けとって、ダウンロード既存のコードに追加する際に、最も綺麗に実装できそうな②をチョイスしました。
# 全体の大まかな流れ
・CSVファイルを生成するための条件を`form`で送信
・`controller`側で受け取った条件をもとに、必要なデータを用意する
・CSVファイルを用意し、書込みを行う
・書込みが完了したCSVファイルをブラウザ側に返却する# 実装内容
**view側**
`f
Dateクラスを色々と使ってみる
## 環境
Ruby2.6## はじめに
Rubyで日付を扱う場合、使うクラスはTimeクラスか、Dateクラスとなります。システム開発の現場で、よく使いそうなDateクラスについて動作確認を行いました。## 動作確認
Timeクラスを使う場合は、require “time”を定義する必要はありませんが、Dateクラスを使う場合は、reguire “date”を定義する必要があります。
“`test.rb
require “date”
“`システム日付はTimeクラスでも取得できますが、Dateクラスからも取得できます。
“`test.rb
puts Date.today # => 2022-10-24
“`確認すると、確かにDate型になっています。
“`test.rb
puts Date.today.class # => Date
“`Dateクラスで取得したシステム日付を年月の形式(YYYY-MM)の文字列にする場合です。Timeクラスを使うときと使
楽天GORA API導入について(Ruby)
# 概要
楽天GORAのAPIを用いた アプリを作成した時に起こったことを残しておく記事になります。
あまりGORAに関する記事がなかったためもし間違いに気がついてご指摘いただける様でしたら
なおありがたいです。
記述はrailsで作成したものになります。# 要件
楽天GORAのAPIを導入する# 手順一覧
## 1. まずは楽天に登録して、APIを利用するためのIDを発行してもらう
https://webservice.rakuten.co.jp/これに登録して専用のIDを発行してもらい、それを用いてAPIとの通信を許諾してもらいます。
## 2. 発行してもらったIDを環境設定に配置する
config > initializer > rakuten.rb
[rakuten.rb]は既存ファイルではないので、自分で作成する(名称は何でも可)・rakuten.rb
“`ruby
RakutenWebService.configure do |c|
# (必須) アプリケーションID
c.application_id = ‘発行してもらったID’#
Timeクラスを色々と使ってみる
## 環境
Ruby 2.6## はじめに
システム開発をする上で、日付に関する操作は避けて通ることはできません。他言語(VBです)からRubyに移行した人からすれば、日付を扱うクラスに、Timeクラス、Dateクラス、DateTimeクラスの3種類もあることに驚いてしまいます。しかし、Ruby3.0からDateTimeクラスが非推奨となっているため、これからは、ほぼほぼ、TimeクラスとDateクラスさえ知っていればいいということになりそうです。まずは、Timeクラスの使い方について、システム開発でよく使いそうなメソッドをいくつか確認してみます。## 確認
システム日付を取得する方法です。Time.nowを使っても、Time.newを使っても同じです。
“`test.rb
puts Time.now # => 2022-10-24 15:15:53 +0900
puts Time.new # => 2022-10-2
ruby arrayの組み込みメソッドを層別してみた
>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼
Tweets by takeshi_programみなさんは組み込みメソッドという存在はご存じでしょうか?
組み込みメソッドとは自分で定義しなくてもデフォルトで使えるようになっているメソッドの集合です。
rubyの場合、stringクラス、arrayクラス、hashクラスなど、各クラスで使える組み込みメソッドが違います(共通のものもあります)例えばarrayクラスだけでも以下↓の数だけあります。
https://docs.ruby-lang.org/ja/latest/class/Array.html使えると便利なのかもしれませんが、覚えるのが大変そうですね…?
覚えるための一助となればと思い、arrayクラスの一部のメソッドだけではありますが私なりにmiroというアプリで層別してみましたので、
よかったらご覧下さい。### miro URL
![ima