Rails の collection_check_boxes をカスタマイズする #rails

概要 検索フォームのような、チェックボックスによる複数条件を指定する UI を作ろうとしたときに、 collection_check_boxes を使うとよさそう。 collection_check_boxes | Railsドキュメント しかし、collection_check_boxes のオプションだけだと input の…

Rails でトランザクション完了後に更新内容を取得する #rails

概要 トランザクションとは分離したいが、保存した内容によって事後処理を行いたい場合がある。 changed? や hoge_changed? あたりは save 後には false になってしまうため、更新内容を取得できない。 ApplicationRecord.transaction do if foo.name_change…

Rails + Puma は cluster mode だと RubyMine でデバッグできない #Rails #RubyMine

Rails + Docker な開発環境で RubyMine のリモートデバッグを行う場合、下記を参考にすればできるようになる。 www.jetbrains.com ところが、 Puma を利用していた際にデバッグモードでエラーが発生し起動できなくなってしまった。 Exception: Connection re…

「詳解Go言語Webアプリケーション開発」を読んだ #golang

Go

詳解Go言語Webアプリケーション開発作者:清水陽一郎シーアンドアール研究所Amazon 仕事では中々 Go を書く機会がないので、手を動かしながら学べる本がないかなと手に取った。 初心者向けの入門書かな、くらいの気持ちだったのだけれど、いい意味で期待を裏…

GitHub Actions で service のコンテナにリポジトリのファイルをマウントしようとするとエラーになる #GitHub #Actions

概要 GitHub Actions では、ジョブのサービスとして MySQL や Redis が使える。 volumes ( jobs.<job_id>.services.<service_id>.volumes ) を指定することで、サービス間やステップ間でデータを共有できる。 ただソースコードは通常 actions/checkout を利用すると思うが、リポ</service_id></job_id>…

GitHub Actions 上で MySQL のシステム変数をカスタマイズする #GitHub #Actions #MySQL

概要 GitHub Actions の Workflow では、 Services として MySQL が利用できる。 character_set_server などのシステム変数を変更する方法についてまとめる。 採用した方法: SQL ファイルでグローバル変数を書き換える Workflow で使う MySQL は基本使い捨て…

DataGrip で sql_mode に STRICT_TRANS_TABLES が適用される #mysql

概要 DataGrip で MySQL に接続すると、 sql_mode を別途設定しているにも関わらず、STRICT_TRANS_TABLES が勝手に適用されていた。 グローバルの設定を確認すると、意図したものが設定されているが、セッションの設定は STRICT_TRANS_TABLES になってしまう…

Goland で Docker を使った開発環境を作成する #golang #goland

概要 ネットに十分な情報はあるのだが、なんやかんや毎回詰まったりちょこちょこ調べたりしているので自分用にまとめておく。 Goland を使う Docker で動かす Web アプリケーション air でホットリロード delve でリモートデバッグ テストも Docker 経由でデ…

「プロフェッショナルWebプログラミング Laravel」を読んだ #Laravel

プロフェッショナルWebプログラミング Laravel作者:久保田賢二朗,荒井和平,大橋佑太エムディエヌコーポレーション(MdN)Amazon 現職だと Web アプリのフレームワークは CakePHP を利用してるんだけど、Laravel もう少し知っておきたいな〜、と思って読んで…

CakePHP の BelongsToMany でdependent は default が true になっている #CakePHP

アソシエーションの dependant CakePHP のモデルのアソシエーションには dependant というキーが用意されており、 true に設定することで削除のときに関連付けたモデルのレコードもまとめて削除することができる。 book.cakephp.org belongsToMany だけデフ…

FakerPHP/Faker で \Faker\Generator::image が使えない #php #laravel

概要 Laravel の Factory で画像のテストデータを作ろうとして $this->faker->image(storage_path('app/public/images')) とかやっても、画像ファイルがうまく生成されず、画像ファイル名も 0 とかで生成されてしまう。 v1.20.0 で非推奨になっており、 Fake…

人間をリソースと呼ばない方がいいと思う

社内に投下したポエムを一部修正してリポスト。 「リソース」っていう表現が嫌い 表題の通りなんですが、僕は人間をリソースと呼ばないほうがいいと思っていて、何ならとても嫌いな表現なんです。 文脈上使わざるを得ないときもありますが。 よく聞くような…

phpunit-snapshot-assertions にコントリビュートした #php

PHP

スナップショットテストをやりたいなと思って spatie/phpunit-snapshot-assertions を導入してみた。 github.com ところが PHPUnit でデータプロバイダをつかったパラメータライズドテストをやっていると、どうもうまくいかない。 原因は、データセット名に…

Laravel Sail 環境を PHPStorm でデバッグする #Laravel #PHPStorm

前提 Laravel v9.17.0 Sail v1.14.10 環境変数を定義 .env で xdebug を有効化し、設定を変更する SAIL_XDEBUG_MODE=develop,debug SAIL_XDEBUG_CONFIG="client_host=host.docker.internal idekey=PHPSTORM start_with_request=yes" ブラウザ拡張を使う方法…

Laravel の補完を PHPStorm で使いやすくする #Laravel #PHPStorm

概要 Laravel のモデルでクエリを組み立てようとすると、 Method 'where' not found と言われてしまう。 このせいで PHPStorm の補完が効かなかったり、警告が出てしまったりする。 first(); // query() をかませると平気なんだけれども、面倒 MyModel::quer…

Google Domains のドメインのサブドメインを Amazon Route53 で利用する #terraform

Route53 でパプリックホストゾーンを作成 terraform だとこんな感じ。 resource "aws_route53_zone" "sample" { name = "sample.mydomain.dev" } パブリックホストゾーンを作成すると、NS レコードと SOA レコードは自動作成される。 Google Domains で NS …

Fixture Factories で Faker が日本語にならなかった #CakePHP

問題 CakePHP に Fixture Factories を導入しようとしていた。 Faker が利用できるので、日本語化しようと思ったがどうもうまくいかない。 原因と解決 defaultLocale がハイフン区切りの ja-JP になっていた。 アンダースコア区切りの ja_JP を指定すること…

Android 開発に入門してみた #Android

なんかやったことないことやってみたいな〜、と思って Android 開発を少しだけやってみた。 特に Android 自体に強いこだわりがあったわけじゃないんだけれど、 Java や Kotlin を久しぶりに触りたいなって気持ちがあった。 どうやって入門したか 主に2冊の…

僕らはいつもスプリントレビューをしていた

久々の出社、とある機能の実装が一段落し、Dev環境にデプロイした。 隣の席のプロダクトマネージャーにふと「見ます〜?」と言ったら「見る見る!」となった。 そしたら隣の島にいた別の人が「私も見たい!」となって覗きに来る。 なので実機(スマホアプリ…

Android で「Requested internal only, but not enough space」というエラー #Android

Android Studio のエミュレータでアプリを起動しようとしたらエラーが発生してしまった。 java.io.IOException: Requested internal only, but not enough space 単純にエミューレータのデバイスで空きサイズが無いということらしい。 ストレージ容量を増や…

TravisCI で PHP7 のビルドがエラーになる #TravisCI #php

(2022/03/17 追記) フォーラムで話題になっており、サポートからも連携されたようなので、そのうち直りそう。 travis-ci.community 問題 php7.4 で TravisCI が突然コケるようになってしまった。 php: error while loading shared libraries: libargon2.so.1…

AWS SDK for PHP を Mock する #php

AWS SDK を使って Amazon SNS 使用箇所のテストを書こうとしていたところ、 PHPUnit の Mock を無邪気に使ったら怒られてしまった。 phpunit Trying to configure method "publish" which cannot be configured because it does not exist, has not been spe…

Goland でファイル名が main じゃないとブレークポイントが貼れない? #Goland #golang

Go

問題 docker-compose を使って Goland でリモートデバッグを試していた。 エントリポイント (main関数) のあるファイルだけブレークポイントを貼れない。 Cannot find debugger path for /path/to/server.go みたいなメッセージが出て、ブレークポイントが無…

clasp の push で package.json が求められる #gas

gas

GAS の実装や管理には clasp が便利なんですが、いざ clasp push で反映しようとしたらエラーが出て怒られた。 ENOENT: no such file or directory, open 'package.json' 複数の App Script をまとめて管理するために、下記のようなディレクトリ構造にしてい…

Go の Web アプリケーションを Heroku にデプロイしたメモ #golang #heroku

概要 基本的な流れは公式に従ってやってみれば問題ないのだろうけど、自分で作ったものをデプロイしようとしたらちょこちょこ詰まったので備忘録。 https://devcenter.heroku.com/articles/getting-started-with-go https://github.com/heroku/go-getting-st…

ssh-add コマンドの -K オプションが deprecated になってた

無邪気に ssh-add -K したら、 WARNING が出てることに気づいた。 WARNING: The -K and -A flags are deprecated and have been replaced by the --apple-use-keychain and --apple-load-keychain flags, respectively. To suppress this warning, set the e…

「先延ばしと挫折をなくす計画術 無敵の法則」を読んだ

先延ばしと挫折をなくす計画術 無敵の法則作者:野呂 エイシロウアスコムAmazon Twitter のタイムラインで言及されてて少し気になり、 Kindle でセールだったのもあり読んでみた。 著者のドヤと煽りが満載な雰囲気はあまり好みではないのだが、この類の本を何…

CakePHP で Table の Validator を差し替える #cakephp

以前 Validation をカスタムしやすくする方法を書いた。 su-kun1899.hatenablog.com Validation は bootstrap.php で差し替えればいいんだけれど、じゃあ自前で呼ばない Table の Validator を差し替えるにはどうしたらいいのか。 Table での Validation Tab…

PHP7 で CakePHP4 の FrozenDate を使うと、月差分が正しく判定されない場合がある #php #cakephp

概要 PHP8.1 未満の環境における CakePHP の FrozenDate は、 UTC でない Timezone を使った場合に、日付差分が正しく取れないケースがある。 FrozenTime を使うようにするか、 PHP8.1 以降にバージョンを上げると解決する。 ※タイトルでは PHP7 としている…

CakePHP の Command のテストで Mock を使うのは、 DI を利用するのがよさそう #cakephp

概要 Mock はできるだけ使いたくない派なんだけれど、外部API利用時なんかはどうしても必要になる時がある。 Controller の場合はやりようがあるが、 Command はちょっと迷った。 CakePHP の Command で使うようなときに Mock をするには DI を使うのがよさ…