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…

Rails の issue を解決するまでの手順とOSS初心者でもできること

突然ですが、あなたはRailsのissueとプルリクがいくつあるかご存知でしょうか? 2019年10月17日現在、それぞれ issue 384 / PR 803 になります。 多いですよね...。 個人的に、最近このissueを減らすのを少しでも手伝えないものかとissueにコメントしてみた…

勉強用にRustのスクリプトをDockerでビルドし、即実行するbashスクリプトを書いた

Rustの勉強をするため、ちょっとしたコードをDockerでビルドして実行するスクリプトを書いたのでメモ。 コード 勉強用のディレクトリに以下の bin/exec というファイルを作り、 $ chomod +x bin/exec で実行権限をつけておく。 #!/bin/sh set -e ROOT=$(cd $…

持っている技術の棚卸し 2019年

一応フリーランスなので、自分のできることを整理するためにまとめた。 (文章でまとめるの難しい...) ソフトウェア開発 スクラム開発に関する基本的な知識がある スクラム開発の経験がある スクラムマスターの経験がある Ruby・Rails 1人で仕様の調整を行…

Rubyのライブラリやアプリケーションで使えるENVの一覧を取得する方法

最近、コンテナ化や The Twelve-Factor App で環境変数を使う機会が多くなってきたので、一覧を作る方法が欲しくなった。 gemにする気力は今無いので、とりあえずコード片をブログに書いておく。*1 # config/application.rb の最後に以下のコードを貼ったら…

コミットメッセージを書くときに気をつけていること

コミットメッセージに関するブログを読んだので、自分がコミットメッセージを書くときに気にしてることを書いておく。 chiastolite.hatenablog.com sue445.hatenablog.com 基本的な話 まずは Gitのコミットメッセージの書き方 を読んでおく。 コミットメッセ…

Re:VIEWで技術書を書いているときにファイルを変更したら自動でビルドする

ファイルの変更を検知して、Re:VIEWのビルドを自動化したら便利だったのでブログに書いておく。 設定方法 vvakame/docker-reviewのdockerイメージを使ってビルドするスクリプトを {project_root}/bin/build として作成しておきます。 #!/bin/sh SHELL_PATH=$…

ActiveDecoratorにプルリクを投げるまでにやったこと

怪しい挙動を見つけたきっかけ テストコードで以下のようなことをしてました。 Rails.application.eager_load! testでもproductionと同じ環境になるように事前に読み込んでいたのですが、テストを個別に実行するときにも全ファイルを読み込んでしまうため消…

ActiveRecordのissueで再現コードを書くときに発行されたSQLを確認する方法

rails/rails#36895 の挙動を確認してみようかなーと思ったけど、発行されるSQLを確認する方法が分からなかったので調べた。 Rails本体のテストコードだと assert_no_queries が使えるけど、これは外で使えないので。 動いたコード assert_no_queriesの定義さ…

Railsのissueに書いてある再現コードを使ってgit bisectする方法

備忘録。 具体的な例 先日に登録されたissueを例にしてみる。 github.com 再現コードを少し書き換える v5.2.3と6.0.0.rc2でsqlite3の依存周りでエラーが出たので、Gemfileのあたりを少しだけ弄った。 # frozen_string_literal: true require "bundler/inline…

minitestで書かれたActiveRecordのテストで特定のケースだけを実行する方法

追記: activerecord/RUNNING_UNIT_TESTS に書いてあった。 自分用の備忘録。 特定のファイルを実行する方法 $ cd activerecord $ ARCONN=postgresql ruby \ -I"lib:test" \ test/cases/adapters/postgresql/range_test.rb 特定のテストケースを実行する方法 …

DMMを退職しました

退職エントリを書くつもりはあまり無かったけど、はてブに退職エントリが多くあがっていて書く気力が高まったので書いてみた。 DMMに入社した理由 去年の5月に入社しました。 大きな企業の便利な社内ツール・サービスを見たい 色んな種類のサービスの裏側を…

ActiveRecordでRails.cacheを良い感じに使うgemを作った

作ったgemはこれです。 github.com 使い方 ApplicationRecord でモジュールを include してください。 class ApplicationRecord < ActiveRecord::Base include ActiveRecordInCache::Methods self.abstract_class = true end 自動的に maximum(:updated_at) …

Puppeteerを使ってDMMの同人ランキングから人気のあるジャンルを列挙してみる

とりあえず、Puppeteerを使ったE2Eテストをスラスラ書けるようにするため、DMMやとらのあな、メロンブックス辺りをスクレイピングして、人気の性癖を調べる実用的なコードでも。— 神速 (@sinsoku_listy) 2019年6月10日 E2Eテストの練習としてPuppeteerで実用…