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

コミットメッセージに関するブログを読んだので、自分がコミットメッセージを書くときに気にしてることを書いておく。 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のテストで特定のケースだけを実行する方法

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

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で実用…

AWSのmfaが必要なコマンドを簡単に実行する

先日、Terraformで AssumeRole + MFA を簡単にする方法を書きました。 sinsoku.hatenablog.com ブログを書いたあとにもっと汎用的にできる案を思いついたので、更に改良した。 以下のスクリプトを ~/bin/mfa のようにパスが通った場所に置いてください。 #!/…

表参道.rb #47 〜API〜で共有した知見 #omotesandorb

LTする方が少なかったので、自分がやってる知見的な事を紹介するためのブログ。 API ドキュメント OpenAPIで書いています。 初めて聞いた人向けの説明 Swagger Editorで書くと、 Swagger UIみたいな見た目のドキュメントが作れる。 ファイルの置き場所 #{Rai…

TerraformでAssumeRole + MFAを簡単に実行する

追記: 以下の記事の方法を使った方が楽かも。 sinsoku.hatenablog.com Terraformを普通に使うとAssumeRole + MFAが面倒なので、ラッパースクリプトを書いた。 これを ~/bin/mfa_terraform とかに置けば良い。 #!/bin/bash set -e # It generates json referr…

RubyVM::AbstractSyntaxTree.ofをevalやirbで動かすために調べたこと

調査結果を書いただけで、あまり良い解決方法は見つけられていない・・・。 調べたきっかけ RubyKaigi 2019でRubyVM::AbstractSyntaxTree.ofメソッドを 悪用 活用している方々の発表を聞いて、自分でも試してみようとirbでメソッドを使ったら、無慈悲にもエ…

Rails Developer Meetup 2019で"自己修復的なインフラ"という登壇した #railsdm2019

3/22(金)、3/23(土)に開催されていたRails Developer Meetup 2019に参加し、登壇させて頂きした。 色々と記憶があるうちにブログに書いておく。 スライド 自己修復的なインフラ -Self-Healing Infrastructure- from sinsoku listy www.slideshare.net イベン…

神戸市の働き方に関する勉強会に参加した #forkwell

Forkwellの中の人からイベントに誘われ、リモートワークや地方の働き方には少し興味あったので参加してみた。 forkwell.connpass.com トークで印象だった話 話聞いてたときにメモったりしてなかったので、自分の記憶に残っている話題だけ書いておく。 ACALL…

RailsアプリでElasticsearchを扱うならchewyがおすすめ

Twitterでツイートしたり、表参道.rbの懇親会では紹介していたけど、ブログに書いていなかったので今更ながらまとめておきます。 github.com Chewyの利点 READMEを一通り読んでもらうと 最高に便利なのが分かる とは思うのですが、それだと身も蓋もないので…

「privateメソッドのテストについての考え方」を読んで #yochiyochirb

highwide.hatenablog.com を読んで、「自分なら設計を変えて、publicにしてからテストを書くなー」と思ったので、考え方・直し方の一例としてブログを書く。 元の設計 元記事のスライドの途中に出てくるコードはこんな感じで、バッチ処理などでよくある設計…

Railsアプリでrakeタスクのログを見やすくする

rakeタスクのログを調べやすくするために、ActiveSupport::TaggedLoggingを使って読みやすくする方法のメモ。 # lib/rake_logger_rails.rb module RakeLoggerRails # rakeタスクでログを出力するとき、自動的にタグ付けを行います。 # # task foo: :environm…

Gitで更新頻度の高いファイルを見つける方法

git

リポジトリ内のファイルごとのcommit頻度を可視化出来たらよく改修されてるポイントが分かってなんか良いかなとか思ったけどそういうツールあるかな— ごまちゃんさん (@gomachan46) January 29, 2019 というツイートを見かけて、ブログの下書きに眠っていた…

自分のプロジェクト管理に関する考えのまとめ

ここ最近は色々とあってプロジェクト管理、スクラム開発について勉強していたので、それを整理するためにまとめた。 スクラムガイド スクラム現場ガイド SCRUM BOOT CAMP THE BOOK スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRES…

rubyのflat_mapをちゃんと理解した

2019年の最初だし、ブログでも書いてみようという試み。 事の発端のツイート コード読んでいて違和感あるけど、修正しなくても動いている場合のレビューが難しい。例えば、無駄なメソッド呼び出しとか。def foo(x) a = x.flat_map(&:bar) (a + [1]).flattene…

「現場で使えるRuby on Rails5速習実践ガイド」の感想 #現場rails

なかなか読む時間が取れなくて積み本になっていたのを週末に読んだので、その感想です。 現場で使える Ruby on Rails 5速習実践ガイド(特典PDF付き)作者: 大場寧子,松本拓也,櫻井達生,小田井優,大塚隆弘,依光奏江,銭神裕宜,小芝美由紀出版社/メーカー: マイ…

表参道.rb で「毎日gemをアップグレードする生活」のタイトルでLTした #omotesandorb

omotesandorb.connpass.com 忙しくて2ヶ月くらい表参道.rbに行けてなかったけど、今回は参加できた。 今回の会場は外苑前の株式会社ビジネスバンクグループさんで、懇親会の時に軽食の提供があった。 ありがとうございます。 LT資料 毎日gemをアップグレード…

IP制限かかっている GitHub Enterprise のリポジトリを git clone する方法

git

IP制限かかっている GitHub Enterprise のリポジトリを IP制限に穴を開けない で git clone する方法です。 ただ、コマンドを実行する PC は GitHub Enterprise にアクセスできる必要はあります。 $ ssh-add ~/.ssh/id_rsa $ ssh -R 1234:ghe.foo.com:22 -A …

Hash#key? を上書きしてもキーワード引数は上書きできない

Ruby のしくみに面白いコードが書かれていました。 class Hash def key?(val) puts "Looking for key #{val}" false end end def add_two(a: 2, b: 3) a+b end puts add_two(a: 1, b: 1) # Looking for key a # Looking for key b # 5 キーワード引数は内部…

Rubyのdefの後に何を書けるか調べる実験

実務では一切の役に立たないRuby雑学。 普通のdef まずは基本の書き方。 def foo puts "hello" end foo #=> "hello" class User def self.foo puts "foo" end class << self def bar puts "bar" end end end User.foo #=> "foo" User.bar #=> "bar" 特異クラ…

Rubyのdefの中で更にdefをするコードの挙動

defの中にdefを書いたらどうなるのか? そんな実験。 class Nanoha def starlight_breaker puts "魔力が足りません" end def battle! def starlight_breaker puts "全力全開、スターライトブレイカー!" end end end user = Nanoha.new user.starlight_break…

特異クラスの中に定義したクラスのancestors

Ruby難しい。この無名クラスは一体何者なんだ...class A class << self class B end endendp A.singleton_class.const_get(:B).ancestors#=> [#<Class:0x00007fe8c203c980>::B, Object, Kernel, BasicObject]— 神速 (@sinsoku_listy) 2018年4月30日 class A class << self class B end </class:0x00007fe8c203c980>…

Rubyのモジュールでnewを使う方法

タイトルは半分くらい釣りです。役に立たないRuby雑学です。 コード例 モジュールで self.new を定義すると、モジュールに対してnewが呼べる。 class A end module M def self.new A.new end end p M.new.class #=> A 別のクラスのインスタンスを返すクラス …

RuboCopの新しいルールを追加する方法(Custom Copの作り方)

何度もレビューで指摘することはRuboCopのルールとして追加して、自動化しておくと便利です。 この記事では、RuboCopで新しいルールを作る方法を紹介します。 参考にしたページ これがとても参考になった。 github.com Copの書き方は独特なので、RuboCopリポ…