本文へスキップ

タグ

Web

24件の記事

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

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

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

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

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の設定が違うのかと迷走してしまいました。

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コマンドは関係なしでした。

Ruby on Rails で超初心者を脱するまでに学んだこと6つ

ペパボに入社して初めてRailsに触れて、実務でRailsを書き始めて1年が過ぎました。そんな日々で自身がやってしまったバッドメソッドをまとめておこうと思います。レビューなどで指摘されないと意外とやってしまうものもあるかもしれません。これをやめればコードの質も上がると思います。 モデルに寄せてコントローラーに処理を詰め込みすぎない、テストを書く、大事なRakeタスクはlib以下に処理を書いてテストを書く、Rspecで1つのitの中にexpectは1つ、テストでprivateメソッドを覗かない、テストからセッションを覗いたり、変更している時点で設計的に良くない可能性が高い、の6つです。

Gatsby.jsブログをGithub ActionsでVPSやクラウドへ自動デプロイする

Gatsby.jsを使って作ったブログをGithub Actionを用いてクラウドなどへCD(継続的デリバリー)、つまり自動デプロイを行っていきます。CICDの分野ではJenkinsやCircleCIが有名でしたが、最近はGithub Actionsが有名です。Github公式のサービスなので非常に簡単に導入できます。今回はロリポップマネージドクラウドへデプロイしますが、SSH接続ができるならVPSや他のクラウドサービスやレンタルサーバーにも同じようにデプロイできると思います。

キャッシュを利用して簡単にNetlifyでのビルド時間を半分にした

Netlifyでのビルド時間を高速化するためにプラグインを導入して、デプロイにかかる時間を約半分にしました。10分の1にはさすがになりませんでした。しかし、どうしても記事や画像が多くなってくるとどうしてもビルド時間は伸びていってしまいます。最近はGithub Actionsがすごいのでそちらで自動デプロイするようにしようか悩み中です。

Netlify DNS 使ってたらサブドメインが他のサービスで使えなかった

以前、NetlifyとGatsubyを使ったブログの構築を紹介しました。Netlifyのサーバーを使うとき、DNSの設定をする方法は主に二つあります。Netlify DNSを使う方法と取得した独自ドメイン側のCNAMEレコードを設定する方法です。この時はNetlify DNSを使用して設定しました。しかし、最近同じドメインのサブドメインを作成しようとしたときに、サイトが全く表示されませんでした。予想ですがDNSの設定をNetlify側に任せると、そちらの方にもっていかれてドメイン管理サービス側からCNAMEレコードを作成しても反映してもらえません。そこでNetlifyのネームサーバーとDNSを辞めてムームードメインのネームサーバーに変更しました