- 1. deviceを使わないでログイン認証機能を作ってみる
- 2. Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較
- 3. 【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
- 4. DockerのRailsアプリからRedisサーバに接続したい
- 5. Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較
- 6. rbenvのインストールで失敗する
- 7. 【Rails基礎】Active Recordとは?
- 8. Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)
- 9. Rubyとmittsuライブラリを使って3D対戦アクションゲームつくってみた
- 10. Fly.ioでRailsアプリをデプロイしてみた for Mac
- 11. 【Rails】マイグレーションで文字列の外部キー定義をより簡単に書く方法
- 12. 【Rails】Modelに定義した定数をControllerやViewで使用する方法
- 13. Rubyを使ってメール通知をしたいだけなのにどハマりした結果
- 14. Slack Bot アプリを作成しよう
- 15. 【Ruby】メソッドの後の感嘆符”!”について
- 16. Ruby 2.7まで動いていたデフォルト値付きのブロックパラメータをRuby 3.0向けに書き替える
- 17. Capybara内部のリトライ間隔をのばしてCPU節約
- 18. Ubuntu (WSL) に asdf をインストールして Ruby と Crystal をそれぞれ複数バージョンインストール
- 19. formオブジェクト使用時のエラーメッセージの日本語化
- 20. IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない
deviceを使わないでログイン認証機能を作ってみる
※この記事はRails初学者向けです
:::note info
deviceってなに?
railsのgemの一つで、ログイン認証機能が簡単に実装できる。
[https://github.com/heartcombo/devise](https://github.com/heartcombo/devise)
:::gemは便利だけど、勉強のためにログイン認証周りの仕組みに興味があったので実装してみました。view周りの実装は今回の趣旨とは異なるため触れてません。
## モデル・コントローラの準備### 1. Userモデルを作成して、schemaファイルを修正
“`rb
$ rails g model user name:string email:string encrypted_password:string
invoke active_record
create db/migrate/[timestamp]_create_users.rb
create app/models/user.rb
invoke
Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較
Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較
# Python
https://qiita.com/atsui-ocha/items/5b8e4f973b36e78fdaf1
# Ruby
https://qiita.com/beanzou/items/6231d3d0a926765ddbb4
# PHP
https://qiita.com/rana_kualu/items/0abd2b6f69527b0b4b92
# Java
https://qiita.com/morioheisei/items/e686e33b60c6a60e87f0
# JavaScript
https://qiita.com/tetsuyakojima/items/fd63f91a4e34d6bad28b
# Perl
https://perlzemi.com/blog/20170521149524.html
【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
# はじめに
kaminariというGemには、BootstrapなどのCSSフレームワークのテンプレートファイルが用意されています。
CSSフレームワークのクラスを手動で付与しなくても、専用コマンドを実行するだけで簡単にテンプレートファイルを実装できます。※Rails6を使用しています。
※bootstrap導入済み# 完成イメージ
![pagenation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/8de427a8-6638-ca5a-d627-2ea5a4789e5f.png)## Getting Started
#### ①Kaminariをインストールする
ページネーション機能の実装には、gemの「kaminari」を使う。
“`:Gemfile
:
:gem ‘kaminari’,’~> 1.2.1′
“`
#### ②bundle installする
“`:terminal
$ bundle install
“`
#### ③kaminari
DockerのRailsアプリからRedisサーバに接続したい
## はじめに
docker環境で起動しているrailsアプリからホストで起動しているredisサーバに接続したい。
なお、前提として、dockerでのrailsアプリの環境構築が完了しているものとする。## 環境
– ローカル環境
– macOS
– docker環境
– ruby 3.1.2
– Rails 7.0.3.1## 手順
### 1. ローカルホストでredisを起動する
まずredisをインストールするために、下記のコマンドを実行
“`
brew install redis
“`
インストールされているか確認する
redisがあればOK
“`
$ brew list | grep redis
redis
“`
redisサーバをバックグラウンドで起動
“`
brew services start redis
“`
redisのクライアントコマンドで以下のように、接続確認を行い、”PONG”が返ってくることを確認
“`
$ redis-cli ping
PONG
“`
### 2. rails側にredisを導入する
Gemfileに
Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較
Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較
# Python
https://qiita.com/Morio/items/1e06e7ac768758af5ffe
# Ruby
https://qiita.com/sagawashu/items/0f08266d5f72229423d9
# PHP
https://qiita.com/Hashimoto-Noriaki/items/dfb76d440a64eccba95d
# Java
https://qiita.com/setonao/items/ebc341ddf6d95295c48e
# JavaScript
https://qiita.com/taiju_suzuki/items/e2bf11fcf1645623235f
# Perl
https://perlzemi.com/blog/20161023147731.html
rbenvのインストールで失敗する
# 動作環境
M1 macboook pro
macOS Monterey ver.12.5# 解決方法
ターミナルで`brew install rbenv`を実行すると、以下のエラーが表示する。
“`
==> Downloading https://ghcr.io/v2/homebrew/core/pkg-config/manifests/0.29.2_3
Already downloaded: /Users/arakijun/Library/Caches/Homebrew/downloads/ac691fc7ab8ecffba32a837e7197101d271474a3a84cfddcc30c9fd6763ab3c6–pkg-config-0.29.2_3.bottle_manifest.json
Error: rbenv: Failed to download resource “pkg-config_bottle_manifest”
The downloaded GitHub Packages manifest was corrupted or modified (i
【Rails基礎】Active Recordとは?
**Active Record**とは**Rails**における**Object/Relational Mapping (ORM)** です。
※訳:オブジェクト関係マッピング**Object/Relational Mapping (ORM)とは??**
以下Wekipediaより
>オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である**つまり、RubyでDBを操作するための技法ということですね!!?**
RailsアプリでDBに変更を加えるとき、Rubyのコードで直感的にDBを操作することができるのもActive Record様のおかげ
また、ActiveRecord様のおかげでDBの種類(MySQL, PostgreSQL等)に関わらず同じコードで操作可能になります!
Active Recordはどのように機能している?
—では、お馴染みのrails g modelをして、DBにテーブルを追
Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)
## はじめに
Railsの基礎を一通り学び終わったのですが、自分自身理解が追いついてないところもあると思うので、記事を作成する中でアウトプットし、理解を深めていくことが目的です。## 概要
今回はタイトルにもあるとおり、簡単なメッセージ投稿アプリを解説も交えながら作成していきます。
アプリの作成からCRUD処理でメッセージ投稿機能の実装、それからリファクタリング、フラッシュやバリデーションの設定、最後にBootstrapでスタイルを付けるという感じで進めていきます。
なので、今回は3章に分けて記事を作成します。## 開発手順
1. アプリの作成 (第1章)
2. CRUD処理で簡単なメッセージ投稿アプリを実装 (第1章)
3. リファクタリング (第2章)
4. フラッシュの実装 (第2章)
5. バリデーションの設定 (第2章)
6. エラーの処理 (第3章)
7. Bootstrapでスタイルをつける (第3章)## 開発環境
– Ruby 2.7.3
– Rails 6.1.6.1
– Postgresql## 1. アプリの作成
“`ターミナル:ターミナ
Rubyとmittsuライブラリを使って3D対戦アクションゲームつくってみた
# 概要
この記事は私が躓いた当たり判定についての備忘録です。
2022夏の[Ruby合宿](https://www.rubycamp.jp/)にて今回のゲームを作成しました。
作ったゲームのリポジトリは[こちら](https://github.com/RubyCamp/rc2022su_team1)です。初対面のメンバー4人でチーム開発&初めてGit,Github使って開発しました。
使用した技術はRuby, [mittsuライブラリ](https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fdanini-the-panini%2Fmittsu&sa=D&sntz=1&usg=AOvVaw2TspYQITfq_UZI5vMUMfiz)です。
自分は当たり判定を主に担当しましたので、当たり判定で困っている方の助けになれば嬉しいです。
アイデア出し含む制作期間は4日です
# この記事で伝えたいこと
当たり判定で躓いてからどのように修正したのかの思考過程
# ゲームの概要## 3Dぴんぽんバトル
## Install
depend
Fly.ioでRailsアプリをデプロイしてみた for Mac
今回、Herokuが無料で利用できなくなる!?といった話を聞いたので、
新たにFly.ioでデプロイできるか試した記事になります。# 手順
今回は、この流れで進みます!
1. Fly.ioの準備
1. ビルド&デプロイ
1. サイトを見てみる# 1. Fly.ioの準備
1. FlyのCLI(コマンドを使えるようにするもの)をインストール
1. アカウント作成まず、Fly.ioを見てみましょう?
https://fly.io/docs/rails/getting-started/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/0a7b751e-ccb4-ffab-ca9b-031992ad9334.png)
最初の方にこんなことが書いてありますね。
訳すと、([DeepL先生](https://www.deepl.com/ja/translator)ありがとう?)
`
Fly を使い始めるには、Fly 上のアプリを管理するための CLI アプリ、flyc
【Rails】マイグレーションで文字列の外部キー定義をより簡単に書く方法
## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16## 状況
“`rails db:migrate“`したとき、外部キーが文字列なのに“`references“`で外部キーを定義しようとするとエラー“`
PG::DatatypeMismatch: ERROR: foreign key constraint “fk_rails_640ba59391” cannot be implemented
DETAIL: Key columns “user_id” and “id” are of incompatible types: bigint and character varying
“`“`db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :title, null: fal
【Rails】Modelに定義した定数をControllerやViewで使用する方法
## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freezeUser::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。まずは良く使うものをmodelに定数定義しましょう。“.fr
Rubyを使ってメール通知をしたいだけなのにどハマりした結果
# はじめに
新しくサーバーを構築して、自作Webアプリケーションにメール通知機能を追加したいと思い、簡単にできるだろうと考えていたらハマりました。
# 環境
Ubuntu 22.x.x
Ruby 3.0.x
Postfix 3.6.x# ソースコード
“`rb:mailtest.rb
#!/usr/bin/env rubyrequire ‘mail’
mail = Mail.new do
from “xxxx@xxxx.com”
to “yyyy@yyyy.com”
subject “test mail”
body “this is a test mail.”
endmail.delivery_method(:smtp,
address: “localhost”,
port: 25,
domain: “localdomain”,
)mail.deliver
“`# エラーメッセージ
“`
$ ./mailtest.rb
/usr/lib/ruby/3.0.0/net/smtp.rb:101
Slack Bot アプリを作成しよう
[rack Gem](https://github.com/rack/rack) について勉強した時にBot アプリを作成したので、そのメモとして残そうと思います。:bow:
もしBot アプリを作成してみたいという方がいれば参考程度にしてみてください。### どういうアプリ?
Slack のチャットフォームの方で`@botユーザー say_hello` と入力すると、@botユーザー が挨拶してくれるアプリです。![スクリーンショット 2022-08-22 17.49.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2290550/98d6f592-a75f-2072-08b6-de92372e8083.png)
## 準備
#### Slack token 取得する(1) https://slack.com/services/new/bot にアクセスする
(2) ユーザー名を記入し`ボットインテグレーション`からボットユーザーを作成するex. (私は`bot-app` の名前
【Ruby】メソッドの後の感嘆符”!”について
メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。
例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。“`
self.email.downcase!
“`破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。
【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし
Ruby 2.7まで動いていたデフォルト値付きのブロックパラメータをRuby 3.0向けに書き替える
## はじめに:Ruby 2.7では動いていた奇妙なコード
とあるRailsプロジェクトをメンテしていたら、こんな奇妙なコードに遭遇しました。“`ruby
def sample
data = {
a: nil,
b: { x: 1, y: 2 },
c: { x: 1 },
d: { y: 2 },
}
data.map do |k, x: 0, y: 0|
[k, x, y]
end
end
“`Ruby 2.7でこの`sample`メソッドを実行すると以下のような結果が得られます。
“`ruby
# Ruby 2.7
sample
#=> [
# [:a, 0, 0],
# [:b, 1, 2],
# [:c, 1, 0],
# [:d, 0, 2],
# ]
“`## これはいったい何をやってるの?
このメソッドでは以下の行で`x`や`y`のデフォルト値を設定しています。
“`ruby
data.map do |k, x: 0, y: 0|
“`こ
Capybara内部のリトライ間隔をのばしてCPU節約
## 背景
Railsで作ったGUIのアプリをブラウザ自動化テストする際、CI環境のCPU使用率が高いことが気になっていました。複数のテストが並行した場合に、不安定になってどれか失敗してしまうということも起きました(※CPU使用率との因果関係は不明ですが)。テストは RSpec + Capybara + Selenium + Headless Chrome で作ってあります。chromeの起動オプションでCPU使用率を節約できるものがないか調べたりしたのですが、効果のあるものは見つけられませんでした。
—
色々探していたら、CapybaraにもCPU使用率が上がってしまう要因があることを知りました。
https://zenn.dev/megeton/articles/f73dc1a0db69b7
> **待っているとPCのファンが唸りを上げてしまう原因と対策**
>
> 次のように書くと内部では 0.01 のウェイトが入っているため処理回数は1秒間で約100回、全体で約6000回になる
>
> “`ruby
> Capybara.has_selector?(…,
Ubuntu (WSL) に asdf をインストールして Ruby と Crystal をそれぞれ複数バージョンインストール
# asdf とは
プログラミング言語などのバージョンを管理するツールです。
Ruby なら rbenv が有名ですが、asdf は様々なプログラミング言語やツールについて複数のバージョンを自在に切り替えながら使うことを可能にしてくれます。https://asdf-vm.com/
# なぜ asdf を使いたいのか
「複数の言語を」「単一のしくみ」でバージョン管理できる点が嬉しいです。
私は Ruby と Crystal を使って競技プログラミングをやっているのですが、コンテストでは必ずしも各言語の最新バージョンを使えるわけではありません。かつ、ときどきコンテストサイトで言語アップデートがあってバージョンが変わるのに追随する必要があります。
また、使っている言語の最新バージョンが出るとやっぱりさわってみたくなったりもします。asdf なら、Ruby も Crystal も(新しく増えたらその言語も)同じしくみで、コンテスト用のバージョンから最新バージョンまで簡単に切り替えながら使えていろいろ捗ります。
# 環境、前提条件など
Ubuntu 20.04.4 LTS (
formオブジェクト使用時のエラーメッセージの日本語化
# 概要
エラーメッセージの日本語化を実装したが、formオブジェクトを使用している箇所だけ実装できない。
# 前提
ja.ymlファイルの作成までは完了している。
Formオブジェクト以外のエラーメッセージについては日本語化ができている。# 現状
ja.ymlに日本語入力の記述をしても日本語にならない“`
ja:
activerecord:
attributes:
user:
name: ニックネーム
birthday: 誕生日
family_name: 姓
first_name: 名
family_name_kana: 姓(カタカナ)
first_name_kana: 名(カタカナ)item:
item_name: 商品名
image: 商品画像
introduction: 商品の説明
price: 価格
delivery_days_id: 配
IntelliJ 2022 以降では Gemfile に RuboCop が無いと使えない
# IntelliJ の RuboCop 統合機能
IntelliJ には RuboCop との統合機能があり、 RuboCop 的にまずい部分をコードエディタ上にハイライトで表示してくれる。
https://pleiades.io/help/idea/robocop.html
> IntelliJ IDEA は RuboCop(英語) との統合をサポートしており、コードエディターなどで IDE 内でその違反を直すことができます。IntelliJ 2021 までは、RuboCop が対象プロジェクトの Gemfile に記載されていなくても使用できたのだが、
IntelliJ 2022.1 くらいから、 Gemfile に記載していないと使用できなくなった。# なんで使えなくなったの?
このあたりの経緯は YouTrack のこの issue を見るとなんとなくわかる。
[Rubocop should run on `bundler exec` if available](https://youtrack.jetbrains.com/issue/RUBY-26915/Ruboc