- 1. 【Rails】Dockerを利用したアセットプリコンパイルを設定する(Asset Pipeline)
- 2. railsとvue.jsを使用してchatアプリを作ってみた
- 3. LaTeX と Python で作る 1 ポイントたりとも表示崩れしない最強の帳票印刷ソリューション
- 4. Rubyで書く遅延セグ木
- 5. llama3をollamaを使って手元のPCで動かしRubyのFizzBuzzを書かせる
- 6. Alma Linux 9 にrvm インストール(passenger + nginx 環境構築)への道
- 7. Rubyってなんだ
- 8. Ruby on Railsで作成したアプリをHerokuにデプロイするまでにでたエラー
- 9. Ruby の pack と unpack が分からない。あと日本語でエンコードが元に戻せない。
- 10. Railsでメモリ使用量を削減できるメソッド
- 11. 英数字のランダム文字列をRubyで生成する
- 12. 見たことある開発言語の命名規則まとめたぞオラッ!!!
- 13. GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – 加速度センサー編
- 14. Ruby – バイナリと16進数のHEXを相互変換する
- 15. MySQL 8.3環境でmysql2 gemをインストールする方法
- 16. 空の区間はすべて等しいか
- 17. Ruby Rails そのCSVどんな文字コードだろうと取り込んでやるよ
- 18. Gemfileに追記せずに、自分だけ使うgemを追加
- 19. rails consoleのsandboxオプション、使ってる?
- 20. 【Ruby on Rails】paramsを使ってURLの値を参照してDBのデータを表示させる方法
【Rails】Dockerを利用したアセットプリコンパイルを設定する(Asset Pipeline)
# はじめに
本記事は、私が個人開発を行う中で、アセットプリコンパイルを適切に実行するまでに多大な時間を要してしまったので、今後自分自身が迷わないにするためという備忘録、さらには同じような境遇の方のお力になれればと思いを込めて記事にしたいと思います!!# 基本概念のおさらい
まずは、ざっくりと、アセットプリコンパイルに関しての基本をおさらいします!### そもそも、アセットプリコンパイルとは?
複数のアセットファイル(JavaScriptやCSS)を圧縮して連結することで一つのファイルにまとめること。
### アセットプリコンパイルをすると何が嬉しいの?
– アセットプリコンパイルにより、ウェブページの読み込み速度が向上するので、UXやSEOの改善が期待される
– キャッシュやバージョン管理の面でもメリットがある### そもそも、「アセット」って具体的に何よ?
Railsにおける、「アセット」とは画像、CSS、JavaScriptファイルなどの静的ファイルのこと。### アセットプリコンパイルの流れ
– 結合と圧縮:
– アセットプリコンパイラ(Sprocke
railsとvue.jsを使用してchatアプリを作ってみた
#### 環境
– ruby 3.1.4
– rails 7.0.8.1
– vue 3.4.21#### 事前準備
workspaceという作業環境を構築
バックエンドとフロントエンドで作業環境を分けた。– 使用したライブラリ
rails
“rack-cors(クロスドメイン対策)“
“ActionCable(標準用意されている。サーバ側からクライアントに直接情報)“
vue.js
“axios(HTTPリクエストで使用)“
“vue-router(ルーティング処理)“
“actioncable“#### バックエンド側
– データベースモデル
“`ruby:schema.rb
ActiveRecord::Schema[7.0].define(version: 2024_04_17_075212) do
create_table “messages”, force: :cascade do |t|
t.text “content”
t.string “sender_name”
t.integer “r
LaTeX と Python で作る 1 ポイントたりとも表示崩れしない最強の帳票印刷ソリューション
# 元ネタ
元ネタはこちらです(以下「Figma と PHP」で略します)。読んでなるほどと思いました。このように、誰かが苦労したおかげで後続が楽になるので感謝です。何が問題点として生じるのか、どんな解決方法が考えられるのか、が予め判明しているだけでもだいぶ楽になります。
反面、$\LaTeX$ の方が実装は簡易ではないかと思ったので、それを実践してみました。## 条件と問題点
Figma と PHP の 44 ページに以下のような条件があります
– 改めて、満たしたい条件
– [x] ミリ単位で細かく帳票をデザインしたい。
– [x] 帳票デザインの保守性を維持するためにはビジュアルデザイン必須
– [x] 印刷時に見た目が一切崩れないさらに、次のような障害を次々とクリアしていってます。
1. 文字参照の問題
1. 枠か
Rubyで書く遅延セグ木
自分用にRubyで非再帰版の遅延セグメント木を書いたので、そのメモと使用時の注意点です。
## 遅延評価セグ木や非再帰実装についての参考
– [AtCoder LibraryのLazy Segtreeの使い方][betrue12-194541]
– [非再帰版の遅延評価セグメント木の実装メモ][sumijake3-100133]
– [遅延評価セグメント木をソラで書きたいあなたに][tsutaj224329]## 方針
ACLの lazy_segtree に必要な構造/関数 `S`, `F`, `mapping`, `composition`, `op` を一つのクラスにまとめ、破壊的変更メソッドとして、実装することでオブジェクト生成を抑えるというのが方針です。
ACLの遅延セグ木をもとに実装を行うとどうしてもオブジェクト生成数が多くなってRubyだとキツかったのでこの形にしました。
具体的には先に上げた必要なデータ、関数をインスタンス変数およびメソッドとして一つにまとめたクラスをNodeとし、以下のように構成します。
`S` : データの型 Nodeクラスのインスタン
llama3をollamaを使って手元のPCで動かしRubyのFizzBuzzを書かせる
## はじめに
日経新聞を呼んでいたら、Meta社がllama3を発表したという記事が掲載されていた。
https://www.nikkei.com/article/DGXZQOGN18D9W0Y4A410C2000000/
エンジニア界隈で流行っているんだろうなと思ったが、思いのほかQiita記事がなかった。
Meta社が宣伝しているだけで、そこまで流行ってないのかもしれない。ともかく、実はLLMモデルは自分のパソコン上で簡単に動かせる。
## ollamaをインストール
Ollamaというコマンドラインツールをインストールする。あとはコレが全部やってくれる。
https://github.com/ollama/ollama
“`
curl -fsSL https://ollama.com/install.sh | sh
“`Dockerもあるので、Windowsな人も試すことができます。
## モデルのダウンロード
“`
ollama pull llama3
“`プロキシ環境で作業している人は下のFAQを読むと回避できる。
https://
Alma Linux 9 にrvm インストール(passenger + nginx 環境構築)への道
# rvm のインストール
この部分はrvm の公式手順に従って、インストールを進めていきます。
まずは、gpg key のインストール。“`
# gpg key のインストール
gpg –keyserver keyserver.ubuntu.com –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
“`rvm でruby のstable のバージョンをインストールしたかったので、今回はstable のバージョンをインストールしていきましょう
“`
# rvm install
curl -sSL https://get.rvm.io | bash -s stableDownloading https://github.com/rvm/rvm/archive/1.29.12.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.12/1.2
Rubyってなんだ
# 目次
– [Rubyとは](#rubyとは)
– [オブジェクト指向とは](#オブジェクト指向とは)
– [Rubyの特徴](#rubyの特徴)
– [「Ruby on Rails」とは](#ruby-on-railsとは)
– [フレームワークとは](#フレームワークとは)
– [Rubyでできることとは](#rubyでできることとは)
– [Rubyの将来性について](#rubyの将来性について)# Rubyとは
日本発のプログラミング言語で、オブジェクト指向の言語です。
Webアプリケーションの開発現場で需要があります。#### ※オブジェクト指向とは
ある程度そのプログラミングのもとになるプログラミングを作って、作業を効率化していく考え方。**クラスを使ってデータ構造を定義し、柔軟かつ安全なプログラムを作成することができます**。これにより、より大規模で複雑なシステムの開発が容易になります。“`Ruby:Ruby
class TweetsController < ApplicationController before_ac
Ruby on Railsで作成したアプリをHerokuにデプロイするまでにでたエラー
## 初めに
Railsを使ってWebアプリの開発を進めていましたが、Herokuにデプロイする際につまづいた箇所が何箇所かあったので、備忘録としてこちらにまとめておきます。デプロイの流れはこちらのページを参考に進めました。
https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39#heroku%E3%81%B8%E3%81%AE%E7%99%BB%E9%8C%B2
## つまづき① デプロイ時に必要なパッケージがない問題
### 内容
エラー文はこちらでした。
“`
Precompiling assets failed / Error: Cannot find package ‘@babel/plugin-proposal-private-property-in-object’
“`
`@babel/plugin-proposal-private-property-in-object`というパッケージがないようです。package.jsonには記載がなければ新たにインストールするだけなのですが、しっかりと
Ruby の pack と unpack が分からない。あと日本語でエンコードが元に戻せない。
# pack / unpack とは何なのか?
公式の例で分かりやすそうなものをひとつ
文字列を数値(文字コード)の配列に変換する例
“`rb
“Ruby”.unpack(‘C*’) # => [82, 117, 98, 121]
“`数値(文字コード)の配列を文字列に変換する例
“`rb
[82, 117, 98, 121].pack(“C*”) # => “Ruby”
“`なんとなくpackとuppackの語感と役割が逆なような気がして戸惑うが
たとえば上記のように
– 文字列を数値(文字コード)に「ほどく」のが unpack
– 逆に数値(文字コード)を文字列に「固める」のがpackということだと受け止めた
## 参考
https://docs.ruby-lang.org/ja/latest/method/Array/i/pack.html
https://docs.ruby-lang.org/ja/latest/method/String/i/unpack.html# 引き数のアルファベットと数字
unpack/pac
Railsでメモリ使用量を削減できるメソッド
先日、rake taskを実行した際に、扱うレコード数が多すぎて、サーバーに負荷をかけてしまいました。その解決策として、役立つメソッドを知ったので、まとめています。
## メモリ使用量の削減
### – find_each
##### 使用例
“`ruby:find_each.rb
Model.find_each do |model|
model.update!(hoge: hoge)
end
“`
1000件ずつレコードを取り出し、1レコードずつブロック内の処理を実行していきます。
Modelの内容を一度にすべて取り出すのではなく、1000件ずつ取り出すので、メモリ使用量を抑えることができます。##### batch_sizeオプションを指定する場合(3000件ずつ)
“`ruby:find_each.rb
Model.find_each(batch_size: 3000) do |model|
model.update!(fuga: fuga)
end
“`取り出す件数を1000件ずつではなく、任意の件数にしたい場合は、batch_sizeオプション
英数字のランダム文字列をRubyで生成する
# はじめに
最近、Qiitaに投稿することに少しハマってます。
以前ははてなブログに書いていたのですが、Qiitaの方が綺麗に書けるので
それもあります。つべこべ言わずに始めましょう
# 結論
使うのは次のコードになります。大文字小文字含む文字数7の英数字を10個生成します。
“`
10.times do |i|
p [ *’a’..’z’, *’A’..’Z’, *0..9].sample(7).join
end
“`
# 説明
– `*`について
アスタリスクは展開をしてくれます。
今回の場合だと’a’..’z’や’A’..’Z’、0..9を展開します。
流石に
abcdefghijklmnopqrstuvwxyzABCDEFGHYJKLMNOPQRSTUVWXYZ0123456789
を配列に書くわけには行かないですからね。– sample(n)
配列に作用させるとnこの文字列を重複なしで抽出し、新しい配列を生成します。– join
作用させた配列の各要素を指定した文字列で連結した文字列を返します
今回は特に指定していないのでそのまま区切り文字を
見たことある開発言語の命名規則まとめたぞオラッ!!!
—————————————————————————————————————–
# Ruby## 変数やメソッド:
スネークケースを使用。複数の単語はアンダースコア(_)で区切る。
### 例: my_variable, calculate_sum## クラスやモジュール:
キャメルケースを使用。単語の先頭を大文字で始め、連結する単語の先頭も大文字。
### 例: MyClass, MyModule
—————————————————————————————————————–
# Python## 変数や関数
スネークケースを使用。複数の単語はアンダースコア(_)で区切る。
### 例: my_variable, calculate_sum## クラス:
キャメルケースを使
GroveBeginnerKit を、C++(Aruduino)とRuby(ラズパイ,Rboard) で使う I2C – 加速度センサー編
[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。
[Grove Beginner Kit for Arduino](https://wiki.seeedstudio.com/Grove-Beginner-Kit-For-Arduino/) を使ってみる記事の第4回、今回から I2C 接続のセンサーを題材にします。
このキットに付属している I2C 接続のセンサーは、以下の3種類です。* 3軸加速度センサー
* 気圧センサー
* 温湿度センサーその中でも今回は、3軸加速度センサーを題材にします。
このレポートでは、
「メーカーのデータシートを見て、センサICを直接コントロールをすること」
を、方針とします。
もちろん、プログラムを書く上で既存のライブラリ等の実装を参考にすることは良い事です。しかしながらこのレポートは、I2C バスやセンサ IC の扱い方、データシートの読み方を示す事も目的としているため、できるだけ低レイヤーでの説明を行います。
Ruby – バイナリと16進数のHEXを相互変換する
# コード例
“`rb
def bin_to_hex(str)
str.each_byte.map { |b| b.to_s(16).rjust(2, ‘0’) }.join
enddef hex_to_bin(hex)
[hex].pack(‘H*’)
endbin_to_hex(binary_string)
hex_to_bin(hex_string)
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
# プロフィール・経歴
https://github.com/YumaInaura/YumaInaura
MySQL 8.3環境でmysql2 gemをインストールする方法
## はじめに
MySQL 8.3の環境でmysql2 gemをインストールするのにちょっと苦労したので、対処法を書いておきます。### 実行環境
本記事は以下の環境で検証しました。
– MySQL 8.3.0 (Homebrewでインストール)
– macOS 14.4.1
– MacBook Air M3
– Ruby 3.3.0### 注意事項
この記事を書いている時点ではmysql2の最新バージョンは0.5.6です。
よって、mysql2 0.5.6を使う前提で記事を書きますが、さらに新しいバージョンがリリースされたときは対処法が異なる可能性があります。https://github.com/brianmario/mysql2/releases
### 念のため用語の整理
本記事ではMySQLとmysql2というよく似た用語が出てきます。
プログラミング初心者の方はこれらをしっかり区別しながら読み進めてください。– **MySQL** = RDBMS(DBサーバー)。執筆時点の最新バージョンは8.3.0(2024/1/16リリース)
– **mysql2**
空の区間はすべて等しいか
## 経緯
社内で勉強会を開いていて、こんな話をしました。
> $l \leq x \lt r$ のような片側の端点だけを含む区間を**半開区間**といい、$[l,r)$ のように表記します。
> 配列のスライス(連続する部分列)を表すときは、半開区間を使って「$l$ 番目から $r$ 番目まで($l$ 番目を**含み**、$r$ 番目を**含まない**)」とすると便利です。この方法のいいところは、 $l = r$ とすれば空の区間を表すことができ、それを要素と要素の間を表すのにも使えるという点です。たとえば $[0, 0)$ は最初の要素の直前、$[1, 1)$ は最初の要素と $2$ 番目の要素の間、$[N, N)$ は最後の要素の直後、といった具合です。[^1]ここまで説明したところで、聴衆の数学ガチ勢からツッコミが入りました。「それはおかしい、まるで $[1, 1)$ と $[3, 3)$ が異なるものだと言っているように聞こえる。」
……なぬ?空の区間で要素と要素の間を表すと言ったからには、確かに $[1, 1)$ と $[3, 3)$ が異なるものだと言っ
Ruby Rails そのCSVどんな文字コードだろうと取り込んでやるよ
# 文字コード…
…日本で開発をしている皆さん。こんにちは。文字コードです😈# もう嫌なんだ
– CSVが取り込めない?
– 文字コード?
– UTF-8?
– SHIFT-JIS?
– BOM?
– BOM付?え?
– ローカルではいける?
– あの人は取り込めないらしい?
– Macならいける?
– Windowsならいけない?
– エクセルで開いた?
– メモ帳で保存して?
– スプレッドシートから出力?
– 取り込めないんですけど😡?
– こっちでは取り込めるんだよなあ?
– ああああああああああああああああああ# どんなものでも取り込めるそんな魔法のような実装はないのかね
あるかもしれない、ないかもしれない。
僕が辿り着いたところはここまでだ。
効率がいいか?そんなことはしらん。
いいから魔改造だ!“`rb
require ‘csv’
require ‘nkf’def import_csv(file_param)
# どんなものでも取り込めるように魔改造
file_encoding = NKF.guess File.read(file_par
Gemfileに追記せずに、自分だけ使うgemを追加
Railsのプロジェクトで、
peformance測定とか、debugのgemを入れたいとか…
チームの方針で`irb`になっているが、自分はpryを使いたいときとか…## 方法1. `.pryrc`からinlineで呼び出す
“`~/.pryrc
require ‘bundler/inline’gemfile do
source ‘https://rubygems.org’
gem ‘awesome_print’
gem ‘pry-doc’
endAwesomePrint.pry!
“`## 方法2. `Gemfile.local`を作成する方法
1の方法だと、rails serverを立ち上げたときなどは、gemが呼び出されません:cry:
なので方法2を紹介しますが、ちょっと複雑なので、基本的に方法1をおすすめします### 1. プロジェクトのルートディレクトリに`Gemfile.local`を作成
“`Gemfile.local
gem ‘awesome_print’
gem ‘pry-doc’eval_gemfile ‘G
rails consoleのsandboxオプション、使ってる?
:::note info
1分で読めます
:::## sandboxオプションの嬉しい点
sandboxオプションのメリットは、コンソール終了時に自動でデータベースへの変更をロールバックできる点です。
「手元で更新とか色々試したいけどデータベース変更したくないよ〜」という場合に便利。
そうでなくても誤って操作する可能性もあるので、とりあえずこのオプションで触っておけば
ローカル環境のデータに影響が出ることはないので嬉しいですね。## 使用方法
いつものコンソールを起動するコマンドに`–sandbox`でオプションをつけるだけ。
“`
rails console –sandbox
“`※`rails c -s`でも可能
## 注意点
ただし本番環境で使う場合は注意をしましょう。
大規模な障害につながる危険性があります。https://zenn.dev/shuhei_takada/articles/18ba8524049a04
【Ruby on Rails】paramsを使ってURLの値を参照してDBのデータを表示させる方法
## 今回の目標
URLが`localhost:3000/tests/1`の時は`testsDBのid:1`のデータを表示
URLが`localhost:3000/tests/2`の時は`testsDBのid:2`のデータを表示
…
といった形にする。**基本条件**
・rutes.rb
・tests_controller.rb
・show.html.erb
・Testモデルtestsテーブル
それらが存在している### やること
:::note info
①ルーティングの設定を追加
②コントローラーを作成
params変数を学ぶ
③確認
:::
## ①ルーティングの設定
1つずつルーティングを設定していくとした場合
“`routes.rb
get “tests/1” => “tests#show”
get “tetss/2” => “tests#show”
get “tests/3” => “tests#show”#それぞれのURLに対してtestsコントローラーのshowアクションを実行する
“`
これでも問題ないが、DBに対応という部分を考え