- 1. model作成時に思い出したい 忘却録
- 2. RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう
- 3. Python,Ruby,PHP,Java,JavaScript,Perlの配列の比較
- 4. 【JavaScript】プレビュー機能の実装
- 5. 初めてのOSSコントリビュート(Ruby gem)
- 6. あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ
- 7. RubyからJavaに移行する時の考え方
- 8. [Rails]MVCの責務範囲を サクッと説明
- 9. Rubyのメソッドと戻り値について
- 10. deviceを使わないでログイン認証機能を作ってみる
- 11. Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較
- 12. 【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
- 13. DockerのRailsアプリからRedisサーバに接続したい
- 14. Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較
- 15. rbenvのインストールで失敗する
- 16. 【Rails基礎】Active Recordとは?
- 17. Railsの基礎を使って、メッセージ投稿アプリを作ってみた 【第1章】(1.アプリ作成〜2.CRUD処理まで)
- 18. Rubyとmittsuライブラリを使って3D対戦アクションゲームつくってみた
- 19. Fly.ioでRailsアプリをデプロイしてみた for Mac
- 20. 【Rails】マイグレーションで文字列の外部キー定義をより簡単に書く方法
model作成時に思い出したい 忘却録
## はじめに
学習する上でメモとして残したいものをここに記載します。
今回はmodelの作成時について分からなかったことを記載します## reference型
今回はdeviseのUserの拡張としてフォロー及びフォロワー関係を作ることが目的でした。
そこでFollowsテーブル(model)を作ることにしました。
参考記事(1)には以下のように記載があった“`ruby
$ rails g model Relationship follower:references followed:references
“`
この文を見て思ったのがreferencesとは?でしたので参考記事(2)を読んだところこんな感じらしい。– refernce型は外部キー(FOREIGN KEY)を追加する時に使う
– reference型を使うことによってインデックスを自動に貼ってくれる
– 自動で_idを作成してくれる外部キーを追加する際に使える型で要件によっては使っていいものくらいに留めておきます。
参考記事(2)にもreference型を使わなくても記載できる方法が出来るらしい。
RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう
Railsアプリケーションで下記のusersテーブルのemailにユニーク制約をつけたい場合、どのように実装しますか?
* users
| Field | Type | Null |
|:———–|:————|:————-|
| id | bigint(20) | NO |
| email | varchar(255)| NO |だいたいの場合、下記2つのいずれか、または両方を実装するのではないでしょうか?
* RDBのemailカラムにユニークインデックスを付ける
* Userモデルにuniqueness validationを実装するどちらの実装でもデータがユニークであることとをチェックしてくれるという意味では同じように感じますが、制約の完全性が全然違います。
一言で言うと、RDBのユニーク制約は100%保証されるが、Railsのuniquenessは突破される可能性があります。# この記事で使うユニーク制約
記事の最初に記載したusersテーブルを使
Python,Ruby,PHP,Java,JavaScript,Perlの配列の比較
Python,Ruby,PHP,Java,JavaScript,Perlの配列の比較
# Python
https://qiita.com/gouwan/items/c83b47ce1b7c77cce7c5
# Ruby
https://qiita.com/may88seiji/items/ce9396a4c267a3d449ae
# PHP
https://qiita.com/tokutoku393/items/ea2a61765eda1dee8f2e
# Java
https://qiita.com/sentral1110728/items/532de46714b7215a2e99
# JavaScript
https://qiita.com/takeshisakuma/items/b23b1a748098f30e2ff2
# Perl
https://perlzemi.com/blog/20161012147627.html
【JavaScript】プレビュー機能の実装
# 【JavaScript】プレビュー機能の実装
###### 特徴
・画像を選択するとプレビュー画像が表示される
・画像は何度も選び直すことができプレビュー画像もその度変わる## 手順
### ■HTML側の編集
#### ❶画像投稿ページのHTMLにプレビュー画像を表示するスペースを作成
“`“`
### ■JavaScript側の編集
#### ❷preview.jsを作成して読み込むよう設定
app/javascriptの中にpreview.jsを作成
“`ruby:app/javascript/packs/application.js
require(“@rails/ujs”).start()
require(“@rails/activestorage”).start()
require(“channels”)
require(‘../preview’) // 追記する
“`
#### ❸preview.jsの編集
##### ①画像投稿ページのフォームを取得
##### ②今記述したプレビュー画像を表示
初めてのOSSコントリビュート(Ruby gem)
# はじめに
先日 (超軽微ですが、、)初めてOSSコントリビュートしました :tada:
意外とgemにPRを送るまでの詳細な手順をまとめている記事が見つけられなかったのでまとめたいと思います。# きっかけ
[gem recapthca](https://github.com/ambethia/recaptcha)の挙動を確認するためにコードを見ていると叩いているAPIのバージョンが古いことに気づきました。
OSSコントリビュートに興味があったのでこれならすぐ修正できる!と思いPRを送ることに。# PRを送るまでの流れ
## ドキュメントを読んで、コントリビュート時の注意点を確認
Contributingについて記載がないか確認します。
例:Ruby
>See [“Contributing to Ruby”](https://docs.ruby-lang.org/en/master/contributing_md.html), which includes setup and build instructions.## 既にある issues, PRを確認する
クローズさ
あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ
## はじめに
Ruby 2.7 以降に追加された新しめの文法を5つ紹介します。
業務で Ruby のアップデート、および rubocop のアップデートをしました。
その際に学んだことですので、rubocop 関連の記事を参考にしています。## Rails/WhereExists
**`where` してから `exists?` するのではなく、`exists?` 単体でOK**
~~~ruby
# bad
User.where(name: ‘john’).exists?# good
User.exists?(name: ‘john’)
~~~https://www.rubydoc.info/gems/rubocop-rails/2.8.1/RuboCop/Cop/Rails/WhereExists
## Performance/MapCompact
**`map.compact` は`filter_map`で書き換えられる⚠︎**
`compact` は自身から `nil` を取り除いた配列を生成して返します。
`compact!` は自身から破壊的に `nil`
RubyからJavaに移行する時の考え方
# 主な違い
今までrubyを学習してきて、仕事でjavaを使うことになりました。
rubyと違うところがあったので、自分なりにまとめてみたいと思います。`Java`コンパイラによってコンパイルされる静的型付け言語
`Ruby`インタプリタによって解釈されるスクリプト言語で、動的型付け言語上記が一般的に説明されている説明となります。
自分の言葉で説明すると、
`Java`は型を宣言するのでコードが長くなるが、大規模開発などたくさんの人が関わる開発に向いている。習得の難易度は`Ruby`よりも高め。`Ruby`は、型を宣言する必要がなく短くて直感的にコードを書ける。アジャイル開発に向いている。習得の難易度が低いことや、日本語のドキュメントが充実しているので、プログラム初心者に向いている。# システムの違い
サーバーやデータベースの違いについて、表を作りました。(下記)
[]()![JavaとRailsの比較最終-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661107/f5f88
[Rails]MVCの責務範囲を サクッと説明
## Model
– controllerの情報は参照しない
– よくあるのは、controllerで定義した`current_user`を参照してしまっていること。– viewに依存するロジックは記述しない
– DecoratorやHelperで記述する## Controller
– リクエストを受け取り、何らかの処理を行い、レスポンスを返すだけ
– インスタンス変数の代入はアクションメソッド(indexやnewなど)直下で行う
– before_actionやprivateメソッド内で代入すると可読性が下がってしまう## View
– 複雑なロジックが含まれると可読性が落ちるので、DecoratorやHelper、Modelでの記述を検討する### おまけ
## Decorator
– Modelに依存する表示用のロジックを追加するモジュール
– `モデル名Decorator`という命名規則に従う## Helper
– Modelに依存しない表示用のロジックを記述する
– ただし、複数のモデルに依存する表示用のロジックを記述す
Rubyのメソッドと戻り値について
# 目次
1.メソッドとは?
2.戻り値とは?# 1.メソッドとは?
メソッドとは、「複数の処理を1つにまとめたもの」であり、他の言語における「関数」に相当する。
メソッドの作り方は以下の通りである。
“`
def メソッド名
処理
end
“`
※メソッドには、引数(追加情報)を渡すことでメソッドの中でその値を使うことができる。
※メソッドを呼び出すには、「メソッド名(値)」と入力する。
具体的にメソッドを使って、自己紹介をしようとすると、、、
“`index.rb
def self_intro(name)
puts “はじめまして!”
puts “私は#{name}です。”
endself_intro(“太郎”) #メソッドの呼び出し「メソッド名(値)」
“`
すると以下のように出力される。
“`console
はじめまして!
私は太郎です。
“`
# 2.戻り値とは?
戻り値とは、「メソッドを呼び出した際に受け取る値のこと」のことである。
メソッドの中でreturnを使うことで呼び出し元で値を受け取ることができる。
returnの使い方は以
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とは?
はじめに
—
ActiveRecordsについてあまり理解していないので、今回深掘りしてみました。**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の基礎を使って、メッセージ投稿アプリを作ってみた 【第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