- 1. Docker ComposeでRailsアプリ(Rails6.0.6/Ruby3.0.2 + PostgreSQL環境)をdocker化する
- 2. Lambdaで「libcrypt.so.1: cannot open shared object file: No such file or directory」を解消
- 3. 【Ruby】frozen_string_literal: trueとは?
- 4. Webhookを活用したMicrosoft Teamsへのメッセージ投稿方法
- 5. Tailwind CSSでフッターを固定する
- 6. ransackで、パラメータに空白が含まれていても許可するよう設定する
- 7. Rubyの将来性
- 8. Rails | deviseのUserにnameを追加する方法
- 9. ルーティングのnamespaceとは??
- 10. 【Ruby】テスト点数の降順で並べ替えて出力するプログラム
- 11. 【コマンドラインのオプションが使えるようになる】Rubyのライブラリoptparseについて
- 12. Sorbet で `typed: false` で起きうるエラーを調べる方法
- 13. Ruby の文字列の展開の書き方 [式展開, sprintf, `String#%`]
- 14. Rails7で’rails new’するさいにBootstrapを指定するとエラーが発生してしまう
- 15. allow_nil: trueとは
- 16. 【Ruby】お金を最小限の枚数の紙幣・硬貨で支払う式
- 17. 【Ruby】 コロン:の使い方3選
- 18. ChatGPTでプログラミング学習をする際の大事なこと
- 19. Rails 基礎
- 20. 【Rails7】Javascriptがリロードしないと動かないとき
Docker ComposeでRailsアプリ(Rails6.0.6/Ruby3.0.2 + PostgreSQL環境)をdocker化する
# はじめに
今回は既存のrailsアプリケーション環境をdocker化したので、そちらについてまとめていきます。dockerイメージの軽量化のためマルチステージビルドを採用しています。# マルチステージビルドについて
**マルチステージビルド**とは、複数のイメージを用いたビルド方法のことです。何やら難しそうに聞こえますが、内容としてはシンプルです。
+ `FROM` を複数用意してそれぞれに名前を付ける(これが「**ステージ**」になります)
+ 各ステージは独立した一時的なイメージとして扱い、最終ステージだけが最終的な出力イメージとして保存される
+ 後のステージから前のステージを `–from` を使って参照でき、前のステージからファイルをコピーできるマルチステージビルドを用いることで、**一つのDockerfileで複数のイメージをビルド**することができます。要は**Dockerイメージのビルドを効率的で、最適化されたものにするためのテクニック**です。
マルチステージビルドを使用する大きな目的は以下の2つになります
+ Dockerfileを読みやすく保守し
Lambdaで「libcrypt.so.1: cannot open shared object file: No such file or directory」を解消
# はじめに
今回の記事は、Ruby3.2でLambdaを使用しようとしたときに、「/var/lang/bin/ruby: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory」というエラーが出たので、”**力業**”で解消したときのお話です。もしかしたらRubyでも[こちら(Pythonです)](https://github.com/keithrozario/Klayers)のように、出来上がったレイヤーを配布しているかもしれませんので、お時間ある方は探してみてください。
# なぜエラーがでたのか?
Lambdaでは最近Rubyの3.2のランタイムが提供されるようになりました。しかし、Rubyのランタイムが依存しているLinux依存のライブラリまでは網羅されていないため、見つけることができずタイトルにあるエラーが出てしまいました。
# どのように解消したのか?
別の環境でライブラリをLambdaのレイヤーとし
【Ruby】frozen_string_literal: trueとは?
Ruby on Railsでのコーディングの際、`frozen_string_literal: true`というコードが先頭に実装されている場面をよく見かけ、なんだろう?と思い調べてみました。
備忘録としてこちらに残しておきます。
# コード
“`ruby:ruby
frozen_string_literal: true
“`# frozen_string_literal: trueって何?
– このコード`frozen_string_literal: true`は、Rubyファイルの先頭に書かれるマジックコメントの一つである。
– このマジックコメントがあると、そのファイル内で定義された文字列リテラル(`” “`や`’ ‘`で囲まれた文字列)は全て凍結される。つまり、それらの文字列は不変になり、後から変更できなくなる。
– なぜこんなことをするのかというと、処理の高速化やメモリの節約につながるから。文字列の変更が頻繁に行われると、その都度新しい文字列オブジェクトが生成されてメモリを消費する。しかし、文字列を凍結してしまえば、その心配がなくなる。# その他、参考にな
Webhookを活用したMicrosoft Teamsへのメッセージ投稿方法
## はじめに
今回の記事ではWebhookを用いたMicrosoft Teamsへのメッセージ投稿の方法について記述する。
## Webhookとは
Webhookとは、あるシステムに何か特定のイベントが起きた時にサーバーからクライアントに通知するための手法の一つ。APIはユーザーからのリクエストに基づいて情報を提供するのに対し、Webhookは特定のイベントが発生した際に自動的に情報を送信する。## Microsoft TeamsでWebhookを設定する
– Teamsアプリの右上の三点リーダーをクリック
![](https://github.com/junpei314/Apprentice/blob/main/blog/Webhook1.png?raw=true)
– コネクタをクリック
![](https://github.com/junpei314/Apprentice/blob/main/blog/Webhook2.png?raw=true)
– Incoming Webhookを追加する
![](https://github.com/junpei314/Appren
Tailwind CSSでフッターを固定する
## はじめに
こんにちは、エンジニア転職を目指してRailsを学習中のチータです!?
現在、ポートフォリオを作成中で、CSSのフレームワークにTailwindを使用しています。
そこで、コンテンツ量の少ないページ(ログインなど)を作成していた際に、フッターが下部に固定されず、フッターの下に余白ができて違和感を感じていました。## どういう状況か?
今回はログイン画面で説明します。
修正する前のビューのコードとブラウザでの表示は以下のような状況です。
“`application.html.erb
.
.
<%= render 'shared/header' %>
<%= render 'shared/flash' %><%= yield %><%= render 'shared/footer' %>
“`
“` sessions/new.html.erbransackで、パラメータに空白が含まれていても許可するよう設定する
# はじめに
Rails の gem で、ransack を使用時に、現状の仕様(v4.0.0)だと、パラメータの中に空白があったら自動的に削除されてしまいます。
それを空白があった場合でも許可するように設定する必要がありました。対処法を以下にまとめましたので、良ければご覧ください。# 結論
`config/initializers/ransack.rb`に、`c.strip_whitespace = false`を追加すれば、空白も許可してくれるようになります。
“`ruby: config/initializers/ransack.rb
Ransack.configure do |c|
# Change whitespace stripping behaviour.
# Default is true
c.strip_whitespace = false ## 追加
end
“`:::note warn
ディレクトリ構成は違う可能性がありますので、ご自身の構成に合わせて修正をお願いいたします。
:::# なぜ c.strip_whitespace
Rubyの将来性
# 目次
1. [Rubyとは](#Rubyとは)
1. [フレームワーク](#フレームワーク)
1. [Rubyのフレームワークの公開案件数](#Rubyのフレームワークの公開案件数)
1. [将来性](#将来性)
1. [「Rubyは将来性がない」と言われる理由](#「Rubyは将来性がない」と言われる理由)# Rubyとは
1. [概要](#概要)### 概要
1995年に一般公開されたオブジェクト指向スクリプト言語# フレームワーク
## Ruby on Rails
「MVCアーキテクチャ」に基づいて構築されたフレームワーク
Twitter, クックパッドはRuby on Rails#### メリット
Web開発向けのフレームワークとして設計されるため、Webアプリケーションを作るのに適している#### デメリット
機能が多い為、実行速度が遅い
※そもそもRubyはインタープリタ方式である為、コンパイル方式の言語よりも実行速度が遅くなるRails | deviseのUserにnameを追加する方法
Ruby on Rails の Gemである deviseを利用し、
Userモデルに nameカラムを追加する方法。# deviseのインストール
1️⃣ Gemfileに gem ‘devise’ を追記
2️⃣ bundle install コマンドを実行
3️⃣ rails g devise:install コマンドを実行# deviseの Userに nameを追加
1️⃣ rails g devise User コマンドを実行
2️⃣ deviseのコントローラー自体は編集することができない。
そのため、application_controller.rbを以下のように記載“`php:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected
ルーティングのnamespaceとは??
Ruby on Railsを使ってアプリケーションを開発していると、namespaceという単語を耳にすることが多くあります。ここでは、特にルーティングのコンテキストでのnamespaceについて説明します。
# namespaceとは何か?
`namespace`とは、ルーティングを一定の範囲(名前空間)でグループ化するための方法です。これにより、同じコントローラー名やアクション名を異なる範囲で使い分けることができます。##### `namespace`の基本的な使用法
例えば、管理者向けのページを作成する際には、namespaceを用いてadminという名前空間を作成します。
“`ruby :routes.rb
namespace :admin do
resources :users
end
“`上記のようにルーティングを設定すると、`Admin::UsersController`が作成され、その中にあるアクションへのルーティングが設定されます。また、ビューも`app/views/admin/users`ディレクトリの下に作成します。
#### namespac
【Ruby】テスト点数の降順で並べ替えて出力するプログラム
Rubyを使ったロジックの実装について学習しています。
今回は、並べ替えに関するロジックについてメモしていきます。# やりたいこと
**テストの点数の降順で並べ替え、順位をつけて出力したい。**
“`ruby
array = [[“山田”, 89],[“菅野”, 65],[“田中”, 59],[“斉藤”, 78],[“竹下”, 97]]
“`### こんな感じで出力したい
“`ruby
1位: 竹下 97点
2位: 山田 89点
3位: 斉藤 78点
4位: 菅野 65点
5位: 田中 59点
“`### 補足
– 名前、点数の順番で、多重配列で保存されている。
– 降順は、数字の大きい方が上で、小さい方に向けて並べる。# 完成コード
“`ruby
array = [[“山田”, 89],[“菅野”, 65],[“田中”, 59],[“斉藤”, 78],[“竹下”, 97]]sort_array = array.sort{|a,b| b[1] <=> a[1]}
sort_array.each_with_index do |data, index
【コマンドラインのオプションが使えるようになる】Rubyのライブラリoptparseについて
# はじめに
### optparseとは?
プログラムをコマンドラインで実行するとき、オプションや引数を指定できるようにするRubyの標準ライブラリです。ライブラリについて、わからない人は以下の記事を一読すると良いかと思います。
https://qiita.com/sugamaan/items/d7871da28c0160b69609
# オプション定義のコード例
次の項でこちらのコードに関して、説明していきたいと思います。
“`sample.rb
require ‘optparse’
opt = OptionParser.newopt.on(‘-a’) do |v|
p v
endopt.parse!(ARGV)
p ARGV
“`
実行結果↓
“`
ruby sample.rb -a foo
# => true
[“foo”]
“`# コードの解説 (使い方)
### 1. optparseライブラリの読み込み
optparseはRubyの組み込みライブラリではないため、使用するためには読み込む必要があります。
“`
requireSorbet で `typed: false` で起きうるエラーを調べる方法
Sorbet を既存のコードに導入する際、気にするのが strictness level (`# typed: XXX` の XXX の部分) の選択だと思います。最初はほとんどのファイルを `typed: false` で始めると思いますが、結局これはどういうエラーを検知するのか (検知してしまうのか) 気になると思います。
公式のリファレンス (https://sorbet.org/docs/static) に解説はありますが、どういうエラーが起きうるのかについて抽象的な説明です。また、実際に Sorbet を実行したとき、「あれ、これ `typed: false` でも怒られるの?」みたいに、結構想像とギャップが出ると思います。
この記事では具体的にどの strictness level でどのようなエラーが起きうるかの調べ方を紹介します。
## 1. ソースコードからエラーを探す
早速ですが、悲しいことにどのエラーがどの strictness level で起きうるかは、ドキュメント化されておらず、ソースコードを読むしかありません。
が、幸いにも、エラーの定義は特定のRuby の文字列の展開の書き方 [式展開, sprintf, `String#%`]
Ruby の文字列の展開の書き方として以下の2点をまとめます。
– 式展開
– フォーマット文字列 sprintf, format, `String#%``String#%` のドキュメントを忘れやすいため備忘です。
## 式展開
https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#exp
リテラルの式展開
“`ruby
# ($ruby = “RUBY”の場合)“my name is #{$ruby}” #=> “my name is RUBY”
‘my name is #{$ruby}’ #=> “my name is #{$ruby}”
“`> ダブルクォート(“)で囲まれた文字列式、コマンド文字列および正規表現の中では#{式}という形式で式の内容(を文字列化したもの)を埋め込むことができます。式が変数記号($,@)で始まる変数の場合には {}を省略して、#変数名という形式でも展開できます。文字#に続く文字が {,$,@でなければ、そのまま文字#として解釈されます。明示的に式展開を止め
Rails7で’rails new’するさいにBootstrapを指定するとエラーが発生してしまう
## 環境
:::note
* **ruby**: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin21]
* **rails**: Rails 7.0.6
* **node**: v15.14.0
* **yarn**: 1.22.19
:::## 現状
“`console
rails new . -c=bootstrap
“`最後でこのようなエラーが出る
“`console
yarn run v1.22.19
$ sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css –no-source-map –load-path=node_modules
rbenv: sass: command not foundThe `sass’ command exists in these Ruby versions:
2.5.1
2.6.3
2.6.4
2.6allow_nil: trueとは
# はじめに
Ruby on Railsでは、データモデルのバリデーションを設定することが一般的です。その一部として、`allow_nil: true`というオプションが存在します。この記事では、`allow_nil: true`がどのように動作し、それがどのような状況で役立つのかを詳しく解説します。
### `allow_nil: true`の基本的な動作
`allow_nil: true`オプションは、指定した属性のバリデーションを行う際に使用されます。このオプションが設定されていると、属性の値がnilの場合にはバリデーションがスキップされます。つまり、その属性がnilでもバリデーションエラーにはならないのです。
### 例えば
Userモデルに`reset_password_token`属性属性が存在し、以下のようなバリデーションが設定されているとします。
“`ruby:user.rb
validates :reset_password_token, uniqueness: true, allow_nil: true
“`
いくつかのシナリオを見てみます。
①`reset_p【Ruby】お金を最小限の枚数の紙幣・硬貨で支払う式
Rubyを使ったアルゴリズムについて学習しています。
今回は、特定の金額を与えられたときに、どのようにそれを最小の枚数の紙幣と硬貨に分けるかを求めていきます。
# 完成コード
“`ruby
money = 7468
currencies = [10000, 5000, 1000, 500, 100, 50, 10, 5, 1]
result = {}currencies.each do |currency|
count = money / currency
money %= currency
result[currency] = count
endputs result
“`このコードは各紙幣・硬貨で金額を割ってその商(枚数)を得て、それをresultハッシュに保存している。そして、その紙幣・硬貨で金額を割った余りを次の紙幣・硬貨の計算のための金額とする。これを最小の紙幣・硬貨まで繰り返すことで、最小の枚数で金額を分けることができる。
# コードの解説
このコードは、ある金額を最小の紙幣と硬貨の枚数で 表すためのプログラム。
1. 最初に `m【Ruby】 コロン:の使い方3選
参考:ちゃんるび!さんのudemy動画がとても分かりやすかったです
https://www.udemy.com/course/ruby-on-rails-c/learn/lecture/24901088#reviews## シンボル ex) :name, :sbl
– (誤解を恐れずにいうと)Stringの上位互換
– 最初に`:`があったらシンボルと思ってよし
– `不変で重複がない`ため、一意の識別子として頻繁に使用される## シンボルをキーとしたハッシュ
**定義**
※どちらもまったく同じハッシュが作成される
“`ruby
hash = { :id => 1, :name => ‘saku’ }
hash = { id: 1, name: ‘saku’ } #(省略系)
“`**参照**
“`ruby
# ‘saku’ を取り出す)
hash[ :name ]
“`ハッシュは Key の重複を許さないため、同じく重複がないシンボルと相性がよい。
そのためハッシュの Key としてシンChatGPTでプログラミング学習をする際の大事なこと
今回はChatGPTでプログラミング学習をしている初学者、これからしようとしている方に向けて記事を書こうと思います。
先輩方にも、現在の初学者界隈を垣間見てもらえればと思います。
私はChatGPT4でPythonを主に学習して2か月が経ちました。
2か月の割にはあまり身に付いていないと感じたので、自分への戒めも含まれています。## 教えは乞うても答えは乞うな
私?「以下の要件を満たすコード頂戴」
GPT?「はい✨」
私?「エラーでた」
GPT?「エラーを見ると…このコードで解決できると思います✨」
ChatGPTめっちゃ優秀なのでまとまったコードもバンバンくれます。
エラーが出て理解していなくても、エラーを貼り付ければ正解コードにたどり着けます。
私はこの沼にハマっていました。
この2か月で、学習中の私がアプリなどを5つほど開発できたのは確かにChatGPTのおかげです。
しかしもう一度同じアプリを開発しろと言われると、知識技術を吸収できておらず恐らくほとんど同じくらいの時間がかかると思います。
学習の一環としてアプリ開発を主にしてきたものRails 基礎
## ルーティング
### 名前付きルート
以下のようなルート定義があった場合、名前付きルート **help_path** と **help_url** が自動的に使用できるようになる。
名前付きルートは、ルートのパスやURLが変更されても自動的に更新されるため、リンクを生成する際に非常に便利。
“`ruby:route.rb
Rails.application.routes.draw do
root ‘static_pages#home’
get ‘/help’, to: ‘static_pages#help’
end
“`“`erb:.erb
# ビューやコントローラー内で名前付きルートを使用する例
<%= link_to 'Help', help_path %># フルURLを取得する場合は help_url
<%= link_to 'Help', help_url %>
“`### 基本的なルートの書き方
“`ruby:route.rb
Rails.application.routes.draw do
# indexアクションとsh【Rails7】Javascriptがリロードしないと動かないとき
## 結論から
data:{turbo: false} を加えてください。“`ruby:例
<%= link_to "リンク", some_path, data: { turbo: false } %>
<%= form_with model: @model, data: { turbo: false } do |form| %>
“`
## 原因
Rails7ではTurbo(以前はHotwireとも呼ばれていました)がデフォルトで有効になっており、これが悪さをしています。とはいえ、基本はTurboを否定する必要はないので、javascriptが関わる部分だけ上記の記述をしましょう。
## 別の方法
アプリ全体でTurboを無効にする“`diff_javascript:application.js
– import “@hotwired/turbo-rails”
+ import { Turbo } from “@hotwired/turbo-rails”
+ Turbo.session.drive = false
“`## ち
関連する記事
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関連のことを調べてみた