- 1. 【Rails】【Ajax】コメント投稿・削除を非同期通信化する。
- 2. Railsバージョンアップにおける変更PRの特定の仕方
- 3. “Hello World”
- 4. Railsのタスクを定義する
- 5. 【Rails】(デプロイ初心者)Capistranoを使ってEC2に自動デプロイしたときに発生したエラーと対処法
- 6. decimal と int の違いってなんや?
- 7. Ruby7
- 8. [Ruby] ifとunlessの考え方の違い
- 9. 【Rails】制限時間機能を実装してみた。(解説付き)
- 10. macOS に rvm をインストールする
- 11. Ruby if文, unless文についてまとめました2
- 12. Ruby if文, unless文についてまとめました1
- 13. M1 Macでrbenv install 3.2.0を実行するとBUILD FAILEDがでる問題と解消方法
- 14. いいね機能の非同期化
- 15. Seleniumを用いてkindleハイライトを取り出す。(未完成)
- 16. optparseについて
- 17. Ruby Dateクラス
- 18. 【Ruby】File.joinを使用してリンクの結合をする
- 19. 【Ruby】指定のディレクトリ配下にあるディレクトリ/ファイルをリストに格納する方法
- 20. 【Ruby】PDFをzipファイルに圧縮する方法
【Rails】【Ajax】コメント投稿・削除を非同期通信化する。
# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。# 前提
Railsにて投稿アプリケーションを作成のち、投稿に対して、コメントできる機能実装済み。
今回は離乳食を投稿するアプリケーションで実装しています。# 目標
### コメント機能が非同期で行えるようにする
[![Image from Gyazo](https://i.gyazo.com/77a19537f3913ba1aae0c363e79f5193.gif)](https://gyazo.com/77a19537f3913ba1aae0c363e79f5193)# 手順
①jQueryの導入
②コメント表示部分を部分テンプレート化
③投稿機能の非同期化
④削除機能の非同期化# ①jQueryの導入
“`text.Gemfile
———略———
gem
Railsバージョンアップにおける変更PRの特定の仕方
## 本記事について
Railsに特化して書いているが汎用的ではある。
CHANGELOG.mdなファイルに全部載ってたら楽だが、全てのライブラリがそうではない。
じゃあどうやって調べるのかという話。## 環境
ruby 2.7.5
Rails 6.1.7.1## 本記事の題材
“`.rb
Rails 6.1の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:12:36.749685920 JST +09:00Rails 6.0の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:06:14 JST +09:00
“`Time.current.class
=> ActiveSupport::TimeWithZoneなため、ここに変更があったのかなと予想できる
ナノ秒出力されるようになってる!
## 調べ方1 変更が加わったバージョンを特定し、Releasesで確認
https://github.com/rails/rails/releases
“Hello World”
初めまして、774(ななし)です。
Qiitaへ初めての投稿になります。自己紹介をしますと、
・ねこ好き。?⬛
・ゲームもめちゃくちゃ好き。
・パートで接客業(手取り13万円)
・3月末でパートを辞めて、IT企業へ転職予定目標
・プログラミングで1,000万稼ぐ
・AR/VR等の開発をするプログラミングは最初かなり大変らしいですが、技術が積み上がって行くほど楽になるので、最初を頑張って乗り換えていきたいです。
目標の1,000万円稼ぐというのは、プログラミングなら手が届く範囲だと聞いたので、夢は大きくという事で設定しました。
XR事業に携わりたいのは、ゲーム好きからですね。
あと単純に最新技術はワクワクする!
なので先ずはrubyから独学しようと思います。既にプログラマーとしてる方
つまづいた時、知恵を貸していただけるとありがたいです。初心者の方でもお互い切磋琢磨できればと思います。
少しでも興味を持って下さった方がいましたら、Twitterで絡みませんか?
色々話すのを楽しみにしてます!最後まで読んで下さりありがとうございます。
Railsのタスクを定義する
Ruby on Railsアプリケーションを開発で定型の操作を繰り返すときは、タスクを定義すると便利です。
## 前提条件
あるRailsアプリケーションでは、ファイルアップロードジョブの途中で例外がおきたとき、処理途中のファイルやレコードが残ります。このため、開発の途中でしばしば次のコマンドを実行して、ゴミ掃除をしています。
“`sh
bin/rails runner ‘Job.destroy_all’
rm -rf tmp/upload-*
“`## テンプレートの作成
今回はこのコマンドをRailsのタスクにしてみたいと思います。
Railsのタスクの実体はlibディレクトリ配下にあるRakeタスクです。
テンプレートをRailsのジェネレートコマンドで作ることが出来ます。まず、最初にどのようなコマンドで、実行できると良いか考えてみましょう。
ジョブのゴミ掃除なので、`job:clean`が良いと思います。
完成したら次のように実行するイメージです。“`sh
bin/rails job:clean
“`タスク名がきまったらジェネレートコマンドでテン
【Rails】(デプロイ初心者)Capistranoを使ってEC2に自動デプロイしたときに発生したエラーと対処法
AWS環境に自動デプロイというのを自分で1からやってみたくなったので、`Capistrano`を使ってEC2にRailsアプリをデプロイしました。
「ググって出てきた簡単な使い方通りに進め、1通り手順とかイメージ掴めればいいかな〜」くらいの気持ちでやったのですが、エラーがかなり出て勉強になったので対応と合わせてまとめておきます。## 基本的に参考にしたサイト
https://github.com/capistrano/capistrano
https://github.com/capistrano/rails
[【Rails】 AWSのEC2にデプロイする方法~画像で丁寧に解説!](https://pikawaka.com/rails/ec2_deploy)
[【Rails】 Capistranoを使ってデプロイを自動化しよう](https://pikawaka.com/rails/capistrano)
## あらかじめお伝え– エラーメッセージの深掘りができていない点が多々あります
※今回の私の目標は「Capistranoを使って自動デプロイの手順を1通り経験すること」であ
decimal と int の違いってなんや?
# はじめに
Rails の開発でテーブル作成時に decimal と int を使い分けている PR を見かけたので、dicimal と int の違いについて調べてみました。
間違いあったらご指摘ください ?# 結論
decimal は固定長整数型, integer は整数型(4 バイト)
decimal は、全体の桁数-精度(precision)と小数点以下の桁数(scale)を指定された浮動小数点データに対し、
integer は、整数だ!!!!# データ型種類一覧
| データ型 | 種類 |
| :———- | :————— |
| primary_key | プライマリーキー |
| string
Ruby7
問題
次のif文をunlessというメソッドを用いて書き換えてください。“`Ruby
if a + b > 0
puts “計算結果は0より大きいです”
end
“`?ヒント?
unless
unlessとはifとは逆で、条件式がfalseの場合に処理が実行されます。“`Ruby:ifの場合
if 条件式
条件式がtrueの時に実行する処理
else
条件式がfalseの時に実行する処理
end
“`“`Ruby:unlessの場合
unless 条件式
条件式がfalseの時に実行する処理
else
条件式がtrueの時に実行する処理
end
“`“`Ruby:模範解答
unless a + b <= 0 puts "計算結果は0より大きいです" end ``` 【解説】 a + b > 0という式は、「a + b が0より大きいとき」にtrueとなります。
その結果endまでの処理が実行され文字列が表示されます。“`Ruby
if a + b > 0
puts “計算
[Ruby] ifとunlessの考え方の違い
ifとunlessの違いがわかっていませんでしたので、自分なりに纏めてみました。
“`ruby
#if ~ end
if A == B
puts C
end
#unless ~ end
unless A == B
puts C
end
“`
どちらもtrueで処理が実行されていくのは一緒です。
ですが、trueになる条件が違います。①ifの場合、真がtrueとなり、処理が実行される。
“`ruby
#if ~ end
if A == B
puts C
end
“`
②unlessの場合、偽がtrueとなり、処理が実行される。
“`ruby
#unless ~ end
unless A == B
puts C
end
“`
勘違いしやすいですが、処理される条件を理解してメソッドを使用しましょう。
【Rails】制限時間機能を実装してみた。(解説付き)
## 1.バージョンを確認しましょう!
Rails 5.1.6
ruby 2.7.2p112## 2.完成イメージ
投稿に制限時間を設定し、何かしらの処理をつける機能です。
今回は **「投稿(タスク)を設定し、制限時間を超えると通知が来る機能」** を実装する準備段階です。## 3.実装の大きな流れ
>1.投稿モデル(Tweet)に、制限時間を保存するカラムを追加する。
>2.投稿を保存するときに、制限時間と現在時刻を比較して、制限時間が過ぎていないかをチェックするアルゴリズムを記入する。
>3.制限時間が過ぎている場合はエラーを返し、投稿を保存しない設定を仕込む。ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳˙ )ᕗ## 4. モデルに、制限時間を保存するカラムを追加しよう。
“`ターミナル
$ rails generate migration AddLimitTimeToTweets limit_time:datetime
$ rails db:migrate
“`tweetsテーブルに、**limit_
macOS に rvm をインストールする
macOS に `rvm` (Ruby Version Manager) のインストール方法を記述します。
※ `rvm` とは、`ruby` バージョンの切り替えソフトウェアです。## 環境
– macOS Ventura バージョン 13.1
## Install GPG keys
– `GPG` (GNU Privacy Guard) パッケージのインストールします。
“`sh
brew install gpg
“`– `rvm` インストールパッケージの検証に使用する `GPG` キーをインストールします。
“`sh
gpg –keyserver keyserver.ubuntu.com –recv-key 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
“`※ [公式ページ](https://rvm.io/rvm/install) に書いてあるコマンドを使うとエラーになります。
`gpg: 鍵サーバからの受信に失敗しました: S
Ruby if文, unless文についてまとめました2
こちらの続きとして書きます。
https://qiita.com/ta–i/items/a16aa2780e3849b21338
# 条件分岐処理
ifからunlessに書き換える例を3つ挙げてみました。## ifからunlessに書き換える例1
“`ruby
if 100 == 10
puts “同じ数字です”
else
puts “違う数字です”
end
“`上記if文をunless文で書き換えると次のようになります。
“`ruby
unless 100 == 10
puts “違う数字です”
else
puts “同じ数字です”
end
“`## ifからunlessに書き換える例2
“`ruby
if 100 + 10 > 0
puts “0より大きい数字です”
else
puts “0より小さい数字です”
end
“`上記if文をunless文で書き換えると次のようになります。
“`ruby
unless 100 + 10 <= 0 puts "0より大きい数字です" else puts "0より
Ruby if文, unless文についてまとめました1
# 条件分岐処理
## if文
「もし〇〇だったら□□をする」という処理をします。“`ruby
if 条件式
処理1(条件式がtrueのときに実行)
else
処理2(条件式がfalseのときに実行)
end
“`
if文は、条件式が「正しい」か「正しくないか」で実行する処理を分岐させています。
***「正しい」 = true***
***「正しくないか」 = false***
条件式が正しい(true)なら、処理1を実行。
条件式が正しくない(false)なら、処理2を実行。## unless文
「もし〇〇だったら□□をする」という処理をします。
unless文はif文と反対で、条件式が「偽(false)」の時に処理が実行されます。
unless文にelsif を指定することはできないです。公式リファレンスを参考にしました。
https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#unless“`ruby
unless 条件式
処理1(条件式がfal
M1 Macでrbenv install 3.2.0を実行するとBUILD FAILEDがでる問題と解消方法
## 忙しい人向け
rbenvでruby 3.2.0のビルドエラーに詰まった場合は以下を実行する。
“`sh
brew install libyaml
rbenv install 3.2.0
“`## 動作確認環境
* M1 Max MacBook Pro 2021
* macOS Ventura 13.1“`sh
$ sw_vers
ProductName: macOS
ProductVersion: 13.1
BuildVersion: 22C65
“`## 事象
M1 Macにて、 `rbenv install 3.2.0` を実行するとビルドエラーが発生した。
“`sh
$ rbenv install 3.2.0
To follow progress, use ‘tail -f /var/folders/tm/b75vw5997ld_vk72x2lm2qcd_jcwqg/T/ruby-build.20230130113635.15578.log’ or pass –verbose
Do
いいね機能の非同期化
# 1.非同期機能とは
– 画面全体を更新せずに、一部だけ更新すること
– Ajaxという手法が使用されます。# 2.実装
### 2−1.リンクに`remote: true`を追記する
– これにより、リクエストがhtml形式からjs形式になる
“`:app/views/posts/show.html.erb
<% if current_user && @post.favorited_by?(current_user) %>
<%= link_to post_favorites_path(@post), method: :delete, remote: true, class: "favorite_btn" do %>
♥<%= @post.favorites.count %> いいね
<% end %>
<% else %>
<%= link_to post_favorites_path(@post), method: :post, remote: true, class: "favorite_btn" do %> #ここ
♡<%= @post.favor
Seleniumを用いてkindleハイライトを取り出す。(未完成)
## はじめに
amazon kindleで本を読んでいる方なら、highlight(強調線)を引くことがたまにあると思う。
rubyにおいてのkindle-highlights関連ライブラリは、スクレイピングするためにMechanizeを用いているが、 個別で本の情報を取り出そうとなるとasin(アマゾン独自の商品識別番号)が必要となる(多分)。これを改良したいと思い、コードを書いた。
スクレイピング用ライブラリとしてSeleniumを用いてkindleのhighlightを取り出すことが出来たので、皆さんの参考になればと考えている。今回は、すべての本のhighlightを取り出ところまで出来た。今後、書籍名か作者名だけで書籍を特定し、その書籍のhighlightだけを取り出すように改善したい。## 早速ソースコード
~~~kindle_highlights.rb
require ‘selenium-webdriver’require ‘dotenv’
Dotenv.load
EMAIL = ENV[‘KINDLE_ID’]
PASSWORD = ENV[‘K
optparseについて
# 経緯
Rubyでカレンダーアプリを作成する際に,引数に任意の数値を渡すことでmacの`cal`コマンドで表示されるようなカレンダーを表示したかったのでoptparseを使用しました。そこで私なりに`optparse`について調べてみました。
# 役割
– コマンドライン引数
コマンドライン引数は、ターミナルから実行時に引数を渡して読み込める仕組みです。
– 引数は文字列として出力されます。
### OptionParser
以下
“`
require ‘optparse’opt = OptionParser.new
#aに渡ってきた引数をvに格納
opt.on(‘-a’) {|v| p v }
# 真偽値を表示。
opt.parse!(ARGV)
p ARGV$ ruby sample.rb -a foo
# この場合aに引数が渡っていますのでtrueを表示。そしてfooを表示
=> true
[“foo”]
“`
引数が2つの場合
“`
require ‘optparse’opt = OptionParser.new
opt.on(‘-a’)
Ruby Dateクラス
# Dateクラス
Dateクラスは、Rubyの標準ライブラリの機能です。
これを使うには、下記一文を記述する必要があります。“`ruby
require “date”
“`# Dateクラスを使ったプログラムの例を紹介
“`ruby
require “date”
day = Date.today.wday
puts day
“`“`
0
# ターミナル出力例
“`***wday***は、曜日を0(日曜日)から6(土曜日)の整数で取得する、Dateクラスに用意されているメソッドです。
上記の記述を実行すると、その日の曜日に合わせた数字がターミナルで出力されます。
今日が日曜日だったら、0が出力されます。## 0から6の整数ではなく、日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日 で取得したい場合はどうする?
“`ruby
require “date”
day = Date.today.wday
days = [“日曜日”, “月曜日”, “火曜日”, “水曜日”, “木曜日”, “金曜日”, “土曜日”]puts day
【Ruby】File.joinを使用してリンクの結合をする
# 前提条件
– Ruby 3.1.0
# 背景
file.txtのフルパス(dir/dir2/dir3/file.txt)を表示させたい。
“`
└── dir
└── dir2
└── dir3
└── file.txt
“`
しかし先頭・末尾の/(スラッシュ)有無が変数間で様々である場合、正常にリンクを結合できないことがある。“`ruby:変数代入
dir1 = “dir/dir2/dir3” #末尾に/(スラッシュ)なし
dir2 = “dir/dir2/dir3/” #末尾に/(スラッシュ)あり
file1 = “file.txt” #先頭に/(スラッシュ)なし
file2 = “/file.txt” #先頭に/(スラッシュ)あり
“`
“` ruby:コンソール
irb(main)> dir1 + file1
=> “dir/dir2/dir3file.txt” #結合失敗
irb(main)> dir2 + file2
=> “dir/dir2/dir3//file.txt” #
【Ruby】指定のディレクトリ配下にあるディレクトリ/ファイルをリストに格納する方法
# 前提条件
– Ruby 3.1.0
# やりたいこと
dir1配下のディレクトリ/ファイルをリストに格納する。
“`
└── hoge
└── hoge2
├── dir1
│ ├── file1
│ ├── file2
│ └── dir3
│ └── file3
└── dir2
“`
# 方法
### Dirクラスのglobメソッドを使う
“` ruby:実装
files = []
Dir.chdir(“hoge/hoge2”) do
Dir.glob(“dir1/*”).each do |item|
files.push(item)
end
end
# => files =[“dir1/dir3”, “dir1/file1”, “dir1/file2”]
“`
**-詳細-**
リストを用意し変数に代入する。
“` ruby:詳細1
files = []
“`
カレントディレクトリを`hoge/hoge2`に設定する。
【Ruby】PDFをzipファイルに圧縮する方法
# 前提条件
– Ruby 3.1.0
– gem ‘rubyzip’
# やりたいこと
PDFファイルをzipファイルに圧縮する。
# 方法
### 1. rubyzipのGemをインストールする
Gemファイルに以下を追加する。
“` ruby:Gemfile
gem ‘rubyzip’
“`
コンソールからGemをインストールする。
“` ruby:コンソール
bundle install
“`
### 2. rubyzipを使用してプログラムを作成する
“` ruby:pdf_to_zip.rb
require ‘zip’module ABC
class PdfToZip
class << self def exe #zip化するPDFが格納されているディレクトリ pdf_folder_path = "”
#zipファイルを出力するディレクトリ/ファイル名
zip_folder_name = “