kosappi の日記

愛知県豊橋市に住んでます。

Gemfile.lockから不要なプラットフォームを削除する

チームで共有している Gemfile.lock に手元の環境が PLATFORMS として追加されてしまう場合がある。 これを削除するには、下記のコマンドを実行すれば良い。 (Apple silicon な MacBook であれば下記のような感じ)

bundle lock --remove-platform arm64-darwin-24

bundler.io

そもそも、PLATFORMS に余計な環境を追加しないで欲しい。 そういう場合は設定を変えれば良い。 ruby のみに絞られる。

bundle config set force_ruby_platform true

ただし、すでに Gemfile.lock に追加されたプラットフォームは消えないので、手動で最初のコマンドを実行する必要がある。 もしくは VCS で bundle install 等する前の状態に巻き戻せば良い。

AlpacaJapan株式会社を退職しました&&バフェットコード株式会社に入社します

本日がAlpacaJapan株式会社での最終勤務でした。約3年勤務しました。

blog.kosappi.net

AlpacaJapanでは上司や同僚に恵まれて、とても快適に仕事ができました。スキルとしては↓のようなものが学べました。

在職中にお世話になった方には本当に感謝しております。


新卒は記念受験で受かって、それ以降は紹介による転職がメインでした。友人や先輩に恵まれて転職が成功していたので、とても感謝しています。

AlpacaJapanへの転職は、そういった流れを1度辞めて、まったくツテのない会社で働いてみようという、自分なりのチャレンジでした。

結果としてはうまくいったので、満足しています。


次はバフェットコード株式会社で働きます。今まで副業として7年間働いていましたが、来週から正社員として働きます。

ここで宣伝です。バフェットコードではエンジニアを募集しています。小坂と働いてもいいよ〜とか、Rails ならできるよ〜という方、データエンジニア、機械学習エンジニアを募集しております。よろしくお願いします。

career.buffett-code.com

豊橋発熊本帰省2025

毎年、豊橋から熊本の実家まで家族で帰省している。高速道路や空港、飛行機の便などを記録しておく。

全体スケジュール

3泊4日

  • 1: 移動(豊橋→熊本)
  • 2: 自由
  • 3: 自由
  • 4: 移動(熊本→豊橋

1日目 豊橋→熊本

高速道路で名古屋空港まで移動する。中部国際空港ではない。

豊川ICから高速道路に乗るのだが、ICの手前の豊川稲荷へ続く交差点で初詣渋滞が発生しており、15分ほど時間をロスした。次は迂回路を探したい。美合SAでこどもにおやつを食べさせると安定して移動できる。名古屋市内は清算が何度もあるので、普段高速に乗らなくてもこの日だけはETCカードがあった方が良い。

中部国際空港からも熊本行きがあるのだが、朝と夜の便しかないため、名古屋空港発のFDA325に乗る。以前はセントレアANAにも昼の便があったのだが、どうやら廃止された模様。大人のみの移動なら朝や夜でも良いが、子供も乗せるとなると早朝や暗くなってからは都合が悪い。

ここで名古屋空港Tipsです。

  • 併設の駐車場はFDA利用車なら上限3,000円
  • 今のところ満車で駐車不可というケースは未経験(1/3に駐車)
  • タリーズコーヒーで買ったものは保安検査をパスできるし機内にも持ち込める
  • 保安検査後はレストランや売店はない

熊本空港ではレンタカー店に直行。トヨタレンタカーの建物が生まれ変わってました。

www.trl-kumamoto.co.jp

レンタカーに乗って実家まで移動。

2日目 自由行動

下の子を連れて坪井川の公園に行った。広くてきれいで良かったです。

熊本電鉄の車両も見られるのでかなり良い。

www.city.kumamoto.jp

昼食はヒライに行って、家族に熊本を感じてもらう。

3日目 自由行動

下の子を連れて散髪。ドラゴンボール超の単行本に夢中になっていた。

下の子は乗り鉄なので、熊本電鉄(藤崎宮行き)→熊本電鉄上熊本行き)→市電→通町筋乗換→バス、のコンボで市内北側を移動。

くまモンICカード作ろうかと思ったけど、アプリを準備しているそうなので、リアルカードはやめておいた。ちなみにSUICAとかPASMOなどはもう使えません。

www.kumamotoiccard.jp

4日目 熊本→豊橋

1日目の逆をやる。

早めに家族+祖父母と空港に移動して昼食。 ロイヤルホストができていたので、そこで食べたが、すごい混雑だった。保安検査前に食事ができる場所と公園が新設されており、そこそこ賑わっていた。

www.kumamoto-airport.co.jp

ロイヤルホストの前にはガチャポンコーナーがあるので注意してください。

FDA326で熊本→名古屋

帰りの高速道路も長いので、豊田上郷SAで夕食をとる。キティちゃんのポップコーンがあるので、こどもは喜ぶ。

自宅に着くと19:00過ぎくらい。お疲れ様でした。

感想

ロイホカシミールカレー美味しかったです。チャツネも乗ってて良かった。

2024年まとめ

2024年のまとめです。

土地+注文住宅をローン組んで買いました。 年始あたりからいろいろやって、先週引き渡しでした。引越しは来年。楽しみ。

仕事

新卒で働き始めてから10年目だった。

ウェブエンジニア10年を振り返る - kosappi の日記

今年はFIXを勉強したのが楽しかった。

Financial Information eXchange - Wikipedia

本業も副業も面白いのだが、ついつい働きすぎてしまうので、仕事をセーブするルールを自分なりに作ったりしていた。

パブリックな技術はなるべくブログに書くようにし始めた。これは自分の勉強にもなるので、けっこう良いと感じている。ブログを書くために改めていろいろ調べることになるので。

育児

普段通り、仕事をしていない&&子供が起きている時間、は基本的に家事とか育児をやっていた。

趣味

写真

以前から持っていたカメラを本格的に運用し始めました。 例えば、子供と出かけるときにカメラを持っていって...

  • 子供とか食事の写真 -> ライティングをすこし修正して家族に共有
  • 風景の写真 -> がっつりレタッチしてvscoに投稿

というのをやってます。

https://vsco.co/kosappi

reddit の postprocessing という subreddit がめっちゃ面白い。

https://www.reddit.com/r/postprocessing/

音楽

東京(+埼玉)まで3回ライブを見に行った。 QOTSAレッチリとデュアリパ。

Red Hot Chili Peppers - kosappi の日記

Dua Lipa - kosappi の日記

甲類焼酎をいかに美味しく飲むか、というのにチャレンジしていた。

キーボード

今持ってるやつを気分で交代させて使ってる。楽しい。でも作るのはもう良いかな...。

ゲーム

未経験だったペルソナを3から5まで一気に遊びました。良いゲームだった。 今はデスストをやってます。(スターを集めながらやってるので全然進まない)

読書

ぜんぜん読んでない。

思い出

ディズニーランド

子連れてディズニーランド、の実績を解除しました。

豊橋発ディズニーランド2024 - kosappi の日記

まとめ

来年また転職します。小坂のエンジニア11年目を応援してください。

Rails + Ransack + PostgreSQL で ILIKE ではなく LIKE を使う

はじめに

Ransack は人気のある gem で、Rails + Ransack + RDB ですぐに検索システムが実装できる。

github.com

データソースに PostgreSQL を利用する場合、LIKE 句での検索ができない。LIKE 句が書かれて欲しいケースでも、ILIKE が書かれてしまう。これでは困る。

Rails + Ransack + PostgreSQL の組み合わせで LIKE が発行されるようにしたい。

同じ問題はすでに Ransack の github でも話題になっている。(そして解決方法も書かれている。)

How to use LIKE instead ILIKE on PostgreSQL? · Issue #699 · activerecord-hackery/ransack · GitHub

Ransack does not distinguish between "*_cont" for LIKE and "*_i_cont" for ILIKE with PostgreSQL · Issue #1421 · activerecord-hackery/ransack · GitHub

いろいろ試して解決できたので、紹介します。

まとめ

下記のコメントのようにモンキーパッチを適用して Arel に新しい Predications を追加する。 それを ransack で利用すれば良い。

How to use LIKE instead ILIKE on PostgreSQL? · Issue #699 · activerecord-hackery/ransack · GitHub

解説

Ransack + PostgreSQL では LIKE を書けない

まず、Ransack + PostgreSQL の組み合わせで LIKE を書く機能は標準では存在しない。 例えば name というカラムについて LIKE を使いたい場合は name_cont でリクエストするが name_cont でも name_i_cont でも ILIKE が書かれる。これは spec でも期待値として書かれている。

ransack/spec/ransack/predicate_spec.rb at 2d56e78f860bbceec9f52fa7ec5a0cce6bb0702b · activerecord-hackery/ransack · GitHub

そのため、自分で predicate を追加する必要がある。

↓のような感じ

Ransack.configure do |config|
  config.add_predicate 'custom_cont',
                       arel_predicate:   'matches',
                       formatter:        proc { |v| "%#{v}%" },
                       validator:        proc { |v| v.present? },
                       type:             :string,
                       case_insensitive: false
end

これで上手くいきそうな気がするのだが、この predicate を使っても ILIKE になってしまう。 case_insensitivetrue にしても false にしても ILIKE になる。どうやら case_insensitive では LIKE か ILIKE かの選択はできないみたい。(このオプションの本来の用途はちゃんと見ていない)

Arel に新しい Predication を追加する

Ransack で cont を指定すると Arel の matches が利用されるのだが、この matches は LIKE/ILIKE の選択に対応している。

matches の定義

https://github.com/rails/rails/blob/6911b00c7c827c853afc535f0bda2b26b1a5fa33/activerecord/lib/arel/predications.rb#L131-L133

LIKE/ILIKE の選択

https://github.com/rails/rails/blob/6911b00c7c827c853afc535f0bda2b26b1a5fa33/activerecord/lib/arel/visitors/postgresql.rb#L7-L16

どうやら matches の引数 case_sensitive に Ransack の predicate の case_insensitive は反映されない。 そこで、デフォルトで case_sensitive が true な matches をモンキーパッチで追加する。

↓のような感じ

module Arel
  module Predications
    # オプションcase_sensitiveをデフォルトでtrueにする(本来のmatchesはfalse)
    def s_matches(other, escape = nil, case_sensitive = true)
      Nodes::Matches.new self, quoted_node(other), escape, case_sensitive
    end
  end
end

追加した Predication を Ransack から使う

上で Arel に追加した Predication を Ransack から使えるように add_predicate する。

Ransack.configure do |config|
  config.add_predicate 's_cont',
                       arel_predicate:   's_matches', # ここに追加したパッチで追加したPreficationを指定
                       formatter:        proc { |v| "%#{v}%" },
                       validator:        proc { |v| v.present? },
                       type:             :string,
                       case_insensitive: false
end

これで PostgreSQL を利用している場合でも LIKE で検索ができる。

感想

今回は Arel のモンキーパッチを書いて強制的に case_sensitive を true にした。本来は Arel のモンキーパッチを書くのは避けたいので、Ransack 側から case_sensitive に渡す値を操作できるとベストなのだが、これは実装できなかった。(ちゃんと Ransack のコードを読めばできる気はする)

もっとスマートにできるよ!という方がいたら教えてください。よろしくお願いします。

ひとまず LIKE で検索できるようになったので良かったです。

ILIKE/LIKE の区別はけっこう大事な気がするので、コントリビュートチャンスかも知れない。

ウェブエンジニア10年を振り返る

腸炎にかかって寝込んでいました。寝込みつつ、ウェブエンジニアとして働き出してから10年経っていることを思い出しました。

せっかくなので振り返ります。誰かのキャリア形成に役立てばうれしいです。

あまりネガティブなことは書きたくないので、もっと詳しい話が聞きたければ直接話しましょう。(豊橋まできてください)

まとめ

入社した年を新卒から順番に並べたもの。

  • 2014 ヤフー株式会社
  • 2016 Branding Engineer 株式会社
  • 2017 株式会社 Misoca
  • 2022 Alpaca Japan 株式会社

副業。

  • 2017~ バフェットコード株式会社

もっとくわしく

  • 2014 ヤフー株式会社
    • 「インターネットならヤフーやろ」という記念受験で新卒選考にエントリー
      • 他に就活で見た会社
        • 協同飼料(牧場でアルバイトしていたので(書類審査で落ちた
        • sonet(ポストペットが好きだったので(最終面接で落ちた
        • ヤマハ(軽音楽部だったので(書類審査の課題が重すぎて受けていない
    • ヤフオク
    • 同期の友達がたくさんできる
    • 練馬から六本木のミッドタウンまで都営大江戸線で通勤してた
      • 今思うと、もう少し近い場所に部屋を借りれば良かった...
    • 社内イベントがたくさんあって楽しかった
      • ここの縁で今も仕事が続いてるので感謝してる
    • 主にバックエンド
      • HTTPをしゃべるプログラムを書く機会があって面白かった
    • 辞めるときに「他の会社でやっていけるの?」みたいなことを言われてキツかった(なんとかやっていけてます)
  • 2016 Branding Engineer 株式会社
    • 高専時代の友人に誘われて入社
    • 全部自分でやらないといけなかったので、AWS から CSS まで一通り覚えた
      • 特に原稿からCSSを書き出す能力(コーディング)はかなり上達した
    • いろいろあってしんどくなって辞める
  • 2017 株式会社 Misoca
    • 紹介をいただいて入社
      • ありがとうございます!
    • 選考のときに Asyley さんの話題で盛り上がったのが良かった
    • 雰囲気で使っていた Ruby とか Rails を真面目にやる
    • フロッピーを配ったりして楽しかった
    • ここからフルリモートで仕事をはじめる
      • コロナ禍の前からフルリモートしていた
    • 育児休業を2回計13ヶ月取得
    • 本当に良い会社でしたが、より良い条件を求めて転職
  • 2022 Alpaca Japan 株式会社
    • Wantedly でスカウトがきていたので選考を進めて入社
    • 今働いてます
    • RubyRails も使っておらず、Java か Go を書いています

感想

だいたい高専時代に勉強した内容で戦っている。(たぶん、高専から直接就職しても今と同じようなことをやっているはず...

大きな目標を持たずに、居心地の良い場所を転々としている。

自分でキャリアを作った、という実感はなくて、折々で誰かに助けてもらったことが連鎖してるという感じ。

今後自分は誰かを助けることはできるのだろうか?楽しみですね。

豊橋発ディズニーランド2024

豊橋から家族でディズニーランドまで遊びに行ったので、メモしておく。

予約

EX予約でホテルと新幹線を予約して、公式サイトでパークチケットを購入した。

それぞれ値段を下げる手段(金券ショップ、株主優待など)がありそうだけど、調べるのも面倒なので、まとめて予約できる方法を選んだ。

EX予約で新幹線とホテルはまとめて手配されるが、パークチケットは含まれていない。含まれてるプランは見当たらなかった。 とはいえパークチケットは公式サイトで簡単に買えるので特に問題なし。

ログ

  • 7:09 豊橋発ひかり
  • 9:16 東京着
  • 9:32 東京発
  • 9:45 舞浜着

保安検査とチケット確認が分かれており、保安検査に並んだあとチケット確認に並ぶ。 保安検査の列がとにかく長くて20分以上かかった。めちゃくちゃしんどいので子どもの気が紛れるもの(汚れにくいお菓子とか)が欲しい。

  • 10:00 遊ぶ
  • 16:00 退場&ホテルへ

子供の体力的に、16時ごろに限界がくるので、ホテルに移動。今回は東京ベイ舞浜ホテルファーストリゾートを予約したので、ゲートを出てすぐのバス停で直通バスに乗れる。これは20分おきにくる。

  • 17:00 夕食

1Fに売店があるので、そこで弁当やおにぎりなどを調達して部屋で夕食。 入浴や寝かしつけなどをスピード勝負で済ませる。

  • 19:00 こども就寝
  • 22:00 おとな就寝

翌日は葛西臨海公園でゆっくり遊んで豊橋に帰った。

感想

週末は混んでいるので、平日に行くべきだと思った。 ホテルは快適だったので、次回も同じホテル(もしくは近所のホテル)を予約したい。 一番楽しかったのは翌日の葛西臨海公園だった。天気も良くて、きれいで広い公園で、快適。

ディズニーまで旅行するのは消耗が辛いので、次はレゴランド(名古屋)あたりにするつもり。