Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

Rubyで素朴なdiff(動的計画法)を書いてみた

![Peek 2024-02-04 16-00.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/bc9d428f-d799-2fcc-ada9-f34091973278.gif)

だいぶ前に書いたものを見て思い出したりしつつ最低限のものを書いてみました。

# コード

一番ベーシックな動的計画法のものを書いてみました。より改良された手法もあるようですが本記事では扱いません。

後で自分が見て思い出しやすいように少し冗長に書いています。「理解のためのリファクタリング」を自分なりに行った状態です。

“`ruby
# diff.rb

class Diff
def initialize(xs_a, xs_b)
@xs_a = [nil] + xs_a
@xs_b = [nil] + xs_b
@table = Array.new(@xs_a.size) { Array.new(@xs_b.size) }
end

def no_edit?(ai,

元記事を表示

Fly.ioに個人アプリをデプロイしたのでメモ

Fly.ioに個人アプリをデプロイしました。色々記事を見比べながらやったので、次回のために流れをメモしようと思います。
デプロイするアプリは作成済みであることを前提とします。
## デプロイの流れ
### flyctlをインストール
Fly.ioが提供しているCLI(flyctl)で行うためインストールします。
“`
% brew install flyctl
“`
### サインアップ
初めて使う時は、アカウントの登録が必要です。コマンドを実行するとブラウザが立ち上がり、会員登録画面が表示されます。メールアドレスか外部認証を使って登録します。
“`
% flyctl auth signup
“`
### ログイン
アカウントの登録ができたら、ログインをします。コマンドを実行するだけで大丈夫です。

“`
% flyctl auth login
“`
### RailsとPostgreSQLサーバーの起動
`fly launch`コマンドを実行すると、質問文が表示されます。対話形式で答えて、設定していきます。
“`
% fly launch

# アプリケーションの

元記事を表示

Fakerとseed.rbでUserに紐づいたBoardダミーデータを作成

掲示板一覧機能の作成のために、Boardモデルを作りました。

今回は、Fakerを使ってseed.rbにuserに紐づいたboardのダミーデータを入れました。ただ、user_idの部分のコードがよく分からなかったのでメモに残します。
初学者なため間違っていところがあれば教えていただけると幸いです。
## seed.rbに記述するまでの流れ
まずは、seed.rbを作るためにgemをインストールします。
“`
gem “Faker”
“`
`bundle install`してseed.rbを作ります。

10人分のUserモデルのデータも作成してあります。
## seed.rbに記述したコード
20個の掲示板のダミーデータを入れたかったので、繰り返し処理でBoardモデルのカラムに対してこのようにコードを設定しました。
“`
20.times do |n|
Board.create(
user: User.offset(rand(User.count)).first,
title: “タイトル#{n}”,
body: “本文#{n}”

元記事を表示

polymorphic_path:部分テンプレートでリンク先を動的に変更する方法

ポートフォリオ制作中に、初歩的な部分だと思うのですが詰まってしまった部分があったのでメモに残そうと思います。
初学者なため、間違っているところがあれば教えていただけると幸いです。
## 前提
:::note info
Rails: 7.0.6
Ruby: 3.2.2
:::
– 編集リンクと削除リンクのアイコンをまとめた部分テンプレートを作っている。

– カテゴリー一覧とアイテム一覧で同じ部分テンプレートをrenderしたい。

– ページによってパスを動的に変えたい。
## 結論:polymorphic_pathを使う
削除ボタンに関しては、renderの時にlocalsで指定して変数を渡せばいいかなとイメージがついたのですが、編集ボタンがなかなかわかりませんでした。

色々調べた結果、

動的にリンク先を変えたい場合は、該当のパスの部分に`polymorphic_path`を使用すれば良いことがわかりました。

引数にモデルのインスタンスなどを渡すと、該当するurlを生成してくれるメソッドです。
“`ruby:shared/_crud_icon.html.erb

    元記事を表示

    【Rails】renderメソッドとは

    # renderメソッドとは
    `render`メソッドは、コントローラーからビューを描画するために使用されるメソッドです。これは、アクションメソッド内でビューを指定し、そのビューをHTMLとしてレスポンスとして返すために使われます。

    具体的には、`render`メソッドは以下のように使用されます。
    1\. **テンプレートの指定**
    “`ruby
    render :index
    “`
    上記の例では、`index.html.erb`という名前のビューファイルを描画します。

    2\. **オプションの指定**
    “`ruby
    render :show, layout: ‘application’
    “`
    この例では、`show.html.erb`ビューをレンダリングし、’application’というレイアウトを使用して表示します。

    3\. **変数の渡し込み**
    “`ruby
    render :edit, locals: { user: @user }
    “`
    この例では、`edit.html.erb`ビューに`@user`というローカル変数を渡して描画します。

    4\. **インラ

    元記事を表示

    【Rails】initializeメソッドとは

    # initializeメソッドとは
    `initialize`メソッドは、Active Recordモデルなどのクラス定義内で使用される特殊なメソッドです。このメソッドは、新しいオブジェクトが作成されたときに自動的に呼び出されます。通常、`initialize`メソッドは、クラス内でインスタンス変数の初期化や設定を行うために使用されます。

    例えば、以下はActive Recordモデル内でのinitializeメソッドの使用例です。
    “`ruby
    class User < ApplicationRecord attr_accessor :name, :email def initialize(attributes = {}) @name = attributes[:name] @email = attributes[:email] end end ``` この例では、`User`モデルの`initialize`メソッドが定義されています。このメソッドは、ユーザーが新規作成されたときに呼び出され、`name`と`email`のインスタンス変数を設定します

    元記事を表示

    【Rails】ヘルパーメソッドとは

    # ヘルパーメソッドとは
    ヘルパーメソッド(Helper Method)は、プログラミングにおいて、特定のタスクや処理を行うための便利な関数やメソッドのことを指します。これらのメソッドは、コードの再利用性を高め、可読性を向上させるために使用されます。

    主にウェブ開発のコンテキストで使われることが多く、特にフレームワークやライブラリにおいては、ビューやテンプレート内でのコードを簡潔にするためによく利用されます。

    具体的な例としては、以下のようなものがあります
    1\. **HTML出力の生成** : HTMLタグやフォーム要素、リンクなどの生成を行うメソッドがあります。これにより、ビュー内でHTMLコードを簡潔に記述できます。

    2\. **日付や時間のフォーマット** : 日付や時間のフォーマットを行うメソッドがあります。これにより、日付や時間を特定の形式で表示することができます。

    3\. **文字列操作** : 文字列の操作や処理を行うメソッドがあります。例えば、文字列の長さを取得したり、一部の文字列を置換したりすることができます。

    4\. **データの整形** : データの整

    元記事を表示

    【Rails】インポートとエクスポート

    # エクスポート(Export)
    データのエクスポートは、データベース内の情報を外部ファイルに出力するプロセスです。これにより、データをバックアップしたり、別のシステムに移行したりする際に便利です。エクスポートされるデータは、CSV(Comma-Separated Values)形式やJSON(JavaScript Object Notation)形式などの一般的な形式で出力されることがあります。
    # インポート(Import)
    データのインポートは、外部ファイルからデータを取り込んでデータベースに追加するプロセスです。このプロセスは、以前にエクスポートしたデータを元のデータベースに戻したり、別のシステムからのデータを取り込んだりする際に使用されます。インポートされるデータは、エクスポートと同じ形式である必要があります。

    Railsにおけるデータのエクスポートとインポートは、Active Recordやデータベースマイグレーションなどのツールを使用して行われることが一般的です。これらのツールを使うことで、データベース間でのデータの移行やバックアップ、リストアなどが容易になります。また

    元記事を表示

    人生2回目のチーム開発を行いまして(アニメ聖地巡礼アプリ開発)

    # 1.はじめに
    自分は10月よりAPPRENTICE SHIP(内定直結型エンジニア学習プログラム)のカリキュラムに2期生として参加しています。
    この記事は2回目のチーム開発を行なって、振り返りを記事にしたものとなります。

    # 2.イントロ:前回の振り返り
    前回、フルスタックフレームワークを使用せずにチーム開発を行いました。
    その中での反省点が色々と浮き彫りになりました。
    今回の開発ではその反省を踏まえて開発ができたのでしょうか?
    [前回のチーム開発備忘録の記事](https://qiita.com/hirapg_1123/items/27efa01618181b2fe324)

    # 3.2回目の開発体制と開発テーマ
    さて、開発体制ですが1人増え4人体制となりました。
    前回同様、初対面の方々と開発していく流れとなります。
    その中で開発するテーマが「ワクワクするものを開発せよ!」
    なかなかに掴みどころのない、テーマでしたが我々のチームはワクワクというテーマをどう捉えたかというと。。。

    # 4.みんなで作る聖地巡礼アプリ「Animecca」
    ## どういったアプリか?
    ワクワクする

    元記事を表示

    【Rails】sessionとは

    # sessionとは
    `session`は、ウェブアプリケーションにおいてセッション管理を行うための仕組みです。セッションとは、ユーザーがウェブサイトやウェブアプリケーションにアクセスしてから、ブラウザを閉じるまでの間の一連の操作を指します。セッションを管理することで、ユーザーごとに状態を保持し、ユーザーの体験をカスタマイズしたり、認証情報を保存したりすることができます。

    Railsの`session`は、サーバーサイドでセッション情報を保持し、クライアントとの通信においてセッションを識別するための一意な識別子(通常はクッキー)をクライアントに送信します。これにより、ブラウザのクッキーを使用してユーザーごとにセッション情報を保持することができます。

    `session`を使用することで、以下のようなことが可能になります。

    1\. ユーザーの認証状態の管理: ログインしたユーザーの情報をセッションに保存し、ログアウトするまで維持します。

    2\. 一時的なデータの保存: フォーム入力などの一時的なデータをセッションに保存し、次のリクエストで使用します。

    3\. セッションベースの

    元記事を表示

    初学者が押さえておきたいRailsの文法まとめ

    ## はじめに
    これだけは覚えておきたいというRailsの用語や概念について自分用の備忘録としてまとめてみました。基本的なものだけを紹介しているので、より詳しく知りたいものについては適宜ご自身で調べながら読み進めて頂けると幸いです。

    また、こちらはプログラミング初学者がまとめた記事となりますので間違っていることがあるかもしれません。その際はご指摘等頂けると幸いです。宜しくお願いします。

    ## 本記事の内容
    Railsでよく使われる文法の解説。

    ## 対象者

    Rubyの基礎文法を学んだことはあるが、Railsについては勉強したことがない初学者の方。

    ## アプリの基本設定

    生成ファイルの設定に関しては、` config/application.rb `に記述をする
    `config.generators`ブロック内に必要な設定を記述する

    `code:application
    “`ruby:application.rb
    config.generators do |g|
    g.skip_routes true
    g.assets false
    g.helpe

    元記事を表示

    Ruby on Rails5初学者が一度でもつまずいたところをメモする

    ## 新しいアプリケーションを立ち上げたい
    “`ruby
    rails new “アプリケーション名”
    “`

    “`ruby
    rails new myapp
    “`

    ## railsサーバーを起動する
    “`ruby
    rails server
    “`

    ## コントローラーとアクションの作成
    “`ruby
    rails generate controller “コントローラー名” “アクション名”
    “`

    “`ruby
    rails generate controller home top
    “`
    そうすると以下のものが生成される
    “`bash
    create app/controllers/home_controller.rb
    route get “home/top” => “home#top”
    invoke erb
    create app/views/home
    create app/views/home/top.html.erb
    invoke rspec
    creat

    元記事を表示

    Rubyで競プロのインタラクティブな問題をコードテスト

    ## したいこと
    競技プログラミングでたまに「インタラクティブな問題」が出るが、それをコードテストのページで動作確認したい。

    その際、提出する Ruby のコードは `gets` や `puts` などを使ったままとし、対話を模倣できるコードを一時的に追加するだけとしたい。(コードテストのページでファイル分割できないため)

    “`diff_ruby
    n = gets.to_i

    +#— ここからテスト用 —#
    +…
    +#— ここまでテスト用 —#

    puts “! #{p0}”
    $stdout.flush
    “`

    ## 例題

    https://atcoder.jp/contests/abc299/tasks/abc299_d

    ### 解答
    二分探索でサクッと。

    “`ruby:abc299_d.rb
    n = gets.to_i

    p0, p1 = 1, n

    while p1 – p0 > 1
    pm = (p0 + p1) / 2
    puts “? #{pm}”
    $stdout.flush

    v = gets.to_i

    元記事を表示

    通知機能つけてみた

    概要

    ToDoアプリに「いいね」や「コメント」などがついた時の通知を受け取れるようになるためのコードを書いた。
    前提として通知させたい機能は既に制作したものとする。
    model => controller => view の順でプログラムしていこうと思う

    完成イメージ


    model

    “`ruby:create_notices_rb
    class CreateNotices < ActiveRecord:

    元記事を表示

    【Rails】local: trueとは?

    # local: trueとは
    Railsにおける`local: true`は、リンクやフォームなどのHTML要素で使用されるオプションの一つで、リンクやフォームの送信をローカルなリクエストとして扱うことを指定します。

    通常、Railsではリンクやフォームを生成する際に、外部のURLや他のサーバーに対してリクエストを送信するようになっています。しかし、`local: true`を使用することで、そのリンクやフォームの送信を現在のアプリケーション内で処理されるローカルなリクエストとして扱います。

    例えば、以下のように`link_to`ヘルパーを使用してリンクを生成する際に`local: true`を指定することができます。
    “`html
    <%= link_to "Home", root_path, local: true %>
    “`
    この場合、`root_path`へのリンクがクリックされたときに、そのリクエストはローカルなリクエストとして処理されます。つまり、ページ遷移が発生せず、**現在のページ内でリクエストが処理される**ようになります。

    このオプションは、特にAjaxを

    元記事を表示

    住所から市区町村を抜き出すのに苦労した話

    ## はじめに

    実務で住所を使った処理を実装することがあり、そこで苦労したため、今後同様の対応で苦労しないように記載しました。

    ## 苦労したこと

    以下のようにお客様の住所の都道府県と市区町村の情報を入力するフォームは元々ありました。そのフォームから入力されたデータを使用したバッチ処理を実装することになりました。すでに作成されたテーブルの中にある都道府県と市区町村を取得したかったのですが、市区町村のデータを取得するのに苦労しました。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673263/d49cd96b-f8bb-213d-7474-318504c990a0.png)

    なぜなら、市区町村部分は以下のような形式で入っていたため、「さいたま市北区」だけを取得したいという処理が想像以上に難航しました。

    “`
    さいたま市北区ホゲホゲ1-1-1
    “`

    最初は正規表現で市区町村部分だけ取得すればよいのでは?と思い、調べていたところ以下の記事を見つけま

    元記事を表示

    DockerでRubyの開発環境を構築してみた

    ## はじめに
    幾度となく煎じられてきたテーマなので、

    「そんなん知ってるわ!」

    という方はブラウザバック推奨です。

    自分は、この議題について煎じたことがありませんので、n番煎じをしようと思います。

    ## 背景
    先日、`Ruby Association Certified Ruby Programmer Silver version 3`を取得しました。
    – `Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応`
    – 公式ドキュメント

    上記、2つが手元にあれば、あとは公式の模擬問題集を繰り返すだけで合格できる内容だったと思います。
    詳細は、気が乗れば合格体験記として記事にしようと思います。

    次の目標として、`Ruby Association Certified Ruby Programmer Gold version 3`の取得を目指しております。
    メソッドを丸暗記で合格できたSilverに対して、Goldではオブジェクト指向プログラミングをはじめ、メタプログラミングという私がこれまで触れたことのない知見が問われる内容となっているので、どうしても

    元記事を表示

    【Ruby】attr_accessorで挫折した

    # 初めに
    こんにちは!

    Ruby Silver合格に向けて問題集RExの復習でアウトプットします。今回は、書き取り用?読み取り用?ゲッター?セッター?という専門用語が巡って脳疲労がピークに来たので実際にirbで動かしたコードを簡単に整理してみました。

    # attr_reader
    attr_readerメソッドはクラス内で定義して “`attr_reader :name“` と書けば、以下メソッドに定義している“`@name“`にアクセスできます。注意点は、“`@name“`をクラスの外部から変更できません。

    “`ruby
    class Human
    attr_reader :name

    def initialize(name)
    @name = name
    end

    end

    human = Human.new(“サラー”)
    puts human.name
    human.name = “ソボスライ” # クラスの外部から変更
    puts human.name # NoMethodErrorになる
    “`

    # attr_writer
    クラスの外部からイン

    元記事を表示

    【Rails】テキストボックスの数を好きに増やしたり減らしたりしてみる

    どうもこんにちは。

    今回は、Railsでフォームを作る時に使用するGemの「`nested_form`」について解説します。

    # テキストボックスの数を増やしたり減らしたりってどういうこと?

    以下のようなフォームがあるとして、「追加」ボタンや「削除」ボタンをクリックしたときに、対象の要素を追加したり削除したりすることを今回は実現します。

    ![スクリーンショット 2024-02-09 11.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711491/7ab30aef-5ea7-04d8-9e69-3b1ba2a2cb5d.png)

    # 実装手順

    ## 1. Gem導入

    “`Gemfie:Gemfile
    gem ‘nested_form`
    “`

    “`sh
    bundle install
    “`

    ## 2. ビューファイルを作成する

    “`erb:app/views/content_groups/edit.html.erb
    <%= nested_form_for @con

    元記事を表示

    RubyでCSV出力

    ## まえがき

    実務でデータをcsvにまとめて、出力してほしいといわれた。
    今回はPostというオブジェクトのデータをcsvに出力してみる。

    #### 使用技術
    – CSV(Ruby組み込みライブラリ)
    https://docs.ruby-lang.org/ja/latest/library/csv.html

    ## 手順

    – rakeタスクの定義
    – csv出力ロジックの製造
    – タスク実行

    ## 1, rakeタスクの作成

    以下コマンドで“`lib/tasks/csv.rake“`が生成される。

    “`ruby
    $ rails g task ファイル名
    $ rails g task csv
    “`

    “`lib/tasks/csv.rake“`の中身は以下のようになっている。

    “`ruby
    require ‘csv’

    namespace :csv do

    end
    “`

    試しにhelloを出力するだけのタスクを作成する。

    “`ruby
    desc “test”
    task greet: :environment do
    puts “hello”
    end

    元記事を表示

    OTHERカテゴリの最新記事