Reactで、複数のパラメーターをチェックしてコンポーネントをレンダリングするかどうかを決定する

Reactで、複数のパラメーターをチェックして、コンポーネントをレンダリングするかどうかを決定するときの書き方を整理します。 環境 React 18.2.0 書いてみた 方法① return文の中で直接条件を判定する type AppProps = { isUserLoggedIn: boolean; isAdmin:…

Pytestで、テストをパラメータ化してみた

pytestでは、テストにパラメータを追加することで、何種類かの引数を使って同じテストを繰り返し実行できます。 今回は、ここで書いたコードを少し修正して、パラメタライズドテストを書いてみました。 テスト対象コードを用意する ここではstatus["capacity…

pytestのテスト関数を、クラスを使って書いてみた

pytestでクラスを使う pytestではテストをクラスにまとめることができます。 テストをクラスにまとめてグループ化することで、テストの構造が明確になります。 また、共通のsetupをクラスレベルで管理できるようになり、 @pytest.fixtureを使ってセットアッ…

FastAPIで、DELETEのときのステータスコードを`204No Content`に変更する

RFC基準と削除操作のステータスコード RFC 9110では、特に削除操作(DELETEリクエスト)の場合、レスポンスボディが含まれる場合は200 OKを使用し、レスポンスボディがない場合は204 No Contentを使用すべきとされています。 a DELETE method is successfull…

FastAPIで、Trailing Slashリクエストの自動リダイレクトを無効にする

Trailing Slashのリダイレクト動作の制御 FastAPIを含む多くのフレームワークで、末尾にスラッシュのある(Trailing Slash)リクエストを受け取ったときにマッチするurlが見つからないと、 自動で末尾にスラッシュの無いurlにリダイレクトします。 しかし、API…

PyCharmのLookupError: unknown encoding: windows-31jを解決した時のメモ

環境 PyCharm 2023.2.1 windows 10Pro Python 3.10 エラー PyCharmのデバッガーを設定しようとしたところ、 Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding Python runtime state: core initialized …

Reactのレビューの練習①

Reactを業務で使うようになって○ヶ月、まだ自分がレビューする機会が無いので、ここでレビューの練習をしてみたいと思います。 前提 Typescriptで書いている buildツールはesbuild お題 実際にプロダクト内で見かけたコードを簡素にしたものです。 import Re…

Pythonのtry-else句と、テストカバレッジ100%が必ずしも品質を保証しないという話

こんにちは。fastAPI歴○か月のケイ太です。 先日、テストカバレッジも大事だけれど、それだけで品質を保証できるわけではない、ということを実感することがありました。 きっかけはこんなコードです。 def create_users(db:Session, users_list: List[UserCr…

RubyでWebサーバを作ってみた2:静的なサーバを完成させる

ここまでで、CSSや画像を含むページを表示出来るようになりました。 今回も gihyo.jp の書籍を参考に、Rubyで URLエンコードの対応をする ファイルが存在しない時に404 NOT FOUNDを返す ディレクトリトラバーサル脆弱性に対応する ドメインだけ/ディレクトリ…

RubyでWebサーバを作ってみた

gihyo.jp この書籍を参考に、RubyでWebサーバを作ってみようと思います。 目次 目次 動作環境 実装 実装のゴールの確認 初期化 待機 リクエスト受信 レスポンス送信 切断 全体のコード index.htmlを用意する 起動 確認 ソースコード モドキじゃないサーバへ …

RubyでTCPサーバ/クライアントを作ってみた

gihyo.jp この書籍を参考に、RubyでTCPサーバ/クライアントを作ってみました。 目次 目次 TCPとソケット 動作環境 サーバ側 初期化 待機 データ受信 データ送信 切断 ソースコード クライアント側 初期化 送信 ソースコード 実行 client_send.txtとserver_se…

RailsプロジェクトのRubyのバージョンを上げたときのメモ

RailsプロジェクトのRubyのバージョンを3.1.1から3.2.2に上げたときのメモです。 目次 目次 環境 Ruby3.2.2のインストール 更新前チェック Rubyのバージョンを上げる 参考にしたサイト 環境 wsl2 debian 11 Ruby 3.1.1 Rails 7.0.1 Ruby3.2.2のインストール …

開発テーマは速い!安い!メンテナンス楽々! ~漢検学習アプリをリリースしました~

1年間のフィヨルドブートキャンプでの学習の仕上げとして、漢検学習アプリ『漢検練習帳』を作成しました。 漢検練習帳 | クイズで漢検 目次 目次 1. 仕様 2. 開発環境 3. 開発テーマ 3.1 自分の実力の及ぶ範囲で 3.2 出来る限り新しいバージョンのフレームワ…

はてなブログにカスタムcssをあてる

備忘のために、cssデザインの変更方法と変更内容をメモします 1. 変更方法 2. css ソースコード 1. 変更方法 はてなブログにログインし、ダッシュボードからデザインを選択 カスタマイズボタンをクリック 左下の{}デザインcssをクリック 枠内にcssを貼り付け…

Rails + SQLite3 + React プロジェクトをGoogle Cloud Run にお安くデプロイする

GCPに興味はあるけれど、DB料金がお高くて個人開発には厳しいな。。。と思っていたところ、 個人開発のコストはDB次第 - laiso https://t.co/rL8qYmafuv ここ最近は SQLite + Litestream という選択肢をとれば良いと思ってる。https://t.co/nR5BObiBtu— V (@…

Rubyで<ArgumentError: invalid byte sequence in US-ASCII>エラーを解決した時のメモ

<ArgumentError: invalid byte sequence in US-ASCII>エラーを解決した時のメモです。 環境 wsl2 Debian 11.5 Ruby 3.1.1 問題 コメントに全角文字があるだけで、debuggerのところでエラーで落ちてしまう。 # frozen_string_literal: true require 'debug' arr = ["a", "b", "c"] #コメント arr.each do |a| deb</argumenterror:>…

Vite.jsの本番環境用のbuildでError: 'fileURLToPath' is not exported by __vite-browser-external, imported by node_modules/local-pkg/dist/shared.mjsを解決したメモ

Vite.jsで本番環境のbuildエラーを解決したときのメモです。 エラーログ $ npm run build > frontend@0.0.0 build > tsc && vite build vite v3.2.5 building for production... transforming (155) ../node_modules/axios/lib/platform/browser/index.js ✓ …

RailsのSQLite3テーブルをCSVでインポート/エクスポートする

RailsのSQLite3テーブルをCSVでインポート/エクスポートしてみました。 目次 Railsの準備 エクスポート インポート 参考にした書籍/サイト 環境 Rails7.0.4 wsl2(Debian11) Railsの準備 アプリケーションフレームワークを作成します $ rails new Library SQL…

Rails7系 + React18系 + vite.js でReactコンポーネントを動かす

目次 Vite.js とは Vite_ruby とは 環境 セットアップ コンポーネント作成 ソースコード 参考書籍&サイト Vite.js とは Vite.jsは、高速で動作するビルドツール Vue.js作者Evan Youさんが開発し、2020年に発表された 従来のビルドツールと違い、開発時に全て…

Ruby とseleniumでアマゾンの価格チェックアプリを作ったメモ

仕様 特定の商品の価格が一定以下に下がったら、LINEに通知するアプリを作りました。 環境 ruby 3.1.1 wsl2 Google Chrome 100.0.4896.127 Amazon.co.jpの商品データを取得する selenium-webdriverのインストール $ gem install selenium-webdriver chrome d…

Amazon.co.jpを題材に、クローリングとスクレイピングの利用規約と法律を確認する

Amazonの商品ページをスクレイピングしたかったので調べてみました。 クローリング クローリングとは インターネット上の膨大なコンテンツを、HTMLのリンクをたどって巡回し、機械的に情報収集することを、クローリング又はクロールと言います。 クローリン…

Power Automate Desktop でOpenWeatherAPIをたたいて現在の天気情報を取得する

OpenWeatherのAPIキー取得 https://openweathermap.org/ でアカウントを取得すると、https://home.openweathermap.org/api_keys でAPI Keyが使えるようになります。 今回は、 openweathermap.org を利用します。 PADフローを作成する フロー 1、変数の設定…

Power Automate Desktop でLINE notifyに通知を送る

LINEnotifyでTOKENを発行する https://notify-bot.line.me/my/ にアクセスして、ログイン。 "トークンを発行する"をクリック。 任意のトークン名を入力し、通知を送信するトークルームを選択 "発行する"をクリックすると、トークンが発行されるので、コピー…

RubyでLINEnotifyに通知を送ったときのメモ

環境 wsl2 ruby 3.1.1 LINEnotifyでTOKENを発行する https://notify-bot.line.me/my/ にアクセスして、ログイン。 "トークンを発行する"をクリック。 任意のトークン名を入力し、通知を送信するトークルームを選択したら"発行する"をクリックすると、トーク…

Node.jsとopenweathreAPIで都市の天気情報を取得するappを作った時のメモ

環境 Node: v16.14.2 wsl2 OpenWeatherのAPIキー取得 https://openweathermap.org/ でアカウントを取得すると、https://home.openweathermap.org/api_keys でAPI Keyが使えるようになる。 今回は、 openweathermap.org を利用する 使用したライブラリ axios …

モダンJSの基本から始めるReact実践の教科書:React v18でrenderを書き直してみた

www.sbcr.jp でReactの学習をしてます。 サンプルコードはReact v17で書かれているようで、renderでエラーが出るので、React v18でエラーが出ないように書き直してみました。 環境 React 18.2.0 サンプルコード //src/index.js import React from "react"; i…

PowerAutomateDesktop:JavaScriptを使ってアラートを表示する

PowerAutomateDesktopで、JavaScriptの組み込み関数を使ってみました。 フロー フロー2の詳細 実行結果 アラートが表示されました

プログラマ脳を鍛える数学パズルQ3:カードを裏返せを解いてみた

プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問(増井 敏克)|翔泳社の本 のQ3を解いてみました。 まずは、ルールを整理してみます。 最初はすべてのカードが裏なので、初期値を-1として、表になればカードナンバーを表示す…

WSLで、bundle install 時のErrno::EPERM: Operation not permittedを解決したのでメモ

環境 状況 解決方法 資料 Gemfile エラーメッセージ 参考にしたサイト 環境 wsl2 windows10 pro ruby 3.0.2 Bundler version 2.3.5 状況 Gemfileを作成後、Bundle installしようとするとエラーになる。 Gemfile.lockも作成されない。 解決方法 Errno::EPERM:…

RubyとSinatraではじめるWebアプリケーション開発の教科書:webcal.rb

www.morikita.co.jp webカレンダーを作ってみました。 # ~/webcal/webcal.rb require 'sinatra' require 'date' set :environment, :production get '/:y/:m' do @year = params[:y].to_i @month = params[:m].to_i @table = '<table border>' @table += '<tr><th>sun</th><th>mon</th><th>tue</th><th>wed</th>' @t</tr></table>…