- 1. New Relic を使って Redmine のオブザーバビリティを実現
- 2. 37signalsが書くコードの”Service Object”を見てみる
- 3. [作成中]RSpecについて初学者段階のメモ
- 4. 【Ruby on Rails】Google APIを使ってSpread Sheetを操作する
- 5. 【Ruby on Rails】画面読み込み時にレコードがDELETEされる
- 6. 「オブジェクト指向設計実践ガイド」を読んで、設計を学ぶ
- 7. Rails7.1、ruby3.34を詰まらずインストールしたい人へ
- 8. Ruby技術者認定試験に合格してみて【Silver編】
- 9. 【DP】動的計画法をRubyで学ぶ
- 10. Rails view helperとテストのリファクタリング:モックをcode smellと感じること
- 11. RailsのCSRF保護について
- 12. 超初心者のためのRSpec入門ガイド
- 13. 【Rails】一つのモデルに対して複数の意味を持たせたい(class_name, inverse_of )
- 14. Rubyでデザインパターン (7) Builderパターン
- 15. Crystal言語でシングルバイナリを作る
- 16. Rails: あなたがService Objectでやりたいことは、たぶんActiveRecordで1行でできる
- 17. 単体テストコード MySQLのエラー解消
- 18. 僕のrubocom設定
- 19. Railsのviewテストを書こう
- 20. [比較]map と pluck
New Relic を使って Redmine のオブザーバビリティを実現
# はじめに
Redmine は、プロジェクト管理ができる人気のあるオープンソースのツールです。多くの企業や開発チームがタスク管理、バグトラッキング、ガントチャートなどの機能を活用して効率的にプロジェクトを運営しています。しかし、プロジェクトの規模が大きくなるにつれて、システムのパフォーマンスを監視し、最適化することが重要になってきます。ここで役立つのがNew Relicです。New Relicは、アプリケーションのパフォーマンスをリアルタイムでモニタリングし、問題を迅速に特定・解決するためのツールです。エンドユーザーの体験を向上させるために、リソースの使用状況、レスポンス時間、エラー率などを詳細に分析できます。これにより、 Redmine のパフォーマンスを向上させ、ユーザーの満足度を高めることができます。
Redmineはプラグインの導入などでカスタマイズされることが多いです。こうした場合、New Relicを使って収集したデータからボトルネックを特定したり、データベースのインデックスを見直す必要があるかどうかなどの洞察を得ることができます。
今回は Redmine
37signalsが書くコードの”Service Object”を見てみる
## 挨拶
自称、Ruby on Rails フロントエンドエンジニア🤣のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaも頑張り始めました。
それでは早速本題です!
## ええっ!!??
37signals商品のRailsコードって見られるの?そう!Ruby on Railsを開発した37signals社が、どのようにこのフレームワークを活用し、どのようなコードを書いているかを見ることができるのだ!
細かい話は省くが、7月3日に37signals社は[Writebookというアプリを新規に公開した](https://world.hey.com/jason/introducing-writebook-e217cae3)。自由にダウンロードでき、自分でサーバ(例えばさくらインターネットのサーバとか)を用意すれば、[簡単にインストール](https://books.37signals.com/2/the-writebook-manual/27/installation)できる。(
[作成中]RSpecについて初学者段階のメモ
※間違いなどございましたらご指摘いただけると幸いです
※随時更新予定# 概要
以下、https://semaphoreci.com/community/tutorials/getting-started-with-rspec より引用
> RSpec is a testing tool for Ruby, created for behavior-driven development (BDD). It is the most frequently used testing library for Ruby in production applications.
「RSpec は、ビヘイビア駆動開発 (BDD) 用に作成された Ruby のテスト ツールです。本番アプリケーションで最も頻繁に使用される Ruby のテスト ライブラリです。」(Google翻訳)– `RSpec`はRailsアプリケーションの開発で利用するテストツール
– Railsに最初から搭載されている”minitest”というテストツールも存在するが、RSpecが実質デファクトスタンダードとされ
【Ruby on Rails】Google APIを使ってSpread Sheetを操作する
いつも大変お世話になっている、
私が大好きなGem(というかGem集)google-api-ruby-client
https://github.com/googleapis/google-api-ruby-client/blob/main/docs/usage-guide.md
仕事でもHeavy useしていたり、
趣味でもなんだかんだで使ったり、
ソースコードを読んで勉強させてもらったりと、
個人的には結構思い入れがある技術です勝手に、もう記事を書いている気でいたが、
何も書いていなかったのでおさらいしとく。## GCPでAPIを有効にする
まずは、GCPで使いたいGemのAPIを有効にしておく。
例えばSpread sheetなら、
Google Sheet APIを有効にしておく![スクリーンショット 2024-07-09 21.53.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1290117/b9c67958-e365-dcaa-3665-d0151ee2c6
【Ruby on Rails】画面読み込み時にレコードがDELETEされる
## はじめに
Ruby on Railsを学習しているのですが、画面読み込み時の処理(詳細は後述)で登録したレコードが消えるという現象が発生しました。
結論から言うと私の勉強不足、仕様の理解不足によるものでした。
解決にあたり、モデル、アソシエーションの理解が深まったところもあったので、記録として残すことにしました。
コードも冗長ですが、ご容赦ください。## 開発環境
* Docker
* Ruby 3.3.3
* Rails 7.1.2## 起:機能の実装
### ■機能の概要
ブックマークの管理機能を作成していた。
![スクリーンショット 2024-07-09 17.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737553/45217d30-5df2-4e22-b5de-ac2f9c2bee96.png)
(グレーの背景がカテゴリ、グリーンの背景がフォルダの中身)これらはカテゴリ、フォルダ、ブックマークで要素が構成されている。
また階層イメージとしては以下の2種類が挙げ
「オブジェクト指向設計実践ガイド」を読んで、設計を学ぶ
# はじめに
業務をこなしていく中で、皆さん以下のように感じたことはないでしょうか?**「システムは動くけど、コードの設計は正しくできているんだろうか…」**
仕様を満たす実装は、ある程度経験を積んだエンジニアであれば問題ないと思います。
ただ、それでもレビューで「このメソッドは切り分けて…」など、設計に関する指摘が多いなと最近感じています。
なので、次にステップアップするためには、`設計`だと思い、以下の本を読み、学習しました。[オブジェクト指向設計実践ガイド 〜Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方〜](https://amzn.asia/d/21v0rNf)
自分は業務で主にRailsを扱っています。先輩エンジニアにもオブジェクト指向言語を扱う上での設計の良書とお聞きしました。
学んだ内容を、自分なりに言語化して、噛み砕いて整理しました。
その内容をアウトプットいたします。# 目次
1. [オブジェクト指向設計](#1-オブジェクト指向設計)
1. [単一責任のクラスを設計する](#2-単一責任のクラスを設計する)
1. [依存
Rails7.1、ruby3.34を詰まらずインストールしたい人へ
rubyのインストール中にライブラリ不足によるコンパイルエラーが複数回発生し、解消したら次のエラー、それも解消したらまた次の・・・のように無駄に時間がかかったので、スムーズにインストールできるようにまとめてみました。
## 環境
WSL(Ubuntu 22.04.4 LTS)## 手順
### 必要なライブラリをインストール
“`console
sudo apt update -y
sudo apt upgrade -y
sudo apt install build-essential -y
sudo apt install -y libssl-dev libreadline-dev zlib1g-dev libyaml-dev libz-dev libffi-dev
“`
### rbenvとrubyをインストール
“`console
# rbenvをインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘
Ruby技術者認定試験に合格してみて【Silver編】
## はじめに
2024年の6月27日に**Ruby Association Certified Ruby Programmer Gold version 3**(以下「Ruby Gold」)に合格しましたので、どのように勉強したのか、実際に役立ったのか等を**Silver編**と**Gold編**の二つに分けて記事にしようと思います。
Silverは90点で合格しました。![スクリーンショット 2024-07-08 21.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/3ea1d68e-c013-4d17-1e75-c222c1cef8a5.png)
## Ruby技術者認定試験とは
Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。
### Silver
Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基
【DP】動的計画法をRubyで学ぶ
# はじめに
競技プログラミング的なものに少し手を付け始めている中、解けそうで解きにくい(工夫orゴリ押しでなんとか解けるような)カテゴリーの問題があった。どうやら、そいつは***DP***というアルゴリズムを用いると解きやすいようで、競プロ初心者がブチ当たる壁でもあるらしい。調べてみると難しそうなのと、Rubyを用いた参考例があまり見当たらないので、本記事にアウトプットしながら少しずつ理解を深めていく。# DPとは
動的計画法(***Dynamic Programming***)https://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95
>対象となる問題を複数の部分問題に分割し、部分問題の計算結果の記録を利用して全体の問題を解く手法を総称してこう呼ぶ。https://zenn.dev/sena21/articles/d64aa8b5d10e13
>動的計画法(Dynamic Programming)は、複雑な問題をよりシンプルな部分問題に分割し、それぞれの部分問題の解を再利用するこ
Rails view helperとテストのリファクタリング:モックをcode smellと感じること
## はじめに
自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaも頑張り始めました。
## 先日のview helperテストのリファクタリング
先日、[Railsのviewテストを書こう](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8)って記事を書いたが、[view helperおよびそのテストのコード](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8#現状の並べ替えのステートによって並べ替え矢印の表示を変えるヘルパー)があまりイケてなかった。
そこで今日は、view helperテストのリファクタリングを一緒に考えていきたいと思う。
## 対象のコード
作ろうとしている`ordering_arrow` helperメソッドは、下記のようなテーブルの並べ替えに使う三角ボタンの箇所。
RailsのCSRF保護について
今回は新規プロジェクトで実際に遭遇した**CSRF保護**について学んだことをまとめます。
## CSRFとは
CSRF(Cross-Site Request Forgery)を簡単に説明すると、悪意のあるユーザーがサーバーへのリクエストを捏造して正当なものに見せかけ、認証済みユーザーを装うという攻撃手法です。Railsでは、一意のトークンを生成して送信のたびに真正性を確認することでこの種の攻撃から保護します。
(引用サイト:https://techracho.bpsinc.jp/hachi8833/2021_11_26/46891)これだけでは「なんのこっちゃ、、。」となるため噛み砕いて説明します。
もしかしたら一度は見たことあると思いますが、HTMLのheadタグに「= csrf_meta_tags」なんて見たことはありませんか?
※コードはslim形式になっています。その「= csrf_meta_tags」が私たちが気づかないうちに、セキュリティーをかけていてくれました。
## 「= csrf_meta_tags」の役割
この記述の役割としては、サイトのHTMLに一意
超初心者のためのRSpec入門ガイド
こんにちは!この記事では、RubyのテストツールRSpecの使い方を超初心者の私が説明します。一緒にステップバイステップで学んでいきましょう!
### 目次
1. RSpecって何?
2. RSpecのインストール方法
3. RSpecの基本的な使い方
4. 実際にテストを書いてみよう!
5. まとめ# 1. RSpecって何?
RSpecは、Rubyというプログラミング言語で書いたコードが正しく動くかどうかをチェックするためのツールです。コードを書いた後に「ちゃんと動くかな?」と確かめる手助けをしてくれます。# 2. RSpecのインストール方法
まず、RSpecを使うためにインストールします。以下のコマンドをターミナルで実行してみてください。
“`
gem install rspec
“`
Bundlerを使っている場合は、Gemfileに以下を追加してからbundle installを実行します。
“`
group :test do
・・・
gem ‘rspec’
・・・
end
“`
これでRSpecの準備が整いました!# 3. RSpec
【Rails】一つのモデルに対して複数の意味を持たせたい(class_name, inverse_of )
# 実現させたいこと
例えばユーザー(User)と本(Book)のモデルが存在している時
Userに二つの意味を持たせたいことがある
– 本を所有しているユーザー(User)
– 本の著者(Author)“`rb
book.author
# => 本の著者を取得
book.user
# => 本の所有者を取得
“`同じUserモデルを使って、author、userをそれぞれ取得できる
# モデル作成
マイグレーションファイルは以下のようにBookに外部キーとして
– user_id
– author_idを持たせます
“`rb
class CreateBooks < ActiveRecord::Migration[7.1] def change create_table :books do |t| t.belongs_to :user, null: false t.belongs_to :author, null: false t.timestamps end end end ``` モデルは下記のよ
Rubyでデザインパターン (7) Builderパターン
## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。## Builerパターンとは
Builderパターンとは、生成するインスタンスへ渡すパラメータを段階的に組み立てることで、複雑なオブジェクトの生成を容易にするデザインパターンです。
詳しくはこちらをご覧ください。https://qiita.com/takutotacos/items/33cfda205ab30a43b0b1
## Rubyでのコード例
以下のように、生成したいクラスの定義と、そのクラスを生成するBuilderクラスの実装を行います。
それぞれのメソッドで`self`を返すようにすることで、メソッドチェーンでメソッドを書けるようにすることも可能です。“`rb
class Computer
def initialize(cpu:, ram:, storage:)
@cpu = cpu
@ram = ram
@storage = storage
enddef to_s
Crystal言語でシングルバイナリを作る
## はじめに
タイトルをキャッチーにしたのは人集めです。ご容赦ください。あまりシングルバイナリの話はしていません。調べ物のスタートに使ってください。
– Rubyでツールを配布するときにはGemにするのが一般的である。
– 単純なツールであればCrystalで書いてバイナリにすることもできる。## Crystalで静的にリンクしたバイナリを作成する
公式では、
“`sh
crystal build a.cr –static
“`とすればいいことにされているが、実際には動作しないことが多い。
そこで、muslのライブラリを使っている公式のDockerイメージを使用するとLinux用のバイナリを出力できる。
たとえばこんな感じ。“`sh
docker run –rm -it \
-v $(pwd):/workspace \
-w /workspace \
crystallang/crystal:latest-alpine \
crystal build a.cr –static –release
“`Shardsのライブラリなどを利
Rails: あなたがService Objectでやりたいことは、たぶんActiveRecordで1行でできる
## はじめに
自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。
それでは本題です!
## Rails歴が長くても、Railsの便利機能が使えていない人は多い
私はフリーランスとして、ここ数年でいろいろなRuby on Rails案件に入ってきました。その中で強く感じるのは、Railsの便利機能をしっかり使いこなしている人が少ないということです。これは一見シニアっぽい人でもそうです。
とても残念なので、使いこなしている人が少ない便利機能に主に焦点を当てて、Railsの素晴らしさをなるべく多くの人に知っていただこうと思っています。
[前回のviewのテストの記事](https://qiita.com/naofumik/items/9136c830ed3b8a16b4e8)もその一つでした。
今回は、ActiveRecordで関連オブジェクトを一気に作る複数の方法を紹介します。
単体テストコード MySQLのエラー解消
モデル単体テストコードを実装している最中に
`MySQL client is not connected`というエラーが発生した場合の対処方法は↓
config/environments/test.rbというファイルに以下の記述を追記しましょう。“`
Rails.application.configure do#省略
config.active_job.queue_adapter = :inline #追記
#省略
“`
## Active Jobのキューアダプタ設定
これはRailsのバックグラウドジョブフレームワークです。
デフォルトのジョブは非同期で行われるが`:inline`に設定する事でジョブは非同期ではなく、同期的に実行されます。
## ジョブの実行タイミング
`inline`に設定する事でジョブが即座に実行されるよになります。これはテスト環境で特に有効的です。
理由はテスト中にバックグラウンドでジョブが実行されるのを待つ必要がなくなり、テストの実行がより予測可能になるからです。
## テスト解消の理由
テスト環境で非同期ジョブを使用すると、ジョブが非
僕のrubocom設定
# はじめに
基本のrubocop設定を自分用の備忘録として記述します。# Rubocopとは
RuboCop とは、Ruby のコードがコーディング規約に沿っているかを検査することができる「静的コード解析ツール」の一つです。
RuboCop をアプリケーションに取り入れることで、コードの品質を保つことができます。# Rubocop 基本設定
“`ruby:.rubocop.yml
AllCops:
# チェック対象から除外するディレクトリ,ファイル
Exclude:
– “vendor/**/*”
– “db/**/*”
– “bin/*”
– “node_modules/**/*”
– “config/initializers/devise.rb”
– “config/environments/*.rb”
– “Gemfile”
– “Rakefile”# # frozen_string_literal: true というマジックコメントのないファイルの許可
Style/FrozenStri
Railsのviewテストを書こう
## 挨拶
自称、Ruby on Rails フロントエンドエンジニア:joy_cat:のnaofumiです。X [@naofumi](https://x.com/naofumi)では色々勝手なことを書いていますが、最近Qiitaをやろうかなと思っています。
日々、下記のことを考えて開発したり、Xにポストしたりしています。
1. Railsのテスト戦略。Viewのテストも
1. シンプルだけどUXを犠牲にしないHotwireの書き方
1. ActiveRecordのあまり知られていない機能を使いこなして、シンプル・高機能・堅牢なコードを書くコツ
1. なるべくScaffoldの型を保ちつつ、複雑な処理を書く方法でも、ちゃんと記事をまとめるまでの気力がまだないので、サクッと書けるものを中心に書いていきます。内容は薄めでも背景は意外と考えているので、コメントを残してもらえれば長文解答します!
ではいよいよ本題です!
## あなたは何のテストを書いているのか?
私が見てきた現場のほとんどでは以下のテストしか書かれていなかった。
1. Model spec
1. Reques
[比較]map と pluck
業務で`map`と`pluck`の違いを意識することが増えたので、整理する
—
| |map |pluck |
|:– |:– |:– |
| 公式doc | https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT | https://railsdoc.com/page/model_pluck |
| | RubyのArrayクラスのメソッド | RailsのActiveRecordのメソッド |
| | 各要素に対してブロックを評価した結果を全て含む**配列**を返す | 指定したカラムのレコードの**配列**を返す |
| 特定のカラムの配列を取得したいときの記法 | Array.map(&:カラム名) | モデル.pluck(:カラム名) |
| ActiveRecordインスタンスの生成 | する(必要なカラム以外の全てのカラムをloadする) | しない(必要なカラムのみを取得する) |
| 使い分け | インスタンスからカラムの配列を取得したいとき | インスタンス以外から直接カラムの