- 1. 動機
- 1.0.1. Rubyのバージョンが勝手に元に戻る現象を解消する
- 1.0.2. Rubyの「後置if」をElixirマクロで実装する
- 1.0.3. Rubyのインストール方法(MacOS編)
- 1.0.4. ReactとRailsアプリケーションにおける環境変数を無理やり共通化したかった
- 1.0.5. public, private, protected
- 1.0.6. 依存関係逆転の原則
- 1.0.7. インターフェイス分離の原則
- 1.0.8. リスコフの置換原則
- 1.0.9. オープン・クローズドの原則
- 1.0.10. 単一責任の原則
- 1.0.11. Rails環境でRakeタスク作成~テストまで
- 1.0.12. 【個人開発】健康的に太りたい人をサポートするサービス「Fat Recipe」をリリースしました!
- 1.0.13. 【Ruby】Ruby silver合格までの流れをまとめてみた【2023】
- 1.0.14. 【Ruby・Rails】ダックタイピング
- 1.0.15. railsのroutes.rbとは
- 1.0.16. 【Ruby】ブロックとProc
- 1.0.17. Ruby Silverのあれこれ備忘録
- 1.0.18. Ruby,Railsのバージョンアップ
`gem install middleman` を実行するとエラー 「ERROR: Failed to build gem native extension.」
# TL;DR
`sudo apt install build-essential` で解決した。
# 環境
* Ubuntu 22.04
* Ruby 3.0.2p107 (Ubuntu 22.04 標準)# 発生した事象
`sudo gem install middleman` を実行したところ、エラーが発生した。
“`console
$ sudo gem install middleman
Fetching backports-3.24.1.gem
Fetching addressable-2.8.6.gem
Fetching activesupport-7.0.8.gem
Building native extensions. This could take a while…
ERROR: Error installing middleman:
ERROR: Failed to build gem native extension.current directory: /var/lib/gems/3.0.0/gems/ffi-1.16.3/e
なんでmodelで定義してるUserクラスをcontrollerで使えるの?
動機
Railsチュートリアル7章まで進めて、ふとこの疑問が湧き上がりました。
Rubyの基本的な文法を学習した段階では、
- 原則同じファイル内で定義したクラスしか使えない
- 外部のファイルのクラスを使う場合はrequireで読み込む必要がある
- クラスの継承を使えば、親クラスのメソッドも使用できる
という理解だったのですが、railsチュートリアルのsample_appのusers_controller.rbのコードを見ると
- ファイル内にUserクラスの定義がない
- にもかかわらず@user = User.find(params[:id])みたいな感じでUserクラスを使ってる
- requireで外部ファイルを読み込んでる、もしくはクラスを継承している様子もない
みたいな感じでなぜUserクラスが使えているのか理解できなかったので調べてみました。
<
Rubyのバージョンが勝手に元に戻る現象を解消する
# はじめに
:::note info
本記事は、下記記事内「バージョンが変わらない場合」を実施しても解消されない方向けです。
:::https://qiita.com/Ficus/items/bdef5c2b504d7a4008fb
# 現状
mac購入時からデフォルトでインストールされているRubyのバージョンを最新版に更新。
しかし、ターミナルを開き直すとバージョンが更新前に戻る。
“`
Last login: Tue Jan 2 00:14:52 on ttys000
% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin22]
“`# 目標
ターミナルを開き直しても、更新後のバージョンが認識されること。# 対象
mac購入後、初めてローカルのRubyを触る方向け。# 結論
ターミナルがzshの場合、`.zshrc`ファイルをいじる必要があった。
(上記記事ではターミナルがbashだから成功している)zshとbash?何それ美味しいの?と
Rubyの「後置if」をElixirマクロで実装する
この記事は、[Elixir Advent Calendar 2023 シリーズ13](https://qiita.com/advent-calendar/2023/elixir) の13日目です
—
【本コラムは、30分で読め、30分で試せます】
[piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:
Rubyは、下記のように「後置 `if`」が書けます
“`diff_ruby:実行
irb> name = “hoge”
irb> id = :id001
irb> name = “piacere” if id == :id001
irb> name
“piacere”irb> id = :id002
irb> name = “piacere” if id == :id001
irb> name
nil
“`これをElixirでも追加してみます
なお、こうしたDSL(Domain Specific Language:ドメイン固有言語)は、マクロを使って実装するのが通例なので、[**
Rubyのインストール方法(MacOS編)
# 実際の環境
以下の環境で実際に環境構築をしてインストールができていることを確認しました。
“`shell
macOS Sonoma 14.0
zsh 5.9 (x86_64-apple-darwin23.0)
homebrew 4.2.1
“`macOSではOS標準のrubyがすでにインストールされていることがほとんどです。これは以下のコマンドで確認できます。
“`shell
ruby -v
“`しかし、macOS標準のrubyでは以下のような問題が発生してしまいます。
– versionの変更が難しい
– 最新のversionにupdateできない
– 外部ライブラリのインストールでトラブルが起きるそこで今回はversionのコントロールがしやすいrubyをhomebrew経由でインストールしたいと思います。homebrewはすでにインストールされていることを想定します。
# 1. rbenvのインストール
rbenvとはrubyのversion管理ツールです。これを用いることで、1つのパソコンで複数のrubyのversionを扱うことができます。実際
ReactとRailsアプリケーションにおける環境変数を無理やり共通化したかった
### 背景
この記事では、Reactをフロントエンドとして、Railsをバックエンドとして使用するアプリケーションの例を取り上げ、両者間での環境変数の共有方法について説明します。## 問題の概要
ReactとRailsの両方で使用する環境変数がある場合、例えばAPIのエンドポイントやOAuthのクライアントIDなどがある場合に、これらの環境変数の管理が同期的である方が好ましいよな?(個人的な意見)と思いました。## 考えた解決策
バックエンド(Rails)の .env ファイルから環境変数を読み取り、
それをフロントエンド(React)用の .env ファイルに転送するシェルスクリプトの作成。
この方法により、環境変数の一元管理が可能になりそうだと思った。スクリプトの実装
“` shell
# バックエンドの .env ファイルのパス
BACKEND_ENV_PATH=”./backend/.env”# フロントエンドの .env ファイルのパス
FRONTEND_ENV_PATH=”./frontend/.env”# フロントエンドの .env ファイルをクリ
public, private, protected
# それぞれの違い
## Public
Publicメソッドは、クラスの外部から自由にアクセス可能です。
これらはクラスのインターフェースを形成し、外部のコードから利用されることを意図しています。
Rubyでは、クラスで定義されたメソッドはデフォルトでpublicです(ただし、initializeメソッドは例外で、常にprivate)。## Private
Privateメソッドは、そのクラスのインスタンスからのみアクセスできます。
これらのメソッドは、外部のクラスやサブクラスからは直接呼び出すことができません。
Privateメソッドは、レシーバを指定せずに呼び出す必要があります。つまり、selfを明示的に使用してはいけません。
これは、クラスの内部実装の詳細を隠蔽し、外部からの不要な干渉を防ぐために使用されます。## Protected
Protectedメソッドは、同じクラスまたはサブクラスのインスタンスからアクセスできます。
これらは、外部のクラスからは直接アクセスできませんが、同じクラスまたはサブクラス内の他のインスタンスからはアクセス可能です。
Protectedメ
依存関係逆転の原則
依存関係逆転の原則(Dependency Inversion Principle、DIP)は、ソフトウェア設計の原則の一つ。高レベルモジュールが低レベルモジュールに直接依存しないように設計することを意味する。代わりに、両方が抽象化に依存する。これにより、モジュール間の結合が緩やかになり、保守性や拡張性が向上する。
“`ruby:依存関係逆転の原則を使用していない
class EmailService
def send_email(user_email)
# 電子メール送信の実装
end
endclass UserAuthentication
def initialize(user_email)
@user_email = user_email
@email_service = EmailService.new
enddef authenticate
# 認証ロジック
email_service.send_email(@user_email)
end
end
“`“`ruby:依存関係逆転の原則を使用
#
インターフェイス分離の原則
インターフェイス分離の原則(Interface Segregation Principle, ISP)は、ソフトウェア設計の原則の一つで、SOLID原則の一部である。この原則は、「クライアントは使用しないメソッドに依存するべきではない」という考え方に基づいている。つまり、大きくて汎用的なインターフェイスよりも、小さくて特定のクライアントに特化したインターフェイスを設計するべきであるという原則です。
“`ruby:違反している
class DocumentGenerator
def generate_pdf
# PDFドキュメント生成のロジック
enddef generate_word
# Wordドキュメント生成のロジック
end# 他のドキュメントタイプの生成メソッドもここに含まれる
end“`
違反理由
DocumentGeneratorクラスにgenerate_pdfとgenerate_word というメソッドが両方とも含まれている場合、特定のレポート(例えばPDFレポート)にのみ関心があるクライアントが Report クラス
リスコフの置換原則
# リスコフの置換原則とは?
リスコフの置換原則(Liskov Substitution Principle, LSP)は、オブジェクト指向プログラミングにおける重要な原則の一つで、サブクラスはいつでもそのスーパークラスの代わりとして使用できるべきであるという規範のこと。これは、サブクラスがスーパークラスの契約を変更しないようにすることを意味する。“`ruby:リスコフの置換原則を使用した例
# 基底クラスの作成
class Payment
# このメソッドはすべての支払い方法で共通です。
# 各支払い方法はこのメソッドを実装する必要があります。
def process
raise NotImplementedError, “process method must be implemented”
end
end# サブクラスの作成
class CreditCardPayment < Payment def process # クレジットカードでの支払い処理のロジック "Processing credit card payment..
オープン・クローズドの原則
# 概要
オープン・クローズドの原則の定義は「拡張に対して開かれているべきであり、変更に対しては閉じているべき」と、よくそのように言われます。しかし、一見すると主語が書いてないので、拡張も変更も同じ主語を持つとした場合、矛盾してしまいます。
これは厳密にいうと、既存のコードの変更に対しては閉じているべき(=変更せずにいられるべき)で、拡張に対して開かれているべき(=新機能の追加をしやすくあるべき)である。つまり、既存のコードを変更せずに、新しい機能を追加できるような設計が望ましいということです。
# つまり、どういうことだってばよ?
## ダックタイピングで実装した例
“`ruby:オープン・クローズドの原則に違反した実装(変更に閉じていない)
class PaymentProcessor
def process_payment(payment_type, amount)
case payment_type
when :credit_card
# クレジットカードでの支払い処理
when :paypal
# PayPalでの
単一責任の原則
# 1. 序論
## 単一責任の原則とは?
Wikipediaによると
> 単一責任の原則 (たんいつせきにんのげんそく、英: single-responsibility principle) は、プログラミングに関する原則であり、モジュール、クラスまたは関数は、単一の機能について責任を持ち、その機能をカプセル化するべきであるという原則である。モジュール、クラスまたは関数が提供するサービスは、その責任と一致している必要がある。単一責任の原則の説明としてよく用いられる例が十徳ナイフなので、十徳ナイフを用いて単一責任の原則の説明を行う。
十徳ナイフ
![166003020_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270132/298d5f48-d910-20c3-3c7d-2da83d89b37f.jpeg)十徳ナイフはナイフに缶切り、マイナスドライバーに栓抜きと、多機能に展開されている。これをソフトウェア設計の視点で見ると、十徳ナイフという1つのオブジェクトに対して責任(=役割)が複
Rails環境でRakeタスク作成~テストまで
## モチベーション
Rakeタスクを作成に伴い、どのように利用するかを知ること!## Rakeタスクって?
> Rake ファイルにおける基本単位です。タスクは名前と、事前タスクと、実行するアクションのリストを持ちます。
>https://docs.ruby-lang.org/ja/latest/library/rake.html
RakeというRubyで書かれたビルドツール利用される基本単位のことらしいです。
`***.rake` というファイル名でRubyスクリプトを実装し、Rakeタスクとして実行することができます。
## ユースケース
下記のユースケースが考えられます。
– Railsのアプリケーションコードを利用した、一回だけ実施したい処理
– バッチなどの定期実行処理## 利用方法
`namespace:task_name` の形式で呼び出すことができます。
“`zsh
# 引数なしの呼び出し方
bin/rake ‘test:argument_parse’# 引数ありの呼び出し方
bin/rake ‘test:argument_pars
【個人開発】健康的に太りたい人をサポートするサービス「Fat Recipe」をリリースしました!
# はじめに
こんにちは!@hamusan44と申します。
この度、プログラミングスクール「RUNTEQ」を卒業し、健康的に太りたいが何を食べればいいか悩む人向けにサポートするAI×レシピ提供サービス「Fat Recipe」をリリースいたしました!:::note warn
まだまだ初学者のため、間違った情報があればコメントなどで教えていただけると幸いです。
:::# サービス名:「Fat Recipe」
![スクリーンショット 2023-11-30 16 39 46](https://github.com/sakamoto-kohei-44/Fat-Recipe/assets/130162997/d5e5b684-da65-4da6-9b00-93fedc7483b0)
▼サービスURL(独自ドメイン対応中です):https://fat-recipe-af94f33f2e6f.herokuapp.com▼Github:https://github.com/sakamoto-kohei-44/Fat-Recipe
▼告知ツイート:https://twitter.com/ha
【Ruby】Ruby silver合格までの流れをまとめてみた【2023】
## はじめに
同じような記事がたくさんありますが、自身の成長記録として書き残そうと思います。
(また、現時点では最新なので誰かのお役に立てば幸いです)## 受験者スペック
・プログラミング歴:約1年
・Ruby歴:同上
・Ruby使用頻度:業務で毎日## 所要時間
・約3週間
(内訳)
▫️参考書1週間(平均30分/日)
▫️模擬問題2週間(模擬問題1周/日ペース)
・集中して時間を取ればRubyやってる人なら2週間ぐらいで合格できるかと思います。## 実際にやった勉強法
#### 参考書
・試験用の[参考書](https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-Ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%90%88%E6%A0%BC%E6%95%99%E6%9C%AC-Silver-Gold%E5%AF%BE%E5%BF%9C-Ruby%E5%85%AC%E5%BC%8F%E8%B3%87%E6%A0%BC%E6
【Ruby・Rails】ダックタイピング
# ダックタイピングとは?
ダックタイピングはRubyのような動的型付け言語でよく使われるプログラミングの概念です。この概念は、「もしオブジェクトがカモのように歩き、カモのように鳴くなら、そのオブジェクトはカモである」という考え方に基づいています。つまり、オブジェクトの型よりも、そのオブジェクトがどのようなメソッドを持っているか(どのように「振る舞う」か)が重要とされます。
“`ruby:ダックタイピングを使った例
# オブジェクトの型よりも、そのオブジェクトがどのようなメソッドを持っているか
# Duck, Lion, Sheep, Zekromはそれぞれquackというメソッド・振る舞いを持っている状態
class Duck
def quack
“クワ!”
end
endclass Lion
def quack
“ガオー”
end
endclass Sheep
def quack
“メェメェ”
end
endclass Zekrom
def quack
“ババリバリッシュ!!”
end
enddu
railsのroutes.rbとは
# はじめに
最近railsを勉強し始めて、routes.rbの書き方を自分に中で復習したかったので、ここでまとめてみます
## routes.rbとは
railsのroutes.rbとは、ブラウザから届いたリクエストに対して、コントローラーで定義したアクションを結びつけるための書くファイルのこと具体的なコードを書いてみると以下のような感じ
“`routes.rb
Rails.application.routes.draw do
root “static_pages#home”
get “/help”, to: “static_pages#help”
post “/login”, to: “sessions#create”
delete “/logout”, to: “sessions#destroy”
end
“`
root,get,post,deleteなど色々書いてありますが、詳しく中を確認していきます
### rootとは(コード:1行目)
“`rb
root “static_pages#home”
“`
誰か
【Ruby】ブロックとProc
# Proc
本来オブジェクトにできないブロックをオブジェクト化するもの。これにより再利用性を高め、柔軟で動的なコードにすることができる。:::note info
ブロックとは?
– ブロックは、メソッドに渡すことができるコードの塊
– {} または do..end で囲まれたコードで表される
– メソッドは yield を使用してブロックを呼び出すことができる
– Rubyは全てのコードがオブジェクトと言われているが、例外的にブロックはオブジェクトではない。従来であれば、ブロックはオブジェクトにできなかったが、Procを用いることでブロックをオブジェクトとして扱うことができる“`ruby
# do..endの箇所がブロックで、timesの引数
3.times do |i|
puts a
end
#=> 0 1 2# {}の箇所がブロックで、timesの引数
3.times { |i| puts i }
#=> 0 1 2
“`
:::## 何が嬉しいの?ある時代とない時代の処理の違い
### 可搬性・再利用性・柔軟性
Procがない時代には、ブロック
Ruby Silverのあれこれ備忘録
### 【概要】
—標記の通りになります。記述漏れなどございましたらご指摘のほど宜しくお願いします。
主に、ruby silverに関しての備忘録になります。
これからruby silverを受験する・受験するか悩んでいる方向けの参考になればと思います。【目次】
—1.ruby silverとは?
2.学習方法について
3.学習の目安時間
4.ruby silverの頻出問題
5.ruby silverの個人的に気になったこと
6.終わりに
7.引用【1.ruby silverとは?】
—
まず、ruby silverについて解説します。以下、公式サイトの原文です。>Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。
>認定によりRubyベースでシステム開発を行ううえで必要な基礎
Ruby,Railsのバージョンアップ
# 背景
– Ruby2.7.7とRails6.0.6.1で開発したアプリを運用します。デプロイ先はherokuで特に問題なくアプリは動いていました。
– しかしながら、Ruby2.6.ZとRails6.1.Zでは、Status(Rails Maintenance Plicy)が「EOL」となっています。
– そこで、Status(Rails Maintenance Plicy)が「Maintained for Security Issues」となっているRuby3.0.ZとRails6.1.Zへのバージョンアップを試みました。<参考記事>
https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
# 現在のバージョン
Ruby:2.7.7
Rails:6.0.6.1
bundler:2.4.13
node:16.20.0
npm:8.19.4
yarn:1.22.19
webpack:4.46.0
※開発環境は、macOS Monterey バージョン12.1です。
※エディターは、VS