- 1. Alma Linux9にRailsアプリケーションの最低限の動作環境を構築する際の個人的備忘録
- 2. たのしいRubyを勉強してみた
- 3. rbenvでRubyのバージョン管理
- 4. Renderによるデプロイ
- 5. Railsでポートフォリオ制作②【環境構築】
- 6. 【初心者向け】Rubyのハッシュの書き方一覧
- 7. 【Rails,ゲストログイン】削除される度に,同一ゲストユーザーを生成する
- 8. Railsで判定機能を作って遊ぶ[Find the missing letter]
- 9. Railsのcase文で色々遊ぶ
- 10. 巡回セールスマン問題の bit DP を Ruby で速く計算する書き方を調査
- 11. 特定条件のみに呼応するプログラム作成
- 12. ruby in1to10 真偽値
- 13. times 合計値
- 14. 文字列への変数埋め込み
- 15. IPAddrを利用せずにIPをvalidateする
- 16. each 入れ子
- 17. 二重ハッシュ
- 18. 値(3教科)の平均値を計算する。
- 19. 【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
- 20. indexメソッドを使って検索
Alma Linux9にRailsアプリケーションの最低限の動作環境を構築する際の個人的備忘録
# はじめに
本記事はAlma Linux9で最低限のRailsアプリケーションを動作させるための手順を記したものです。
前提は以下となります。
* RailsアプリケーションはGitクローンしてくる
* Rubyのバージョンは3.1.2とする
* gemはvendor配下にbundle installする# 手順
1. アップデートを行う
“`bash
$ dnf update -y
“`
1. `git` をインストールする
“`bash
$ dnf install git -y
“`
1. `vim` をインストールする
“`bash
$ dnf install vim-enhanced -y
“`
1. 開発者用ツールをインストールする(Todo: Cコンパイラだけでいいかもしれない)
“`bash
$ dnf group install “Development Tools” -y
“`
1. `mysql` or `postgresql` に必要なパッケージ
たのしいRubyを勉強してみた
# たのしいRubyを勉強してみた 第一部
*Green_helmet@bethlehem4099 2022年6月18日*Rubyの本、買ってきた
たのしいRuby
勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。## はじめに
ここのところPythonでプログラムを書いていた。
でも、Pythonは計算は得意だがまとまったプログラムを作るのには向いてない気がしてRubyを勉強することにした。
そう、PythonはmacOSのプリインストールソフトから削除されてしまったがRubyは残っている。そしてGitHubとHomebrew最高。
## Rubyの実行環境とインストール### パソコン環境
Ruby勉強の環境。二画面で実行環境と本や検索画面を表示出来て快適。でもM1 MacBook Airは接続できる外部モニターがデフォルトで1台なんだよな。だからIntel MacBook Proの出番がまだある。ただし動作は圧倒的にM1が快適。この構成に至るまでかなり試行錯誤した。:::note
Intel MacBook Pro 2017,
M1 M
rbenvでRubyのバージョン管理
# 環境
– macOS Monterey 12.1
– Homebrew 3.6.12# rbenv
rbenvを使用してRubyのバージョン管理をする。
https://github.com/rbenv/rbenv
# rbenvの準備
Homebrewをアップデートして、rbenvのインストール
“`shell
$ brew update
$ brew install rbenv
$ rbenv -v
rbenv 1.2.0
“`デフォルトのRubyのバージョン参照先がrbenvの参照先に変えるためPATHの追記。
また、PC起動時にrbenvが自動で使用できるようにするための設定も記述。“`shell
$ vi ~/.zshrceval “$(rbenv init -)”
PATH=”$HOME/.rbenv/bin:$PATH”$ source ~/.zshrc
“`# Rubyのインストール
インストール可能なRubyのバージョンを確認
“`shell
// 下記どちらでもOK
$ rbenv install –list
Renderによるデプロイ
# はじめに
Ruby on Railsを用いて開発したWebアプリケーションをRenderを用いて無料でデプロイする方法を記載します。# Renderを用いる際の注意点
Renderには無料枠と有料枠の2種類が存在します。
有料枠に比べ無料枠はできることに制限があるので、まずはそれを知ることから。## ①Webアプリケーションに関する制限
– 無料プランでは、非アクティブ状態が 15 分間続くと自動的にアプリがスリープします。
新しいリクエストが来るとスリープが解除されますが、最大30秒の応答遅延が発生する可能性があります。– 無料プランで使用できるのは、 1か月あたり750時間の実行時間と、100GBまでのデータ転送です。100GBを超える場合、0.10 USD/GBが課金されます。
– 無料枠を超えると、サービスは自動的に中断され、有料プランにアップグレードされるか、無料枠がリセットされるまで、トラフィックを処理できなくなります。無料利用は毎月1日にリセットされます。
– 通常、無料の Web サービスのビルドは、有料サービスのビルドよりも遅くなります。ビルドとデ
Railsでポートフォリオ制作②【環境構築】
Web系企業でのバックエンドエンジニアとしての就職を目指して、ポートフォリオを制作しています。
ポートフォリオ制作のすべての記録を残していきます。## この記事は
Rails環境構築でエラーに出合いまくり七転八倒した私が、どうにか`rails new`までこぎつけた軌跡を記しています。
エラー解消のためにひとつひとつの操作・コマンドを理解しようと、それぞれ意味を調べて書いています。
Railsでこれから環境構築する方の参考になれば幸いです!## マシンスペック
– macOS Monterey
– MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
– Intel Core i7
– メモリ 32GB## Ruby, Railのバージョン
– Ruby: 3.1.2
– Rails: 7.0.4
### どうやってRuby, Railsのバージョンを決める?
– 基本最新のものを使うべき
– 理由:古いものだと脆弱性があったりセキュリティ的に問題がある可能性があるから
– メジャーバージョンが上がってすぐのタイ
【初心者向け】Rubyのハッシュの書き方一覧
Rubyのハッシュにはキーの値を`シンボルと文字列`で書く方法がある。
要素を取得する際に書き方が異なってくるので、ここでまとめようと思う。
“`ruby:qiita.rb
# キーが文字列の場合
user = {“name” => “kenji”, “id” => 1}
puts user[“name”]
# キーがシンボルの場合
user = {:name => “kenji”, :id => 1}
puts user[:name]
# キーがシンボルの場合(省略記法)
user = {name: “kenji”, id: 1}
puts user[:name]
“`
一番下の省略記法に関してはJavaScriptのオブジェクトの書き方と同じなので注意したい。
【Rails,ゲストログイン】削除される度に,同一ゲストユーザーを生成する
## はじめに
ゲストユーザーが削除された際に,「ゲストログイン」ボタン押下で,削除前と同一のゲストユーザーを再生成する方法をまとめました.
Rails初心者の記事です.
不足,間違い等ありましたらご指摘いただけますと幸いです.## 環境
Ruby 3.0.4
Rails 6.1.7## ゲストログイン機能の仕様
ゲストログインボタンを押下すると,ゲストユーザーのユーザー情報に合致するユーザーが存在するか照合する.
存在すれば,当該ユーザーでログインする.
存在しなければ,指定したデータを持つゲストユーザーを生成しログインする.## 実装
### sessionsコントローラでguest_loginアクションを実装
ゲストユーザーの照合,生成を実装します.
また,ゲストユーザーをログインユーザーとして扱うため,セッションに`user.id`を格納します.
ログイン判定は,後述のApplicationControllerで実装しています.
“`ruby:app/controllers/sessions_controller.rb
class SessionsControl
Railsで判定機能を作って遊ぶ[Find the missing letter]
# ルール
“`
アルファベットが順番に定義された配列が存在する.
だが、順番の中で1つ抜けているものがあるからそれを特定する。
大文字・小文字のパターンがあるので注意する。
“`# テストコード
“`
Test.assert_equals(find_missing_letter([“a”,”b”,”c”,”d”,”f”]), “e”)
Test.assert_equals(find_missing_letter([“O”,”Q”,”R”,”S”]), “P”)
Test.assert_equals(find_missing_letter([“b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“a”,”b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“b”,”d”,”e”]), “c”)
“`# リファクタリング前の判定メソッド
次のアルファベットを判別するために、ハッシュで次のアルファベットを取れるように定義した。
この時に、小文字のパターンしか
Railsのcase文で色々遊ぶ
# 遊ぶ
暇だったので色々rubyの問題を解いていたのだが、こういう簡単なお題でも色々書き方があって面白い。“`
#### ルール
下記4つの文字列をもとに計算するメソッドを作る。iは値を+1
dは値を-1
sは値を二乗
oは値を配列に出力#### 条件
1. メソッド名はparseで、ランダムなStringの値が引数としてくる。
2. idso以外の文字列も引数として与えられるため、紛れ込んでても対応する
“`テストの値
“`ruby
expect(parse(“ooo”)).to eq([0, 0, 0])
expect(parse(“iiisdoso”)).to eq([8, 64])
expect(parse(“ioioio”)).to eq([1, 2, 3])
expect(parse(“idoiido”)).to eq([0, 1])
expect(parse(“isoisoiso”)).to eq([1, 4, 25])
expect(parse(“codewars”)).to eq([0])
`
巡回セールスマン問題の bit DP を Ruby で速く計算する書き方を調査
競技プログラミングを Ruby でやっているのですが、適切なアルゴリズムを選んでも実装次第で時間制限超過 (TLE) になってしまうことがあります。最近 **bit DP を用いた Held–Karp algorithm** を書く際にハマったので、どのように書くと良いのか色々試してみました。
※ Held–Karp algorithm は、巡回セールスマン問題などを時間計算量 O(N2·2N) で解くアルゴリズムです。動的計画法の一種で、グラフの「通過した頂点の集合」と「最後に通過した頂点」の組を部分問題として計算・記録します。
## TL;DR
基本的には多重ループの内側の処理をなるべく減らします。(当たり前?)* 計算量の N2 にあたる二重ループの回数自体を減らすため、集合をビット列で表した整数のビットが立っている桁と立っていない桁を事前に列挙します
* ビット列が変わる度にリストを求め直すよりも、前回からの差分だけ更新するほうが速いです
* DPのテーブルの各セルへは**1回のみ書き込む
特定条件のみに呼応するプログラム作成
# 問題
今日の曜日を表示するコードをDateクラスを使用して記述してください。ただし、金曜日だった場合だけ以下のように表示の内容を変えてください。
(出力内容)
「今日は月曜日」
「今日は金曜日だ !!!」
![スクリーンショット 2022-11-25 19.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/20ca1f1c-a235-e6b7-fb4c-cd00f87acd57.png)# 解答
![スクリーンショット 2022-11-25 19.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/d8b0f9a7-4c84-7eb7-d128-b710a6d78657.png)
# 解説
(1行目)Dateクラスをライブラリから呼び出す。(3行目)wdayメソッドを用いて曜日を
0(日曜日)から6(土曜日)の整数にしたときの
「今日」の値を取
ruby in1to10 真偽値
# 問題
以下の条件を満たすin1to10メソッドを実装しよう
・第1引数のnumが1以上かつ10以下の範囲であればTrueを出力する
・第二引数のoutside_modeがTrueの場合は、
第一引数numが条件範囲外でもTrueを出力する
・それ以外はFalseを出力する![スクリーンショット 2022-11-25 19.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/762d0358-515d-ba0a-8250-0abff99f76c4.png)
# 解答
![スクリーンショット 2022-11-25 19.05.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/87860168-d1d7-1a1b-a80d-b5e9d3ed8797.png)
# 考察if文を用いて第1引数のnumの条件式が合っている場合はTrueを出力する。
次
times 合計値
〜要件定義〜
・timesメソッドの繰り返し処理を使用して合計値を導き出すこと
〜問題〜
・1〜10の数値を順番に足し合わせる
・足し算の合計値がターミナルに出力されるsum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
↑足し算のみのプログラムはNGで、ループ処理を用いて実装する事
〜解答〜
![スクリーンショット 2022-11-25 18.35.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/e8394e84-1db6-351c-6dd0-104904ad3652.png)
〜解説〜
![スクリーンショット 2022-11-25 18.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/faa035b3-cfac-b11e-b67d-143c41dfc00e.png)このプログラムの考
文字列への変数埋め込み
C#
“`c#
string word = “World”;
string text = $”Hello, {word}!”;
“`JavaScript
“`javascript
const word = “World”;
const text = `Hello, ${word}!`;
“`PHP
“`php
$word = “World”;
$text = “Hello, {$word}!”; // ${word} でもおk。但し、PHP 8.2以降では非推奨だとコメントで教えてもらいました。
“`Python
“`python
word = “World”
text = f”Hello, {word}!”
“`Ruby
“`ruby
word = “World”
text = “Hello, #{word}!”
“`
IPAddrを利用せずにIPをvalidateする
##### 一番シンプルなコード
引数ipの値が0から始まったり、文字列の場合は`ti.to_i.to_s == ti`がうまく働く。“`ruby
def is_valid_ip(ip)
target_ip = ip.split(‘.’)
target_ip.size == 4 && target_ip.all? {|ti| ti.to_i.to_s == ti && (0..255).include?(ti.to_i)}
end
“`##### たまに見るifに条件いっぱいのコード
たまにif文の中で条件を列挙しまくって、最後`return true`とかするのを見るがそういうい時は、booleanを判定できるメソッド使った方が戻り値をわざわざ書かないで済むから良いかも
“`ruby
def is_valid_ip(ip)
target_ips = ip.split(‘.’)
return false if target_ips.count != 4
target_ips.each do |ti|
return false if ti.
each 入れ子
〜問題〜
配列内の果物と値段の合計額を出力せよ。![スクリーンショット 2022-11-25 1.42.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/c73add83-09c2-eeb0-dc6e-ea8350689534.png)
![スクリーンショット 2022-11-25 1.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/9939420f-0103-9b64-da89-69e6cead78bf.png)~解答~
![スクリーンショット 2022-11-25 1.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/b948c7e3-678e-1efe-bc1b-8702900130ee.png)
〜解説〜
each文を使用し、配列内の要素を順に取り出す
二重ハッシュ
〜問題〜
配列の内部に、
複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。↓
![スクリーンショット 2022-11-23 16.29.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/32e90478-5af1-cefe-07cf-8b1cf2b5c938.png)
user_dataで、全ユーザーの名前だけが出力されるように
Rubyでコーディングしてください。
〜解答〜![スクリーンショット 2022-11-23 16.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/95066637-57dc-0aaa-214d-5008fa276fd0.png)
〜解説〜
ハッシュの取得は↓
ハッシュ[取得したい値のキー]その為
ハッシュ[:user][:profile][:name]
で名
値(3教科)の平均値を計算する。
〜問題〜
国語が80点、英語が50点、数学が70点の場合のテストの平均点を出力して下さい。
※条件 変数を使用すること
〜模範解答〜
![スクリーンショット 2022-11-23 16.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/2eba3611-7500-ff1b-df2a-30fc2868bb94.png)
~模範解説~
条件があるので、まずスコアを変数に代入する。
平均値も変数を用いる事で見やすくなります。変数を用いない場合
puts “3教科の平均点は、
#{(japanese_score + english_score + math_score) / 3}点です。”と見にくい表記になります。
【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
## 1. はじめに
初心者の場合だと、バリデーションは特に何も考えずにモデルで定義しているという人は結構いるのではないでしょうか。ただ業務で開発していたり、自主アプリの規模が大きくなってきたりすると、「モデルで定義する方法が最適解なのか?」という疑問が湧いてくる場面があると思います。私も業務で開発していて、この辺が気になり始めた1人です。せっかくなので今回バリデーションレベルについて調べて、あれこれ考えたことをこの記事に残しておこうと思います。同じような人の役に立てばと思います。
※以下はRailsの想定で話を進めています(考え方自体はフレームワークを超えて共通した内容かと思います)
## 2. 4パターンのバリデーションレベル
さて、そもそもバリデーションレベルは4パターンあります。それが以下の通り。① モデルレベル
② データベースレベル
③ コントローラレベル
④ フロントエンドレベル1つずつ詳しく見ていきます。
## 3. ①モデルレベル
#### メリット
* データベースに依存しない
-> バリデーションの仕組み(データベース制約等)がDBに依存するみ
indexメソッドを使って検索
任意の文字列に”code”が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作りましょう。
出力例:
count_code(“codexxcode”) → 1
count_code(“aaacodebbb”) → 4
count_code(“cozexxcode”) → 7ヒント: indexメソッドを使用
# indexメソッドとは
文字列や配列の中に、指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返すメソッド。
“`ruby:例
str.index(検索したい文字列, [検索を開始する位置])
“`“`:解答
def count_code(str)
puts str.index(“code”, 0) + 1
endcount_code(“codexxcode”)
“`“`:ターミナル
1
“`+1を記述しなかった場合、ターミナルでは0が返ってきます。
文字列の先頭を0から数えた数字を返すため、 +1をしています。“`解答
def count_code(str)
puts (str.index(“