- 1. Ruby on Rails 環境構築 MacOS
- 2. SinatraをAWS Lambdaで動かす (Lambda Web Adapter 0.8.1 使用)
- 3. 複数台で parallel_tests を動かす場合でも、実行時間ベースでテストを分割できるようにする
- 4. ぐりとぐらぐらい似てる dig と fetch の違いを解説
- 5. 【個人開発】北海道の魅力を発見し、北海道旅行のお悩みを解決するアプリを作りました🐄
- 6. 【Ruby on Rails】rubocopの警告「Rails/InverseOf」から学ぶinverse_ofオプション
- 7. Go導入はやっぱり悪戦苦闘するという話
- 8. オーバライドとモンキーパッチでどう違うねんと思ったので調べた
- 9. AWS SAMを触ってみる
- 10. Rubyのイミュータブルとミュータブルオブジェクトが理解したかった
- 11. Rails・クラウド初学者が初めてGoogle App Engine(GAE)スタンダード環境にRails7+MySQLアプリをデプロイするまでの顛末
- 12. 例外処理におけるfinally(ensure)は意味ない……なんて思ったら大間違い
- 13. オブジェクト指向について
- 14. 商品編集機能の実装について
- 15. 【Rails】carrierwaveでローカルに保存したファイルをアクションを経由して取得する
- 16. Rubyを始めるにあたってyumのインストールで躓いた話
- 17. データを取得するために、何気なく使用していた、findメソッド・whereメソッドそれぞれから得られる結果の違いについて
- 18. devise_token_authで作る認証機能
- 19. Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする
- 20. Faradayで302でログイン画面に飛ばされたときに再ログイン
Ruby on Rails 環境構築 MacOS
MacOSでのRuby on Railsの環境構築(installまわりのみ)を記録用に残しておきたいと思います。
ChatGPTに聞けば一発でわかることかもしれませんが、誰かの経験を参考にしたいという方の手助けになれば幸いです。至らない部分もある方と思いますが、その時はそっと教えていただけると励みになります!
Rubyのインストール
—
* まずはbrew入ってるのかなあと、確認
“`
brew -v
“`
>version表示されたらOK* rbenvのインストール
“`
brew install rbenv ruby-build
“`
* インストールされたか確認“`
rbenv -v
“`
>version表示されたらOK+ rubyのインストール
“`
rbenv install 3.2.0 //任意のversion
“`
+ インストールされたか確認
“`
ruby -v
“`
>version表示されたらOK2, bundlerのインストール
—
bundlerはRubyライブラリーの依存関係やversionを一元
SinatraをAWS Lambdaで動かす (Lambda Web Adapter 0.8.1 使用)
AWS Lambda 上で、任意の Web アプリケーションフレームワークを動かせる「Lambda Web Adapter」が、バージョン 0.8.1 で [HTTP 以外のイベントも受けられるように](https://github.com/awslabs/aws-lambda-web-adapter?tab=readme-ov-file#non-http-event-triggers)なりました。
🚀 Exciting news! 🌐 Lambda Web Adapter v0.8.1 is now live, bringing a significant enhancement:
✨ New Feature: Introducing support for Non-HTTP event sources like SQS, SNS, Kinesis, Kafka, EventBridge, and Bedrock Agents!
Empower your development journey with a unified…
— Harold Sun (@sunhua) January 29, 2024
ここでは、Ruby製Webアプリケーションフレームワーク「[Sinatra](https://sinatrarb.com/)」を、AWS Lambda + Lambda Web Adapter で動かす最小構成を紹介します。
## 1. 動作確認用の最小構成Sinatraアプリケーション
いたって普通のSinatraアプリですね。これが AWS Lambda でそのまま動作します。
“`ruby:app.rb (Sinatraアプリ)
require ‘sinatra’
複数台で parallel_tests を動かす場合でも、実行時間ベースでテストを分割できるようにする
RSpec を並列に実行してくれるツールとして [parallel_tests](https://github.com/grosser/parallel_tests) があります。このツールは CPU 数などの情報から、自動で最適な並列数で RSpec などを複数同時に実行してくれるツールです。これにより通常よりも早くテストを完了することが出来ます。
https://github.com/grosser/parallel_tests
Qiita でも parallel_tests を使いつつ、複数のマシンを利用して CI での自動テストを回しています。(テストが大量にあるのと、テストを動かすマシンスペックの都合などで、こういう構成になっています。)
![parallel_tests_image.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7048/b8669d38-5417-8ca3-5680-9b5523a245e8.png)
こういう感じで並列にテストを回す場合は、**実行時
ぐりとぐらぐらい似てる dig と fetch の違いを解説
# 概要
ハッシュから値を取り出す方法で有名な【dig】と【fetch】に来ていただきました。どういう時にどっちを使えば良いかわからなかったので、違いをまとめました。
# 対象
– dig と fetch をあまり使ったことが無い方
– dig と fetch の特徴を知りたい方
– 使い分けや挙動を知りたい方# dig
dig は存在感のあるメソッドです。階層化データからデータを掘り出していることを明示的にしてくれるので
コードの中に dig があるだけで、周辺でやっていることが透けて見えます。
### ハッシュからdigでデータを取り出す
とある amazon の summary データに来ていただきました。
“` ruby
def guri_to_dig
summary =
{“marketplaceId”=>”*****”,
“adultProduct”=>false,
“autographed”=>false,
“browseClassification”=>{“display
【個人開発】北海道の魅力を発見し、北海道旅行のお悩みを解決するアプリを作りました🐄
# はじめに
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
完全異業種からエンジニアに転職するためオンラインスクールに入り学習をしていました。オンラインスクールでは北海道から受講している方がほとんどおらず、
道外の方と交流する中で、道外の方は意外と北海道について知らないことが多いのかも🤔
道民が近くにいなくても、代わりに相談に乗ってくれるようなアプリを作りたい💭
もっと北海道を身近に感じてもらいたい🦌
と思ったことがきっかけで、このアプリを作成しました。
**「えぞとらべる」**https://ezo-travel.com/
https://github.com/satou-haruka-37/hokkaido_travel
# 使い方
### 1.北海道内のおすすめのスポットを探す機能
道外の方からの **「田舎の方に行くと観光情報が見つけにくかった」** というお悩みに対して、
おすすめスポットはユーザー投稿型にして、田舎にある素敵なスポットも、有名なスポットも、平等に表示され
【Ruby on Rails】rubocopの警告「Rails/InverseOf」から学ぶinverse_ofオプション
私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。
個人開発中に`rubocop`から`Rails/InverseOf`と警告されたことをきっかけに`Active Record`の`inverse_ofオプション`を用いた`双方向関連付け`について学習した内容をアウトプットとしてこちらの記事にしました。
どなたかの参考になれば幸いです。:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::環境
ruby 3.2.2
Ruby on Rails 7.0.8# 双方向関連付けとは
皆さんが良く知る以下のアソシエーション関連付けは`双方向関連付け`と呼ぶことができます
※まずこれすら知らずにアソシエーションだなんだかんだと言っていた私に石を投げてください
“`ruby
class User < ApplicationRecord has_many :books end class Book < ApplicationRecord
Go導入はやっぱり悪戦苦闘するという話
# はじめに
Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です:innocent:今回は普段Rubyをメイン言語としている弊社がGo導入に悪戦苦闘した話をしようと思います!
## 経緯
弊社ではメインでRuby、サブシステムにJava、Pythonを使用していました。
しかし、社内からエンジニア的な欲求としてGoを使用してみたいという声が多かったのと、エンジニア採用面から使用できる機会を窺っていました。そんな中、そこまでfatではない[新アプリケーション](https://hubble-docs.com/news/forms)のAPIに使用してみようということになりました。
## 技術選定
今回の新APIは、ほぼ自分1人で担当することになったので予めエコシステム周りを決定していくことにして、以下の構成で行くことにしました。– フレームワーク – Echo
調べた感じEchoとGinの2大巨頭っぽい
Ginだとワイルドカードパスを使用した共有のルーティングでコンフリクトが発生する
オーバライドとモンキーパッチでどう違うねんと思ったので調べた
オーバーライド(Override)とモンキーパッチ(Monkey Patch)は、どちらも既存のコードの挙動を変更する方法ですか、
使用される文脈と目的において全く違う振る舞いをするよと教えてもらったのでまとめてみました。### オーバーライド
オーバーライドは、主に継承で使用され、
サブクラスがスーパークラスで定義されたメソッドを再定義することを指します。#### 具体例
“`ruby
class Animal
def speak
“Some sound”
end
endclass Dog < Animal def speak "Bark" end end dog = Dog.new puts dog.speak # 出力: "Bark" ``` この例では、`Dog`クラスが`Animal`クラスの`speak`メソッドをオーバーライドしています。 ### モンキーパッチ モンキーパッチは、既存のクラスやモジュールに新しいメソッドを追加したり、既存のメソッドを変更したりするために使われます。モンキーパッチは、継承とは関係なく
AWS SAMを触ってみる
# はじめに
lambda関係を勉強中です。この記事は、やった作業内容の備忘録です# AWS SAMとは
似た記事はたくさんあるので、詳細は割愛させていただきますが、公式ページでは以下ののように説明されています。AWS Serverless Application Model (AWS SAM) は、AWS 上でサーバーレスアプリケーションを構築および実行するデベロッパーのエクスペリエンスを改善するツールキットです。AWS SAM は次の 2 つの主要な部分で構成されます。
1. AWS SAM テンプレート仕様
– AWS でサーバーレスアプリケーションインフラストラクチャを定義するために使用できるオープンソースフレームワーク。
1. AWS SAM コマンドラインインターフェイス (AWS SAM CLI)
– AWS SAM テンプレートやサポートされているサードパーティーの統合と併用することで、サーバーレスアプリケーションを構築し、実行できるコマンドラインツール。https://docs.aws.amazon.com/ja_jp/serverl
Rubyのイミュータブルとミュータブルオブジェクトが理解したかった
## まず
Rubyにおいてオブジェクトが **イミュータブル(不変)** か **ミュータブル(可変)** かという区分は、プログラムの設計とパフォーマンスに重大な影響を与えます、と言われているが正直なところどのように影響しているのかわからなかったのでまとめました## イミュータブルオブジェクトの特徴と利点
イミュータブルオブジェクトは、一度作成されるとその状態が変更されないオブジェクトらしい。
Rubyでは、数値やシンボル、凍結された文字列などがイミュータブルに該当
ここで数値がイミュータブルなのは違和感というかよくわからなかったので深掘りしてみよう## 数値のイミュータブル性
Rubyにおける数値はイミュータブル!
これは、数値に対する操作が元の数値を変更することなく、常に新しい数値オブジェクトを生成する### 具体例
“`ruby
a = 10
b = a + 5
# aは10のまま、bは15になる
“`
この場合、a の値は変更されず、a + 5 の計算により新しい数値 15 が作成され b に代入される。
これだとわかりにくいというかよくわからなかったのでも
Rails・クラウド初学者が初めてGoogle App Engine(GAE)スタンダード環境にRails7+MySQLアプリをデプロイするまでの顛末
初投稿です。Rails で本格的なWebアプリを作れるようになろうと独学中です。
アイデアが一定程度Railsアプリ(Rails7+MySQL)の形になってきたのでいざ動かさん、と
構築が簡単なようで費用負担も許容範囲に収まりそうな Google App Engine のスタンダード環境であれやこれや調べながら試行錯誤したのですが、
動くようになるまでかなり苦労した――元々インフラ周りが特に苦手なのが大きいですが――ので顛末を書き残しておきます。## ローカル環境
ローカル環境はWindows 10 Pro、Ruby3.2.2、Rails7.1.2。
Docker 等の仮想環境や rbenv[^1] 等のバージョン切替などは特に入れていません。## 基本手順
概ね公式ドキュメントや下記参考記事に則ったものなので詳細は割愛します。
その通りやっただけでは解決しなかった問題とその対処を次章以降で詳細に記します。
※Cloud SDK はインストール・セットアップ済前提参考記事
https://mintaku-blog.net/gae-rails/
https://min
例外処理におけるfinally(ensure)は意味ない……なんて思ったら大間違い
# はじめに
この記事では各言語でよく使われる「例外処理」における`finally`(Rubyでは`ensure`)という構文の使い方と必要性について説明します。
例外処理に関しては殆どの言語で通用する話なので、今回はどの特定の言語の話ではなく、できるだけ一般的に語りますが、説明するためのサンプルコードはDart、Python、Rubyで表示します。
# 各言語の例外処理
色んな言語には「例外処理」という構文があります。その中で殆どは「`try` `catch` `finally` `throw`」と表記しますが、PythonとRubyなど違う表記が使われます。
各言語の例外処理の表記を纏めてみるとこのようになります。
言語 最初に実行 例外があれば実行 最後に絶対実行 例外を引き起こす C# try オブジェクト指向について
最近Rubyを学び始めた初心者です。オブジェクト指向について学ぶ機会があり、いろいろな説明があったので、結局どういうことなのか確認のために自分なりに簡潔にまとめてみようと思います。
# オブジェクト指向とは
プログラム上で扱う対象を**オブジェクト**(モノ)に見立ててオブジェクトを中心としてコードを組み立てていく手法のこと。
### オブジェクト指向の目的
* プログラムの再利用性を高めるため
* 変更に対して柔軟に対応するため
* 理解しやすいプログラムにするため …etc
# カプセル化
要はデータを保護するということ。
直接テータを操作させずに一度関数を通す状況を作ることによって、不正なテータ操作を防ぐ。
# 継承
クラス定義の共通部分を別クラスにまとめることで、コードの重複を排除する仕組み。
これによって無駄を省くことができる。
# ポリモーフィズム(多態性)
呼び出した関数が呼び出し元のオブジェクトに適した振る舞いをすること。
中に入るものによって同じ関数でも違う処理を行えるということ。
# 単一責任の原則
1つのクラスやモジュールは、1つの責務(役割、機能)だけを商品編集機能の実装について
# はじめに
プログラミング初心者です。現在Ruby on Railsを勉強中。
間違っている箇所がありましたらコメントをしていただけるとありがたいです。# 商品編集機能の実装
今回はすでに投稿してある商品データの編集機能を実装しました。
とりあえず編集画面へのリンクを記述してと、、、
今回学んだことは、編集画面に飛んだ際にすでにあるデータが表示されているようにする方法です。
[![Image from Gyazo](https://i.gyazo.com/7b31a3c48e16209d5813274a29de527c.png)](https://gyazo.com/7b31a3c48e16209d5813274a29de527c)
まず、form_withの第一引数にモデル@itemというインスタンスを記述します。
そして、その情報をブロック変数|f|の中に保持させ、
[![Image from Gyazo](https://i.gyazo.com/5ccfb7519f53d627ee8659e22f06155c.png)](https://gyazo.com/5ccfb751【Rails】carrierwaveでローカルに保存したファイルをアクションを経由して取得する
## はじめに
carrierwaveでpdfファイルを投稿し、そのファイルをクリックするとファイルを開く機能があります。
今回は、ファイルをローカル上のpublicディレクトリに保存しているためurl直打ちでファイル表示がされる対策のために、保存先をpublicディレクトリから変更し、ファイルのパスから直接取得するのではなくアクション経由で取得する方法に変更してurl直打ちで表示するのを防ぐ対応をしました。
carrierwaveでのファイルの投稿機能などについては今回のテーマの趣旨とは違うため省略します。## 環境
`Rails 7.0.4`## テーブル
| Posts |
|:———–|
| name |
| file |## コントローラー
~~~ruby:app/controllers/posts_controller.rb
def show_file
file_path = Rails.root.join(‘uploads’, ‘post’, ‘file’, params[:id], “#{params[:file_Rubyを始めるにあたってyumのインストールで躓いた話
こんにちは!
最近は気温も寒く何かとやる気が出なくなりがちですが、技術は日々の積み重ねですので気合を入れなおして頑張っていきましょう!!
つい先日、Rubyで開発を行うことになり、初めてのRubyなのですが、セットアップからなにからバタバタしています(´;ω;`)
## 最新のUbuntuではyum ではなくyum4が搭載されている!?!
普段私は個人開発含め、Ubuntu を用いて開発をしているのですが、Rubyを始めるにあたり以下のサイトを見ながら作業を進めていました。
https://www.ruby-lang.org/ja/documentation/
““
sudo yum install ruby
““yum がないよというメッセージが出てきたので、yumをインストールするために以下のコマンドを打ちました。
““
sudo apt install yum
““
とコマンドを打ち込んだところ、どうもうまくいかなかったのです、、、。いろんなサイトを確認し、対応策として以下のコマンドを打つといいとのことで以下のコマンドを打ち込みました。
`
データを取得するために、何気なく使用していた、findメソッド・whereメソッドそれぞれから得られる結果の違いについて
## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-データを取得するために、深く考えずに使用していたfindメソッドとwhereメソッド。だが、スクールで課題に取り掛かっていた時に、得られる結果に奥深い違いがあることを知り、追求したくなったので、とりあえず現時点でわかったことをまとめたいと思います。
今回、tasksテーブルが以下のように定義されている。
|name|content|created_at|updated_at|以下、関係ないので省略…|
|:-:|:-:|:-:|:-:|:-:|## あるタスクの内容(content)のデータを取得しようとwhereを使ったら、エラーになった!!なぜだ!!
`task.content` という形で、あるタスクの内容のデータを取り出すために、まず、
`task = Task.find(39)`として、idが39のデータを取り出そうとしたが、この日の私は、最近findばかり使用しているから、whereにも慣れたいなと考え、whereを用いてデータを取得devise_token_authで作る認証機能
## devise_token_authとは?
devise_token_authはRailsでトークンベースの認証機能を作れるgemのこと。
フロントとバックを分けて開発している時なんかに使う。
クライアントは、発行されたトークンを用いてユーザー認証を行う。
メールアドレスを用いた本人確認や、パスワードのリセットといった、webアプリケーションによくある機能もこのgemで作ることができる。## 実行環境
Ruby 3.3.0
Rails 7.0.8## 環境設定
まずは必要なgemをインストール。
“`
gem ‘devise_token_auth’
gem “devise”
gem “rack-cors”
“`
“`
bundle install
“`
:::note info
CORSの制御のため、rack-corsも必要
:::deviseとdevise_token_authをインストール
“`
rails g devise:install
rails g devise_token_auth:install User auth
“`
:::note inRuby 3.3.0 Rails 7.1.3 でYJITを有効にする
あるWebアプリケーションの Ruby on Rails のバージョンを`7.1.3`に上げました。 Ruby のバージョンを`3.3.0`に上げました。
ついでにYJITを有効にしました。
[Enable YJIT · pubannotation/pubannotation@f9284cd](https://github.com/pubannotation/pubannotation/commit/f9284cd97a57af10e05b33360c0c45634749a97e)
次のファイルを追加しました。“`ruby:config/initializers/enable_yjit.rb
if defined? RubyVM::YJIT.enable
Rails.application.config.after_initialize do
RubyVM::YJIT.enable
end
end
“`運用中に何かの理由で無効にしたくなったら、コメントアウトするかファイルごと削除します。
この方法は、最新のRuby on Railsに取り込まれているそのまFaradayで302でログイン画面に飛ばされたときに再ログイン
RubyでHTTP通信して何か情報を取ってくるときには、だいたい [Faraday](https://github.com/lostisland/faraday)を使うと楽だ。
* 公式ドキュメント https://lostisland.github.io/faraday/#/
* Faradayの使い方 59のレシピhttps://nekorails.hatenablog.com/entry/2018/09/28/152745あたりを見れば大体の使い方はわかる。かりに、使い方が分からなくてもソースコードを読めばなんとなく動きはわかる。
## まえおき
CakePHPで作られた古い社内サービスをスクレイピングするスクリプトを組んでたんだけど、何か知らないけど、ときどきUser/Passを入れ直せと、ログイン画面に飛ばされてしまってた。
* Authorizationヘッダーじゃなくて、クッキーで認証管理されてる
* 再認証のときはHTTP 401ではなく302でログイン画面に飛ばされるだけということで、Faradayの標準の仕組みではどうにもならなさそう、ということで調
関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた