RustでRubyのgemを書く part2

RustでRubyのgemを書く part1 の続き。 クラスやインスタンス変数を使うメソッドを実装したので、まとめておく。 Rubyで実装したいコードのイメージ module Wasabi class Object def initialize(name) @name = name end attr_reader :name def say "say, #{n…

RustでRubyのgemを書く part1

RubyGems 3.3.11でRust拡張の対応が実験的に入ったので、少し触ってみたメモ。 In particular, it includes experimental supppot for Rust extensions. 引用: https://blog.rubygems.org/2022/04/07/3.3.11-released.html wasabi 2019年に鹿児島Ruby会議01…

RailsアプリをRBS + Steepで型チェックするまでの手順

rails new してから steep check が通るまでにやってみた作業をまとめておく。 GitHub コードはGitHubで公開しているので、詳細な手順を知りたい方は参照してください。 github.com 手順 gemを入れる steepとrbs_railsをGemfileに追加する。 # Gemfile group…

ディレクトリ構造にあわせてrbsのプロトタイプを生成するシェル

既存のリポジトリでrbsをゼロから書くのは大変なので、とりあえず雑にプロトタイプを生成する方法。 ディレクトリ構造 app 以下のディレクトリ構造にあわせて sig にrbsを置くディレクトリ構成です。 app/models/user.rb sig/app/models/user.rbs シェル fin…

ECSを運用で使っていて難しいと思った点

ECSを触っていて今まで難しいと思ったことを雑にまとめておく。 ECSを仕事で運用するときに必要な知識が多すぎる。こんなの社内に1人AWSマスターいないと無理だ...— 神速 (@sinsoku_listy) 2021年8月10日 タスクロールとタスク実行ロールの違い ECSを長く触…

Gemfileに記載してあるgemの説明を一覧で表示する #fjordbootcamp

追記: bundle info でgemの情報を表示できるので、一覧じゃなければコレで十分かも。 $ bundle info rails * rails (6.1.3.2) Summary: Full-stack web application framework. Homepage: https://rubyonrails.org Documentation: https://api.rubyonrails.o…

SlackのGitHub Appをアップグレードするとdeployコマンドと通知が壊れる

先日、SlackのGitHub Appがアップグレードされました。 github.com しかし、アップグレードすると /github deploy コマンドとデプロイ通知が 壊れる ため、業務で使っている場合はもう少し様子を見てからアップグレードした方が良さそうです。 READMEの記述 …

Rubyをインストールせず Docker だけを使ってrails newを実行する

rails new するときにDockerfileを使う必要は特にない。 むしろ開発時に使うDockerfileとは別物になるので、Dockerfileを作らない方が良いです。 コマンド $ mkdir example_app $ cd example_app $ docker run --rm -v $(pwd):/app -w /app ruby:3.0.0 bash …

Railsアプリの開発環境向けDockerfile + docker-compose.yml

人に説明するときに記事あると便利なので、開発環境向けのDockerfileとdocker-compose.ymlを書いておく。 Dockerfile FROM ruby:3.0.0 WORKDIR /app # Using Node.js v14.x(LTS) RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - # Add packa…

assets:precompileの結果を1世代だけ残す

Sprocketsは assets:clean[0] しても1時間以内に作成したassetsは消してくれません。 参照: https://github.com/rails/sprockets/blob/v4.0.2/lib/sprockets/manifest.rb#L245 さらに assets:clean の後に webpacker:clean を実行してくれるけど、引数は伝搬…

Herokuでカスタムドメイン(ルートドメイン)を使うためにCloudFrontを設定する

Route53で取得したカスタムドメインをHerokuで使うためにCloudFrontの設定をしたのでブログに書いておく。 コード例は foo.herokuapp.com で動くアプリケーションを foo-example.com でアクセスできるようにする設定です。 AWS側の設定 CloudFrontで使うacm…

git-notesでコミットにメモをつける

git

2020年に「コミットログは良くならない」というのを悟ったので、現実的な解決案である「git-notesでメモを残す」について記事を書いておきます。 前回の記事 sinsoku.hatenablog.com git-notes 詳細は git notes --help を読んでください。 概要は以下の通り…

Gitのプルリク(ブランチ)単位でログを追う方法

git

過去に「よいコミットメッセージとは」みたいな記事を書いたこともある。 sinsoku.hatenablog.com なぜコミットメッセージは良くならないのか どうしたらGitのコミットメッセージが良くなるか考えてみたけど、 他人に期待するには無理がある という結論に至…

CIでRailsのmasterブランチを使ってテストを実行する

Rails edgeでCIを動かしたい酔狂な人向けに記事を書いておく。 Rails edgeのGemfileを用意する # gemfiles/rails_61.gemfile eval_gemfile File.expand_path('../Gemfile', __dir__) dependencies.delete_if { |d| d.name == 'rails' } gem 'rails', github:…

gemでVERSION定数が定義されていない場合にgemのバージョンを取得する方法

ときどきVERSIONの定義されていないgemに遭遇するので、備忘録として書いておく。 VERSION の無いgem いくつかのパターンがある。 gemspecで文字列を直接指定しているケース database_rewinder.gemspec VERSION は定義してあるのに require されていないケー…

るりまの開発環境をDockerで作ってみた

はじめに あとはVSCodeなどでコンテナにアクセスするなどして編集すればOKそうです(もしくはvimとか入れてコンテナ内で編集するとか) gamelinks007.hatenablog.com この記事を読んで「ホスト側で編集するようにできそう」と思ったので、試しに開発環境を作っ…

Railsで認証機能を自作する?それともDeviseを使う?

定期的にDevise批判の話が出てくるので、個人的な考えを書いてみます。 Railsに詳しくないなら、Deviseを使わないべきか? 「認証自作、 Rails 、 Devise」の記事で以下のような記載がある。 「Rails について深い理解がないならば、 Devise は使うな」とあ…

仕事でGitのコミットメッセージをちゃんと書けているか?ゲーム

git

仕事のコミットメッセージは雑になっていることが多い。 それを解決する方法を考えていたらふと思いついたので、ブログに書いておく。 基本ルール 後述するコマンドでGitのコミットを 5つ 取得する git show コマンドでコミットのログとdiffを表示する その…

Gitの書籍に出てこないようなGitの使い方を2つ紹介

git

Twitterの140文字だと説明しづらいので、ブログに書く。 ケース1: 過去のコミットを部分的に戻す 概要 a001から分岐してb001-003まで3つコミットをした後、b001のコミットを修正したいケース。 よくある方法 git rebase -i を使って、b001のコミットを edit …

別のディレクトリにある Gemfile をsystemメソッドで "bundle check" する

タイトルの通りなのですが、普通にやると意図した動きしなかったのでメモ。 具体的な例 factory_bot が分かりやすいです。 ルートディレクトリに Gemfile.lock がある ルートディレクトリで bundle install はしてある ルートディレクトリから gemfiles/6.0.…

PostgreSQL 12でpg_hint_planをインストールする方法

brew install postgresql でインストールした postgres で pg_hint を使えるようにする方法が分からなかったのでメモ。 URL一覧 公式ページ(?) ja.osdn.net ミラーリポジトリ(?) github.com インストール方法 OSDN の v1.3.4 の rpm に含まれているの…

銀座Railsで「Railsアプリの設計」というタイトルで発表しました #ginzarails

12/13(金)にあった銀座Rails#16で登壇しました。 スライド speakerdeck.com 話したかったこと 1〜3年目のRailsエンジニアに参考になる話がしたい 7年やって私が覚えたことは、たぶん何かしら参考になるだろう 来週の仕事ですぐ参考になる話がしたかった 懇親…

ActiveRecord::Base.unscope の呼び出しでネストが深くなっているのを浅くする

仕事で見かけたコードを汎用化した内容にして、個人ブログにメモっておく。*1 多段ネストを reverse して Proc でラップしたり、それを RSpec で検証する方法はブログ書いてないと忘れる自信がある。 モデルの定義 class User < ApplicationRecord default_s…

2019年11月現在のRailsのissueに関するメモ #heiseirb

平成.rb #10 でRailsのissueに取り組むきっかけが分からない人向けのメモです。 個人的に気になっているissueについて簡単にまとめました。 注意)特に初心者向けとかではありません。 STI と has_secure_password の組合せで、親クラスでvalidationsを切り…

Rustでwebアプリを実装して勉強 その5 - テンプレートを使ってhtmlを返す

Rust初心者が勉強したことを記録する備忘録。 今日やった事 今日はRustやる時間が少ないので、handlebarsを使ってhtmlを返すところを少しだけ試した。 github.com handlebars の使い方 actix-webのexamplesを参考にして、そのままコピペした。 // Handlebars…

Rustでwebアプリを実装して勉強 その4 - jsonを返すAPIの実装

Rust初心者が勉強したことを記録する備忘録。 今日やった事 今日やったことをプルリクにしておくと参照するのが楽なことに気づいた。 github.com jsonを返すAPIの実装 JSONのシリアライズ/デシリアライズ serde_json一択です。 引用: isucon7予選のアプリをR…

Rustでwebアプリを実装して勉強 その3 - テストコードを書く

Rust初心者が勉強したことを記録する備忘録。 github.com 今日やった事 単体テストの実装 結合テストの実装 CircleCIの設定 参考ページ https://doc.rust-jp.rs/book/second-edition/ch11-00-testing.html https://actix.rs/docs/testing/ 単体テストを書く …

Rustでwebアプリを実装して勉強 その2 - SQLの処理をモデルに書く

Rust初心者が勉強したことを記録する備忘録。 github.com 今日やったこと main.rs に処理を全部書いて微妙だったので、MVCっぽい感じでディレクトリ構造を整理した。 独学なので、この構成で良いのかは全く自信がない。 ディレクトリ構成 ルーティング、モデ…

Rustでwebアプリを実装して勉強 その1 - sqliteを使う

Rustを勉強するためにactix-webを使ってwebアプリを書いてみた備忘録。 github.com 今日やったこと Rust初心者で何も分からないので、actix-web と diesel のGetting Startedを読みながら、雰囲気でコードを書いてみた。 diesel_cli のインストール DBの作成…

Railsアプリの開発環境を速くするための調査 その1 - gemの読み込み時間

その1って書いたけど、続くかは不明。 今回は使っているgemの読み込み時間を測ってみた。 Benchmark を仕込む config/application.rb でgemを読み込む前に Kernel.require を上書きして、計測する。 +require 'benchmark' +$result = {} +Kernel.singleton_c…