本文へスキップ

技術的な学びを、コードとともに。

プログラミングやソフトウェア開発など、技術的な内容を書いているブログです。

新着記事

Railsでワンタイムパスワードによる認証を行うGemを作りました

Railsでワンタイムパスワードによる認証を行うone_time_passwordというGemを作りました。4桁や6桁の数字の認証コードを入力して認証するあれです。 近い道としては「2段階認証」や「新規会員登録時のメール認証でアカウントを有効化すること」などを想定してます。新規会員登録の時に認証URLをメールで送ってアクセスしてもらうタイプが多いと思うのですが、この方式だとモバイルアプリの時にアカウントを有効化した後に再度ログインしてもらうなどしてもらわないといけなくて不便ですよね。 ワンタイムパスワード方式ならそのあたりの実装をシンプルにできます。

merge: origin - not something we can merge エラーが出たときの対処

いつも通り開発をしていて、開発中のブランチへmain (master) ブランチの変更を取り込もうとしたときの話です。merge: origin - not something we can merge というエラーが表示されてマージできませんでした。検索して出てくるタイポ、スペルミスではありませんでした。「マージされるブランチがリモートにあってローカルにないから起きる」という記事もありましたが、会派中のブランチもmainブランチも最新をpullしてきていたので多分問題ない気がします。結論としてはマージ元とマージ先のブランチを切り替えた上で git merge main したらうまくいきました。

Rails.cache.fetch で有効期限が効かずにキャッシュが更新されない

Rails.cache.fetchを使っていた時、有効期限を短くしてるにもかかわらず古い値が残り続けるという現象が起きました。Rails.cache.fetchのexpired_inは5秒と設定して、5秒以上たってもキャッシュが消えませんでした。Rails自体のソースコードを読んでみると、Entryクラスのinitializeメソッドの引数に指定できるのはexpires_inまたはexpires_atとなっています。そう、expired_inという引数は存在せず指定できなかったのです。僕が参考にしたサイトが間違っていたのが原因というオチでした。

なんでも食洗器に入れる

多分エンジニア。yosiです。 SUZURIアドベントカレンダーということで何か書きます。 なんも書くこと思いつかなかったので、人類が生きていくのに必要な食洗器について書こうと思います。食器を自動で洗ってくれる家電です。 パナソニック以外は認めません。 日本の教育カリキュラムに入っていないため、触れてこなかった方も多いと思います。 しかし、資産形成や歯のメンテナンスなどと同様に、知らなかった責任を取るのは自身です。 僕は幸い、実家に組み込み型の食洗器があったので、**たまたまその便利さを知ることができました**。 この記事では、老いて人生を振り返ったときに**「食器を手洗いしてなければ...」**という後悔をしないための記事です。 適当なことを書きましたけど、くだらない記事なので鼻で笑ってもらえると幸いです。

Reactでurlごとにコンポーネントを出しわけるルーティングを設定する

Reactでurlごとにコンポーネントを出しわけるルーティングを設定します。Reactでルーティングの設定をするためにreact-router-domを使用します。パッケージを使わずに自分でURLごとに切り出すコードを書いてもいい気もしますが、かなり有名なパッケージですしせっかくなので使ってみます。react-router-domを使うことで簡単にルーティングの設定をすることができます。SwitchはRoutesに名前が変わっていたり、Routeの引数も以前はcomponent={Top}というように書いていましたが、6系からelement={<Top />}という風に変わっていたり、ちょっと戸惑いました。

Github ActionsでRailsがDBと接続できなかった話

Github Actions でCIの設定を書いていて 'could not connect to server: Connection refused | Is the server running on host "localhost" (::1) and accepting |TCP/IP connections on port 5432?' や 'could not translate host name "postgres" to address: Name or service not known | Couldn't create 'app_test' database. Please check your configuration.' のようなエラーが出ていて数日困り果てていました。結果的にactではサービスコンテナが使えないというのが原因でした。僕はあまりDockerなどのコンテナ周りが専門ではないので、Rubyやpostgresのバージョンの問題なのか?何か書き方が間違っているのか?Portやhostの設定が違うのかと迷走してしまいました。

Xiaomi pad 5が届いた!!!

最近、 Surface book3 を買ったばかりですが、重たいしWindowsOSはタブレットとして使いずらいのでだらだらと動画を見たりするのには適しませんでした。個人的には Huaweip20 pro を愛用していたので、huaweiのタブレットを最有力候補にしてましたが、Playストアが使えないという致命的すぎる問題があるんで買えません。社内でxiaomiがかなりいいタブレットを発売するという話を聞きました。調べてみるとこれがあまりにも化け物端末だったことを知り、グローバル版を早速買ったので紹介します。

服の色移りって本当にするのかどうしても気になった結果

アニメや漫画の世界にしか起きないことってありますよね。例えば食パンくわえて登校してる人なんていないです。僕は服の色移りというものを自分で経験したことがありません。当たり前のように色移りすると思っていましたが、実はみんな漫画で呼んだ知識を脈々と受け継いでいるだけではないかと思ったわけです。気になったら貴重な休日を無駄にして試してみようと思いました。Tシャツとオレンジの色物エプロンを同時に選択して変化を比べてみました。

Ruby on Railsで Refused to load the script http://localhost:3000/mini-profiler-resources/includes.js というエラーが出る対処

Ruby on RailsでJavascriptを読み込もうとして時に、 Refused to load the script 'http://localhost:3000/mini-profiler-resources/includes.js?v=35a79b300ab5afa978cb59af0b05e059' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback. ようなエラーが出ました。コマンドでtmp/miniprofilerフォルダ以下を削除することで解決します。Permission deniedが出て権限エラーになるときはsudoをつけて削除しましょう。

WSL2でdocker-compose runコマンドで生成されたファイルの更新ができない

WSL2 上で docker-compose run app bundle exec rails new . コマンドによってファイルを生成したとき、ファイルの編集ができなかったり、git add したときに .git/index.lock ファイルで Permission denied が出たりしていました。WSL特有の症状なのかと悩んでいたのですが、 docker-compose run app bundle exec rails new . コマンドのようにコンテナ内からコマンドを実行してファイルを生成すると所有者が root になることが原因のようでした。生成されたファイルをchownでパーミッション変更するか、WSLに直接Rubyをインストールしてコンテナ外からファイルを生成するのがよさそうです。 wsl.conf や .wslconfig の編集、ubuntu2004コマンドは関係なしでした。