chevron_left

メインカテゴリーを選択しなおす

cancel
きり丸
フォロー
住所
未設定
出身
未設定
ブログ村参加

2022/07/22

きり丸さんの人気ランキング

  • IN
  • OUT
  • PV
今日 06/28 06/27 06/26 06/25 06/24 06/23 全参加数
総合ランキング(IN) 23,231位 23,912位 23,980位 23,946位 23,924位 23,967位 23,950位 1,040,415サイト
INポイント 0 0 0 0 0 0 10 10/週
OUTポイント 0 0 0 0 0 0 0 0/週
PVポイント 0 0 0 0 0 0 0 0/週
IT技術ブログ 84位 88位 88位 90位 91位 93位 91位 10,003サイト
IT技術メモ 24位 25位 25位 25位 25位 25位 25位 1,599サイト
Tips 6位 6位 5位 6位 6位 7位 7位 335サイト
IT技術情報 6位 6位 8位 8位 9位 10位 10位 769サイト
※ランキング順位が「圏外」と表示される時は?
今日 06/28 06/27 06/26 06/25 06/24 06/23 全参加数
総合ランキング(OUT) 圏外 圏外 圏外 圏外 圏外 圏外 圏外 1,040,415サイト
INポイント 0 0 0 0 0 0 10 10/週
OUTポイント 0 0 0 0 0 0 0 0/週
PVポイント 0 0 0 0 0 0 0 0/週
IT技術ブログ 圏外 圏外 圏外 圏外 圏外 圏外 圏外 10,003サイト
IT技術メモ 圏外 圏外 圏外 圏外 圏外 圏外 圏外 1,599サイト
Tips 圏外 圏外 圏外 圏外 圏外 圏外 圏外 335サイト
IT技術情報 圏外 圏外 圏外 圏外 圏外 圏外 圏外 769サイト
※ランキング順位が「圏外」と表示される時は?
今日 06/28 06/27 06/26 06/25 06/24 06/23 全参加数
総合ランキング(PV) 圏外 圏外 圏外 圏外 圏外 圏外 圏外 1,040,415サイト
INポイント 0 0 0 0 0 0 10 10/週
OUTポイント 0 0 0 0 0 0 0 0/週
PVポイント 0 0 0 0 0 0 0 0/週
IT技術ブログ 圏外 圏外 圏外 圏外 圏外 圏外 圏外 10,003サイト
IT技術メモ 圏外 圏外 圏外 圏外 圏外 圏外 圏外 1,599サイト
Tips 圏外 圏外 圏外 圏外 圏外 圏外 圏外 335サイト
IT技術情報 圏外 圏外 圏外 圏外 圏外 圏外 圏外 769サイト
※ランキング順位が「圏外」と表示される時は?
  • FastAPIから型定義を出力する

    FastAPIから型定義を出力する

    始めに 小ネタ。 FastAPIからopenapi.jsonが出力できるなら、フロントエンドで使用する型定義まで出力する手順を確立したくて記事にします。 なお、フロントエンドはすでに構築されていたこともあり、自動生成した型定義の導入までは行えていません。また、FastAPIから型定義を出力する際にこういう工夫をしています、というコメント募集しています。 環境 FastAPI 0.115.12 openapi-typescript 7.8.0 @openapitools/openapi-generator-cli 2.20.2 実装 OpenAPIファイルの取得 FastAPIの/openapi…

  • Pythonのコンテキストマネジャーをまとめる

    Pythonのコンテキストマネジャーをまとめる

    始めに Pythonのコンテキストマネージャは、with文と組み合わせてリソース(ファイル、DB接続、ロックなど)の確保と解放を自動化する仕組みです。enterメソッドでセットアップ、exitメソッドでクリーンアップを行うことで、例外発生時も安全にリソース管理できます。 知っておけば便利なことが多いので、ブログに便利な箇所をまとめます。 環境 Python 3.13.3 実装 基本的には明示的にリソースの開放が必要な時に使用します。ただ、DB自体のリソース開放はライブラリ側が自動的に行ってくれますので、インスタンス生成時にコンテキストマネジャーを使用しましょう。 async def get_r…

  • Pythonの起動時のメモリ消費を何とかしたかった

    Pythonの起動時のメモリ消費を何とかしたかった

    始めに ※ 結果的に言えばどうにもできなかった話です。 検証環境へのデプロイが通常なら10分程度で終わるはずなのに、最悪のパターンだと30分くらいかかるようになりました。原因を追っていくと、どうやらFastAPIが起動時にメモリを大量消費していることがわかりました。特にライブラリのimport時に非常にメモリを消費しており、メモリ使用量が100%になって張り付いた結果、応答待ちになっていることがわかりました。取り急ぎ、検証環境のメモリを増やすことで通常通りの10分程度のデプロイ時間に戻せたのですが、通常利用時のメモリ使用量が多くないのに、起動時の問題だけでメモリを増やすのは根本解決にはならない…

  • PyCharmでJupyter Notebookを設定するだけの記事

    PyCharmでJupyter Notebookを設定するだけの記事

    始めに 最近、回帰分析をやるようになりました。分析そのものはまだまだ知識不足なものの、とりあえずPyCharmで分析を可視化するJupyter Notebookを使用する方法がわからなかったのでメモします。 なお、本当に初心者向けの記事となります。 環境 PyCharm 2025.1.1.1 実装 リモートサーバを起動する PyCharmはデフォルトでJupyter Notebookは使用できる状態を提供してくれます。しかし、私の環境が悪いのか、matplot等の追加でライブラリをインストールしたいときにうまくインストールできませんでした。そのため、ローカルにJupyter Labのサーバを起…

  • ログインの定義とプラポリ取得のタイミングを整理

    ログインの定義とプラポリ取得のタイミングを整理

    ※ タイトルのプラポリとはプライバシーポリシーのことを指します。また、サービスの性質によっても異なる可能性があるので、必ずしも鵜呑みにしないでください。 始めに 最近、GDPRを意識してプライバシーポリシーの承認を厳格化して、承認しない場合はサービス利用できない仕様にしようとしています。 それに伴い、何を考慮すべきで何を実装すればいいかを整理したので、自分用にまとめておきます。また、それに伴ってログイン(サインイン)の指す範囲が人によってずれていたのでそれも併せて整理します。 ログインとは まずは、IT用語辞典のログイン/ログオンのページを引用します。 ログイン(login)とは、システムに自…

  • Pydanticで型定義を流用したら正常動作しなくなった(シリアライズ)

    Pydanticで型定義を流用したら正常動作しなくなった(シリアライズ)

    始めに 結果が分かれば単純なミスでした。Pydanticで型定義しただけと考えていましたが、少しでも振る舞いが変わるときはちゃんと確認しましょう。 環境 Python 3.13 Pydantic 2.11.4 実装 変更前のコード SaaS企業が外部連携しやすいようにライブラリを公開していることがあります。基本的にはライブラリ内で型定義はすでに行われている状態ですが、SaaS側でユーザが自由にプロパティを追加・修正できる項目がある場合には、該当プロパティを参照及び更新するためには自前でカスタマイズして連携する必要があります。今回発生したケースでもその自前カスタマイズをする必要があったのですが、…

  • uvでライブラリをグルーピングして最小限の依存関係で起動できるようにする

    uvでライブラリをグルーピングして最小限の依存関係で起動できるようにする

    始めに Pythonに限らずアプリケーションを大規模で運用していくほどライブラリの依存関係が増えていきます。その時にAPIとバッチ等の用途に応じたアプリケーションごと分割する方法もありますが二重管理が面倒になります。JavaではGradleを使用してマルチプロジェクト構成にしておくことで、必要なライブラリだけで起動するようにできました。 今回の記事では、Pythonのuvを使用してライブラリをグルーピングすることで、必要なライブラリを最小限にする方法を記載します。 環境 Python 3.13 uv 0.7.2 実装 ライブラリのグルーピング dependency-groupsに分割したい単位…

  • Ruby で URI と Addressable::URI は必ず片方だけ使用するルールがいい

    Ruby で URI と Addressable::URI は必ず片方だけ使用するルールがいい

    始めに Rubyでウェブ開発をしているとURLを扱う場面が必ず出てきます。URLを扱う際には標準ライブラリのURIクラスと、Addressable::URIという標準ライブラリでは満たせなかった仕様を満たすためのgemが存在します。このURIクラスとAddressable::URIを混ぜて使用するとエラーになるケースがあるのでAddressable::URIが依存関係に含まれている場合、CodeRabbitやGitHub Copilot等のAIコードレビューのルールに追加することで、プロジェクトでは混在しないルールで運用しましょう。 この記事で伝えたかった内容は以上です。以下はURIとAddr…

  • Ruby 3.3と3.4での一時ディレクトリ探索の違いとECSでの影響

    Ruby 3.3と3.4での一時ディレクトリ探索の違いとECSでの影響

    始めに 某日、ECSでスケールアップで起動しようとしていたRailsのアプリケーションが起動しませんでした。この起きていた不具合を調査する過程で一時ディレクトリに対するRubyの挙動を知ったことをブログにします。 なお、今回のケースは時間経過で自動解決しているため、ある程度状況には仮説も入っていますが、次のようなことが発生していたと思われます。 環境 AWS ECS Ruby 3.3 3.4 状況(仮説を含む) 事前状況 ECSでセキュリティのためにreadonlyRootFilesystem: trueを指定して、基本的にファイルを書き込めないようにしている 環境変数TMPDIRにボリューム…

  • GraphQLで存在しないエントリーポイントを指定していると誤解した小ネタ

    GraphQLで存在しないエントリーポイントを指定していると誤解した小ネタ

    始めに 小ネタです。 弊社システムではGraphQLを採用していますが、存在しないmutationを指定していると勘違いしたものを残しておきます。 環境 なし。 実装 次のようなクエリがありました。 mutation createUser($input: CreateUserInput!) { createUserWithRole(input: $input) { } } 私はcreateUserというサーバのmutationエントリーポイントを実行していると判断していました。しかし、実際にはcreateUserWithRoleを実行しています。このcreateUserはクライアントがどのよう…

  • MySQLのJSONテーブル関数は調査に使うと便利

    MySQLのJSONテーブル関数は調査に使うと便利

    始めに 最近、不具合調査でAWSのCloudWatchから出力したログを分析および加工するためにDuckDBを使用しています。DuckDBは優秀で自分のやりたいように分析できるのですが、あくまでアプリケーションログをそのまま分析しているだけですので、最終的にはDBのMySQLと突合しないとわからないことが多々あります。 これがDBの値だけを取得するだけなら簡単だったのですが、IPアドレス制限で引っかかったユーザ一名、 該当IPアドレスおよびアクセス時間を出力したい要件だったため、アプリケーションログとDBの値を出力する必要がありました。もちろん、これが1行だけなら次のSQLで簡単に出力できます…

  • FastAPIはORJsonResponseではなく、素直にPydanticでよさそう

    FastAPIはORJsonResponseではなく、素直にPydanticでよさそう

    始めに FastAPIはデフォルトではJSONResponseを使用してレスポンスします。FastAPI公式ヘルプにはパフォーマンスを向上させるためにORJSONResponseの使用を提案するページがあります。 fastapi[all]にorjsonが含まれていることもあり、ORJSONResponseを使用して動作確認をしてみたのですが、個人的な使用目的としては早くならなかったのでメモとして残しておくことにします。 ※ ベンチマークの取り方がおかしい、等があったら教えていただきたいです。 Pydantic v2: 3.2411秒 (1000回のリクエスト) ORJSONResponse: …

  • Pythonアプリケーションでタイムゾーンを扱う方法

    Pythonアプリケーションでタイムゾーンを扱う方法

    始めに 小ネタです。 Pythonでdatetime型を扱うときに、timezone情報を与えることができます。 from datetime import datetime from zoneinfo import ZoneInfo datetime.now(tz=ZoneInfo("UTC")) 簡単にtimezoneに合わせた時刻へ変更できることはメリットではあるのですが、timezoneなし(native datetime)とあり(aware datetime)の時刻を比較すると次のエラーが発生します。 <ExceptionInfo TypeError("can't compare of…

  • AWS CLIでメールアドレスがサプレッションリストにあるかを調べる

    AWS CLIでメールアドレスがサプレッションリストにあるかを調べる

    始めに Amazon SESでメールを送った際に、サプレッションリストに登録される可能性があります。サプレッションリストとは、特定のメールアドレスに送信しないようにする仕組みです。登録されるパターンとしては、メールアドレスが存在しない場合や迷惑メールとしてフィルタリングされるBounce、スパムとして報告されるComplaintのどちらかで登録されます。 このサプレッションリストに登録されている限り、該当のお客様にメールを送ることができないのでメールが有効であることを確認したらサプレッションリストを解除する必要があります。ただし、AWS コンソール上ではサプレッションリストから解除はできるもの…

  • Dockerで別環境変数を元にCIとローカル環境で別変数を与える

    Dockerで別環境変数を元にCIとローカル環境で別変数を与える

    始めに 小ネタ。 CI環境を想定して環境変数でCI=TRUEと設定されていれば、AAAと設定して、ローカル環境を想定してCI環境変数が設定されていなければBBBと設定する。 可能な限りCI環境としてはCI=TRUEだけ管理して、具体的にはcompose.yml内部で閉じるような書き方をすることで管理コストを減らそうとしていました。 このようにする書き方を知ったのでブログにします。 環境 Docker Engine 27.4.1 ゴール 環境変数でCIを定義して次のように書けば、CIという環境変数を元にAAAやBBBの環境変数を分岐できます。 export CI= environment: EN…

  • SentryのReplayを任意のタイミングで取得する

    SentryのReplayを任意のタイミングで取得する

    始めに Sentryではフロントでエラーが発生したときに、エラーを調査しやすくなるようにReplay機能があります。この機能は非常に便利なのですが、エラーは発生していないがお客様環境で端末の性能不足やネットワーク性能不足等で正常動作しない場合を追跡できません。 その場合に、任意のタイミングでReplayを取得できる機能がありますので紹介します。 環境 Sentry 2025/03/08時点 @sentry/angular 8.47.0 ユースケース 端末のスペックやネットワークによる不利益を調べたい 特にサーバサイドで取得できないログが欲しいときに 実装 Replayの開始 ※ 実運用ではre…

  • Dockerでlocalhostで他のサービスにアクセスしたい(socat)

    Dockerでlocalhostで他のサービスにアクセスしたい(socat)

    始めに 以前、docker間通信をするときにどのドメイン名やIPを指定すればいいかを調べました。 Dockerのコンテナ間通信をする方法をまとめる - きり丸の技術日記 しかし、例えばS3の署名付きURLを発行した後、フロントから直接署名付きURLでS3にアクセスする場合にはdocker内部ネットワークで解決した名前ではなく、localhostでアクセスさせたいです。 今回の記事では、フロントからS3の操作とバックエンドからS3の操作を統一できるようにするsocatについてまとめます。socatは様々なプロトコルやネットワーク間でデータを転送するためのユーティリティツールで、この問題解決に役立…

  • lockファイルの依存はdevで指定してもmainに影響することがある

    lockファイルの依存はdevで指定してもmainに影響することがある

    始めに Pythonのpoetry.lockで確認した事象ですが、他のライブラリのlockファイルでも当てはまると思います。仕様上当たり前のことに気づいたのでメモします。 環境 Poetry 2.0.0 fastapi[standard] 0.115.8 httpx 0.28.1 まとめ dev dependenciesでバージョンを指定した場合、main dependenciesにも影響することがある。 やっていたこと FastAPIで非同期のテストをするために、httpxを使用していました。この時にhttpxをバージョン固定した状態でdev dependenciessに加えています。 途中…

  • SQLAlchemyでrefreshがうまくいかなければexpungeを使ってみる

    SQLAlchemyでrefreshがうまくいかなければexpungeを使ってみる

    始めに 特定の環境では再現したのですが、自宅では再現できませんでした。そのため、事象として発生したことのレポートです。 環境 ※ 再現しなかったためなし。 まとめ 基本的にはインスタンスの再更新はrefresh()で問題ないはず。しかし、問題発生したときは一度expunge()でインスタンスを切り離してから再検索する方法もあり。 発生したこと 事前にSQLAlchemyから検索してインスタンスに格納する 同一セッション内で子テーブルのインスタンスを作成する 子テーブルも含めて更新した結果をフロントに返却するために再検索する 1.で取得したインスタンスが返却された 子テーブルが含まれていないイン…

  • mysqldumpは--opt使うなら--single-transactionもつけるのがオススメ

    mysqldumpは--opt使うなら--single-transactionもつけるのがオススメ

    始めに 本番環境ではないのですが、検証環境でやらかしてしまったインシデントなのでブログにしてお焚き上げします。 やりたかったことは検証環境で不具合が発生していたので、ローカルで検証するために検証環境のDBをエクスポートして、ローカルで再現させることでした。しかし、そのエクスポートを実施したところ、検証環境が機能しなくなったので事象を共有します。 環境 MySQL 8.0.23 まとめ mysqldumpのオプションに--optを付与するなら、--single-transactionもつけるべき。 問題の詳細と解決策 3年ほど使用してきた信頼と実績のある次のコマンドでDBをエクスポートしていまし…

ブログリーダー」を活用して、きり丸さんをフォローしませんか?

ハンドル名
きり丸さん
ブログタイトル
きり丸の技術日記
フォロー
きり丸の技術日記

にほんブログ村 カテゴリー一覧

商用