- 1. 環境
- 2. 症状
- 3. 環境
- 4. 概要
- 5. ImageMagickを入れる
- 6. 症状
- 6.1. [Rails6/TailwindCSS] No route matches [GET] “/packs/js/*.js”)が出た時に行った修正
- 6.2. Rails コメント機能を非同期通信(Ajax)を用いて実装したい!
- 6.3. Rails 7.0.2にアップグレード後、SQLインジェクションの危険性のあるクエリがエラーになった
- 6.4. Firebase・GCP(BigQuery)を活用したリソースのPV数のカウントについて
- 6.5. 【Docker】Docker for macのコンテナに他端末からアクセスする方法【Rails】【React】
- 6.6. SNS認証について
- 6.7. 外部キー制約のついたカラムを削除する方法
- 6.8. Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法
- 6.9. Rails APIからReactに渡すデータを整形する方法
- 6.10. railsでclass, moduleの定義場所を探したい
- 6.11. if式やループのネストを減らす方法まとめ
- 6.12. 1年ぶりに更新したサービスがherokuのデプロイエラーが出たときにやった解決策
- 6.13. 【Python】Pythonの型名が覚えられなかったのでメモ
【CircleCI】サブディレクトリのプロジェクトをビルド対象にする書き方
タイトルの通りですが、調べてもなかなか方法にたどり着けなかったので記録しておきます。
今回は私がよく使っている **Rails** をサンプルにします。## ルートディレクトリにプロジェクトがある
### フォルダ階層
“`
root
├── .circleci
│ └── config.yml
├── app
├── bin
├── config
├── db
├── lib
:
“`### 設定ファイル
下記の例は公式から持ってきたものです。
本当はjobsの中に `test` も合ったのですが、今回の説明では不要だったので削除しています。
– [言語ガイド: Ruby – CircleCI](https://circleci.com/docs/ja/2.0/language-ruby/)“`yml:.circleci/config.yml
version: 2.1orbs:
ruby: circleci/ruby@1.0
node: circleci/node@2jobs:
build:
docker:
– im
vscode rails環境構築時のエラー rails s
“`rails s“`でエラーが起こった。
“`
********@mbp jisaku_app % rails s
=> Booting Puma
=> Rails 7.0.2.3 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/Users/********/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/webpacker-5.4.3/lib/webpacker/configuration.rb:103:in `rescue in load’: Webpacker configuration file not found /Users/********/jisaku_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or dire
業務時のGitなどの操作
インターンに入って時間が経ち、そろそろgitの使い方にも慣れてきたと思っていましたが、まだいくつか間違えそうなところがあるので自分のためにも記事に残しておきます。
## タスクのブランチ操作
[こちら](https://qiita.com/iguchan_4649/items/6c74779d73e31856c78f#%E4%BC%9A%E7%A4%BE%E3%81%AEgit%E7%8A%B6%E6%B3%81%E3%81%8C%E6%9B%96%E6%98%A7%E3%81%AA%E3%81%BE%E3%81%BE%E9%80%B2%E3%82%81%E3%81%AA%E3%81%84)でPR作成までの流れをgitで行い、次のタスクを行うときは以下の流れで行うようにします。1. `git checkout master`でmasterやstagingなどのメインブランチに移動
2. 常に最新の情報を取得したいため、`git pull origin master`でmasterやstagingなどのリモートリポジトリの変更内容を取り組む
3. `git checkout -b
【Rails】An error occurred while installing rmagick (2.16.0), and Bundler cannot continue.
環境
windows11
Rails 6.0.4.1
rmagick 2.16.0症状
rmagicをGemに記載した後、「bundle install」を実行したときに、下記のエラーメッセージが表示されました。
翻訳すると、「rmagick(2.16.0)のインストール中にエラーが発生し、Bundlerを続行できません。」でした。“`terminal:error
$ bundle install(中略)
Fetching rmagick 2.16.0
Installing rmagick 2.16.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.current directory:
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/rmagick-2.16.0/ext/RMagick
C:/Ruby30-x64/bin/ruby.exe -I C:/Ruby30-x6
【ImageMagick】windows11でImageMagick入れて、Railsでrmagickを使う手順
環境
windows11
Rails 6.0.4.1
ImageMagick 6.9.12-44
rmagic4.2.5概要
Railsでrmagckを入れる際にwindowsでやってる記事が見つからなかったので、書きます。
rmgcik2.16.0までではimageMagick7バージョンに未対応らしいので、ImageMagick6バージョンを入れていきます。
引用元↓https://www.ownway.info/Ruby/rmagick/howtoinstall/windows
ImageMagickを入れる
以下のサイトのWindows版のところからダウンロードします。
https://legacy.imagemagick.org/script/download.php
ダウンロードしたら、起動。すると下記の画面が表示されます
「Iaccept the agreement」を選択して、規約に同意します。

– [「現場で使える Ruby on Rails 5速習実践ガイド」](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)の「Chapter7-8 非同期処理や定期実行を行う(Jobスケジューリング)」を進めていたところ、“`sidekiq“`の実行でハマってしまいました。
# 1.開発環境
“`Ruby:terminal
$ ruby -v
ruby 2.6.9p207 (2021-11-24 revision 67954) [x86_64-darwin19]
$ rails -v
Rails 5.2.7
“`# 2.はまったこと
“`bundle exec sidekiq“`を実行したところ、次のようなエラー
【Rails】Could not find gem ‘rmagick (= 2.16.0)’ in locally installed gems.の対処法【rmagick】
症状
rmagickをinstallして、Railsサーバーを起動したところ、下記のエラーメッセージが表示されました。
翻訳すると、「ローカルにインストールされたgemでgem’rmagick(= 2.16.0)’が見つかりませんでした。
ソースには、次のバージョンの「rmagick」が含まれています。4.2.5
`bundle install`を実行して、不足しているgemをインストールします。」“`terminal:error
$ gem install rmagick
Could not find gem ‘rmagick (= 2.16.0)’ in locally installed gems.
The source contains the following versions of ‘rmagick’: 4.2.5
Run `bundle install` to install missing gems.“`一応Gemfileのrmagickも記載します。
“`ruby:Gemfile
gem ‘carrierwave’
gem ‘rma
[Rails6/TailwindCSS] No route matches [GET] “/packs/js/*.js”)が出た時に行った修正
## 結論
これを
“`erb:application.html.erb
<%= stylesheet_link_tag 'application', 'data-turbolinks-track': 'reload' %>
“`こうした。
“`erb:application.html.erb
<%= stylesheet_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
“`## 背景
[DMM WEBCAMPの卒業生コミュニティ](https://twitter.com/Webcamp_COMM)でDocker環境でチーム開発をして勉強をしていた際に、Rails6にTailwindCSSを導入して開発を進めるタイミングがありました。Gemの`gem ‘tailwindcss-rails’`を使用して読み込ませていたのですが、何らかの作業ミスか設定が原因で、作業中にCSSが自動で更新されなくなることが起こりました。
## 問題
コンテナの中に入り、`webpack`コマンドの実行でコン
Rails コメント機能を非同期通信(Ajax)を用いて実装したい!
## はじめに
プログラミング初学者の自分用アウトプットです。
誤った知識や記述があれば教えていただけると幸いです。## 開発環境
– ruby2.6.3
– rails6.1.4## 前提条件
本を投稿するWebアプリを作成中
– ユーザー機能実装済(Userモデル(device導入))
– 投稿機能実装済(Bookモデル)
– コメント機能実装済(BookCommentモデル)## やりたいこと
– ユーザーがコメントを投稿した際に、ページをリロードせずにコメントの投稿ができる。
– ユーザーがコメントを削除した際に、ページをリロードせずにコメントの削除ができる。###### コメント機能を使用した際に、ページを部分的に更新できるようにしたい!
## 実装の流れ
#### ●jQueryを導入
“`ruby:Gemfile
gem ‘jquery-rails’
“`
“`ruby:javascript/packs/application.js
import “jquery”;
“`
“`
$ bundle install
“`
#### ●view
Rails 7.0.2にアップグレード後、SQLインジェクションの危険性のあるクエリがエラーになった
# エラー内容
エラー内容は以下。
“`text
ActiveRecord: :UnknownAttributeReference: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): “field(id, ?)”.This method should not be called with user-provided values, such as request parameters or model attributes. Known-safe values can be passed by wrapping them in Arel.sql().
“`要は、「field(id, ?)はSQLインジェクションの危険があるから、危険じゃないことを確認できてるならArel.sql()で囲め」とのこと。
エラー出た部分のコードは以下の様な感じ。
“`ruby
User.where(id: ids).order
Firebase・GCP(BigQuery)を活用したリソースのPV数のカウントについて
ネイティブアプリ開発のプロジェクトで、自分のプロフィールが閲覧された回数などを記録して、ユーザーにそれを表示してあげると言う機構を作成しました。
その際に、Firebase、GCPを活用して作ったので、その記録を書きたいと思います!
主にバックエンド(Rails)の視点で書いていますが、基本は仕組みの解説なので、言語はそれほど関係ないかなと思います。# 作った機構の全体像
まずは作った機構の全体像を載せておきます。
– アプリ側のコードにGAのタグを埋め込み
– ユーザーがイベントを踏むと発火しデータをGAへ送信
– GAで保存→定期的にGAからBigQueryにデータをエクスポート
– BigQueryでデータを永続化→BigQueryで保存データに対してSQLを実行してデータを加工して取得
– そのデータをアプリで表示
# GC
【Docker】Docker for macのコンテナに他端末からアクセスする方法【Rails】【React】
## はじめに
本記事は、プログラミング初学者が学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。## Docker for macのコンテナに他端末からアクセスする方法
Docker for macでは特段の設定をすることなく、ローカル環境と同じように[【Rails】macのrailsサーバーに他の端末からアクセスする方法](https://qiita.com/P-man_Brown/items/040b14576020f51a843d)に記載の手順でアクセスできました。
Windowsの場合には別途設定が必要なようです。### Nginx + Rails
`nginx.conf`を以下のように記述している場合には`http://localhost`の代わりに`http://ローカルIPアドレス`とすることでiPad等でアクセスできます。“`nginx.conf
upstream myapp
SNS認証について
# SNS認証について
– 学習マッチングサイトを作成して、google認証を実装したい
– 認証機能について理解を深めたい
## 環境
– AWS:EC2,RDS(MySQL),VPC,Route53
– webサーバー:NGINX
– アプリケーションサーバー:Puma
– フレームワーク:Ruby on Rails## 認証の仕組みについて
今回はgoogle認証であるため、登場人物は、– googleのリソースサーバ
– エンドユーザー
– webアプリ
– googleの認可サーバーです。
### リソースサーバーとは
リソースサーバとは、保護対象のリソースを保持しているサーバーを指します。ここでいうリソースとは、googleフォトの画像やプロフィール情報等のことと思います。
### ユーザー
リソースオーナであり、アカウントを連携したいユーザーを指す。
### webアプリ
これは、つまり、学習マッチングサイトです。
### 認可サーバー
リソースサーバーに信頼されたサーバーで、リソースオーナーの認証を行い、リソースサーバーに対するアクセストークンを発行します。
外部キー制約のついたカラムを削除する方法
ここではgenreテーブルからmovie_idカラムを削除します。
まず “`$ rails generate migration remove_カラム名_from_テーブル名“` を実行して、外部キー制約のかかったカラムを削除するためのマイグレーションファイルを作成します。
“`
# rails g migration remove_movie_from_genre movie:references
Running via Spring preloader in process 414
invoke active_record
create db/migrate/20220406054902_remove_movie_from_genre.rb
“`削除用のマイグレーションファイルを確認します。
“`20220406054902_remove_movie_from_genre.rb
class RemoveMovieFromGenre < ActiveRecord::Migration[6.0] def change r
Active Storageの複数ファイルを1つのzipファイルに圧縮する効率の良い方法
とある案件で、Active Storageで管理しているファイルを複数選択して、1つのzipファイルに圧縮する要件があったので実装方法を検討しました。
# 前提
この記事では下記のUserモデルの`save_selected_avatars`メソッドの実装方法を検討します。
“`ruby:user.rb
class User < ApplicationRecord has_one_attached :avatar class << self def save_selected_avatars(user_ids) # TODO: user_idsで指定したユーザーのavatarを1つのzipファイルに圧縮して保存する end end end ``` なお、この記事では下記のバージョンを使って動作確認しています。 ZIPファイルを生成する処理はrubyzipのGemを使います。 * ruby 3.1.1 * rails, activestorage 7.0.2.3 * rubyzip 2.3.2 # 実装方法検討 ## その1 ま
Rails APIからReactに渡すデータを整形する方法
RailsAPI+Reactという構成でアプリを作っているとデータを整える必要がある時が多々あると思います。
例えば以下のようなユーザーデータがあるとします。
“`ruby
{
name: ‘taro’
age: 21
sex: ‘male’
phone_number: 08012341234
post_code: ‘xxx-xxxx’
prefecture: ‘ZZZ県’
city: ‘ZZZ市’
ward: ‘ZZZ区’
town: ‘ZZZ町’
}“`
React側で住所が欲しいときに一々、郵便番号や県、市などを繋げるのは面倒ですよね。こういう時はRailsでシリアライザーをつかうと便利です。シリアライザーは以下のようになります。“`ruby
class UserSerializer < ActiveModel::Serializer attributes :name, :age, :sex, :phone_number, :post_code, :prefecture, :city, :ward, :town de
railsでclass, moduleの定義場所を探したい
# はじめに
[こちらの記事](https://www.notion.so/Rails-logger-debug-3a5e8388d53b4848b954eebc4693ff3b)で `logger` の正体を探るためにRailsモジュールの中身を見ようとしたのですが、定義ファイルを探すのが少し大変だったのでその方法をメモしておきます。
# moduleの探し方
コンソールで探しているモジュールに値を再代入すると警告と一緒に定義場所のパスが出力されるのでそれを利用します。
個人的には利便性を考えて同じものを再代入するのがよいと思います。
例えば私の環境でActionControllerを探そうとすると次のようになります。
“`
irb(main):058:0> ActionController.class
=> Moduleirb(main):062:0> ActionController = ActionController
(irb):62: warning: already initialized constant ActionController
/usr/l
if式やループのネストを減らす方法まとめ
# 結論
– 早期リターンする
– 条件式で代入を行う以上のやり方でネストを減らすことができます。
### 早期リターンする
例えば、受け取った数字が50より大きいとき2倍にする関数があるとき
早期リターンしない場合。
“`ruby
def double(number)
if number > 50
number * 2
end
end
“`早期リターンする場合。
“`ruby
def double(number)
return if number <= 50 number * 2 end ``` ループ内の場合は`next if number`でも良いですね。 ### 条件式で代入を行う 例えば、ユーザーを1つ取り出して何かしたいとき 条件式で代入しない場合 ```ruby def update user = User.find(params[:id]) if user ... end end ``` 条件式で代入する場合 ```ruby def update if user = User.find(par
1年ぶりに更新したサービスがherokuのデプロイエラーが出たときにやった解決策
1年前に作ったサービスで、クライアントさんから、値段部分の修正を依頼されました。
そのため4月に切り替わる時点でアップされるように、ローカルで準備を進めていました。
ちなみにローカルでは問題なく切り替わり、githubにもpushが完了。
3末日にさ、herokuにデプロイ!
git push origin heroku でものの数分で終わる作業なはずが
半日近く費やす結果になりました。
なぜかherokuにデプロイでエラーが出てしまいました。
随分久しぶりに動かしたのもあって諸々のアップデートが原因だったようですが、それに付随してのあれこれを記録がてら## herokuデプロイエラー
“`
$git push heroku main
“`
これで通常であれば、リモートリポジトリの最新のmainブランチのものがherokuに反映されるはずが“`
[Release/obj.target/binding/src/binding.o] Error 1
remote: gyp ERR! build error
remote: gyp ERR! st
【Python】Pythonの型名が覚えられなかったのでメモ
Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
・Java, Ruby(他覚えやすかったキーワードなど)での呼び方※あれば感想など
“`###### 数値
“`
・int
・整数・float
・小数点※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`###### 論理
“`
・bool(Yes / No)
・boolean
“`###### 文字列
“`
・str
・String※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`###### シーケンス
“`
・list
・ArrayList(Java)(後から追加できるからArrayListで覚える)・tuple
・list(配列)(後から変更できないからlistで覚える)