- 1. carrierwaveでのファイル名のみの指定方法について
- 1.1. フリーランスのエンジニアならフルリモートで年収1000万円は十分に可能では?
- 1.2. ポートフォリオで使用したGem一覧
- 1.3. devise導入
- 1.4. renderとredirect_toによる画面遷移について
- 1.5. カラム追加、削除コマンド
- 1.6. RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう
- 1.7. 【JavaScript】プレビュー機能の実装
- 1.8. Gemのバージョン指定
- 1.9. あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ
- 1.10. RubyからJavaに移行する時の考え方
- 1.11. EC2上にrailsアプリをデプロイするまで~puma起動で躓いた所を整理
- 1.12. [Rails]MVCの責務範囲を サクッと説明
- 1.13. Railsで非同期処理 セレクトメニューの値による項目の表示制御
- 1.14. Rubyのメソッドと戻り値について
- 1.15. deviceを使わないでログイン認証機能を作ってみる
- 1.16. 【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
- 1.17. DockerのRailsアプリからRedisサーバに接続したい
- 1.18. 【超簡単】rails投稿機能で削除しても履歴残す!!(論理削除)
【Rails】chartkickを使用してシンプルなグラフを扱う
※rails6を使用しています
# chartkick とは
Railsで簡単にグラフを作成することができるライブラリです。
Railsで使用することが主な目的のようですが、多言語(React, Vue.js, Ruby, Python, Elixir, and Clojure)でもグラフを作成することができます。
github [chartkick](https://github.com/ankane/chartkick)https://chartkick.com/
![Line_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/eb4724cf-a04d-695b-b92b-272052504fae.png)
![area_chart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/401b2bd8-a834-0bbb-2228-bf9097426d17.png)他に
(Rails)carrierwave【ファイル名のみ表示方法】
carrierwaveでのファイル名のみの指定方法について
“`
cost[:costsfile]
→test.xlsxcost.costsfile
→/uploads/cost/costsfile/16/test.xlsx
“`
・”[:~]”なのか”.~”によって異なる。
・ネットで検索してみてもこのような内容がないためログとして投稿。
フリーランスのエンジニアならフルリモートで年収1000万円は十分に可能では?
# 時給何円なら年収1千万円になるのか?
時給6000円でフルタイムで働くだけで年収1千万円を超えそうだ。
年間240時間 * 時給6000円 * 8時間 = 11,520,000円
時給5000円でもそれに近くなる。( 9,600,000円 )
# 個人的な根拠
– フルリモートの正社員で月額70万円/年840万円で働いていた時期がある。(フリーランス価値にして1.5倍計算すれば、1千万円超えとなる)
– クラウドワークスに登録していたらフルリモートで時給6000円以上の案件での募集が来た。
– Twitterで時給5000円以上のフルリモート案件に参加の話が決まりそうだったことがある。(他社に就職したので実現はしなかった)# 参考: クラウドワークスでのメッセージ
“`
お世話になります。
***株式会社と申します。現在、Ruby on Railsエンジニアを探している中で、
下記案件にマッチするかもしれないと思い、
この度ご連絡させて頂きました。
ーーーーーーーーーー
▼案件概要
数百万人のユーザが利用する国内最大級の***の
企画・開発・運用をしている
ポートフォリオで使用したGem一覧
Railsポートフォリオで使用したGemの一覧です。
|Gem名 |使用目的 |説明|
|—|—|—|
|devise|ログイン機能
|carrierwave |画像アップロード用
保存先は開発環境はローカル、本番環境はS3に設定 |DBを圧迫させないためにファイル名をDBに保存している。画像表示は、画像が格納されてるパスとDBに保存されているファイル名を使用|
|fog-aws |S3に保存用
|dotenv-rails |環境変数を設定|プロジェクト配下に.envファイルを作成し、ファイル内に環境変数を記入し、ENVで呼び出す
|ransack|検索機能の実装用|
|kaminari|ページネーションの実装用|kaminari-bootstrapを使うと簡単に綺麗なページネーション作成可能
|rspec-rails|テスト用
|factory_bot_rails|テスト用のデータを生成してくれる
|pry-rails|デバッグツール|処理の確認したい箇所にbinding.pryを入れて値など確認できる
|rubcop-airbnb|Rubyコードの自動
devise導入
devise導入の基礎的なフローについての備忘録です。
## 導入手順
Gemのインストール
“`ruby:gemfile
gem ‘devise’
“`deviseの設定ファイルを作成
% rails g devise:install
deviseコマンドでモデルを作成
% rails g devise モデル名
deviseのビューファイル作成
% rails g devise:views
## データベースにカラムを追加する場合
% rails g migration Addアッパーキャメルでカラム名Toファイル名 カラム名:データ型
## deviseで追加したカラムに値を保存する処理
deviseの処理を行うコントローラーはGem内に記述されているため、編集ができない。
よって、deviseのコントローラーにストロングパラメーターを反映するために、全コントローラーの共通処理ができるapplication_controller.rbにdeviseのストロングパラメーターを定義する。“`ruby:ap
renderとredirect_toによる画面遷移について
# 概要
* create、update、destroyアクションではビューファイルを作成しないことが多い
* そのため上記のアクションで画面遷移先を決めるために、redirect_to, renderを用いる
* 新規投稿, 編集, 削除した際は、以下のいずれかの方法で指定されたビューを表示させる**redirect_to**
—![](https://i.imgur.com/p4FkFbS.png)
**処理の流れ**
1. redirect_toがルーティングにURLを送る
2. ルーティングと送られてきたURLとHTTPメソッドを照らし合わせて、どのコントローラのどのアクションを実行するかを決める
3. アクションを実行する
4. ビューを表示する**render**
—![](https://i.imgur.com/3nBtq86.png)
**処理の流れ**
1. renderで定義したビューファイルを表示するrenderが裏で動いているのはたったこれだけです
# 違いと注意点
**renderとredirect_toの大きな違いを
カラム追加、削除コマンド
# 環境
ruby 2.6.3p62
Rails 6.1.5
* * *## カラムの追加コマンド
“`
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
$ rails g migration AddNameToLists name:string
“`
カラム削除コマンド
“`
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
$ rails g migration RemoveNameFromLists name:string
“`
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テーブルを使
【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の編集
##### ①画像投稿ページのフォームを取得
##### ②今記述したプレビュー画像を表示
Gemのバージョン指定
# Gemのバージョン指定方法
Gemfileでは、インストールするGemに対してバージョン指定方法ができます。| 指定方法 | 意味 |
|:—————–|:—————–|
|1.2.3 |1.2.3 |
|>= 1.2.3 |1.2.3以上 |
|>= 1.2.3, < 1.2.5 |1.2.3以上1.2.5未満| |~> 1.2.3 |1.2.3以上1.3.0未満|# バージョニング表記(補足)
|表記 | 意味 |
|:—————–|:—————– |
|x.0.0 |メジャーバージョン。後方互
あなたは知っている?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
EC2上にrailsアプリをデプロイするまで~puma起動で躓いた所を整理
アプリケーションのpumaの起動で起きたエラーとその解決策を記録。
もろもろの設定を終えた後に
bundle exec pumactl start
で起動しようとすると、
! Unable to load application: Aws::Sigv4::Errors::MissingCredentialsError: missing credentials, provide credentials with one of the following options:
– :access_key_id and :secret_access_key
– :credentials
– :credentials_provider
missing credentials, provide credentials with one of the following options:
– :access_key_id and :secret_access_key
– :credentials
– :credentials_providerという謎エラー。数日前に
[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に依存しない表示用のロジックを記述する
– ただし、複数のモデルに依存する表示用のロジックを記述す
Railsで非同期処理 セレクトメニューの値による項目の表示制御
# まえがき
Railsでアプリを作った際に、プルダウンの値によってフォームを追加したり非表示したりする必要が出てきた。これは非同期処理といって、ちょっと難解なものらしかった。実装するとたしかにややこしいものだったので、やりかたを書いていくことにする。# 完成イメージ
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104211/737fcf03-0c5e-898c-d816-e453417cf697.gif)
画面遷移せずにフォームが出たり消えたりする。
# 動作フロー
動作は以下のようになる。
1. 値が変更されたらjsファイルの関数が発火
2. Ajax通信が行われる(指定したコントローラーへデータ送信)
3. Ajax通信のレスポンスデータをもとにviewファイル書き換え少しずつ説明していく。
## 0. 下準備:jQueryの導入
やっていく前にjQueryをRailsに導入する。いろいろあったが、私は以下のようにした。“`js:app
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
【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に
【超簡単】rails投稿機能で削除しても履歴残す!!(論理削除)
# やること
rails の投稿機能で削除してもレコードを完全に削除するのではなく、ユーザーから非表示になるのみで投稿者や管理者から復元できるようにする!
![画面収録-2022-08-25-18.19.24.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/cd75eb93-9646-722a-5b2d-50028b94f021.gif)# 手順
1. gemのインストール
1. カラムの追加
1. 一覧ページの表示
1. 削除、復元
こんな感じでやっていきます!今回はgemの機能が強すぎるので gemの使い方がメインになります:massage:
早速やっていきましょー!!# 1.Gemのインストール
“`gemfile:Gemfile
gem ‘discard’, ‘~> 1.2’
“`
“`terminal:terminal
bundle install
“`# 2.カラムの追加
論理削除をしたいテーブルに`discarded_at`カラムを追加します!
“`te