Journey

技術に関することと覚書と

vimでTDDしやすい環境を整えた

自分はコードを書くときにTDDをするので、vimから手軽にテストを回せる環境が必要でした。 なので、いままではvim-test + vim-dispatchを使用していたんですが、quickfixlistの挙動だったりがなんか微妙だなーと感じていたのでasyncrun.vimを使用して自分で…

HanamiのEntityのschemaに別Entityを使用する方法

結論 class User < Hanami::Entity attributes do # one attribute :post, Types::Entity(Post) # many attribute :posts, Types::Collection(Post) end end 経緯 HanamiでDDDっぽく書くために https://guides.hanamirb.org/entities/custom-schema/ に書い…

VimでPRをレビューするためのプラグインを作っている

githubでレビューをしていていると、いつものエディタと違うことに違和感を感じることないですか? 自分の場合は フォント フォントサイズ ウィンドウサイズ 背景色 シンタックスハイライト その他周りにあるUI がいつもと違うので、全体的に違和感を感じて…

FactoryBotを効果的に使用する

似た記事をQiitaに書いてますが、こっちをメインにする意味でも書き直そうと思います。 はじめに ご存じの方も多いと思いますが、FactoryBotは主にテストを書く際に使用される、オブジェクトのインスタンス化を簡単にするためのものです。 ただ、FactoryBot…

hanamiで関連先のモデルにorderやlimitをかける方法

例えば User モデルが Post モデルを has_many している場合に、find_with_posts で posts に対して order や limit をかけたい場合があると思います。 その方法は公式のDocumentに書いていなかったので、自分がやっている方法を共有します。 def UsersRepos…

Vueでpropsで渡されたものをコンポーネント内でさらにv-modelに渡したい場合

タイトルままですがVueのあるコンポーネントでv-modelで渡されたものを、さらにそのコンポーネント内で別のコンポーネントのv-modelに渡すなどした時に以下のようなwarningが出ます Avoid mutating a prop directly since the value will be overwritten whe…

Github trend素振り的なものをやっていく

Github trend素振り的なものがあるらしいんのでやってみる。 具体的には、githubトレンドにあるものを、動かしてみるものらしいです。 ものを動かし始めることって結構ハードル高いので、それの耐性がつくのと、文字通りOSSのトレンドにおいていかれないよう…

ActiveRecordのtakeメソッドがテスタブルだった

Railsにおいてある特定個数の要素がほしいときに以下のようなコードをよく書くと思います。 Article.most_recently.limit(5) ただこのように書いてしまうと、 limit はrailsのメソッドのためテストコードが書きにくくなってしまいます。具体的な例を上げると…

Arch linuxでdockerをrootlessモードで動かす

どこかでdockerがrootlessモードを追加するみたいなことは聞いてましたが、いつの間にか追加されていたようです。 なのでrootlessモードで動かしてみようと思います docs.docker.com ※実験的な機能なので本番環境などで使用する場合は注意してください 環境 …

RailsでFileをActionDispatch::Http::UploadedFileに変換する方法

Railsで開発しているときに、生のRubyのFileオブジェクトからRalisのフォームから送信されたActionDispatch::Http::UploadedFileに変換したいときがあったのでそのときに解決した方法です。 require 'mime/types' File.open(path) do |file| filename = File…

vimで直前に編集していたファイルに戻る方法 <C-6> or <C-^>

vim

タイトルのままですがずっとしたかった機能がredditのどこかのスレッドで見つけたので。 :e foo.txt の後に :e bar.txt を開いて <C-6>か<C-^> で foo.txt に戻れます。 ちなみに自分は <C-6> ではできませんでした。 もっと詳しく知りたい方は :h CTRL-^ を参照してくださ</c-6></c-^></c-6>…

開発環境をArch Linuxにした

自分の開発マシンはMacなんですが開発自体はほとんどをvirualbox上のubuntuでしています。 なんとなくarchlinuxを試してみたかったので入れてみました。 vagrant init 'general/arch' vagrant up でいれました。 所感 省メモリ ubuntuのときの消費メモリを覚…

テストを書くタイミング

「テストは時間がないから後で」 こんな言葉を聞くことは最近は減ったかもしれません。しかし今もテストは往々にして後回しにされる、そもそも書かれない、などといったことがやはり多くあるように感じます。言い換えればアプリケーションコードと比べて明ら…

VeeValidateで子供のコンポーネントまでvalidateする

※3.0.3が出てるので、できればそちらを使いましょう。 バージョン VeeValidate: 2.2.15 VeeValidateで下のコードのようなバリデーションを行おうと思ったときにうまく動きませんでした。 <template> <div> <input v-model="user.email" v-validate="'required|email'" name="email"> </div> </template> <script> export default { props: { user: { type: Object, requ…

Active Storageをtask内で使おうとしたらハングした

タイトルのとおりですが class User has_many_attached :files end みたいなモデルがあったときにあるタスク内で user = User.first %w[foo bar].each do |word| Tempfile.open(word) do |file| file.write(word) file.rewind user.files.attach( io: file, …

E2Eテストについて思っていること

なんかいろいろE2Eテストで思ってることがあるのでいくつか書こうかなと思います。 あと基本的にはこの記事はE2Eテストに重きをおいて、ユニットテスト、インテグレーションテストなどをあまり重要視していないコードに対するものです。 あとこの記事はあく…