タグ

2024年6月17日のブックマーク (179件)

  • Railsで作ったシステムのER図を日本語で出してほしいと言われたときにやったこと - Qiita

    Ruby on Railsを使った開発をしていると「システムのER図が欲しい」といったお願いされることがあります。 Railsを使っているのであれば、rails-erd というRubyGemを使うことで簡単にER図を出力できます。 rails-erdで出力されるER図はEntityもAttributeも全て英語です。 提出先がエンジニアである場合や、普段からモデル名を使ったコミュニケーションをしている場合であればこのままでもなんとかなるかもしれません。 一方、相手がビジネスサイドのメンバーである場合や、普段はモデルを日語変換してコミュニケーションしている相手の場合はこのER図をそのまま出しても困惑されてしまいます。 そこで、今回はなんとかしてEntity・Attributeを日語化できないか検討しました。結論とそこに至った過程をメモしておきます。 結論 結論としては、rails-erd

    Railsで作ったシステムのER図を日本語で出してほしいと言われたときにやったこと - Qiita
    sh19910711
    sh19910711 2024/06/17
    "rails-erd というRubyGemを使うことで簡単にER図を出力できます / なんとかしてEntity・Attributeを日本語化できないか検討 / Railsで作られたアプリであれば大抵の場合、i18nで既に日本語定義を終えているはず"
  • Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする - Qiita

    if defined? RubyVM::YJIT.enable Rails.application.config.after_initialize do RubyVM::YJIT.enable end end 運用中に何かの理由で無効にしたくなったら、コメントアウトするかファイルごと削除します。 この方法は、最新のRuby on Railsに取り込まれているそのままです。 YJITとは Rubyを高速に実行する機能です。Ruby 3.3 から Ruby on Rails に適用するのも実用的になったそうです。次の記事で詳しく説明されています。 Ruby 3.3 YJITのメモリ管理とRJIT 〜すべてが新しくなった2つのJITを使いこなす | gihyo.jp RubyJust-In-Time(JIT)コンパイラという機能を備えており、これを有効化すると実行時に機械語を生成して様々な最適

    Ruby 3.3.0 Rails 7.1.3 でYJITを有効にする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Ruby 3.3 から Ruby on Rails に適用するのも実用的になった / Rails では Ruby のオプションではなく、イニシャライザでYJITを有効にします / 手動で動作確認をした感じでは、キビキビ動くようになった気がします"
  • ビジュアルリグレッションテストのすすめ - Qiita

    日々いろいろなWebサイトの制作や修正を対応していく中で、修正したページとは関係ない(と思っていた)ページで表示が崩れてしまったことってありませんか? 私はたびたび経験があります。 毎回目視で全ページをチェックすれば防げるのかもしれませんが、それは現実的ではありません。 自動で全ページをチェックしてくれて不具合があれば教えてくれる、そんな便利なツールがあればと何度も思いました。 どうやら現代の技術でそれは作れるみたいです。ビジュアルリグレッションテストというらしいです。 ビジュアルリグレッションテストとは ざっくりいうと「見た目の比較」をするテストのことです。 変更前のWebサイトのスクリーンショットを用意しておき、変更後のスクリーンショットを撮り比較することで、どこが変わったか差分を表示し確認することができます。 どうやって使うの ビジュアルリグレッションテストを導入するための方法はいく

    ビジュアルリグレッションテストのすすめ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "修正したページとは関係ない(と思っていた)ページで表示が崩れ / 変更前のWebサイトのスクリーンショットを用意しておき、変更後のスクリーンショットを撮り比較することで、どこが変わったか差分を表示" 2022
  • Nuxt3 に Playwright で E2E Snapshot Test を導入してみた - Qiita

    前提条件 Mac book Nuxt .. v3.0.0-rc.6 Playwright, @playwright/test .. v1.25.1 yarn .. v1.22.17 Nuxt の構成 SSR モード Server Api あり (./server/api) ./server/api 内で、バックエンドから取ってきたデータを ViewModel に変換してブラウザに返すような構成 1. MockServer 化 まず、統一した実行結果がほしいので、ViewModel を返却する Server Api をモックサーバ化してみる Serve Api は nitro で動いているので、 nuxt.config.ts を以下のように書き換えるとうまくいった。 hooks: { 'nitro:config': (config: NitroConfig) => { // nitro の

    Nuxt3 に Playwright で E2E Snapshot Test を導入してみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "ページの描画直後をスナップショットするだけでも十分テストになるので、手間がかからなくてとっても良かった / この後、 GitHub Actions で動作させようとして、また一波乱あった" 2022
  • Vitest / Playwrightを使ってSvelteのコンポーネントをテストする - Qiita

    Ateam Group U-30 Advent Calendar 2022の1日目は 株式会社エイチームライフデザインの@oekazumaが担当します。 はじめに SvelteSvelteKitプロジェクトにおいて、コンポーネントテストを書きたい場合、どのようなテストランナーを使ってどう書けばいいかを解説していきます。 SvelteKitが用意してくれているプロジェクト作成のCLIではPlaywrightとVitestがデフォルトで追加できるようになっていますのでこれらのテストランナーを使ったコンポーネントテストを紹介します。 今回、作ったサンプルはこのリポジトリで確認できます。 SvelteKitとは SvelteをベースとしたハイパフォーマンスなWebアプリを作るためのフレームワークです。 ReactでいうNext.jsVueでいうNuxt.jsような立ち位置だと認識していただけ

    Vitest / Playwrightを使ってSvelteのコンポーネントをテストする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "コンポーネントテストを書きたい / Vitest: Vite環境で動作する高速なテストフレームワークで、Jestの代替として期待されているフレームワーク + SvelteKitはViteを使用しているので簡単な設定のみで利用可能" 2022
  • gaugeのテストでブラウザ操作にPlaywrightを使う - Qiita

    はじめに E2EテストツールとしてgaugeとPlaywrightをそれぞれ触ってみました。 gaugeとPlaywrightはそれぞれ、ざっくり以下だと理解しています。 gauge 自動テストをMarkdownで自然言語で記述できるようにするツール 類似ツールはCucumberなど(らしい。。まだ使ったことない) Playwright ブラウザ操作を自動化するツール 類似ツールはSelenium、Puppeteer、Cypressなど ただ、gaugeはTAIKOというブラウザ操作自動化ツールが一緒に付いてきたり、Playwrightは@playwright/testというテスティングフレームワークがあったりで、微妙にカバーしている部分が重なっているので、最初よくわかっていないうちは特に紛らわしく感じました。 gaugeをブラウザ操作自動化ツールと組み合わせて使用するケースとして、TAI

    gaugeのテストでブラウザ操作にPlaywrightを使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Puppeteerは触ったことがあったので、今回のような初歩的な実装は特に違和感なく / gauge: markdown部分とテスト実装部分の作成を非エンジニアを含めてどのように分担・連携していくかをよく考える必要がありそう" 2022
  • playwrightとGitlab CI/CDでE2Eテストを自動化してみた - Qiita

    この記事はニフクラ 等を提供している、富士通クラウドテクノロジーズ Advent Calendar 2022 の7日目の記事です。 前日は@heriet さんの trivy+conftestで柔軟にライセンスポリシーをチェックする でした。 ライセンスポリシーのチェックをより容易に、汎用的にできるというのは魅力的で私自身すごく勉強になりました。 はじめに 初めまして! 私は富士通クラウドテクノロジーズ2年目の社員で、基幹システムの運用・開発をしております。 今回は実際に私が部署で管理しているWEBアプリのE2EテストをPlaywightとGitlab CI/CDで自動化した経験から、自動化までの簡単な流れを書こうと思います。 E2Eテストとは E2E(エンドツーエンド)テストは、User Interface Testとも呼ばれております。 WEBアプリにおいて、ユーザの想定される操作に対し

    playwrightとGitlab CI/CDでE2Eテストを自動化してみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "ユーザの想定される操作に対し、WEBアプリが正しく動作してくれることを確認する / システムは大きくなればなるほどテストも肥大化し、エンハンスをしたつもりが気づいたらデグレを引き起こす" 2022
  • Gaugeでテストを実施する - Qiita

    はじめに はじめまして、河村康治です。HITOTSUアドベントカレンダーの18日目を担当します!! 普段はバックエンドを主に担当しているのですが、テスト基盤構築に力をいれて行こうと思い、今回のアドベントカレンダーではフロントのテストに関して記載して行こうと思います!!! 今回は、Gauge×Playwrightを活用したE2Eテストの記事を書いて行きます!!ちなみに、今回はPlaywrightの事は深く触れていないので、興味のある方はリンクを確認ください。 Gaugeとは?? Webシステムの自動テストライブラリです。JS、C#、JavaPythonRubyでテストコードが記載し、ブラウザ操作を自動でする事でテストの自動化に役立っております。最大の特徴はテストケースをMarkDown形式で記載でき、検証の目的やPointをコードと一緒に記載する事ができるため、保守開発がしやすい事です。

    Gaugeでテストを実施する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Gauge: Webシステムの自動テストライブラリ / テストケースをMarkDown形式で記載でき、検証の目的やPointをコードと一緒に記載する事ができる / Gaugeが優れていないというよりも、Playwrightの機能網羅やUXの磨き込みがすごい" 2022
  • Playwrightで遠隔からAndroidデバイスをぐりぐり動かす。 - Qiita

    この記事は、ソフトウェアテスト Advent Calendar 2022の11日目の記事となります。 前日11日の記事は、@gremito さんによる「Appium on Azure Pipelines」でした。日の記事もアプリの自動操作関連です。 概要 ChromeやWebKitを自動操作できるPlaywrightはもう皆さんご存知ですよね? PlaywrightにはAndroidを自動操作する機能が実は備わっていて、AndroidネイティブアプリケーションもChromeブラウザも自動操作することができます。 ただ、これまではPCに直接ADB接続されているAndroidデバイスしか自動操作することができませんでした。 ところが、割と最近リリースされたv1.28では launchServer (ADB接続したAndroidデバイスをWebSocket経由で自動操作する機能)が追加されまし

    Playwrightで遠隔からAndroidデバイスをぐりぐり動かす。 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "PlaywrightにはAndroidを自動操作する機能が実は備わっていて / 割と最近リリースされたv1.28では launchServer (ADB接続したAndroidデバイスをWebSocket経由で自動操作する機能)が追加" 2022
  • Playwright と Artillery によるパフォーマンステスト - Qiita

    要約 DevOps や SRE を実践する人向けに、Playwright による E2E テストを Artillery の負荷掛けシナリオとして利用する手法についてハンズオンを交えて紹介します。 課題としては、Playwright で自動生成したスクリプトを手直ししないと難しいパターンがあることを挙げています。 その他、Tips もあります。 はじめに NSSOL Advent Calendar 2022 の 13 日目にも投稿しました、とうふです。 先の記事で軽く説明した通り、私がいま参画している案件では E2E テスト用のスクリプトを流用したパフォーマンステスト を行なっています。 記事では、Playwright で作成した E2E テストスクリプトを使って負荷掛けを行うことでパフォーマンステストを実施する手法について紹介します。 前提知識 Playwright とは Playwri

    Playwright と Artillery によるパフォーマンステスト - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Playwright による E2E テストを Artillery の負荷掛けシナリオとして利用 / Playwright で自動生成したスクリプトを手直ししないと難しいパターンがある / Artillery: DevOps や SRE にフォーカスを当てた Node.js 製の負荷掛けツール" 2022
  • VSCodeでPlaywrightによるE2Eテスト自動化をはじめてみよう - Qiita

    今年8月にリリースされたPlaywrightVSCode拡張を今更ながら深堀りして触ってみました。 記事では、VSCode上でPlaywrightを使ったテストの生成・実行・デバッグ・結果確認を一通り実行する方法を紹介します。 PlaywrightないしEnd-to-End(E2E)テスト自動化がだいたいどんなものかを知りたい人に見てもらえれば嬉しいです。 はじめに Playwrightとは Microsoftが開発しているE2Eテスト自動化ライブラリです。 この分野ではSeleniumやCypressといったライブラリが先行していましたが、近年ではビッグテックならではの開発力を背景にPlaywrightが急速にシェアを拡大しているように思います。 事実これらを使い比べてみてもPlaywrightが圧倒的に使いやすく、これからE2Eテスト自動化に取り組んでみたい方にはまず最初にオススメ

    VSCodeでPlaywrightによるE2Eテスト自動化をはじめてみよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "VSCode上でPlaywrightを使ったテストの生成・実行・デバッグ / SeleniumやCypressといったライブラリが先行していましたが、近年ではビッグテックならではの開発力を背景にPlaywrightが急速にシェアを拡大" 2022
  • Playwright 1.29の新機能 Backend API Mockingは request.fetchでは効かないよ。 - Qiita

    API Mockingという機能がPlaywright 1.29でリリースされました。 ブラウザでアクセスしたページが、裏でJSON APIを(Ajaxだったりfetch APIだったりで)叩く際に、そのコンテンツを差し替える、というもの。 公式ドキュメントにある以下のサンプル def handle(route): response = route.fetch() json = response.json() json["message"]["big_red_dog"] = [] # Fullfill using the original response, while patching the response body # with the given JSON object. route.fulfill(response=response, json=json) page.route

    Playwright 1.29の新機能 Backend API Mockingは request.fetchでは効かないよ。 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "API Mockingという機能がPlaywright 1.29でリリース / ブラウザでアクセスしたページが、裏でJSON APIを(Ajaxだったりfetch APIだったりで)叩く際に、そのコンテンツを差し替え" 2023
  • Playwright testをLambdaコンテナ上でRICを使って動作させる - Qiita

    概要 Lambda関数は通常Amazon Linux上で動作していますが、Playwrightは公式ではDebianとUbuntuしかサポートしていません(参考)。 そのため、Lambda Runtime Interface Client(RIC)を使ってDebian上のNode.jsのベースイメージを元にPlaywrightをインストールすることでLambda上で動作させました。 ローカルで動作確認したいためAWS Serverless Application Model(AWS SAM)で構築しています。 ソース類は以下にまとめています。 https://github.com/octop162/playwright-lambda SAM準備 sam init で初期化しtemplate.yamlを生成しました。 メモリ使用量を1024MB, タイムアウトを最大の900秒に設定しています

    Playwright testをLambdaコンテナ上でRICを使って動作させる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Node.js上でchild_processを利用して npx playwright test コマンドを実行 / CodeBuildやgithub actionsなら簡単に結果レポートを保存できるなど利点 / ECRの保持料金が少しかかるので無料枠の500MBになるようサイズを圧縮したい" 2023
  • あなたはフロントエンドの何をテストしたいのか。 - Qiita

    フロントエンドのテストをしよう Webのフロントエンドの自動化を進めようか。という話をしていて、 「そもそもテストってなんだ?」 「フロントエンドに特有のテストってなんだ?」 「〇〇ってツール流行ってるらしいってどうよ?」 みたいなことを話をしていました。そうしたときに、やっぱり知識足らねぇなぁ。と思ったので、2,3日でゴリゴリと内容をまとめてみる作業をしてみました。 あんまりこういう書き方はしないんですが、私自身散発的な思考で、フロントエンドのテストを調べることをしたので、そのような語り口で書いてみようと思います。 以下の内容は、あくまで例なので、別にこういう仕事があったわけではないです。 とりあえず投げられた要求・仕様 とりあえずなんか仕事が振ってきた。パラパラと要求を聞いてみると、こんな感じだった。 承認のダイアログが欲しい メッセージのフォントはOswald メッセージは変更できる

    あなたはフロントエンドの何をテストしたいのか。 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "テストの難易度や運用コストのトレードオフがある / 学習コストのかかるスタック + 実運用まで時間がかかりすぎるため、本当にやるべきか?という疑問 / フロントエンド特有の難しさ" 2023
  • E2E テストの決定版! テスト開発の効率が爆上がりする Playwright (TypeScript版) - Qiita

    E2E テストの決定版! テスト開発の効率が爆上がりする Playwright (TypeScript版)フロントエンドVisualStudioCodeE2EテストCypressPlaywright E2E テストスイート Playwright はマイクロソフトが提供しているだけあって Visual Studio Code と高いレベルで統合されています。 E2E テストをステップ実行することができ、変数の値を参照(インスペクト)できます。もちろん、ブラウザーの様子も同時に確認できます。 現在テストがどこを実行中なのかがテストコードにリアルアイムに強調表示されるので、どこで意図せずに止まっているかがすぐに分かります。この機能は追うのが難しい非同期処理にも対応しているので非常に助かります。 テストを動かさなくてもコードにマウスを合わせるだけで、対応する GUI 部品がどこにあるかがすぐに分か

    E2E テストの決定版! テスト開発の効率が爆上がりする Playwright (TypeScript版) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Playwright はマイクロソフトが提供しているだけあって Visual Studio Code と高いレベルで統合 / E2E テストをステップ実行することができ、変数の値を参照(インスペクト)できます" 2023
  • 【Playwright】一つのテスト内で2つの連続するスクリーンショットを比較・差分検出する - Qiita

    はじめに E2Eテストのテスティングフレームワークとして、Playwright2023年に入ってから実務に導入しています。 Locator周りのヘルパー関数から、Auto-wait、トレース、並行処理にuiモード、至れり尽せりのPlaywrightは、Visual Comparison、すなわちスクリーンショットの比較もout-of-the-boxでできます。 ...できますが、実際にやってみると、豊富な機能の森に迷って、簡単なことで意外に手こずることもあります。 先日、番環境とステージング環境1で修正の戻りがないか、すなわちVisual Regressionテストを行おうとしました。 実装したい手順は、 1. ステージング環境にアクセス 2. ステージング環境のスクリーンショット 3. 番環境にアクセス 4. 番環境のスクリーンショット 5. アサーション

    【Playwright】一つのテスト内で2つの連続するスクリーンショットを比較・差分検出する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Playwright: Locator周りのヘルパー関数から、Auto-wait、トレース、並行処理にuiモード、至れり尽せり / スクリーンショットの比較もout-of-the-boxででき / やってみると、豊富な機能の森に迷って、簡単なことで意外に手こずる" 2023
  • Rails のブラウザテストを Playwright で動かすようにしたらデバッグが簡単になって捗った - Qiita

    Rails, RSpec でブラウザテストというと System Spec, Feature Spec などが挙げられます。バックエンド、フロンテエンド両方を End-to-End でテストするには便利ですが、複雑さ故に、たまに落ちるテストになってしまったり、落ちたときのデバッグが大変という難しさがあります。 Qiita でも主要な機能 (エディタ、記事ページなど) をテストするのに使っているのですが、CI で時折よくわからない理由で落ち、 更に何故落ちたかの再現や調査が難しい というのが結構つらいポイントでした 今回 Qiita で RSpec で利用するブラウザ自動化ツールを Selenium から Playwright を使うように置き換えたら、かなりデバッグが行いやすくなりました 移行自体も Cabybara 用の Driver を使うことで、大きく書き換えることなく移行することが

    Rails のブラウザテストを Playwright で動かすようにしたらデバッグが簡単になって捗った - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Rails, RSpec でブラウザテストというと System Spec, Feature Spec などが挙げられ / Playwright ではテスト中のブラウザの操作などをファイルに記録し、 Trace Viewer からその記録を再生することが出来ます" 2023
  • playwrightを利用したE2Eテストについて - Qiita

    概要 この記事は テスト自動化の成功事例を語ろう by T-DASH Advent Calendar 2023 の18日目の記事です。 この記事では、ハンズオン形式でplaywrightを利用したE2Eテストを実装する方法について紹介します。 実装したソースコードは以下のリポジトリにありますので、ご興味ある方はご覧ください。 想定する読者 この記事は以下のような方を想定しています。 playwrightを触ってみたい方 E2Eテストを実装したい方 ハンズオンを行うにあたって事前に準備しておくもの このハンズオンを行うにあたって以下のものを事前に準備しておいてください。 Node.js のインストール https://nodejs.org/en/download/package-manager/ GitHubアカウントの作成 https://github.com/ GitHubリポジトリの作

    playwrightを利用したE2Eテストについて - Qiita
    sh19910711
    sh19910711 2024/06/17
    "playwright: 最新のレンダリングエンジンをサポートしているNode.jsベースのライブラリ / PuppeteerとPlaywrightはほとんど同じチームによって開発されている / 生成されたコードをベースにテストを実装できる" 2023
  • Playwrightを軽く触った後にキャプチャ取得ツール作ってみた - Qiita

    はじめに この記事では個人的に前々から気になっていたブラウザ自動操作ツールのPlaywrightを触って、簡単なツールを作成してみたという内容です。 調べながら作成したので、ところどころ非推奨な書き方などあるかもしれませんが、甘い目で見てください、、 Playwrightとは PlaywrightとはWebブラウザの操作を自動化することができるライブラリです。E2Eフレームワークと言ってテストの自動化で使用されるみたいです。(私は実務では使用したことがありません。) ボタンの押下やフォームへの入力、画面キャプチャの生成など様々なことを自動で行えます。 Webブラウザの操作自動化といえばSeleniumが思いつきますが、他にもあるんですね。勉強不足。 JavaScriptPythonなど様々な言語に対応しており、調べるとJavaScriptで書いている記事が多かったのですが、一応自分がJa

    Playwrightを軽く触った後にキャプチャ取得ツール作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "引数にPage.ScreenshotOptions().setPath()にパスを指定することで好きなディレクトリにキャプチャを保存 / setFullPage(true)とすると表示部分だけでなくWebページ全体を保存することができます" 2023
  • Playwright Component Testに思いを馳せる - Qiita

    はじめに (今更ですが) Playwright Component Testの存在を最近知りました。 PlaywrigthはE2Eテストライブラリで、NodeJS上でchromium, firefox, webkitのようなブラウザ・レンダリングエンジンでのWebアプリケーションの操作を自動化してくれます。 個人だとAngularをメインで触っていることもあり、Headless Browserの実行はPuppeteer、E2EテストはCypress、のような印象を持っていましたが、ReactVueSvelteのプロダクトではPlaywrightが採用されるケースを多く見ます。 上記のブログのように、Page(一画面)に対してテストコードを書いて実行する...というのが基的な使い方ですが、experimentalでComponent Test Runnerも提供されています。 コンポー

    Playwright Component Testに思いを馳せる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Playwright Component Test: Page(一画面)に対してテストコードを書いて実行する...というのが基本的な使い方ですが、experimentalでComponent Test Runnerも提供 / 「実際にブラウザでコンポーネントが正しく動くこと」の担保" 2023
  • CypressはPlaywrightに負けてない - Qiita

    背景 業務で自動テストにCypressを使っているのですが、最近ではCypressとPlaywrightを比較し、Playwrightのほうが優秀っぽく記載される記事や、CypressからPlaywrightに移行しました!、という記事を見かけることが多くなったような気がします。ちなみに以下はGoogleトレンドでCypress(青)とPlaywright(赤)を比較したものです。2023年6月くらいからcypressをPlaywrightが上回っており、少しずつ差が開いてきています。 そのためPlaywrightへの移行を検討する趣旨でいろいろ触ってみたのですが、たぶん単純なスペック(機能・性能)を比較するとPlaywrightが上回っていると感じました。しかしCypressの弱みよりも強みのほうが私にとっては重要であり、Cypressを使い続けたいと感じました。 Cypressの弱み(

    CypressはPlaywrightに負けてない - Qiita
    sh19910711
    sh19910711 2024/06/17
    "CypressからPlaywrightに移行しました!、という記事を見かけることが多くなったような気がします / Cypress: 常にGUIランナーを起動しているので、ブラウザを起動する・閉じるといったオーバーヘッドが発生しません" 2023
  • AWS LambdaでPlaywrightを使う(Python 3.10 + playwright1.42.0) - Qiita

    スクレイピングにseleniumを使用していましたが、playwrightがかなり直感的で使いやすかったことから活用を始めました。また、実行環境をlambdaにすることで他のアプリケーションから利用しやすくすることもできるため、その方法をまとめておきます。 開発環境 Windows10 Home 22H2 Python 3.10.4 playwright 1.42.0 1.playwrightを利用した機能を実装する ローカルで普通に実装します。ブラウザオブジェクトを作る際には次のオプションを指定しておきます。今回は図書館のHPにアクセスして貸出状況を取得するスクレイパーを実装しています。 browser = playwright.chromium.launch( args=[ "--disable-gpu", "--single-process", ], ) 2.lambdaから利用する

    AWS LambdaでPlaywrightを使う(Python 3.10 + playwright1.42.0) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "playwright: 実行環境をlambdaにすることで他のアプリケーションから利用しやすくする / chromeやedgeなどのブラウザエンジンを独自にインストールするので、lambda環境ですんなり動くようにコンテナ化"
  • WSL環境でクリーンにOpen Interpreterを使う - Qiita

    0. 忙しい人向けの結論 劇的にすごいかというとそうでもない感じがする。やりたいことによるかもしれないが、典型的な数理最適化の問題はあいまいな指示では解決できない。 OpenIntepreterは有料のGPT4、無料のLlamaが使える。 無料のLlamaは モデルを様々なサイズ(4GB程度~40GB) から選ぶことができる。 GPUだけではなく、llama.cppでCPUでも処理可能だが遅い(回答が返ってくるまでに2-3分) Llamaでは無限ループが発生することも。 精度はイマイチで難しい。 GPT4は早い。 問題もそれらしく設定/解こうとするが最後まで到達しない。 GPT4は数回 試したら$7(1000円)くらい使った。 日のお小遣いサラリーマンにはつらい 1. Open Interpreterとは 2023年9月何かとすごいというCode Interpreterの発展OSS版「C

    WSL環境でクリーンにOpen Interpreterを使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "劇的にすごいかというとそうでもない感じがする。やりたいことによるかもしれないが、典型的な数理最適化の問題はあいまいな指示では解決できない / GPT4は早い + 数回 試したら$7(1000円)くらい使った" 2023
  • PythonとQuartoでデータ分析レポートを速攻作成 - Qiita

    はじめに Quartoを使ってみたらPythonでのデータ分析レポート作成がとても便利だったので紹介します。 想定読者: Pythonデータ分析をしている方、これから始めようとしている方。(Pythonおよびマークダウンを書いたことがあると想定します) なおR Markdown+RStudioと非常に似ていますが、R/RStudioをインストールしなくても使える点が便利です。 Quartoとは 公式サイト解説(抜粋・翻訳) QuartoはPandocを使って科学技術ドキュメントを生成するオープンソースのシステムです MarkdownまたはJupyter notebookからドキュメントを生成できます Python, R, Juliaに対応 HTML, PDF, MS Word, ePubで出力可能 Jupyterlabによるレポート作成(HTML出力)よりも優れている点 ソースコードが短

    PythonとQuartoでデータ分析レポートを速攻作成 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Quartoを使ってみたらPythonでのデータ分析レポート作成がとても便利だった / R Markdown+RStudioと非常に似ていますが、R/RStudioをインストールしなくても使える点が便利" 2022
  • 大学院生がMarkdownでスライド作りたくてQuarto触ってみた(みてる) - Qiita

    はじめに 記事は、Power Pointが苦手な一人の大学院生がquartoと出会い、Document・発表スライド作りの楽しさを取り戻していく物語です。(当は単に、公式Documentを読みながら、quartoに関するTipsや文法を備忘録を兼ねてまとめていく記事です。) Markdownで発表スライドを作りたい... 僕は大学での講義や研究活動における発表機会の際、Power Pointを使用して発表資料を作成していました。これは特にこだわりがあるのではなく、周りの人が全員Power Pointを使っており、それが当たり前だったからです。 最初のうちは何も気にせずPower Pointでスライドを作成していたのですが、研究活動でスクリプトをたくさん書くようになると、だんだんPower PointのGUIによる資料作成が非常に退屈で苦痛に感じてきました。 ただこのことはほぼ間違いなく

    大学院生がMarkdownでスライド作りたくてQuarto触ってみた(みてる) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Power Pointが苦手な一人の大学院生がquartoと出会い、Document・発表スライド作りの楽しさを取り戻していく / quarto: Markdown記法を使ってDocumentを作り、それを.pdfだったり.htmlだったり.pptx等のスライド形式でも吐き出せる" 2022
  • Ruby で Quarto を活用する - Qiita

    これは Ruby アドベントカレンダー 2022 の23日目の記事です。 Quarto とは何か? Quarto は、Pandoc 上に構築されたオープンソースの主に科学技術分野での利用を想定した出版システムです。 Quarto は下記の特徴を持つ、と https://quarto.org/ は主張しています。 Python、R、Julia、および Observable を使用して動的なコンテンツを作る。 ドキュメントをプレーンテキストのマークダウン、または Jupyter ノートブックでもって執筆する。 高品質の記事、レポート、プレゼンテーション、Web サイト、ブログ、書籍を HTMLPDF、MS Word、ePub などで公開する。 数式、引用、相互参照、図パネル、吹き出し、高度なレイアウトなどを含む、科学に関するマークダウンを用いて執筆する。 2 番目のリスト項目内の「マークダウ

    Ruby で Quarto を活用する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Quarto: Pandoc 上に構築されたオープンソースの主に科学技術分野での利用を想定した出版システム / Python、R、Julia、および Observable を使用して動的なコンテンツを作る / Ruby も Quarto の恩恵を受けることができます" 2022
  • RmdをGithubでwebサイトとして公開する方法3選 - Qiita

    記事を書いたモチベ R studioなどを使ってコードを実行しているとき、この内容をどこかにいい感じにまとめてほかの人に共有したいなーって思ったことありますよね? Rmdファイルはhtmlpdfに変換できますがそのファイルたちを共有する方法がなかなか難しいです。 webサイトとして公開できれば見やすい&壊されないのではというところから始めました。 対象 複数の章(Rmdファイル)に分かれるようなナレッジを1つのサイトとして共有したい Rmdでの実行結果(tableやグラフ)もサイトに掲載したい mac/windowsユーザー R studioを使用可能 手法比較 早速ですが、この記事で紹介する3つの手法について下記にまとめます。 個人的にはquartoを使うのがおしゃれ、かつカスタマイズ性が高いです。 方法 利点 欠点

    RmdをGithubでwebサイトとして公開する方法3選 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "R studioなどを使ってコードを実行しているとき、この内容をどこかにいい感じにまとめてほかの人に共有したい / Quarto: サイドバーではネストの深さを自由に設定できるので情報量が多いページに適しています"
  • VSCode+TeXで論文執筆環境を構築したら想定以上に快適な環境が完成したので備忘録メモ - Qiita

    筆者は学生時代を最後に論文という文章を作成する環境とサヨナラしていました。しかし、幸運な巡り合わせにより、再び論文を書く機会を得ました。折角得られた機会を活かして学生時代論文やレポート作成で愛用していたTeX(LaTeX)を再び使ってみようと決意しました。学生時代はTeXStudioというOSSのエディターを利用していました。しかし、最近Visual Studio Code(以下VSCode)の進化が著しく、VSCodeで快適に執筆が出来る。。。物は試しと構築してみた所、予想以上に快適な環境が完成しました。今後も改良を続けて行くつもりですが、まずは構築方法を備忘録として残しておこうと思います。 環境情報 WSL2上のUbuntuとMacで環境構築を実行しました。 Linux Ubuntu 22.04 @ WSL2 Visual Studio Code 1.76.1 TeX Live 202

    VSCode+TeXで論文執筆環境を構築したら想定以上に快適な環境が完成したので備忘録メモ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "幸運な巡り合わせにより、再び論文を書く機会 / 学生時代論文やレポート作成で愛用していたTeX(LaTeX)を再び使ってみようと決意しました / 最近Visual Studio Codeの進化が著しく + 快適に執筆が出来る" 2023
  • Quarto でレポート執筆(M1 Mac + VSCode) - Qiita

    こんにちは.さんげん(@Sangen_u)です.今回は Quarto を導入し,これを使ってレポートを書く方法を解説していきます. はじめに-なぜ Quarto を使うのか Quarto とは何か 公式サイトには Quarto® is an open-source scientific and technical publishing system built on Pandoc とあります.Rmarkdown を使ったことがある人は RmarkdownPythonJulia,R で使えるように拡張したものであると理解すればわかりやすいでしょう(Quarto とは何か,ということについての説明は参考文献1も参考になります.今回は環境構築および設定の説明が長くなりそうなのでこの辺の説明は簡潔にしておきます). Quarto を使うモチベーション さて,今回私が Quarto を導入す

    Quarto でレポート執筆(M1 Mac + VSCode) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Quarto: Rmarkdown を Python,Julia,R で使えるように拡張したものであると理解すればわかりやすい / 大学の講義で Python を用いて作成した図を使ってレポートを書く機会 + Quarto を導入したところこれらの悩みが一挙に解消" 2022
  • Quarto + VSCode で作る数学ノート (TeXマクロ) - Qiita

    Quartoを使いたい理由 マークダウンで数学ノートを書くときに \newcommand が使いたい。 定理などを四角で囲みたい。 インストールした環境 Windows11 WSL2 (Ubuntu-20.04) VSCode Linuxにインストール (例) 参考: バージョン 1.2.335 (複数バージョンを入れられる方法でやっていますが、単一バージョンのみを入れるような別の方法があります) export QUARTO_VERSION="1.2.335" sudo mkdir -p /opt/quarto/${QUARTO_VERSION} sudo curl -o quarto.tar.gz -L \ "https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUA

    Quarto + VSCode で作る数学ノート (TeXマクロ) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "マークダウンで数学ノートを書くときに \newcommand が使いたい + 定理などを四角で囲みたい / 数式のサイズが大きすぎるときは .css でいじってあげれば良い / .md のようにlive previewができないっぽい" 2023
  • VSCodeでクリップボードの画像をそのままMarkdownに貼り付ける - Qiita

    VSCodeに下記のような設定を追加すると、クリップボードの画像をそのままMarkdownへペーストできるようになります(2023年4月時点)。 // settings.json { "markdown.experimental.copyFiles.destination": { "**/*": "images/" }, "editor.experimental.pasteActions.enabled": true, }

    VSCodeでクリップボードの画像をそのままMarkdownに貼り付ける - Qiita
    sh19910711
    sh19910711 2024/06/17
    "設定を追加すると、クリップボードの画像をそのままMarkdownへペーストできる + 画像は自動で images フォルダ内に連番で保存 / Microsoftのlearn-imagesというVSCode拡張を使うと、フォルダ内の画像をまとめて縮小・圧縮でき" 2023
  • 【RubyKaigi2023】debug.gem 1.8.0 で Ruby のデバッグをしてみる【VSCode】 - Qiita

    はじめに Qiita株式会社でエンジニアをしている @wataru86 です。 Qiita株式会社は RubyKaigi 2023 に Platinum Sponsor として協賛・ブース出展しています! 僕もそのメンバーとして、現地で参加していました。記事では、2日目の @ono-max さんによるセッション「Introduction of new features for VS Code debugging」で発表された debug.gem v1.8 の機能の概要と、実際に使う方法について簡単に説明します。 また、発表時のスライドは以下に公開されていました。 debug.gem debug.gemRuby3.1 からデフォルトでRubyに同梱されている gem です。ソースコードは以下リポジトリにあります。 debug.gem 自体は以前から存在していますが、 先日公開された

    【RubyKaigi2023】debug.gem 1.8.0 で Ruby のデバッグをしてみる【VSCode】 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "debug.gem は Ruby3.1 からデフォルトでRubyに同梱されている / 先日公開された 1.8.0 で VSCodeによる Ruby のデバッグがさらに便利になっていました / 拡張機能「VSCode rdbg Ruby Debugger」のインストールが必要" 2023
  • Ruff with VSCodeのススメ - Qiita

    はじめに この記事はミロゴス Advent Calendar 2023 13日目の投稿です。 Pythonの開発環境はどのようにされていますか? 私はPythonLambdaのランタイムによく使用し、Poetryでバージョン管理しながらVS Codeで開発しています。 VS Codeでの警告から、開発環境の設定を見直したので、それについて書いていこうと思います。 見直しの背景 複数人で開発する際には、LinterFormatterを統一し、書き方を合わせていく必要があります。しかし、メンバー間で一行に対する文字数などに設定の差異があったり、設定をミスしてうまく機能しなかったことがありました。 設定を合わせるために、プロジェクトのレポジトリに.vscode/settings.jsonやextensions.jsonを配置し、共有していました。settings.jsonにはpython.l

    Ruff with VSCodeのススメ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Astral社自体もRuffの継続的な開発を目指して設立されたようで / VSCodeでRuffを導入する際は、settings.jsonにpyproject.tomlから読み込む設定を追加することができます" 2023
  • GitHub Copilotを健全に使い倒すための心得 - Qiita

    時代はAIじゃ! 私は普段コーディングをするときにGitHub Copilotを多用しています。中にはAIツールをコーディングに導入することに抵抗がある人も多いかもしれませんが、うまく付き合えば彼女よりも強力な存在になること間違いありません 今回はコード補完だけじゃないGitHub Copilotの便利機能を紹介します。 心得 GitHub Copilotを使う時の個人的な心得を書いておきます。 一、部分部分に留めること 一、生成されたコードを理解すること ここで一つ徳川家康の名言を。「及ばざるは過ぎたるより勝れり」 コード補完 導入で言ったことを忘れたかのような章題ですが、一番はやはりコード補完です。 Twitterのバズり例でよくある「〇〇のコードを生成して」ってChatGPTに投げて100行ぐらいばばーっと帰ってくるのをコピペして使うのは、見た目のインパクトはすごいですがあまりやるべ

    GitHub Copilotを健全に使い倒すための心得 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "GitHub Copilotに任せると便利なのは特にfor文・switch文・コメント挿入 / GitHub Copilotは誰が書いてもほぼ同じコードを生成させるのに向いています / うまく誘導してあげると結構ノった回答を提示してくれる" 2023
  • OverleafとVSCodeを使った論文執筆環境の構築 - Qiita

    初めましての方は初めまして.そうでない方はいつもありがとうございます. 私事ではありますが,卒論提出が近づいてきており,そろそろ書き始めなければ間に合わない時期になってきました.今回は,それに関連した記事になっています. さて,私の所属する研究室では,$\LaTeX$での執筆が必須条件になっており,また,Overleafでの執筆が推奨されています. ところが,Overleafの無料版を利用していると以下の点が気になりました.(有料版を利用すれば問題ないのは百も承知なのですが,何ぶん苦学生なので,ご容赦いただければ・・・・・・) 連続して長時間の編集をしているとコンパイルに制限がかかる(最近になって制限が厳しくなったとか) コンパイルが遅い(変更を確認するのに時間がかかる) コンパイル実行時にOverleaf以外の回線が途切れる(私の環境だけでしょうか?) また,可能なら以下の機能も欲しい…

    OverleafとVSCodeを使った論文執筆環境の構築 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Overleafの無料版: 連続して長時間の編集をしているとコンパイルに制限がかかる(最近になって制限が厳しくなったとか) / オートコンパイル機能を使っていてもエラーが発生しない(少なくとも現時点では)"
  • latexdiff-vc の差分箇所の線を日本語でも改行できるようにする - Qiita

    背景 latexdiff-vcコマンドで生成された差分texファイルは、以下の画像のように差分箇所で日語の改行ができません。 原因は、その差分texファイルが線を引くパッケージにulemを使用しており、このulemが日語の改行に対応していないからです。 これの対処法として、latexdiffコマンドでは -t CFONTオプションを付けることで線を消して色だけを変える機能がありますが、latexdiff-vcコマンドにはそのオプションはありません。(manコマンド調べ) あと、以下の画像はlatexdiffコマンドの-t CFONTで生成したものですが、なんかフォントサイズバグってるし、初見だとどっちが変更前でどっちが変更後か感覚的にわかりづらいです。 どうにかして日語の差分箇所を線付きで改行させたい。。 結論 latexdiff-vcの差分texファイルのプリアンブルで使用されてい

    latexdiff-vc の差分箇所の線を日本語でも改行できるようにする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "latexdiff-vcコマンドで生成された差分texファイルは、以下の画像のように差分箇所で日本語の改行ができません / 線を引くパッケージにulemを使用しており、このulemが日本語の改行に対応していない"
  • PythonのLinter兼Formatter「Ruff」をVSCodeで使ってみる - Qiita

    Ruffとは Rustで書かれたPython向けのLinterFormatterです。LinterFormatterについては以下の記事に分かりやすくまとめられていたため、ぜひご確認ください。 メリット Ruffには以下のようなメリットがあります。 動作が高速 Rust製ということもあり、従来の静的コード解析ツールと比べてかなり高速です。 ツールを一つにまとめられる 従来はLinterにFlake8、FormatterBlack、Import sortingにisortというように、目的に合わせて別のツールを導入しなければなりませんでした。Ruffはこれらの役割をすべて担うため、他のツールを導入する必要がありません。 導入と使用 VSCodeを用いてRuffを導入し、簡単なPythonコードを書いてみましょう。 1. 拡張機能のインストール VSCode拡張機能が公式から提供されて

    PythonのLinter兼Formatter「Ruff」をVSCodeで使ってみる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Ruff: Rust製ということもあり、従来の静的コード解析ツールと比べてかなり高速 / 従来はLinterにFlake8、FormatterにBlack + 目的に合わせて別のツールを導入しなければなりませんでした。Ruffはこれらの役割をすべて担う"
  • Pythonで環境変数を読み込むときはpydanticを使うと便利 - Qiita

    アプリケーションを実装する際、環境変数の扱いって微妙に面倒ですよね? Pythonで実装する際、pydanticというライブラリを使うと、デフォルト値をセットしたり、int型にキャストしたり、 .env から値を読み込むなどの処理を簡単に実装することができます。今回の記事ではそれらのサンプルコードを紹介します。 ちなみに、pydanticは環境変数を読み込むだけのライブラリでは無く、型アノテーションを利用してクラスを定義できるライブラリで、他にも例えばjson形式のデータをクラスにキャスト・バリデーションすることができます。他の機能についてまとまって読みたい方は、次の記事を読んでください。 Pydantic 入門

    Pythonで環境変数を読み込むときはpydanticを使うと便利 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydantic: デフォルト値をセットしたり、int型にキャストしたり、 .env から値を読み込むなどの処理を簡単に実装 / 環境変数を読み込むだけのライブラリでは無く、型アノテーションを利用してクラスを定義できる" 2020
  • 既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita

    はじめに この記事は 2020 年の RevComm アドベントカレンダー 18 日目の記事です。 17 日目は @enotesupa さんの 「SOQLでSELECT * FROM SOME-TABLEっぽいことする」 でした。 @zomaphone と申します。普段は NLP 系を仕事を主にしておりますが、音声認識周辺の整備とかもしています。 今回は既存のシステムに対して pytest-mock と pydantic を活用してどのようにして短時間で総合テストのテストコード作成したかについて紹介します。 コードが修正しにくい、テストコード書く時間がないという人にとっては意味のある記事かもしれません。 やりたかったこと revcomm で開発している解析システムは音声データを入力し、他のシステムと通信をしながら処理をし、最後に解析結果を POST (送信) するというような構成となってお

    既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-mock で POST する関数をモックし、pydantic で 渡されたデータが正しい形になっているかを確認 / pytest-mock: unittest.mock の薄いラッパーで、既存ライブラリや関数等をモック" 2020
  • pydanticを用いて@dataclassの型を堅牢にする - Qiita

    概要 @dataclassを用いると型アノテーションが強制化されますが、この型自体に強制力はありません1。 例えば、下記のように違う型を入れた場合でも動作してしまいます。 from dataclasses import dataclass @dataclass class User: name: str age: int def main(): user_info = User(20, "Hoge") print(user_info) # User(name=20, age='Hoge') print(type(user_info.name)) # <class 'int'> print(type(user_info.age)) # <class 'str'> if __name__ == "__main__": main() なぜ強制力がないかというと、この型アノテーションは型のヒントで

    pydanticを用いて@dataclassの型を堅牢にする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "dataclassを用いると型アノテーションが強制化されますが、この型自体に強制力はありません / 違う型を入れた場合でも動作してしまいます / 型のヒントでしかなく、言うのであればコメントと同様" 2022
  • pydanticを用いて堅牢な型を作成する - Qiita

    概要 堅牢な型(Strict Type)が現時点で5つしかなく、結局__post_init__などでバリデーションを行う必要があるのは面倒と感じていましたが、なんとpydanticでは型を自分で作ることが出来ます! ただの型の作成であれば、下記のQiita記事やドキュメントを参照すれば作ることが出来ます。 今回はこれの堅牢な型バージョンです。 型の作成方法 めちゃくちゃ簡単です。 作成する型のクラスを定義する __get_validators__を定義して、次で作成するvalidate関数を呼び出す validateを定義する関数を作成し、エラーパターンを記述する 簡単な例を紹介すると、0以外の数値を受け取るNotZeroNumber型を定義してみます。 from pydantic.dataclasses import dataclass class NotZeroNumber(int):

    pydanticを用いて堅牢な型を作成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydantic: 型を自分で作ることが出来ます / int型を継承しているので、int型と同じ振る舞いが可能 / 堅牢な型: validate関数に、”その”型かどうかを確認する処理を入れる / 型違いはキャストされずにエラーで落とします" 2022
  • PydanticがRustで爆速になるという話 - Qiita

    はじめに 最近ポッドキャスト聴く時間が少し減ってしまったんだけど、久しぶりに Talk Python to Me を聴いたらPydanticの話題でした(エピソードのリンクはこちら)。作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「コアをRustで実装して17倍速くなる」と言っていて、リンク張られていたドキュメントを読みました。この記事はそこで語られていた内容を中心にPydantic v2についてご紹介します。 Pydanticとは v2の話の前に、そもそもPydanticとは何かについて簡単に触れておきます。PydanticはPythonの型ヒント情報を使ってデータバリデーション(データの妥当性検証)を行うライブラリです。予めデータの構造を定義しておいて、入力されたデータがその構造に合っているかを調べてくれます。 例えば、id

    PydanticがRustで爆速になるという話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "久しぶりに Talk Python to Me を聴いたらPydanticの話題 / 作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「コアをRustで実装して17倍速くなる」と言っていて" 2022
  • FastAPI SQLModel 入門 - Qiita

    SQLModel はPythonコードから SQL databases と会話するためのライブラリです。ここでは FastAPI での使われ方を見ていきますが、FastAPIとは独立したものとして設計されています。 SQLModelはFastAPI の作者が自ら作成しており、SQLAlchemy と Pydantic の両方との互換性を保っています。Pydantic はデータ検証のためのPythonライブラリです。Pythonのtype hintが使われます。ですからPydanticクラスはAPIの入り口であるパスオペレーション関数で使われることが一般的です。 過去記事「FastAPISQL Databases(SQLAlchemy)」でFastAPISQLAlchemy を使ってSQL Databaseを扱う方法を述べましたが、SQLAlchemy と Pydantic の2重

    FastAPI SQLModel 入門 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "SQLModel: FastAPI の作者が自ら作成 + SQLAlchemy と Pydantic の両方との互換性を保っています / 公式ドキュメントは説明が丁寧すぎて何度も読み返すには長すぎる懸念がありますので、短くまとめてみました" 2022
  • pydanticによる型検証 [BaseModel] - Qiita

    はじめに Pythonは動的な型付けであるため,変数の型が保証されていない。型ヒントによる宣言やmypyによるチェックは可能だが実行時の制限はない。 そこで,pydanticによる型に堅牢な書き方を記録する。 TL;DR pydanticを使用すると簡単に型検証が行える pydantic.BaseModelの継承と型ヒント 型の宣言はtypingなどによる型ヒントで行う pydanticとは 下記は公式ドキュメントによる説明です。 Data validation and settings management using Python type annotations. pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid. Define how dat

    pydanticによる型検証 [BaseModel] - Qiita
    sh19910711
    sh19910711 2024/06/17
    "型ヒントによる宣言やmypyによるチェックは可能だが実行時の制限はない / pydanticを使用すると簡単に型検証が行える / 宣言と異なる型の値でもキャストが可能な場合はキャストして代入される" 2022
  • pydanticの動作変更 [BaseConfig] - Qiita

    はじめに pythonは動的な型推論を行うがpydanticを使用することで型検証が可能である。しかし,作成時は型検証を行うが再代入時には型検証が行われない。この挙動を変更するにはBaseConfigを使用する。 TL;DR pydantic.BaseConfigによる動作の詳細設定が可能 validate_assignment: 再代入時の型検証 allow_mutation, frozen: イミュータブル化 extra: 宣言以外のデータが入力された場合の設定 上記以外の設定項目は公式ドキュメントを参照 クラスの設定 pydantic.BaseConfig BaseConfigには下記2つの記述方法がある。ここでは1つ目の記述で統一する。 # パターン1 class User_1(pydantic.BaseModel): id: int name: str class Config:

    pydanticの動作変更 [BaseConfig] - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydanticを使用することで型検証が可能である。しかし,作成時は型検証を行うが再代入時には型検証が行われない / 再代入時にも型検証を実施したい場合,validate_assignment = Trueを設定" 2022
  • pydanticで設定ファイルのバリデーションをする - Qiita

    from config import settings def main(): print(f"NAME: {settings.NAME}") print(f"EMAIL: {settings.EMAIL}") print(f"BACKEND_URL: {settings.BACKEND_URL}") if __name__ == "__main__": main() from typing import List from pydantic import BaseSettings, EmailStr, HttpUrl, validator class Settings(BaseSettings): NAME: str = "My name" EMAIL: EmailStr = "email@dummy.com" BACKEND_ACCEPTION_URL_LIST: List = [ "

    pydanticで設定ファイルのバリデーションをする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "設定ファイルのバリデーションを行い、開発者の意図しない設定値がコード内で使用されないようにする / 型アノテーションによって明記された型以外がオブジェクトに代入されるとエラーを出力" 2022
  • [FastAPI] ニッチなところを突く!Pydantic-i18nでPydanticのバリデーションメッセージを英語から日本語へ変換!! - Qiita

    [FastAPI] ニッチなところを突く!Pydantic-i18nでPydanticのバリデーションメッセージを英語から日語へ変換!! この記事を読んでできること Pydanticのバリデーションメッセージを英語から日語に変換して返すことができる 概要 i18nとは Pydantic-i18nとは 実装 記述しないこと FastAPIについて Pydanticとは Pydanticの実装 使用技術 fastapi==0.78.0 pydantic==1.9.1 pydantic-i18n==0.2.3 i18nとは i18n(Internationalization(国際化対応)の略称)とは、文化や地域、言語によって異なるターゲットオーディエンスに合わせて容易にローカライズできる製品、アプリケーション、または文書内容の設計と開発のこと 今回の実装ではPydanticのデフォルト設定の

    [FastAPI] ニッチなところを突く!Pydantic-i18nでPydanticのバリデーションメッセージを英語から日本語へ変換!! - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Pydantic: デフォルト設定の言語が英語 / Pydantic-i18n: バリデーションメッセージもあらゆる言語に変換することができる / 情報量が限りなく少なく、初心者さんには大変だと思い、書かせていただきました" 2023
  • [環境変数] os.environ.get()を使用しねえ!!Pydanticを使用した環境変数の取得方法!! - Qiita

    from pydantic import BaseSettings class VariableSettings(BaseSettings): """ 環境変数を取得する設定クラス """ DEBUG: bool TEST: str AAA: str = "BBB" settings = VariableSettings() print(settings.DEBUG) # True print(settings.TEST) # hoge print(settings.AAA) # BBB

    [環境変数] os.environ.get()を使用しねえ!!Pydanticを使用した環境変数の取得方法!! - Qiita
    sh19910711
    sh19910711 2024/06/17
    "環境変数を設定クラスに記述 + 設定クラスをインスタンス化することで利用可能 / 型を指定できる + どんな環境変数が使用されているか一目でわかる + タイポしていると読み込み時にエラーになる" 2023
  • pydanticからArgumentParserを作るライブラリを作った - Qiita

    作ったもの こんな感じにpydanticからArgumentParserを自動で生成するライブラリを作りました。 https://github.com/elda27/pydantic_argparse_builder from argparse import ArgumentParser from pydantic import BaseModel, Field from pydantic_argparse_builder import build_parser class Config(BaseModel): string: str = Field(description="string parameter") integer: int = Field(description="integer parameter") parser = ArgumentParser() build_par

    pydanticからArgumentParserを作るライブラリを作った - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydantic: 標準ライブラリであるdataclassesの高機能版 / 型アノテーションに基づいてデータの検証を行い、適切な型への変換や不正なデータをフィルタリングする / メールアドレスやUUIDの書式検証・変換も行ってくれる" 2023
  • pydanticを1行の入力チェック関数として使う - Qiita

    この記事について 入力ライブラリのPydanticで、(クラス定義を通さずに)関数で値をチェックする方法を紹介します 検証環境のバージョン Python 3.10 pydantic 1.10.7 pydanticって何? 入力をチェックするPythonのライブラリです # ユーザー情報クラスを定義する class UserInfo(BaseModel): user_name: str password: str # もし入力パラメータが{"user_name": "文字列", "password": "文字列"}の形式でなければ例外を投げる UserInfo.parse_raw(input) BaseModelを継承したクラスの型ヒントから、値を入力チェックすることができます。 この記事で実現したいこと、実現すること 実現したいこと JSONのような入力チェックなら標準の使い方そのままでい

    pydanticを1行の入力チェック関数として使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "プリミティブなデータに対して直接入力チェックを使いたい / これをpydanticでチェックするためにclassを書きたくありません / DataModelクラスをpydanticで使えるクラスに変換してくれる関数" 2023
  • Pydanticのデータ定義をJSONで書く色々な方法 - Qiita

    はじめに この記事では、JSON形式でスキーマを定義して、PyDanticのクラスを作成する方法を2つ紹介します。 型名と引数を書いたJSONをPyDanticのクラスに変換する JSONSchema形式で書いたJSONをPyDanticのクラスに変換する どういうメリットと、どういうメリットがあるの? JSONで定義するメリットとしては、定義をアプリの外部に置くことができるので、 利用者の数が変わる昼と夜で閾値を変えたい クラウド側に定義ファイルを置きたい といった要望があった時に対応できることが考えられます。 デメリットとしては、IDEから定義が全く見えないせいで自動補完が効かず、ツールとしての恩恵を受けにくいことです。 型名と引数を書いたJSONをPyDanticのクラスに変換する この方法では、スキーマには、 型の名前(キー名: type, str型) Fieldクラスに渡す引数(

    Pydanticのデータ定義をJSONで書く色々な方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "JSON形式でスキーマを定義して、PyDanticのクラスを作成する / 利用者の数が変わる昼と夜で閾値を変えたい + クラウド側に定義ファイルを置きたい / 自動補完が効かず、ツールとしての恩恵を受けにくい" 2023
  • 【FastAPI】Pydanticを使ってバリデーション:none is not an allowed valueエラーの解決方法 - Qiita

    FastAPI】Pydanticを使ってバリデーション:none is not an allowed valueエラーの解決方法PythonmodeltypingFastAPIpydantic 概要 FastAPIではPydanticというライブラリがあり、データのバリデーションを簡単に行うことができます。今回は、そのPydanticを利用している実装中にnone is not an allowed valueというエラーに遭遇したのでその解決方法を紹介します。 レスポンスが成功するサンプルコード from typing import Any, Optional, Union from pydantic import BaseModel class ResultResponse(BaseModel): request_id: Optional[str] = None status: in

    【FastAPI】Pydanticを使ってバリデーション:none is not an allowed valueエラーの解決方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "FastAPIでは、APIのリクエストデータを自動的にPydanticモデルとして解釈 / レスポンスデータもPydanticモデルとして定義することができ、FastAPIは自動的にデータをシリアライズ" 2023
  • FastAPIがPydantic v2対応したので、V2移行のポイントを紹介する(意外と簡単)

    概要 先日、PydanticV2に対応したFastAPI 0.100.0が正式にリリースされました。 PydanticV2は大部分をRustで書き直したことで高速化を実現している他 使い勝手向上のためにAPIが多少変更になっているので、移行作業が必要になる場合があります。 記事では、V1->V2への移行のポイントについて紹介します。 速度向上について Rust化による速度向上も重要なポイントです。 参考までに、私がPydantic部分のみで試した際は、5~6倍高速化されていました。 以下のクラウドカメラのSafie社のブログで、FastAPIで使用した場合の速度向上について実験されています。 参考リポジトリ FastAPI 0.100.0に対応したFastAPIのサンプルリポジトリを公開しています。 他にもパッケージ管理のRyeやLinterのRuff、SQLAlchemy v2などの最

    FastAPIがPydantic v2対応したので、V2移行のポイントを紹介する(意外と簡単)
    sh19910711
    sh19910711 2024/06/17
    "PydanticV2: 大部分を Rust で書き直したことで高速化 + 使い勝手向上のために API が多少変更になっている / アプリ固有の設定を管理する BaseSettings は V1 では Pydantic に含まれていましたが、V2 からプラグイン扱い" 2023
  • toml 形式で作ったテーブルの配列を Pydantic でバリデーションして受け取る - Qiita

    背景 toml 形式のファイル シミュレーションコードの入力部として、toml 形式の入力ファイルを考えている。特に、可変長個のリストを受け渡し可能にして、柔軟なシミュレーションを行うことを想定している。たとえば、以下のような構成である。 [[floor]] name = "groundfloor" floor_type = "middle" ceilingheight = 2.8 [[floor.room]] area = 18.0 windows = [0, 1, 2, 3] [[floor.room]] area = 20.0 windows = [4, 5] [[floor]] name = "firstfloor" floor_type = "middle" ceilingheight = 2.4 [[floor.room]] area = 35.0 windows = [6,

    toml 形式で作ったテーブルの配列を Pydantic でバリデーションして受け取る - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Pydantic で TOML のテーブルの配列を扱う / 入力のチェックを充実させるには、Annotated に AfterValidator, BeforeValidator を加えたり、model_validator を使ってひとつのパラメータに閉じない形で、入力のチェックや変換を行う"
  • ベイズ初心者でも分かるMCMC入門 - Qiita

    なかなかMCMCが理解できなかった自分がベイズ統計のや人から教えてもらってはじめて理解できた表現をまとめている自分用メモ。ベイズ統計の基は色々良いやサイトがあるので最低限に止めてます。初心者なので間違えにお気づきでしたら指摘頂けると助かります。 ベイズ統計学とは ベイズの定理というたった一つの公式から大抵の理論が導かれる P(θ)=事前確率、P(θ|D)=事後確率、P(D)=正規化定数(右辺の確率総和を1にしてくれる)、P(D|θ)=尤度 母数は確率変数(=分布を持っている)で、モデリングが必要 伝統的な統計学では母平均は確定している前提で特定の値が含まれる確率を考えたりしていたが、ベイズでは母平均が分布しているという考えを持つ 点数の分布がN(50,10)の試験で80点以上の人は何人いるか? MCMC(マルコフモンテカルロ連鎖法)とは ある確率分布から乱数を取り出すことにより、汎用

    ベイズ初心者でも分かるMCMC入門 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "確率分布がわかってるのに何のために積分するのか / 分母の P(D) をとっぱらって、P(θ|D)はP(θ)P(D|θ) に比例していることまでは比較的簡単に分かります / 事後分布の形はなんとなく分かっている状態" 2016
  • pythonでギブス・サンプリングによるベイズ線形回帰を実装してみた - Qiita

    はじめに 記事は簡単な線形回帰モデルのベイズ推定に関するものである。具体的にはギブス・サンプリングを用いてマルコフ連鎖モンテカルロ法(通称:MCMC)をpythonで実装を行なった。pythonでのMCMCの実行は、pymcというモジュールによるものが有名であるが、今回は敢えてpymcを用いずにnumpyとscipyのみで実装を試みた。この記事を書くにあたって古澄さんの『ベイズ計算統計学』(朝倉書店)を大いに参考にした。 理論 実装の前に簡単ではあるが理論を振り返る。推定したい線形回帰モデルは y_i=\boldsymbol{x}_{i}'\boldsymbol{\beta}+u_i, \ \ u_i\sim N(0,\sigma^2) \ \ (i=1,\cdots,n) と表される($y_i$は非説明変数、$\boldsymbol{x}$はk×1の説明変数ベクトルで、$u_i$は平均

    pythonでギブス・サンプリングによるベイズ線形回帰を実装してみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "擬似データを生成して、そのデータからベイズ推定を行い結果の分布が元のパラメーターに近づくか検証 / pymcを用いずにnumpyとscipyのみで実装を試み / 古澄さんの『ベイズ計算統計学』(朝倉書店)を大いに参考" 2017
  • ハミルトニアンモンテカルロ法 - Qiita

    はじめに 「ハミルトニアンモンテカルロ法」は、モデルのパラメータを推定する手法であり、 マルコフ連鎖モンテカルロ法(MCMC法)の一種である。 確率的プログラミング言語のStanやPyMCで実装されており、誰でも容易に使うことができる。 様々なパラメータの推定手法 このようなモデルのパラメータを推定する方法に、「EMアルゴリズム」がある。 EMアルゴリズムは、Jensenの不等式を用いて、周辺化対数尤度を下限で近似する。 $ log\ p(x{\mid}{\theta}) \geq E_{z {\sim} q(z)} [log\ p(x, z {\mid}\theta)] $ そして、右辺を最大化することで、左辺の周辺化対数尤度に近づけていく。 しかし、モデル$p(x, z {\mid}\theta)$ が複雑だと、それ自体の解析的な計算ができないため、 EMアルゴリズムを適用することがで

    ハミルトニアンモンテカルロ法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "事後確率からのサンプルを得るには、遷移核が詳細釣り合い条件を満たす必要 / 遷移核: パラメータ空間において現在位置から、次にどこへ遷移するかを決める確率" 2017
  • [Rust] MCMC 法の実装 - Qiita

    記事では Rust で MCMC 法 (特に Metropolis 法) を実装し, イテレータとして使えるようにします. MCMC 法とは $n$ 次元空間 $\mathbb{R}^n$ 上の任意の確率分布 $p: \mathbb{R}^n \to \mathbb{R}$ が与えられたとします. Markov 連鎖モンテカルロ法 (MCMC 法) はこの確率分布 $p$ に従ってサンプル列 $\{ x_n \}_{n \in \mathbb{N}}$ を数値的に得るアルゴリズム (のクラス) を指す名称です. 基的にはモンテカルロ法の一種ですが, サンプル列を Markov 連鎖として生成することでこの名称がつきました. MCMC 法の特徴 MCMC 法は性質のよくわからない確率分布からのサンプル列を得ることで, 平均や分散, 最頻値, 相関係数といった興味ある量を数値的に求めるため

    [Rust] MCMC 法の実装 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "性質のよくわからない確率分布からのサンプル列を得ることで, 平均や分散, 最頻値, 相関係数といった興味ある量を数値的に求める / 既に rmcmc, emcee といったクレートがあり" 2019
  • Markov Chain Monte Carlo (MCMC)をpythonで実装し、大学生の睡眠時間を解析 - Qiita

    Sleep Offset と Wake Offset が表示されると同時に、lengthカラムに睡眠時間も1時間単位で表示されます。 解析開始!まずは可視化する それではこのデータを使って分析していきます。 Scatterplotを使って就寝データを可視化 データを見ると、深夜0:00あたりからAsleepの軸が濃い青色に変化し始めていき、Awakeもどんどん淡い青色に変化していきます。逆に端っこの23:00ではフルAwakeで、午前3:30はさすがに寝ちゃっています。ちなみにグラフには表示していませんが平均的な就寝時間は12:50〜1:00です。大学生です。 Scatterplotを使って起床データを可視化 逆に起床時間はどうでしょう。6:00はほぼまだAsleepでAwakeになる気配はまったくないですが、8:00になると濃くなりはじめます。そういえば今年の夏休みは長期インターンをして

    Markov Chain Monte Carlo (MCMC)をpythonで実装し、大学生の睡眠時間を解析 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "夜の12:00に寝ているかどうかはファジーなので夜の12:00に寝ている確率、と言い換えたほうが良さそう / 0:45ぐらいに50%をこえるのがわかります。つまり2日に1回は0:45以降になってようやく寝る、みたいな現象" 2019
  • 単回帰モデルを通してベイズ推定の流れとPystanの使い方を学ぶ - Qiita

    はじめに RとStanではじめる ベイズ統計モデリングによるデータ分析入門を読みました。わかりやすく、詰まることなく読みすすめることができました。おすすめです。 さらに理解を深めるために、の内容をなぞって試したいと思います。こちらの書籍ではRとstanを使用していますが、ここではPythonとPystanを使います。 この投稿の大まかな内容は次の通りです。 1. ベイズの定理 2. MCMC法 3. Pystanの使い方 4. 単回帰モデル 単回帰モデルという単純なモデルを通して、ベイズ推定の流れとPystanの使い方を学びます。 0. モジュール ここで予め必要になるモジュールをインポートしておきます。 import numpy as np import matplotlib.pyplot as plt import pystan import arviz plt.rcParams["

    単回帰モデルを通してベイズ推定の流れとPystanの使い方を学ぶ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "プロットするなどして、データの構造を掴み + データ生成過程の考察とStanコードの作成 / パラメータである𝜇について前もって知識がないときは、根拠不十分の原則に従って、とりあえず広い分布を考え" 2020
  • MCMCを素朴に実装しつつガンマ分布のパラメータを推定してみる - Qiita

    はじめに 色々な観測データを集めた結果、その観測値の背後にあるであろう確率分布を、モデルに当てはめて推定してみたいという欲求が出てくることがあります。各種の統計量の計算やシミュレーション計算に便利ですからね。確率分布のモデルとして、正規分布、指数分布、2項分布、ベータ分布等ありますが、今回、ガンマ分布を対象として、MCMC法(Markov Chain Monte Carlo method)をその原理から"素朴に"実装しつつ、どのくらいフィッティングできるかを試してみたいと思います。なお、MCMCを実行する優れたツールとして、WinBUGSやPyMC3などがありますので、敢えて自分で作る必要はないでしょう。とはいえ、自分で作ることで色々見えてくるものもあり、理解が進むメリットはあるのかなと思います。 ガンマ分布とは? ガンマ分布とは、形状パラメータ$k$、尺度パラメータ$q$の2つのパラメー

    MCMCを素朴に実装しつつガンマ分布のパラメータを推定してみる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "観測データを集めた結果、その観測値の背後にあるであろう確率分布を、モデルに当てはめて推定してみたいという欲求が出てくる / 自分で作ることで色々見えてくるものもあり、理解が進むメリット" 2020
  • Sample Adaptive MCMC - Qiita

    1. Overview "Sample Adaptive MCMC$^{[1]}$"という新しいMCMCをNIPS2019のProseedingで見つけたので実験してみた。Numpyroには既に実装済み。興味を持たれた方は是非論文を見てください。 MCMC法では提案分布の調整が重要だが、手法はサンプル値に基づいてパラメトリック提案分布(正規分布等)のパラメータ(平均、共分散行列)を適応的に調整する手法である。また、有効サンプルサイズを稼ぎやすい手法である。 [1] Michael Zhu, Sample Adaptive MCMC (https://papers.nips.cc/paper/9107-sample-adaptive-mcmc) 2. Algorithm アルゴリズムの概要は、$N$個のサンプル値から平均$μ$と共分散行列$Σ$を計算し、この平均$μ$と共分散行列$Σ$をパ

    Sample Adaptive MCMC - Qiita
    sh19910711
    sh19910711 2024/06/17
    "MCMC法では提案分布の調整が重要だが、本手法はサンプル値に基づいてパラメトリック提案分布(正規分布等)のパラメータ(平均、共分散行列)を適応的に調整 / Numpyroには既に実装済み" 2020
  • 【統計学】MCMC サンプリングを JavaScript によるアニメーションで実装しながら理解する - Qiita

    Summary JavaScript(TypeScript) で MCMC ・メトロポリス・ヘイスティング法を実装して解説してみる記事です。 概ね こちらの記事 の JavaScript 実装版です。 この節の内容を実感するために一番良い方法は、どんな計算機言語でもいいから、 ここで述べたことを白紙から実装してみることである。 という訳で実際にやってみました。 手元でアニメーションで動いてくれるものが出来て理解が深まりました 😉👌 作ったもの まずは 成果物 をご覧ください。 最初の50回を Burn-in 期間として、棄却含め250回までのサンプリングを散布図にプロットしています。 薄い灰色でプロットされているのは Burn-in 期間です。受容されたサンプルは青い丸印で、棄却されたサンプルは赤いバツ印でプロットしています。 画面の下半分には、受容されたサンプルだけ使ってトレースライ

    【統計学】MCMC サンプリングを JavaScript によるアニメーションで実装しながら理解する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "薄い灰色でプロットされているのは Burn-in 期間です。受容されたサンプルは青い丸印で、棄却されたサンプルは赤いバツ印 / 画面の下半分には、受容されたサンプルだけ使ってトレースラインとヒストグラムを描画" 2020
  • 基礎から分かる時系列分析 5.マルコフ連鎖モンテカルロ法(MCMC)(Stanで実装) - Qiita

    p({\bf x}_t|{\bf y}_{1:T})=p({\bf x}_t|{\bf y}_{1:T})\int\frac{p({\bf x}_{t+1}|{\bf x}_t)}{p({\bf x}_{t+1}|{\bf y}_{1:t})}p({\bf x}_{t+1}|{\bf y}_{1:T})d{\bf x}_{t+1} いずれの分布を計算するにも積分計算を乗り越えなければならない。カルマンフィルタはすべての確率変数が正規分布に従うと仮定することによって積分を行列計算に落とし込み解析的に分布を求める、という手法であった。一方マルコフ連鎖モンテカルロ法(MCMC)は、求めたい分布からのサンプルを直接得て分布を推定する方法である。 MCMCをフィルタリングに用いると各時点でのフィルタ分布からの乱数を毎回発生させる必要があり、現実的ではない。MCMCは逐次的なアプローチよりも平滑化に導

    基礎から分かる時系列分析 5.マルコフ連鎖モンテカルロ法(MCMC)(Stanで実装) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "カルマンフィルタはすべての確率変数が正規分布に従うと仮定することによって積分を行列計算に落とし込み解析的に分布を求める / MCMCは、求めたい分布からのサンプルを直接得て分布を推定する" 2021
  • Pythonによるマルコフ連鎖モンテカルロシミュレーション - Qiita

    Pythonによるマルコフ連鎖モンテカルロシミュレーション モデル関数のパラメータの最適解の推定方法は、モデルとサンプルの残差を最小にするようにモデルパラメーターを決定する最小二乗法や、ある確率分布からサンプルを生み出すと考えられる尤もらしさ(尤度関数)を最大化するようにモデルパラメーターを決定する最尤法などあるが、今回はマルコフ連鎖モンテカルロ法(MCMC : Markov chain Monte Carlo methods)によるサンプリング手法を用いて、サンプルとモデルの差により得られる尤度関数を最適化することにより、局所最適解を探索する回帰分析の手法を紹介する。 MCMC法(Markov chain Monte Carlo methods)とは MCMCは多次元の確率密度関数を事前分布として持つ標準集団に、詳細つり合い条件が成り立つことを仮定してマルコフ連鎖を繰り返すことで、サンプ

    Pythonによるマルコフ連鎖モンテカルロシミュレーション - Qiita
    sh19910711
    sh19910711 2024/06/17
    "MCMC: 多次元の確率密度関数を事前分布として持つ標準集団に詳細つり合い条件が成り立つことを仮定 / EMアルゴリズムにおけるEステップの積分計算をモンテカルロ法を用いてかつマルコフ性を仮定してサンプリング" 2021
  • MCMC法に入門する(メトロポリス・ヘイスティングス法) - Qiita

    0. 概要 マルコフ連鎖モンテカルロ法(MCMC)は確率分布のサンプリングを行うアルゴリズムの総称である。主に推定したい事象の分布(不確実性など: どれくらいの確度で推定できているのか)を知りたいときに用いる。今回はこのMCMC法の中でも最も有名なMH(メトロポリス・ヘイスティングス法)に入門する。 最終的には得られたデータ点$x$から、その$x$を発生させている確率密度関数($\mu$)を推定する。 簡単に、「パラメータ(例えば、平均値や分散値)を正規分布等でサンプリング」→「そのパラメータを元にある関数(分布)を構成する」→「ある関数にデータ$x$を重ねて、その関数がデータ$x$を表現できているか評価する」→「表現できていそうなら、そのパラメータを採用して、最初に戻る」ということをしている。 以下を参考にした。 http://watanabe-www.math.dis.titech.a

    MCMC法に入門する(メトロポリス・ヘイスティングス法) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "推定したい事象の分布を知りたい / 最尤法や尤度関数との大きな違いは分布の頂点(最もその事象が発生する確率)を知ることではなく分布そのものを知る / データ点は得られているがデータ点元の分布が分からない" 2021
  • MCMC と焼きなまし法 - Qiita

    マルコフ連鎖モンテカルロ法(MCMC)と焼きなまし法はともにヒューリスティックの分野でよくつかわれる手法だと思います. この記事では焼きなまし法を少し理論的な面から見たい人のために, MCMC の枠組みから焼きなまし法を説明することを目標とします. MCMC の基 MCMC の目標とするところは与えられた確率分布 $p(z)$ からその分布に従ったデータの列 $z ^ {(i)}$ をサンプリングすることです.MCMCのアルゴリズムを上手に設計すれば高次元の分布からも効率的にサンプリング可能なことが知られています. 例えばマラソンでは観測結果 $X$ とそれを生成したパラメータ $\theta$ があった場合,その事後分布 $p(\theta | X) \propto p(\theta) p(X | \theta)$ から $\theta$ を MCMC でサンプリングすることで $\t

    MCMC と焼きなまし法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "MCMC の枠組みから焼きなまし法を説明 / 裾野が広すぎた分布は温度を下げることで最適値周りの分布を集中させ,また複数の山がある分布は温度を上げることで山の間の溝がやわらげ" 2021
  • プロデルで乱数サンプリングアルゴリズムを実装する - Qiita

    まえがき 記事は「日語プログラミング言語「プロデル」 Advent Calendar 2021」18日目の記事です. 17日目は @jpl_produire さん,19日目は @sanei_media さんです. プロデルは日語プログラミング言語の中でも特に自然な日語に近い表現ができる言語です. 記事ではプロデルで乱数サンプリングアルゴリズムを実装し,コードからアルゴリズムを伝えたいという試みです. ※コンピューター上で(擬似)乱数を得るためのアルゴリズム(線形合同法やメルセンヌ・ツイスタなど)の内容については扱わず,組み込み機能として一様乱数が得られるものとします. プロデルでは引数なしの乱数を求める手順で一様乱数が得られます1. なお,Qiita上ではプロデルのシンタックスハイライトが効かないためスクリーンショットを貼り付けています.ソードのテキストなどは GitHub に掲

    プロデルで乱数サンプリングアルゴリズムを実装する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "累積分布関数の逆関数を簡単に求めることができるという状況は限られ / 正規分布は累積分布関数が初等関数で書くことが出来ないため逆関数の値を求めるには数値的に求める" 2021
  • 【MCMC法シリーズその2】ハミルトニアンモンテカルロ法と物理学の関連性について - Qiita

    こんにちは。スキルアップAI編集部です。 機械学習の手法の中には、物理学の知識と非常に密接に関わっているものが多くあります。 今回はマルコフ連鎖モンテカルロ (Markov Chain Monte Carlo; MCMC) 法の1つである、ハミルトニアンモンテカルロ (Hamiltonian Monte Carlo; HMC) 法について触れていきます。MCMC法は、パラメータの事後分布を推定する方法として、機械学習の様々な場面で利用されます。 HMC法は、物理学で発展した概念をMCMC法に応用した重要な手法です。 記事では、HMC法と物理学の関連性について、厳密性は無視して直感的な説明を試みます。 <目次> 1.マルコフ連鎖モンテカルロ (MCMC) 法とは 2.ハミルトニアンとは 3.ハミルトニアンモンテカルロ (HMC) 法について 4.HMC 法と物理学の関連性 5.まとめ 6.

    【MCMC法シリーズその2】ハミルトニアンモンテカルロ法と物理学の関連性について - Qiita
    sh19910711
    sh19910711 2024/06/17
    "機械学習の手法の中には、物理学の知識と非常に密接に関わっているものが多くあり / HMC法は、物理学で発展した概念をMCMC法に応用した重要な手法 / 対数確率の高さを物理空間の低さとみなす" 2022
  • ガウス過程 from Scratch Non-Gaussianな尤度によるガウス過程 - Qiita

    今までに執筆した「ガウス過程 from Scratch」と「ガウス過程 from Scratch MCMCと勾配法によるハイパーパラメータ最適化」、「ガウス過程 from Scratch コレスキー分解による高速化」では、 ガウス過程(Gaussian Process) をゼロから実装しハイパーパラメータの最適化や計算の高速化を行いました。 通常のガウス過程では、関数 $\mathbf{f}$ と出力 $\mathbf{y}$ の関係 $P(\mathbf{y}|\mathbf{f})$ がガウス分布 $\mathbb{N}(\mathbf{f},\sigma^2\mathbf{I})$ に従うという前提のもと、出力を計算していました。 今回の記事では、尤度 $P(\mathbf{y}|\mathbf{f})$ がコーシー分布に従う場合を考え、データに予期しない外れ値が含まれていてもうまく

    ガウス過程 from Scratch Non-Gaussianな尤度によるガウス過程 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "ガウス過程: 関数𝑓と出力𝑦の関係𝑃(𝑦|𝑓)がガウス分布𝑁(𝑓,𝜎2𝐼)に従う / ある𝑥に対してスカラー𝑓(𝑥)を返すのではなく,𝑥における𝑓(𝑥)が従う正規分布の平均と分散を出力" 2022
  • スパース性を導入したベイズ線形回帰 - Qiita

    線形回帰の解がスパースである(0が多い)ことが事前にわかっているとき、 ベイズ線形回帰(Bayesian Linear Regression) において重みの事前分布に対して、 馬蹄分布(Horseshoe Distribution) を用いるのが一般的です。 正規分布などを事前分布に用いたベイズ線形回帰と比べて、馬蹄分布を事前分布に用いたベイズ線形回帰では、事後分布からのサンプリングには比較的複雑なコードが必要になります。 この記事では、 マルコフ連鎖モンテカルロ法(Markov chain Monte Calro method) のアルゴリズムの一つである ギブスサンプリング(Gibbs Sampling) を用いた、最も基的な馬蹄事後分布からのサンプリング方法を紹介します。 ベイズ線形回帰とスパース性 次のような線形回帰モデルにおいて、

    スパース性を導入したベイズ線形回帰 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "スパース: 0が多いことが事前にわかっている / 𝑃(𝑍)から直接𝑍全体をサンプリングすることが難しい / Gibbs Sampling: 𝑍=(𝑍1, 𝑍2, …, 𝑍𝑀)のようにM個の部分集合に分けることによって逐次的に" 2022
  • 人口動態予測 - Qiita

    1. 人口動態のベイズ推定ー国連モデル 一般的に、人口動態推定は、合計特殊出生率(TFR)の評価、及び平均寿命の評価の2つの評価に分けられる。なお、人口動態推定は人口動態転換モデルを用いて記述されており、一般的に、人口動態転換モデルは4段階から構成される。第一段階では、出生率・死亡率ともに高レベルにある状況が想定されており、第二段階では、出生率は高レベルにあるが、死亡率が急速に減少する過程が想定されている。第三段階では、出生率が減少、死亡率は徐々に減少する過程を想定している。また、第四段階では、出生率・死亡率ともに低レベルにある状況が想定されている。 国連では、現在、階層ベイズモデルを用いて人口動態推定を行なっており、ここでは国連モデルに基づいた評価を実行する。 1.1 TFRのベイズ推定 国連モデルでは、まず、人口動態転換モデルの第二段階におけるTFRの推移は二重ロジスティック関数をドリ

    人口動態予測 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "国連では、現在、階層ベイズモデルを用いて人口動態推定を行なっており / 初めに、データの平均値 𝜇、及びパラメータの分散 𝜎𝑡 を元にして推定されるパラメータの事前分布を与える / 事後分布はMCMC" 2023
  • MCMCのオーバーラップ問題 - Qiita

    概要 ゼロからできるMCMC (花田政範・松浦壮)で紹介されていたMCMCのオーバーラップ問題への対処法を実際に実装して試してみた記事になっています. MCMCについて分かりやすくまとまっており非常に良いだったので, MCMCに入門したい方は購入をお勧めします. (MCMCの各手法のコードは著者のGitHubで公開されています) オーバーラップ問題への対処については実装がなかったので, 今回実際に試してみました. オーバーラップ問題 と同様、2変数のメトロポリス法で試してみたいと思います. def metropolis_2var(action, x_init=0, y_init=0, x_step=0.5, y_step=0.5, iter=100000): """ 2変数のメトロポリス法 Arges: action: 作用関数 x_init: xの初期値 y_init: yの初期値

    MCMCのオーバーラップ問題 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "分布のピークと期待値計算において重要な配位がうまく重なっていないことでサンプル効率が非常に悪くなってしまっている / 元々の作用から𝑦の値を𝛼だけずらした作用" 2023
  • No-U-Turn Sampler (NUTS) を理解したい - Qiita

    概要 ベイズモデルを構築し,MCMCを用いてパラメータの推定ができるPythonライブラリとしてPyMCが有名です. PyMCのMCMCでは,デフォルトでNo-U-Turn Sampler (NUTS) [Matthew D. Homan, 2014]が利用されます. import pymc3 as pm # 分布の定義 with pm.Model() as model: mu = pm.Normal('mu', mu=0, sigma=1) pm.Normal('theta', mu=mu, sigma=1) # MCMCでサンプリング with model: trace = pm.sample(random_seed=0) NUTSはハミルトニアンモンテカルロ (HMC)をベースにした手法で,人手によるパラメータの調整が必要ない優れたアルゴリズムです. TensorFlow Proba

    No-U-Turn Sampler (NUTS) を理解したい - Qiita
    sh19910711
    sh19910711 2024/06/17
    "NUTS: HMCをベースにした手法 + 人手によるパラメータの調整が必要ない / HMC: 斜面を登る側に動いたとしても,ある程度時間が経てば谷底に戻ってくるような力学的な時間発展を取り入れることでサンプル効率を上げる" 2023
  • インベンス・ルービン25章のベイズ的な操作変数法の実装 - Qiita

    インベンスルービンの25章に記載されている,ベイズ的な操作変数法のPythonでの実装を簡単に解説します.使っているパッケージは基的にはNumpyのみです. 問題設定やモデル,記法の詳細はを参照してください.コードはGitHubに載せています. データセットは長島先生のツイートを参考にhttps://mollyaredtana.wixsite.com/sta108 から取得しました. ※に記載されている結果が一部再現できていないのですが,松浦先生のStanを使った再現とは結果がほぼあっているため,おそらく教科書に載っている結果が一部間違っているのではないかと考えています. 【目次】 実装の詳細 遵守タイプのサンプリング パラメータのサンプリング 因果効果の推定 サンプリング結果(更新予定) 雑感 1. 実装の詳細 遵守タイプとパラメータを(ブロック)ギブスサンプリング法によりサンプ

    インベンス・ルービン25章のベイズ的な操作変数法の実装 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "遵守タイプとパラメータを(ブロック)ギブスサンプリング法によりサンプリング / 割当反抗者は存在しないことを仮定 / MCMCはどうしてもfor文が必要で,Pythonでは非常に遅くなるため,Juliaを使ったほうが良い"
  • ポアソン混合モデル その5:ポアソン混合モデルによる学習、EMアルゴリズムの適用<実装編-1:やっと推論> - Qiita

    ポアソン混合モデル その5:ポアソン混合モデルによる学習、EMアルゴリズムの適用<実装編-1:やっと推論>EMアルゴリズムベイズ推定ポアソン分布ポアソン混合モデル混合分布 今回は、EMアルゴリズムを使ってポアソン混合モデルによる学習を行うことにする。実装編です。 理論編はこちら。 ポアソン混合モデル その3:ポアソン混合モデルによる学習・推論、EMアルゴリズムの適用<理論編> 一応、手順をまとめておく。 0-0.データを準備する。 0-1.πとλを初期化する。 1.E-Stepを実行する。 $$ γ(s_{n,k}) = \frac{π_k Poi(x_n|λ_k)}{\sum_{k=1}^{K} π_k Poi(x_n|λ_k)} $$ 2ー1.M-Stepで $ λ^* $ を求める。 $$ λ^*_k = \frac{\sum_{n=1}^{N} γ(s_{n,k}) x_n}{\s

    ポアソン混合モデル その5:ポアソン混合モデルによる学習、EMアルゴリズムの適用<実装編-1:やっと推論> - Qiita
    sh19910711
    sh19910711 2024/06/17
    "EMアルゴリズムを使ってポアソン混合モデル / このヒストグラムを見てクラスターの数を決めることは難しそう + 3つのクラスターがありそうだという知見が得られているものとして話を進め" 2021
  • 面倒な誤差伝播を自動化したい(Measurements.jl紹介) - Qiita

    この記事はJuliaLang Advent Calendar 2022 15日目の記事です。 誤差伝播って面倒だよね 実験の測定値に誤差はつきものです。その測定値から別の物理量を計算する際にも、誤差を適切に伝播させる必要があります。今回は測定値を誤差付きで管理し、線形誤差伝播を自動で行うパッケージMeasurements.jlを紹介したいと思います1。適宜公式ドキュメントを参照してください。 簡単な使い方 julia> using Measurements julia> x = 1 ± 0.1 1.0 ± 0.1 julia> typeof(x) Measurement{Float64} julia> y = measurement(2 ± 0.1) 2.0 ± 0.1 測定値±誤差やmeasurements(val, [err])などで宣言できます2。errは標準偏差(および標準偏差だと

    面倒な誤差伝播を自動化したい(Measurements.jl紹介) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "実験の測定値に誤差はつきもの / その測定値から別の物理量を計算する際にも、誤差を適切に伝播させる必要 / Measurements.jl: 測定値を誤差付きで管理し、線形誤差伝播を自動で行うパッケージ" 2022
  • Juliaで"."(ドット)を使ってブロードキャストする - Qiita

    julia> a = [1,2,3] 3-element Vector{Int64}: 1 2 3

    Juliaで"."(ドット)を使ってブロードキャストする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "配列の要素全てに計算を行いたい(ブロードキャストしたい)場合は,演算子に.を加える / Macで≤をタイプするにはoption+< / 乗算と除算はドットがなくてもブロードキャスト可能" 2022
  • Juliaで自作の型に対して足し算+やインデックスによるアクセスA[i]を実現する方法 - Qiita

    今回はこれの実装方法を説明します。 自作の型に対する演算 ステータスのアクセスに対して、配列のアクセスのようにインデックスでアクセスしたい場合、以下のようにして定義すれば可能になります。これはBaseの関数getindex, setindex!に対して多重ディスパッチさせている感じです。 function Base.getindex(st::Status_6, i::Int) if i == 1 return st.hp elseif i == 2 return st.mp elseif i == 3 return st.atk elseif i == 4 return st.dfs else error("access denied.") end end function Base.setindex!(st::Status_6, val::Real, i::Int) if i == 1

    Juliaで自作の型に対して足し算+やインデックスによるアクセスA[i]を実現する方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "自作の型に対して足し算とか配列のようなアクセスができると都合が良い / ステータスの増加を見通し良く行うため、以下のような記述ができると便利そう st + Δst / function Base.:+(st::Status_6, Δst::Status_6)" 2023
  • サイズの小さな線形代数計算を高速に行う - Qiita

    結論 サイズの小さい、かつ固定長の線形代数の計算はStaticArrays.jlを使おう 実験 公式ドキュメントのPerformance Tipsには、計算結果をPre-allocateする工夫として、次の例が掲載されています。 function xinc(x) return [x, x+1, x+2] end; function loopinc() y = 0 for i = 1:10^7 ret = xinc(i) y += ret[2] end return y end; function xinc!(ret::AbstractVector{T}, x::T) where T ret[1] = x ret[2] = x+1 ret[3] = x+2 nothing end; function loopinc_prealloc() ret = Vector{Int}(undef, 3)

    サイズの小さな線形代数計算を高速に行う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "サイズの小さい、かつ固定長の線形代数の計算はStaticArrays.jlを使おう / StaticArrays.jlのMArrayを使うと + なんとメモリ割り当てが0になり、計算時間がさらに約10000倍早く" 2023
  • JuliaのOOP事情の備忘録 - Qiita

    Julia来的にobject-orientedではない(資料1) object-orientedなコーディングをしたいときに使えるJulia特有のツール・概念がある Juliaはmultiple dispatch(wikipedia)というパラダイムに属する言語である(資料1,資料2) mutable struct という構文を使うと、一般的なOOP言語のクラスや構造体と似たような振る舞いを出来る。中に定義されるものは全てdataであり、関数も登録できるが、メソッドという概念は無いらしい。 単に連想配列を使いたいだけなら、「名前付きタプル」を使えばx = (name="Tom",age=21,job="engineer"); x.name #->Tomのように出来る。 典型的なOOP言語と似たような書き方をする方法もあるにはあり、色々な人が個別に研究している(資料3, 資料4)

    JuliaのOOP事情の備忘録 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Juliaは本来的にobject-orientedではない / object-orientedなコーディングをしたいときに使えるJulia特有のツール・概念がある / mutable struct という構文を使うと、一般的なOOP言語のクラスや構造体と似たような振る舞いを出来る" 2023
  • ベイズ推論をJulia(&Turing.jl)でやってみた - Qiita

    概要 ベイズ推論入門として, 須山ベイズ1のうち, 下記をJulia(Turing.jl)で実装してみた. Chapter3 ベイズ推論による学習と予測 3.2 離散確率分布の学習と予測 3.2.1 ベルヌーイ分布の学習と予測 3.3 1次元ガウス分布の学習と予測 3.3.1 平均が未知の場合 3.3.2 精度が未知の場合 3.3.3 平均・精度が未知の場合 なお、実装は学習までで, 予測はやってない. (いや予測の実装がめんどかったんですよ) 実装はに記載の解析解と, Turing.jlを用いた実装の両方行ってみた. 使用したもの Julia v1.9.2 Distributions v0.25.99 StatsPlots v0.15.6 SpecialFunctions v2.3.0 Turing v0.28.1 ベルヌーイ分布の学習 観測値$X=\{ x_1, x_2 , \dot

    ベイズ推論をJulia(&Turing.jl)でやってみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "𝑎/(𝑎+𝑏)が真の値𝜇からあんまりにも外れると、データ数が少ない場合は設定した超パラメータの影響を強く受け / ベイズ推定: 事後分布の形を眺めることでどれだけ自信がある結果なのかが教えてくれる" 2023
  • OpenAPI Generator で Deno クライアントの生成が可能になりました - Qiita

    OpenAPI Generator で Deno クライアントの生成が可能になりました。 私が PR を作成し無事?マージされました。 使い方についてご紹介したいと思います。 openapi-generator-cli のダウンロード まずは、openapi-generator-cli をダウンロードします。 せっかくなので? deno コマンドでダウンロードしてみます。 $ deno eval 'fetch("https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.0.1/openapi-generator-cli-5.0.1.jar").then(r=>r.arrayBuffer()).then(b=>Deno.writeFile("openapi-generator-cli.jar",new Ui

    OpenAPI Generator で Deno クライアントの生成が可能になりました - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI Generator で Deno クライアントの生成 / --additional-properties の platform に deno が指定できる / 正直なところ、 fetch API だと機能不足であり、もうちょっと高機能な HTTP クライアントが Deno に標準で入らないか" 2020
  • Open API 3.0の定義からgolangのサーバコードのスケルトンを作成する - Qiita

    TL; DR API定義をSwagger Editorで作成する(Open API 3.0) API定義からGolangのサーバコードのスケルトンを作成する コードを実装し展開する 注意 初心者のメモです。まだ途中までしか作成してません API定義をSwagger Editorで作成する(Open API 3.0) みんなSwaggerなるものを使っている。 仕様ドキュメントと実装が違うなどということはソフトウェア開発ではたびたび経験しているから、ぜひとも避けたい。 聞くに、Swagger Editor というヴィジュアライズしてくれる便利なものもあるらしく、これは便利である 作成した定義は、[File] > [Save as YAML] で ダウンロードできる。 どうもSwaggerがデファクトらしいが、標準化されたOpen APIという書き方があるのなら、個人的にはデファクトといえどそ

    Open API 3.0の定義からgolangのサーバコードのスケルトンを作成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "仕様ドキュメントと実装が違うなどということはソフトウェア開発ではたびたび / Swaggerがデファクトらしいが、標準化されたOpen APIという書き方 / プログラミングに関して検索するときは、Google検索で1年以内を指定" 2020
  • dreddで認証付きのAPIをテストする - Qiita

    しばらく書いてなかったけどメモ程度に dreddとは dreddはopenapi(swagger)やAPI Blueprintの定義を読み込んでテストを実行してくれる便利なツールです。 例えば localhost:8080 でAPIサーバを動かして のようにすればschema.yamlに定義されたAPIの定義に従ってリクエストを送り、レスポンスが仕様に従っているかテストしてくれます。 が、ログインしてtokenを貰ってそのtokenでアクセスするというようなAPIはそのままではテストできません。 hooksという仕組みを使うと、レスポンスからtokenを取得して以後はそれを使う、といった動作が可能になります。 dredd hooks ドキュメントにある通り、hooksは様々な言語で書くことができますが、とりあえずdreddと同じnode.jsでやってみます。 (なぜかと言うと、docker

    dreddで認証付きのAPIをテストする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "dredd: openapi(swagger)やAPI Blueprintの定義を読み込んでテストを実行してくれる便利なツール / schema.yamlに定義されたAPIの定義に従ってリクエストを送り、レスポンスが仕様に従っているかテスト" 2020
  • Firestore+Python+OpenAPI+Typescriptでやわらかい型のある開発をした話 - Qiita

    概要 スキーマレスなFirestorePythonの自作ORM(fsglue)で型を定義して、OpenAPIとかTypescriptと組み合わせたら、柔軟だけど型のある快適な開発環境を作れたので、簡単にまとめてみた 背景 趣味でローコードな業務アプリのプラットフォームBizglueの開発をしていて、そこの裏側的なお話です。サービスの開発動機とかについては、noteの方に書いているのでご興味もっていただけた方はこちらもどうぞ。 最終的に今の構成になるまでのざっくりとした流れ サーバサイドは長く使っていたPythonを使いたい サーバ管理したくないし、お金もかけれないので無料枠のあるAppEngineを使おう AppEngineといえばDatastoreだけど、新しいFirestoreの方が便利そうだしそっち使おう Datastoreならndbがあるけど、FirestoreORMないのか…

    Firestore+Python+OpenAPI+Typescriptでやわらかい型のある開発をした話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "サーバ側とフロント側の実装の整合性のチェックはよくある地味にめんどくさい作業 / 型チェックでフロントエンド側の影響まである程度見えるので、その点は開発スピードの向上につながった" 2020
  • OpenAPI GeneratorでGoのAPIサーバー/クライアントコードを自動生成する - Qiita

    この記事はGo 4 Advent Calendar 2020 2日目の記事です。 この記事について OpenAPIyamlファイルから、APIサーバーやクライアントコードを生成するopen-generatorというツールが存在します。 今回は、これを用いてGoAPIサーバー/クライアントのコードを自動生成させ、それに手を加えて実際に使えるようにするまでの過程を紹介します。 使用する環境・バージョン go version go1.14 darwin/amd64 openapi 3.0.1 openapi-generator 4.3.1 OpenAPIとは? OpenAPIとは、REST APIを記述するためのフォーマット規格です。決められた記法でAPI仕様を記述すると、その内容をSwagger UIというきれいな形式にして確認することができるようになります。 "Swagger"というのは

    OpenAPI GeneratorでGoのAPIサーバー/クライアントコードを自動生成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI: yamlファイルから実際のAPIのコードをある程度自動で作成することができる / きちんとインターフェースが定義されていて、テストしやすそうなコードが生成される" 2020
  • OpenAPIドキュメントから全APIの自動テストを生成する - Qiita

    はじめに グロースエクスパートナーズ Advent Calendar 2020 3日目。 yitoです。 API開発をしている中で、テストするのに毎回クライアントツールにリクエストを用意してAPIを呼び出すのが手間でした。 それを、コマンド一発で、API仕様書に定義した全てのAPIをテストできるようにしたので、その方法を紹介します。 概要 OpenAPIドキュメントをAPIクライアントツールで利用可能なJSONに変換し、それをCLIライブラリで実行します。 これを実現する、以下について順番に説明していきます。 Postmanについて OpenAPI 3.0 to Postman Collection v2.1.0 Converter Postman Collection SDK newman Postmanについて APIリクエストのクライアントツールにPostmanがあります。 Post

    OpenAPIドキュメントから全APIの自動テストを生成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "コマンド一発で、API仕様書に定義した全てのAPIをテストできるようにした / Postman: ステータスコード、レスポンスボディのプロパティのテストなどが可能 / newman: CLIでPostman CollectionのJSONを読み込みAPIをリクエスト" 2020
  • まだ実装してない API を Prism でモックするとフロントエンド開発が少しはかどった - Qiita

    導入前の課題 Web サービスの開発でフロントとバックエンドを並行してすすめてるけど、まだ API が実装できてなくてフロントの開発に困ったことはありませんか? 以前、API 定義は決まったがバックエンドの開発が 1-2 週間遅れそうとわかり、フロントの開発を先んじで行いたという状況になったので、その際に行った解決策をまとめてみました。 結論はタイトルにある通り「OpenAPI のスキーマ定義ファイル(以下 OpenAPI 定義ファイル)があるなら、Prism という OpenAPI 定義ファイルをもとに API モックサーバをたてられるツールが便利」です。 状況 ざっくり以下の様な状況でした フロントエンドとバックエンドを分けて、別リポジトリで開発 フロントは Nuxt、TypeScript の SPA クライアントライブラリは Axios を利用 API の仕様は OpenAPI に準

    まだ実装してない API を Prism でモックするとフロントエンド開発が少しはかどった - Qiita
    sh19910711
    sh19910711 2024/06/17
    "バックエンドの開発が 1-2 週間遅れそうだがフロントは先んじて実装したい / Prism: モックサーバーを簡単に立ち上げ + OpenAPI 定義ファイルをもとにするので API モックサーバーと仕様のズレを気にしなくてよい" 2020
  • openapi-generatorのadditional-propertiesを指定して生成されるコードをカスタマイズしよう - Qiita

    openapi-generatorのadditional-propertiesを指定して生成されるコードをカスタマイズしようRubyOpenAPI openapi-generatorはOpenAPIの定義ファイルから、API ClientやServer stubsなどを自動生成してくれる便利なものです。対応言語も豊富なので、これからAPI Clientを作ろうと考えている方は、これを用いて自動生成することをおすすめします。

    openapi-generatorのadditional-propertiesを指定して生成されるコードをカスタマイズしよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "openapi-generator: OpenAPIの定義ファイルから、API ClientやServer stubsなどを自動生成 / additonal-properties: 生成される各言語ごとのオプションを設定 + 複数指定したい場合はカンマ区切りでkeyとvalueをつなげる" 2020
  • OpenAPIのYAML分割管理と構成案 - Qiita

    はじめに READYFORのエンジニアリング部に所属している熊谷です。 この記事はREADYFOR Advent Calendar 2020の8日目の記事です。 概要 スキーマー駆動開発でOpenAPI(旧Swagger)を導入し始めたところなのですが、その中で、OpenAPIの運用管理について色々調査・検討していたので、記事として共有させていただきます。 対象読者 以下の方々を対象としています API開発でOpenAPI導入を検討している方。 既にOpenAPIの導入済みの方。 背景 ( 課題感 ) スキーマー駆動開発でOpenAPI(旧Swagger)を採用している企業は多いかと思いますが、OpenAPI導入において最初に感じた課題感として、陥りそうな状況の一つとして、最初に運用方針を決めないまま、多数のメンバーが一つのopenapi.yamlにスキーマー定義を追加・更新していった場合

    OpenAPIのYAML分割管理と構成案 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "運用方針を決めないまま、多数のメンバーが一つのopenapi.yamlにスキーマー定義を追加・更新していった場合 / 見通しも悪化し、収拾つかなくなるみたいなケースが想定される" 2020
  • OpenAPI Generatorを使ったスキーマ駆動開発でAPI仕様と型安全な実装を同時に得るための方法 - Qiita

    記事は CBcloud Advent Calendar 2020 の8日目の記事です。 TL;DR 書くこと:OpenAPI Generatorの紹介と実例 書かないこと: TypeScript + Axios以外の環境での実践方法 記事内で登場するライブラリの細かな紹介 モチベーション ドキュメントが無いことが只々ツラいからどうにかしたい WebAPIの戻り値をフロント側で愚直に型定義するのをやめたい バックエンド・フロントそれぞれの都合だけでAPIの仕様を決めない未来を作りたい ドメインモデルを検討する上では双方歩み寄れる筈 OpenAPI Gereratorとは? そもそものOpenAPIは何かというと、OpenAPI SpecificationというREST APIのドキュメントなどを記述する形式のことを指します。 宣言的なDSLを使ってAPIのスキーマを定義できます。 で、Op

    OpenAPI Generatorを使ったスキーマ駆動開発でAPI仕様と型安全な実装を同時に得るための方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "WebAPIの戻り値をフロント側で愚直に型定義するのをやめたい / TypeScript + Axiosのテンプレートを使い、型安全なAPIクライアントを生成 / 実装が先行できてしまうので、運用ルールをしっかり決めておく必要がある" 2020
  • NestJS + OpenAPI(Swagger)からAPIクライアントを生成し型安全に通信する - Qiita

    こちらは、TypeScript Advent Calendar 2020 14日目の記事になります! はじめに 最近、個人での開発にてTypeScriptを選定することが多くなり、その中で NestJS を使ってバックエンドのAPIを構築する機会があったのですが、 フロントエンド(Nuxt.jsで作ったSPA)との通信について、割といい感じに作れた気がしたので、備忘録として残したいと思います✍️ どんなものを作るか Webアプリのフロントエンドとバックエンド間での通信として、以下のことを実現したいという気持ちがありました リクエスト/レスポンスに型付け したい💪 フロント/バックエンド双方のTSで、InterfaceなりClassなりに値が詰められたDTOを扱いたい バックエンド側で定義した型をフロント側でも使いたい I/Fの更新をフロント側からいい感じに取り込みたい フロントのコード上

    NestJS + OpenAPI(Swagger)からAPIクライアントを生成し型安全に通信する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "バックエンド側で定義した型をフロント側でも使いたい / NestJSにて @nestjs/swagger にてアノテートしたDTOとエンドポイントを定義 / openapi-generator-cli にて、1.で作成したyamlファイルからTypeScriptのAPIクライアントを生成" 2020
  • CREATE 文から OpenAPI を自動生成するCLIを作ってみた - Qiita

    OpenAPI でドキュメントを書くメリット OpenAPI でドキュメントを書くメリットは、大きく分けて二つの観点があると思います 短期的な開発リードタイム短縮 FE 開発 OpenAPI から API モックを作成して、API の実装を待つことなく実装ができる 例: Prism OpenAPI から API Client と I/F・Entity の型定義を自動生成することで、その実装の工数を省略+型安全な開発をすることができる 例: openapi-generator/typescript-axios BE開発 OpenAPIからController(一部)、バリデーションロジック、Request・Responseの型定義を生成できる 個人的にNest.js用のgeneratorが開発されていて楽しみです。 自動生成に対応している言語/フレームワーク一覧 - ada-server -

    CREATE 文から OpenAPI を自動生成するCLIを作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI から API Client と I/F・Entity の型定義を自動生成することで、その実装の工数を省略+型安全な開発をする / OpenAPIからController(一部)、バリデーションロジック、Request・Responseの型定義を生成" 2020
  • OpenAPI 3.0でOAuth2/OpenID Connectの認可を表現したい - Qiita

    はじめに API仕様書いていますか? この記事を読まれる人は、何かしらAPI仕様やOpenAPI/Swaggerに関わりがあったり、API仕様の認可の仕組みにOAuth2やOpenID Connect(OIDC)を利用することを検討していたりすると思います。 この記事では、OAuth2やOIDCの認可の仕組みを取り入れて、OpenAPI 3.0で定義されている securitySchemes と security フィールドをどう使って書いていけばいいか説明します。 OpenAPI/Swaggerや、OAuth2、OpenID Connectの各仕様や解説はそれぞれの大元のサイトやRFC、また先達の素晴らしい解説が多くありますので、そちらを参照して貰うとしては、OpenAPI 3.0のSecurity Scheme Objectのリンクを載せておきます。基的にリンク先に示した箇所周辺のこ

    OpenAPI 3.0でOAuth2/OpenID Connectの認可を表現したい - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI 3.0で定義されている securitySchemes と security フィールド / あるAPIリクエストを払い出したアクセストークンに紐付けるのは、OAuth2 RFC6749 section 3.3 で定義されている scope で表現" 2021
  • Stoplight + GitHub/CircleCI + Slack で OpenAPI Documentation 管理 - Qiita

    Stoplight + GitHub/CircleCI + SlackOpenAPI Documentation 管理CircleCIOpenAPImoxci First OpenAPI で仕様書いてて,GitHub に Push したら,CD 的なことしたいなーSlack に投げてほしいなーと思うじゃないすか. 今回はその方法について試したのでざっくり書いていきます. 雑な図を描くとこんな感じです. 実際の sample も置いておきます. Slack 連携については,ほぼ moxci の紹介です.便利やったんや・・ Local 環境の構築, Stoplight Studio の導入や CircleCI の導入には今回は触れません. Stoplight によるサンプル API の作成 Stoplight でははじめやすいようにサンプル作成機能があるので,今回はそちらでビルド対象 A

    Stoplight + GitHub/CircleCI + Slack で OpenAPI Documentation 管理 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Stoplight 自体は GUI でさくさく編集できるのと,リアルタイムでバリデーションしてくれるのが便利 / 公開とか CD とか考えると,ReDoc を使いたいところ / Slack に通知するために moxci を利用" 2021
  • OpenAPI(Swagger)のAPI開発Docker環境を整備した(yaml分割編集、SwaggerUI表示、モックサーバー、静的HTML出力) - Qiita

    OpenAPI(Swagger)のAPI開発Docker環境を整備した(yaml分割編集、SwaggerUI表示、モックサーバー、静的HTML出力)JavaScript初心者swaggerフロントエンドOpenAPI はじめに OpenAPI(Swagger)でのAPI開発をプロジェクトで導入する際、 OpenAPIyamlの書き方を覚えることよりも、 チーム開発するための最善の環境(ツール)選定に苦労したりします。 WEB上のSwaggerEditorを利用することや、 SwaggerHubというサービスを利用するという手もありますが、 いろいろとネックとなるところがあります。1 2 各自のローカルPCで各種ツールを利用できるような環境を作ってしまうのが便利かなと思い、 一式のツールをまとめたDocker環境を整備しました。 環境概要 完成品の環境コードはこちらに公開しています。 ht

    OpenAPI(Swagger)のAPI開発Docker環境を整備した(yaml分割編集、SwaggerUI表示、モックサーバー、静的HTML出力) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "APISproutというツールを使った、APIモックサーバを利用可能 / リクエストすると、yamlの定義に従ってjsonレスポンスが返却 / フロントエンド実装担当者は、APIの完成を待たずに、モックを利用して実装を進めることが可能" 2021
  • OpenAPI (Swagger) 形式のyamlからrequestBody/responsesのサンプルJSONを出力する - Qiita

    OpenAPI (Swagger) 形式のyamlからrequestBody/responsesのサンプルJSONを出力するNode.jsJSONYAMLswaggerOpenAPI はじめに ユニットテストとかを書くためにAPIのリクエストとレスポンスがJSON形式で欲しいとなったときに、今まではOpenAPIドキュメントをReDocで表示してそこに載っているサンプルをコピー&JSON形式で保存し直すみたいなことをしていました。 ただしこの方法は、APIの数が増えてきてかつ変更もちょくちょくあるような場合だと結構面倒な作業ですし、CIにも組み込みにくいです。 わざわざこの画面を経由しないでもOpenAPIドキュメントのyamlからこのrequestBody/responsesだけを直接JSONで吐き出す方法は何か無いものかと色々調べてみたのですが、元のOpenAPIドキュメントをyaml

    OpenAPI (Swagger) 形式のyamlからrequestBody/responsesのサンプルJSONを出力する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "理想はReDocのコピーボタンをクリックしたときにクリップボードに保存されるのと同じような形式のJSONを取得すること / ちょっと読んでみたところ、openapi-samplerというのを使ってそうだということが分かり" 2021
  • OpenAPI Generatorの出力モデルをMongoDBで扱いたかった(失敗) - Qiita

    OpenAPIとは OpenAPI(旧 Swagger)というREST API用のインターフェイス定義方法をご存知でしょうか? OpenAPIに沿った定義ファイルを、Stoplight等を用いて書くと、openapi-generator-cli等のジェネレータを使うことで、Go/Python-Flaskなどのサーバーのテンプレート、Go/Python/TypeScript等のクライアントライブラリ、モックサーバー、ドキュメント等をある程度自動で生成させることができます。 ジェネレータを使うことで、一度定義ファイルを用意すれば、サーバー側、クライアント側で1から全部書かずに 自動生成したモデルを利用して割と迅速に実装を進めることができる、らしいです。 今回やろうとしたこと 相当時間をかけてOpenAPIのドキュメントを書いたので、可能な限り自動生成ベースでAPIサーバーを実装したい。 前バー

    OpenAPI Generatorの出力モデルをMongoDBで扱いたかった(失敗) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "リクエストされたモデルをバリデーションした上でMongoDBに直接保管したい / Go-Swaggerというのが結構使えるようなのだが現在の定義ファイルの書き方OpenAPI(v3)になる前のSwagger(v2)にしか対応していない" 2021
  • Nuxt.jsでopenapi-generatorを使って型セーフなAPI呼び出しを実現する - Qiita

    先日axiosをpluginでラッピングする記事を書きましたが、結局のところフロント側でAPIクライアントを手書きするのはリスクがあるので、サーバーサイドから提供されるopenapi.jsonから安全にAPIを呼び出せるようにしようと思います。 (2021/07/11追記) JWTによる認証したい場合のやり方について記載しました openapi-generator呼び出し用のスクリプトを追加 Dockeropenapi-generatorを使います。 npmでもあるんですが、JREのインストールが別途必要なのでDockerの方が楽です。 ただ、コマンドが長いのでpackage.jsonに追加してnpm runで実行できるようにしておきます "scripts" { ・・・ "generate:api-client": "docker run --rm -v ${PWD}:/local op

    Nuxt.jsでopenapi-generatorを使って型セーフなAPI呼び出しを実現する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "フロント側でAPIクライアントを手書きするのはリスクがある / サーバーサイドから提供されるopenapi.jsonから安全にAPIを呼び出せるようにしよう / localhost/api-json でopenapi.jsonが取得できる" 2021
  • SpringbootでAPIを作成し仕様書をswaggerで自動作成する - Qiita

    目的 springbootでOpenAPI(swagger)を導入して簡単なアプリを作成する OpenAPIの使い方を学習すること APIの操作方法を学ぶこと CRUDを自作する 開発環境 ProductName: macOS ProductVersion: 11.3 IDE: eclipse_2021_03 REST(REpresentational State Transfer)とは? 設計方法のこと HTTPで定義されているメソッドの使用する(例:サーバ上にリソースを作成するにはPOST、リソースを取得するにはGET、リソースの状態を変更/更新するにはPUT、削除するにはDELETE) ステートレスであること(サーバーはクライアントのことを一切覚えない) 処理結果をHTTPステータスコードで返す 様々な設計原則の集合 RESTful API(REST API)とは? RESTの設計原

    SpringbootでAPIを作成し仕様書をswaggerで自動作成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Swagger Codegen: スタブやSDKを生成することで、より高速なAPIをより早く構築 / Swagger Inspection: あらゆるAPIのOpenAPIドキュメントを自動生成してテストすることができるツール" 2021
  • OpenAPI等のジェネレータツールによる更新作業の自動化、失敗時の自動ロールバックの実現 - Qiita

    こんにちは、 最近はOpenAPIgRPCであったり、それにまつわるジェネレータツールがとても熱いですね。 新規にジェネレータを走らせるのは何の憂いもなく素晴らしいのですが、 開発が進むにつれて、ディレクトリ構造が追加、変更されたり、中間処理を挟んだりと、素のジェネレータでは対応できない場合があります。 また、複数のジェネレータを使う場合、それぞれのジェネレータのご機嫌を伺わなければならない状況が発生し、そもそも更新作業にはジェネレータを使わないようになる場合も多いと思います。 ジェネレートした結果が意図した結果にならなかった場合、その問題を解決するために、いちいちGit操作を行ったり、例えば、ある段階のcommitを取り消したりrebaseしたりする操作を行うとそれだけで丸1日が潰れてしまう経験をお持ちの方もいるのではないでしょうか。 今回は、ジェネレータをもっと効率的に使うために、ジ

    OpenAPI等のジェネレータツールによる更新作業の自動化、失敗時の自動ロールバックの実現 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "新規にジェネレータを走らせるのは何の憂いもなく素晴らしい / 開発が進むにつれて、ディレクトリ構造が追加、変更されたり、中間処理を挟んだり / ジェネレート作業の自動化と適切なロールバックを行う" 2021
  • OpenapiのYamlをCodeCommitにPushしたら自動的にHTMLに変換してS3にホストして公開する - Qiita

    要約 Openapi仕様で書かれたYamlファイルは、ツールを使って静的なHTMLに変換することができる。ここでは、それらのツールのひとつであるredocで、YamlHTMLに変換する。通常は、手元でredocを使い、HTMLに変換したのち、関係者に共有したり、S3の静的ホスティング機能を使って共有したりする。稿では、手元で変換する手間を惜しむため、CodeCommitにコミットしたら、自動的にHTMLに変換し、S3にホストする仕組みを紹介する。 構成 手順 1. CodeCommitのリポジトリを準備する 下記のように、buildspec.ymlとopenapi.yamlを用意する。buildspecには、codebuildで実行する処理を記述する。 openapiAPI仕様である。 2.buildspec.ymlを用意する 以下のようなbuildspec.ymlを用意する。 no

    OpenapiのYamlをCodeCommitにPushしたら自動的にHTMLに変換してS3にホストして公開する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Codeシリーズを活用し、CodeCommitにファイルをコミットするだけでHTMLに変換、S3で公開するまでを自動化 / 手元でredocを使い、HTMLに変換したのち、関係者に共有したり、S3の静的ホスティング機能を使って共有" 2021
  • Flutter アプリ で OpenApi Generator を使った開発を行う - Qiita

    これは何? Flutter アプリで OpenAPI Generator を使った開発する方法をまとめたもの Open API Generator とは OpenAPI Generator とは、OpenAPI Spec を元に、APIクライアントライブラリ(SDK生成)、サーバースタブ、ドキュメント、設定を自動的に生成することができるツールのことです。 これを使うこと以下のようなメリットがあります ドキュメントと実装が乖離しづらい 呼び元と呼び先の両方で使うデータの定義を自動生成できる 自動生成してみる サンプルリポジトリ 以下のようなディレクトリ構成でサンプルを作成しました open-api-generator-example/ ├ client-todo-api/ # OpenAPI Generator で自動生成されたファイル群 └ client/ # 開発をするFlutterアプ

    Flutter アプリ で OpenApi Generator を使った開発を行う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI Generator を使うことで API定義から Flutter アプリから呼び出すことのできるコードを自動生成する / OpenAPI Generator: ドキュメントと実装が乖離しづらい + 呼び元と呼び先の両方で使うデータの定義を自動生成できる" 2021
  • OpenAPI GeneratorでSlim3向けのソースコードを生成 - Qiita

    OpenAPI GeneratorのDockerコンテナの利用 作業は参考先の内容にしたがってOpenAPI GeneratorのDockerコンテナを使用したが、最新のコンテナではSlim3が未対応になっているため、以前のバージョン3.3.4を使用した。 Web APIスタブへの変換 参考先に記載の(Swagger Petstoreの簡易版)petstore.yamlを、以下のコマンドでWeb APIのスタブコードに変換することができた。 docker run --rm -v ${pwd}:/local openapitools/openapi-generator-cli:v3.3.4 \ generate -g php-slim -i /local/petstore.yaml -o /local/petstore . ├── README.md ├── composer.json ├─

    OpenAPI GeneratorでSlim3向けのソースコードを生成 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "訳があって未だにPHP 5.6を使用している / ドキュメンテーションが面倒なので、Swagger EditorでOpenAPIを記述し、そこで生成したyamlをOpenAPI Generatorを使用してWeb APIのスタブコードに変換" 2021
  • Contract-Driven Development / OpenAPI で加速する契約駆動開発 - Qiita

    はじめに OpenAPIで仕様書を書いておくと、エコシステムによって色々開発を加速できるよということを記事にします。 具体的なコードなどは、imunew/openapi-ecosystemに置いときますので、参照ください。 定義ファイルの分割・ビルド Swagger-CLIのbundleコマンドを使うと複数の定義ファイルから一つのOpenAPI仕様書を作成することができます。 具体的には、Swagger-CLIを利用します。 詳しいことは、以下の記事を参照ください。 OpenAPI ファイルを 分割 / 結合 する 方法 Swagger-UIで仕様書をブラウザに表示する Swagger-UIで仕様書をブラウザに表示することができます。 具体的には、Swagger-UIを利用します。 詳しいことは、以下の記事を参照ください。 DockerでSwagger UIを起動してAPI仕様書をブラウザ

    Contract-Driven Development / OpenAPI で加速する契約駆動開発 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPIで仕様書を書いてあるプロジェクトは結構ある + 今回紹介したようなツールを使っている現場は少ない / 仕様書を書いているだけでは、容易に実装と乖離してしまいます" 2021
  • open-api-generator で自動生成したコードを ktor で使う - Qiita

    OpenAPI で仕様を書いたら、それで自動生成したコードを使ってサーバー開発したいですよね。 ktor で書いていたサーバーにあとから OpenAPI を導入した際の手法をご紹介します。 3行で open-api-generator で ktor のコードを自動生成できる しかし、現状は example レスポンスを返す程度のことしかできない template を上書きすることで、実際のサーバーとしても使えるコードを生成できる open-api-generator について OpenAPI と open-api-generator OpenAPI は JSON や YAMLAPI 仕様を書くための仕様を定義しています。 仕様をあらかじめサーバークライアント間で合意しておくことでスムーズに開発できます。 さらに、 open-api-generator を利用すると、 OpenAPI

    open-api-generator で自動生成したコードを ktor で使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "仕様を書いたら、それで自動生成したコードを使ってサーバー開発したい / ktor で書いていたサーバーにあとから OpenAPI を導入 / 現状は example レスポンスを返す程度のことしかできない + template を上書きする" 2021
  • oapi-codegenでHash Map (additionalProperties) はどうexportされるか - Qiita

    Go言語で Open API 3.0対応の型情報を生成するとき、 github.com/deepmap/oapi-codegen を使ってます。 あまりユースケースとしてやりませんが、マップを表現したい時があると思います。 Dictionaries/HashMaps の仕様はこれです。 Dictionaries, HashMaps and Associative Arrays oapi-codegenの公式のReadmeでは、additionalPropertiesに関しては一応対応していると書いてますが、 定義が実際にどう構造体として出力されるか見てみました。 定義 ... components: schemas: ... Sample: title: Sample type: object properties: id: type: integer format: int64 rela

    oapi-codegenでHash Map (additionalProperties) はどうexportされるか - Qiita
    sh19910711
    sh19910711 2024/06/17
    "deepmap/oapi-codegen: Go言語で Open API 3.0対応の型情報を生成 / あまりユースケースとしてやりませんが、マップを表現したい時がある / additionalPropertiesに関しては一応対応していると書いて" 2021
  • kicsでInfrastructure-as-Codeの静的解析をしよう - Qiita

    kicsとは Infrastructure-as-CodeのためのOSSアナライザー セキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの構成ミスを 早期に検知することができる kicsを使用するメリット デプロイなしでチェック可能 人間によるレビューよりも短い時間でチェック可能 高度な知識を持つレビュアーがいなくてもチェック可能 使用方法 config構成 CLI、CI(GitLab)いずれの場合でも共通

    kicsでInfrastructure-as-Codeの静的解析をしよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "kics: セキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの構成ミスを早期に検知 / デプロイなし + 高度な知識を持つレビュアーがいなくてもチェック可能" 2021
  • Stoplightの使用感がかなり良かった話(OpenAPI,Swagger) - Qiita

    はじめに Another works サーバサイドエンジニアの釜地です! みなさんOpenAPI(Swagger)は使用されていますか? 記事ではOpenAPIを導入するに当たって、合わせて利用して便利だったツールを紹介したいと思います。 そもそもOpenAPI(Swagger)とは? OpenAPI仕様(以下OAS)と言われるREST APIを定義するための標準仕様にもとづいて構築された一連のオープンソースツールです。 REST APIの設計、構築、文書化、および使用に役立つ機能を提供します。 弊社の課題感 現状、フロントとサーバを分業制で開発している上で下記のような課題がありました。 APIの伝達がJiraのドキュメントであり、フォーマットが統一されず作成するたびに若干書き方が変わる API仕様が蓄積されていかない → 開発チームが大きくなったときのために今の内からドキュメントを残し

    Stoplightの使用感がかなり良かった話(OpenAPI,Swagger) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Stoplight Studio: OASを書きやすくしてくれるサードバーティ製の様々なツール / APIのリクエストやレスポンスのパラメータをかなり見やすく整形 / Postmanみたいに実際の検証環境や開発環境のAPIを叩いて動作を確認" 2021
  • かつて serde_valid なるものを開発していた - Qiita

    かつて serde_valid なるものを開発してた 結局、 Rust を書かなくなったので止めちゃったけど、 OpenAPI の スキーマ から Rust の型を自動生成するツールを作った過程で、 serde_valid という crate も昔作ってた。 こんな感じ use serde_valid::Validate; #[derive(Validate)] struct TestStruct { #[validate(length(min_length = 4, max_length = 4))] val: String, } let s = TestStruct { val: String::from("test"), }; assert!(s.validate().is_ok()); 気づいた人がいるかもしれないが、 validator がOpenAPI の仕様に 上手くマッチし

    かつて serde_valid なるものを開発していた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPI の スキーマ から Rust の型を自動生成するツールを作った過程で、serde_valid という crate も昔作ってた / OpenAPIのバリデーションに合わせて再編成 + serdeのデシリアライズと同時にバリデーションを実行" 2021
  • Spring+DDDでのアプリケーションアーキテクチャとテスト戦略 - Qiita

    GxPのやすば(@nyasba) です。 記事はグロースエクスパートナーズアドベントカレンダー 2日目の記事です 弊社が得意とする継続的な開発のためには保守性が高いアプリケーションにしていく必要があり、今自分が関わっている案件では**DDD(ドメイン駆動設計)**を採用しています。 今日はJava/SpringプロジェクトでDDDを実践する際のアプリケーションのアーキテクチャ(レイヤ構造やパッケージ構成など)とテスト戦略についてまとめてみます。 ※会社としても採用実績はありますが、あくまで個人の思想に基づく内容です。 はじめに Springで開発している案件といっても、レイヤ構成やパッケージの切り方やそれに伴うテスト戦略は様々です。弊社内でも特に標準が定められているわけではありませんので、案件によって切り方が違うのが現状です。 パッケージの切り方自体はコードを見れば理解できるものですが、

    Spring+DDDでのアプリケーションアーキテクチャとテスト戦略 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "パッケージの切り方自体はコードを見れば理解できる / 何をどこのパッケージで行うべきか、どのポイントでテストコードを書くべきかという 設計思想 をうまく伝えることが非常に難しい" 2021
  • Code Firstで疲弊しないOpenAPI活用方法 - Qiita

    こんにちは! 記事は2021年度の「株式会社カケハシ x TypeScript」アドベントカレンダーの10日目の記事として執筆いたしました。 私が、最近設計開発するWebAppではOpenAPIを活用しており、記事では実践している知見が共有できればと思います! OpenAPIとは ご存知の通りOpenAPI は、プログラミング言語に関係なくAPIの仕様を定義するための仕様です。デモとしては Swagger Editor のページが有名です。 OpenAPIの成り立ちとしては、元々SwaggerというAPI定義仕様とツール群がありましたが、こちらの通り 2015年ころ、ベンダー依存しないオープンなプロジェクトに拡張するためSwaggerのスペックをベースに構築されたAPI定義仕様がOpenAPIです。その後 数々のツール が開発されています。 OpenAPIの記述方法は json, ya

    Code Firstで疲弊しないOpenAPI活用方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "OpenAPIの記述方法は json, yaml が選択できますが、いずれにしても一種の JSON Schema で表現 / OpenAPIの強みは スペックを中心として、ドキュメント・サーバ・クライアントなどをある程度自動生成する事ができる点" 2021
  • OpenAPIスキーマ互換なAsyncAPIとは? - Qiita

    みらい翻訳 Advent Calendar 2021の記事です。 はじめに みなさんご存知だと思いますが、OpenAPIはREST APIを記述するデファクトな仕様記述言語と言っていいと考えています。では、AsyncAPIとは何でしょうか? 結論から言うと、Event駆動アーキテクチャのAPIのインターフェイスを定義するためのものです。Eventは通常その処理結果を待つことなく任意のタイミングで発生しうるので、当然Event駆動アーキテクチャでは、Async(非同期)であることが要求されます。(AsyncAPIは検索しづらい名前ではあるけど) AsyncAPIはこのようにEvent駆動アーキテクチャで非同期APIを定義するためのOpenAPIのスキーマに対応した仕様を持ちます。仕様面だけでなく、OpenAPIのエコシステムが提供するのと同じように仕様のドキュメント化、コード生成、コードから

    OpenAPIスキーマ互換なAsyncAPIとは? - Qiita
    sh19910711
    sh19910711 2024/06/17
    "AsyncAPI: Event駆動アーキテクチャで非同期APIを定義するためのOpenAPIのスキーマに対応した仕様 / 同じように仕様のドキュメント化、コード生成、コードからの仕様化までも提供" 2021
  • deepmap/oapi-codegen のカスタムテンプレートで required array が null で返ってしまうのを防ぐ - Qiita

    deepmap/oapi-codegen のカスタムテンプレートで required array が null で返ってしまうのを防ぐGoOpenAPI はじめに 私が今関わっているプロジェクトでは、サーバーサイドにGo言語を採用し、Webフレームワークとして labstack/echo (以下、Echo) を採用しています。また、APIの定義を OpenAPI で行い、OpenAPI の定義から Echo のハンドラを一括登録するための関数やリクエスト/レスポンスの型を生成するために deepmap/oapi-codegen(以下、oapi-codegen)を利用しています。 OpenAPI を利用する目的の一つとして、クライアントとサーバー双方が一意な解釈が可能な API 定義を参照することによって認識の齟齬なく開発を進められるようすることが挙げられます。しかし、 oapi-codeg

    deepmap/oapi-codegen のカスタムテンプレートで required array が null で返ってしまうのを防ぐ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "deepmap/oapi-codegen: OpenAPI の定義から Echo のハンドラを一括登録するための関数やリクエスト/レスポンスの型を生成 / 定義を満たしていない API を実装してしまうことがあり、クライアントが API レスポンスを処理できず" 2021
  • APIドキュメントから生成したFastApiスタブをPysenに怒られないようにするまで - Qiita

    以前はFlaskを使ってゆるい型もないゆるゆるフワフワしたAPIを作って居たものです。 しかしながら、最近は型の概念がいかに素晴らしいかというのをTypeScriptやらGolangやらで体感したので、たとえPythonであっても、しっかりした型でいい感じのコードを書きたくなりました。 開発環境 Poetry+Pysen これが今どきの最新っぽい雰囲気でおすすめされてたので使います openapi-generator-cli 別に何で生成してもいいと思いますが、以前から何度か使っていて慣れているので使う Stoplight 初めからStoplight使って居るので、無いとやってられない、もはや手書きでは書けない 1 ドキュメントを作る Stoplightでガリガリ書きます 2 Python-templeteを使い PysenとPoetry入ったプロジェクトを生成 で作ったあと、git cl

    APIドキュメントから生成したFastApiスタブをPysenに怒られないようにするまで - Qiita
    sh19910711
    sh19910711 2024/06/17
    "最近は型の概念がいかに素晴らしいかというのをTypeScriptやらGolangやらで体感したので、たとえPythonであっても、しっかりした型でいい感じのコードを書きたく / Poetry+Pysen: 今どきの最新っぽい雰囲気でおすすめされ" 2022
  • Docker を使って Dredd で openapi (Swagger) のテストを簡単にできるようにしたよ - Qiita

    OpenaAPI (Swagger) の管理が当に煩わしい OSA の管理は基的にはサーバ側の責任なのかなと思います。 私はサーバサイドエンジニアですが、この管理が当に大変だと身をもって感じています。 RESTでAPIを作るならSwaggerの仕様書が間違っているとFE/BEどちらも消耗してしまうこと山の如しです。 FEのエンジニアから「プロパティ名が一文字間違っていてハマりましたよー笑」なんて言われてしまうと、平謝りすることしかできないので、どうしてもこの辺りをちゃんとさせねばなりません。 (その説は当にすみません) しかし、工数が限られている中で、目視で何度も確認はあまりのも時間を消費しすぎてしまう。 そこで、自動テストツールであるDreddの出番です。 Dredd と 分割されたOAS 例えば以下のように、外部ファイルを参照させて分割したOASの場合、 Dreddはテストをし

    Docker を使って Dredd で openapi (Swagger) のテストを簡単にできるようにしたよ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "FEのエンジニアから「プロパティ名が一文字間違っていてハマりましたよー笑」なんて言われてしまうと、平謝りすることしかできない / Dredd: デフォルトでは、OASに書かれたすべてのレスポンスを検証" 2022
  • Swagger StudioでAPI仕様書の作成とモックサーバー利用してみた - Qiita

    フロントエンド開発のためにモックサーバーを使いたかった フロントエンドAPI実装をするにあたって、モックサーバーを作るためのツールを検索していたら、API仕様書作成ツールのSwaggerのサードパーティ製ライブラリのSwagger Studioで作成した仕様書のモックサーバーを簡単に利用できることを知った。 元々モックサーバー用のライブラリであるPrismが統合されているらしい。 GUIで直感的にAPI定義できる SwaggerではAPI仕様書をyamlファイルを書いて作成していくが、Swagger Studioを利用するとGUIで直感的に操作して定義を作成しそのコードを出力することができる。 実際に操作してみる まずアカウントを作成ます。 API Design & Documentation Management | Designing & Building OpenAPIs 自分のワ

    Swagger StudioでAPI仕様書の作成とモックサーバー利用してみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Swagger Studio: GUIで直感的に操作して定義を作成しそのコードを出力することができる / エンドポイントのURLも自分の好きなものに変えられ / スピーディーにフロントの開発をするにはよいツール" 2022
  • GitHub Actionsを使ってAPI設計をフロントエンドと共有する話 - Qiita

    はじめに 以下記事を読んで、OpenAPI Specをもっとフロントエンド側で活用できたら良いなと思いました。 そこで、同じようにGitHub Actionsを使って、GitHub PagesにReDocを配置、Mock Server(Prism)をCloud Runへデプロイしてみることにしました。 なお、Mock Server(Prism)のデプロイ先をCloud Runにしたのは、最小インスタンスを0にする(つまり、アクセスが無い時はインスタンスが落ちている状態にできる)ことができ、課金を抑えられると思ったからです。 ReDocとは? ReDocは、OpenAPI Specからドキュメントを生成してくれるツールです。 同じようなツールで、Swagger UIもありますが、Swagger UIはリファレンス要素が強く、ReDocはガイド要素が強い(見易さ重視)印象を受けました。そのため

    GitHub Actionsを使ってAPI設計をフロントエンドと共有する話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "GitHub Actionsを使って、GitHub PagesにReDocを配置、Mock Server(Prism)をCloud Runへデプロイ / Mock Server(Prism)のデプロイ先をCloud Runにしたのは、最小インスタンスを0にすることができ、課金を抑えられる" 2022
  • OpenAPI 定義と Aspida で型付きの Symbol API レスポンスを取り扱う - Qiita

    (全部隅々まで見たわけではないので若干間違っているかもしれませんが) SDK 2.xの大部分はAPIアクセスクラスを占めていたと言っても過言ではなく、その部分がごっそりなくなりました。 また、全体的な実装ボリュームも削減されたので、機能としても大幅に削減されています。 RxJSはWeb APIクラスが依存していましたが、それが無くなったので依存から無くなりました。 理由はコアデブなどに確認したわけではないので、憶測ですが、 規模が大きくなりすぎていて、メンテが行き届かなくなり、必要な機能だけに絞り込んだ小さなSDKを目指している 他の言語と同様のインターフェイスと使い心地を維持するため、リアクティブを止めた という狙いがあるように思えます。 参考までに公開されているパッケージのリンクを張っておきますが、この記事においては、SDKの利用については触れません。 SDK 2.x SDK 3.x

    OpenAPI 定義と Aspida で型付きの Symbol API レスポンスを取り扱う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Symbol SDK: 3.x系からガラッと実装が変わっています。というか作り直され / 規模が大きくなりすぎていて、メンテが行き届かなくなり、必要な機能だけに絞り込んだ小さなSDKを目指している" 2022
  • overleaf環境をローカルのVSCodeへの移行したい - Qiita

    初めに 論文をlatexのクラウドサービスoverleafを使っていたが、論文を書き進めていくうちにコンパイル時間が長くなってしまい、無料枠のコンパイル制限にひっかかった。もちろん学生ならば月0.9ドルでプランをアップグレードすることができるが、できるだけ課金したくなかったので別の手段を探していた。そこで、自分のPCでlatex環境作ればいいやと思ったので、その方法をまとめていく。 そしてvscodeであれば、github Copilotも使えるので、vscodeでlatexを使うことにした。 前提 OS: Windows10 エディタ: VSCode latexの環境構築 texlive とvscodeのインストール 基的にはこれを参考https://zenn.dev/hash_yuki/articles/31855fbdb5fdf7 にした。 latexのインストーラの実行~ vsc

    overleaf環境をローカルのVSCodeへの移行したい - Qiita
    sh19910711
    sh19910711 2024/06/17
    "overleafを使っていたが、論文を書き進めていくうちにコンパイル時間が長くなってしまい、無料枠のコンパイル制限にひっかかった / 学生ならば月0.9ドルでプランをアップグレードすることができる"
  • NextjsでVSCodeのタブのカスタムラベルを設定してみた - Qiita

    VSCodeでタブのカスタムラベルが設定できるようになった VSCode1.88がリリースされ、タブの見た目をカスタムできるcustomLabelsが設定できるようになりました。 動きは、公式の動画を引用させてもらいます。 設定置いておきます すぐ試したいかたは、サンプル置いておきますつ { "workbench.editor.customLabels.enabled": true, "workbench.editor.customLabels.patterns": { "app/**/page.tsx": "${dirname} - Page", "app/**/layout.tsx": "${dirname} - Layout", "app/**/api/**/route.ts": "${dirname} - API", } } カスタムラベル 無効 カスタムラベル 有効 同じ、use

    NextjsでVSCodeのタブのカスタムラベルを設定してみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "VSCode: 1.88がリリースされ、タブの見た目をカスタムできるcustomLabelsが設定できるようになりました / 「どこ」の「なに」がわかりやすくなり + カスタムラベルを使うと、タブで何の「役割」かを明示できてよさそう"
  • WSLとVSCodeを用いて高速で快適なLaTeX環境をインストールしたい - Qiita

    はじめに LaTeXを一度でも使ったことのある人なら分かってくれると思うのですが、コンパイルが遅い。遅すぎる。pdf化のコマンドを打ってから実際にpdfができるまでに1分とかかかる場合もある。さすがにやってられん。 これをどうにかする方法はネット上にはあるにはあるのですが、困ったことに初心者がまず最初に見つける記事は大抵Windows上でLuaLaTeXを使うという遅すぎるものなので、これは良くない。 というわけで、なるべく早くpdf化できるような環境構築の方法をまとめました。 記事ではupLaTeXの実行環境を構築することを目指します(Luaは遅い) また、記事内容はgithubにも公開しています 参考文献 記事はただしい高速LaTeX論の内容を大いに参考にさせていただきました。 また、VSCode で和文を編集するときのオススメ設定やTeX wikiの内容も参考にさせていただきま

    WSLとVSCodeを用いて高速で快適なLaTeX環境をインストールしたい - Qiita
    sh19910711
    sh19910711 2024/06/17
    "LaTeXを一度でも使ったことのある人なら分かってくれると思うのですが、コンパイルが遅い / pdfができるまでに1分とかかかる場合もある / ただしい高速LaTeX論の内容を大いに参考"
  • 競プロ用の環境構築覚書 C++&VSCode(&WSL2) - Qiita

    はじめに やると快適になるけれど、何かと面倒な環境構築。 私は環境構築への苦手意識が強くあったのですが、3回くらいやって少しは慣れた気がするので今のうちにメモをしておきます。 もし記事内容に明らかな誤りがあれば、コメント等でご指摘いただけると幸いです。 当記事ではC++201の導入、AtCoder Libraryの導入、<bits/stdc++.h>ヘッダのプリコンパイル、コンパイルと実行のコマンド(ShellScript)を取り扱います。 Linuxについての知識が一切ない人でも大丈夫だと思います。 なお、想定環境としてはWindows11+WSL2VSCodeを利用する形ですが、Windows10でも概ね同様だと思います。 LinuxユーザでもWSL関連以外の内容は共通しています。MacOSはわかりかねます… 最終的にはこのようなディレクトリ2構成になります。ac-libraryディ

    競プロ用の環境構築覚書 C++&VSCode(&WSL2) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "C++20の導入、AtCoder Libraryの導入、<bits/stdc++.h>ヘッダのプリコンパイル / ヘッダファイルのプリコンパイルをしておくと、一回のコンパイル時間を短縮 / できる限りコンパイル時間は短縮しておきたい"
  • VSCode の拡張機能 Flake8 と autopep8 に pyproject.toml を読み込ませる - Qiita

    VSCode拡張機能 Flake8, autopep8 ではsettings.jsonで各種設定が可能です { "[python]": { "editor.defaultFormatter": "ms-python.autopep8" }, "autopep8.args": [ "--aggressive", "--indent-size", "4", "--max-line-length", "119", "--ignore=E111, E114, E402, E501" ], "flake8.args": [ "--ignore=W293, W504, E111, E114, E402, E501" ] } しかし,Poetry のプロジェクトのような場合にはpyproject.tomlに設定を記載することが多いかと思います その場合,VSCodeがpyproject.tomlを読

    VSCode の拡張機能 Flake8 と autopep8 に pyproject.toml を読み込ませる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Poetry のプロジェクトのような場合にはpyproject.tomlに設定を記載することが多い / VSCodeがpyproject.tomlを読み込むための設定 / autopep8 では--global-configで外部の設定を読み込めます"
  • devcontainerの運用ベストプラクティス - Qiita

    Devcontainerとは? こちらの記事が参考になる この機能を使う目的 devcontainerはコンテナ内で環境を作成できるので、「作業者の環境にパッケージなどが依存しており、番環境で動かない!」ということがない いちいちdocker runしてdocker attach してdockerコンテナ内に入る、という作業がなくなる Git, Githubの設定をホストマシンから引き継いで、Githubにプッシュできる Dockerコンテナの起動方法を記述して、開発環境に特化させた環境を記述できる。例えば、開発環境のみに必要なGitや開発依存のnpmパッケージをインストールする記述が可能 現状の運用最適解 環境差異をなくすため。devのための環境はできるかぎり作らない。その環境差異はdevcontainerに吸収させる。 onCreateCommandでgit, openssh-cli

    devcontainerの運用ベストプラクティス - Qiita
    sh19910711
    sh19910711 2024/06/17
    "devcontainer: docker runしてdocker attach してdockerコンテナ内に入る、という作業がなくなる / 環境差異をなくすため。devのための環境はできるかぎり作らない。その環境差異はdevcontainerに吸収させる"
  • ArduinoをVSCodeで使う - Qiita

    はじめに 記事ではVSCodeでArduino開発を行うための手順を大雑把に解説しています。 これまでArduinoIDEを使用していました。特に不満はないのですが、VSCodeの方が使い慣れていて、Github Copilotの恩恵を受けたいと思い移行することにしました。 筆者はmacで利用しましたが、windowsでも動作するはずです。 目次 はじめに 目次 前提 手順 おわりに 前提 VSCodeインストール済み 手順 VSCode拡張機能タブで「PlatformIO」と検索し、PlatformIO IDEをインストールします。 PlatformIOをインストールすると新しくPlatformIOタブが生成されるので、そこをクリックします(PlatformIOのインストール後、VSCodeをReStartすると表示されるようです)。 PlatformIOタブをクリックし、左下のQU

    ArduinoをVSCodeで使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "これまでArduinoIDEを使用していました。特に不満はないのですが、VSCodeの方が使い慣れていて、Github Copilotの恩恵を受けたい / PlatformIO IDEをインストール"
  • ほぼゼロから学ぶFlutterアプリ開発 - Qiita

    はじめに アプリ開発のエンジニアフロントエンド・バックエンド・インフラというように専業化されて、様々な開発言語やツールが生まれた現在において、バックエンドエンジニアが戦々恐々ながらにフロントエンドの開発に触れたらどこまでやれるのか、実践してみました。 技術選定および条件 今では数多くあるフロントエンド開発における術として、今回はFlutterを選択しました。 Flutterとは・・・ Googleによって開発されたフリーかつオープンソースのUIのSDK。 単一のコードベースから、Android、iOS、LinuxmacOSWindows向けのクロスプラットフォームアプリケーションを開発することができる。 FlutterではDart言語を用いる。 DartJavaScriptのような動的型付け言語でありながら、C#のような静的型付け言語の利点も兼ね備えたオープンソースのプログラミング

    ほぼゼロから学ぶFlutterアプリ開発 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "様々な開発言語やツールが生まれた現在において、バックエンドエンジニアが戦々恐々ながらにフロントエンドの開発に触れたらどこまでやれるのか / 思ったようにwidgetが配置できなかったり、表示が崩れたり"
  • VScode Shift + EnterでPythonが実行されるのをやめる - Qiita

    事の発端 VSCodePythonで書かれたプロジェクト触っているとき、Enterを押そうとして間違えてShift + Enterを押してしまい、Pythonコードが実行されてしまう事件が多発していました。 どうやらPythonの選択範囲実行という機能がキーバインドに割り当てられているみたいです。 消しましょう。 消す ⌘ + K,⌘ + Sまたは、VSCodeの右上か左下にある歯車マークを押して「キーバインド」を選択します。 そうすると、キーバインド一覧が出てくるので、検索窓に「shift enter」を入れてフィルタリングしましょう。 出てきた「Python: Python ターミナルで選択範囲」を右クリックで削除します。 さいごに 快適なVSCodeライフを

    VScode Shift + EnterでPythonが実行されるのをやめる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Enterを押そうとして間違えてShift + Enterを押してしまい、Pythonコードが実行されてしまう事件が多発 / Pythonの選択範囲実行という機能がキーバインドに割り当てられている"
  • VSCodeのExtensionをMarketPlaceにリリースする方法 - Qiita

    VSCodeのExtensionを作成したら(こちらの記事参照)、次のステップはMarketPlaceにリリースですね。リリースまでの対応についてまとめたので参考にしてください。 VS Codeの拡張機能をマーケットプレイスにリリースするには、以下の手順で行いました。これには、拡張機能のパッケージ化、Visual Studio Code Publisherの設定、拡張機能の公開などが含まれます。 転載元 当記事は以下ブログからの転載です。 TECH BACK Azure DevOpsアカウントの作成とPublisherの登録 アカウント作成 azure.microsoft.com にアクセスしてアカウントを作成します。 このウインドウはそのままContinueでOK この画面まで来たらアカウントの作成はできています。 そのままプロジェクトを作成してしまいましょう。 プロジェクト作成 適当な

    VSCodeのExtensionをMarketPlaceにリリースする方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Azure DevOpsアカウントの作成とPublisherの登録 / VSCE: VSCodeのExtensionをパッケージングし、MarketPlaceに公開するためのツール + Node.jsとnpmがインストールされていること"
  • Python 3 + Falcon を使った RESTful API の開発/テスト/デバッグ - Qiita

    はじめに 単純な Web API を用意する必要があり、Falcon という若干マイナーな WSGI フレームワークを使ってみました。Falcon の公式サイトのサンプルやドキュメントの情報は十分なので、インストールしてすぐに使い始めるのはとても簡単です。しかし、細かいところで追加情報が必要だと感じることが多かったので、この記事で補いたいと思います。 Falcon - The minimalist Python WSGI framework https://falconframework.org/ 公式情報を日語訳するだけのことは避けたいので、インストール方法や使い方を日語で読みたいという方は、Qiita にある他の記事が参考になると思います。既に Falcon タグが作られています。この記事が記念すべき 10 件目。 Falconに関する9件の投稿 - Qiita http://qi

    Python 3 + Falcon を使った RESTful API の開発/テスト/デバッグ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "単純な Web API を用意する必要があり、Falcon という若干マイナーな WSGI フレームワークを使ってみました / 公式ドキュメントもシンプル: 記述が簡潔過ぎて知りたい情報が書かれていなかったり" 2017
  • pytestでテストケースの前後処理をする - Qiita

    はじめに (TL;DR) 初投稿です。どうぞよろしくお願いします。 さて、今回はpytestで前後処理の記述方法について紹介します。 Javaっとした世界でいうところのbeforeClassやafterClass等ですね。 目的としてはこんなところでしょうか。 前後処理などセットアップコードを共通化したい setup処理からparameterを引き渡したい テストケースごとに固有の前後処理をしたい では、ゴタックーを並べるのはその辺にして、早速見ていきましょう。 構成 pytestの世界では、セットアップコードをconftest.pyと呼ばれる別ファイルに外だしするのがお作法なようです。 従って、ディレクトリは例えば以下のように切ります。 tests ├── __init__.py └── sample ├── __init__.py |── conftest.py # セットアップコード

    pytestでテストケースの前後処理をする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "前後処理を記述したい時、pytestでは@pytest.fixture()というマーキング / その際にパラメータを指定することで、実行条件を変えることができ、がその中の一つにスコープがあります" 2017
  • pytestとマルチバイト文字問題のTips - Qiita

    #!/usr/bin/python # -*- coding: utf-8 -*- def test_1(): a = "あああ" b = "あああ" assert a == b def test_2(): a = "あああ" b = "いいい" assert a == b def test_3(): a = u"あああ" b = u"いいい" assert a == b $ pytest test_app.py ======================================= test session starts ======================================== platform cygwin -- Python 2.7.14, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 rootdir: /cygdrive/

    pytestとマルチバイト文字問題のTips - Qiita
    sh19910711
    sh19910711 2024/06/17
    "conftest.pyとマルチバイトでハマった / これら一連の話はPython2だから気を遣うのであって、文字列がデフォルトでUnicode扱いになるPython3ではそれほど問題にならない" 2018
  • pytestでSparkアプリケーションのテストを書いてみる - Qiita

    Sparkで動くアプリケーションをPythonで書いたので、pytestでテストしたい! 大規模データでもテストしたいので、YARNクラスタにも投げたい! ある意味 pytestに入門してみたメモ の続編です。 pytestプラグインとかあるみたいですが 今回は手の内が分かったうえで自分でいろいろやりたかったので、前回の復習も兼ねて自前で作ってみることにします。 spark-submitコマンドを使わずにSparkにアクセス Spark向けに書いたスクリプトを実行する時、普通はspark-submitコマンドを使うと思いますが、今回はpytest経由で実行したいので、spark-submitを使わずに普通のPythonからpysparkモジュールを呼びたいわけです。 そのためには、来spark-submitがやっている諸々の設定を自分でやればいいはず。spark-submitの処理を追い

    pytestでSparkアプリケーションのテストを書いてみる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "大規模データでもテストしたいので、YARNクラスタにも投げたい / spark_session: conftest.pyに移して、scope="session"と変更すれば、複数のスクリプトを回すときでも全体で1回だけ初期化することになるはず" 2018
  • pytestのfixture、基本のき - Qiita

    概要 『テスト駆動Python』を読んでpytestのfixtureの機能を理解したので、基的な考え方と使い方をまとめる。 私はfixtureについてドキュメントを読んでもよくわからず使っていなかったので、同じような人の参考になればうれしい。 fixtureとは 次の説明が簡潔でわかりやすい。 フィクスチャは、実際のテスト関数の実行に先立って(またはその前後に)、pytestによって実行される関数です。(『テスト駆動Python』P.59) つまり、テストデータの用意や、テスト前後に行いたいデータベースのセットアップと後始末などに使える。 サンプル Python3.7.0とpytest3.8.2で実行した。 fixtureでテストデータを用意 import pytest # fixtureであることを示すデコレータ @pytest.fixture() def my_fixture_1()

    pytestのfixture、基本のき - Qiita
    sh19910711
    sh19910711 2024/06/17
    "『テスト駆動Python』を読んでpytestのfixtureの機能を理解した / テストデータの用意や、テスト前後に行いたいデータベースのセットアップと後始末などに使える / データベースのセットアップはsessionで良さそう" 2018
  • pytestの使い方と便利な機能 - Qiita

    pytestはPythonのテストフレームワークの一つ。 unittestなど他のフレームワークと比較して、テストに失敗した原因が分かりやすい。 この記事ではpytestの使い方に関して、公式のドキュメントを参考にメモする。 インストール pipなどを使用してインストールする。 基的な使い方 基的にはassertで望む結果を書く。 ここではtest_assert1.pyというテスト用のファイルを作成する。test_で始まる関数がテスト対象となる。ディスカバリーのルールに関してはこの記事の最後に明記する。 $ pytest test_assert1.py =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-3.

    pytestの使い方と便利な機能 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "unittestなど他のフレームワークと比較して、テストに失敗した原因が分かりやすい / 例外が発生することが期待される場合にはpytest.raises / テスト関数は引数として名前を指定することでfixtureオブジェクトを受け取る" 2018
  • pythonでpytestでtestを書き始めてみた時のメモ - Qiita

    はじめに 学生と社会人の最も大きな違いはテストを知っているかどうかとREADMEをしっかり書けるか,パッケージを作れるか (たくさんあります) なのではないかと自分なりに考えてみたので(もちろんコーディング力等の差もありますが...計算時間気にするとか) まず,テストについていろいろ調べてその時のメモです 二番煎じどころの騒ぎじゃないですが,同じところに詰まっている人がいれば testとは そもそもtestってなに?って話です 自分が書いたプログラムがあっているか確認するものらしいですが, 調べた感じ 自分の書いたものの入力と出力が明確に意識できるようになる この部分間違っていないと言い切れる(研究成果が出ないときとかにつよい) 大きい機能を持たせすぎに分割して小さく設計できるようになる この3つが大きいかなと 社会人は利益をあげたりしないといけない気がするので時間に必ず終わりがありますが

    pythonでpytestでtestを書き始めてみた時のメモ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "自分の書いたものの入力と出力が明確に意識できる / この部分間違っていないと言い切れる(研究成果が出ないときとかにつよい) / 大きい機能を持たせすぎに分割して小さく設計できるようになる" 2018
  • Pythonのpytest-watchモジュールでテスト駆動開発が捗った - Qiita

    概要 Pythonのテストツールの定番のpytestですが、watch オプションがないので、実装するたび、コマンドをせっせと実行する必要があって面倒だったので、調べてみたら、pytest-watchという素敵ツールがありました。 pytest: helps you write better programs https://docs.pytest.org/en/latest/ pytest-watch -- Continuous pytest runner https://github.com/joeyespo/pytest-watch pytest-watch a zero-config CLI tool that runs pytest, and re-runs it when a file in your project changes. It beeps on failures

    Pythonのpytest-watchモジュールでテスト駆動開発が捗った - Qiita
    sh19910711
    sh19910711 2024/06/17
    "定番のpytestですが、watch オプションがないので、実装するたび、コマンドをせっせと実行する必要があって面倒 / テストに失敗するとビープ音を鳴らしたり、テスト後にコマンド実行もできたり" 2018
  • pytestとpytest-mockでPythonのユニットテストを始めよう - Qiita

    LIFULL Advent Calendar 1日目の記事です。今年もよろしくお願いします。 世間一般の流れと同じく、株式会社LIFULLでも機械学習サービスを中心にPythonを採用することが多くなってきました。ただ、どうしても「リリースしてみないとそもそも機械学習モデルが妥当なのか分からない」ため、当に最低限のテストだけで運用を始めることも多く、そのせいで分析寄りのメンバーに必要以上に属人化して負担をかけてしまっているように思います。 今回は後輩や同僚のエンジニア or データサイエンティスト向けに、「pytestを使ってメンテナンス性よくPythonを使ってこうぜ!」って布教するための記事です。 今回の記事に使ったライブラリのバージョンはこちらです。もしバージョンが違う場合、挙動が違う場合があるので必要に応じて調べてください。 $ python -V Python 3.6.5 $

    pytestとpytest-mockでPythonのユニットテストを始めよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest: Rspec等と比べると、そのままPythonのコードとして自然に読めます / 条件分岐を入り組んだ関数やメソッドに対して、ディシジョンテーブルなどを使ってテストコードを書くだけでも意外と仕様漏れが見つかったり" 2018
  • Poetryとtoxを組み合わせてPythonのテストコードを動かす - Qiita

    この記事はLIFULL Advent Calendar その3の遅れてきた16日目の記事です。 今までPythonの開発にPipenvを使っていたのですが、こちらの記事「Poetryを使ったPythonパッケージ開発からPyPI公開まで」読んで、Poetryというツールが気になっていました。 Poetryの便利なところは、パッケージをビルドした際にこの設定がそのまま setup.py の console_scripts として記述される。ビルドする時にコマンドとして実行できるようにあらためてsetup.pyを書く必要がない。 そのテストも兼ねて、社内用のPythonライブラリをPipenvからPoetryに移行してみました。また、Rustを少し触っていて遊んでいた(コンパイルが通らずに泣いていた)ときに、開発ツールのcargoが洗練されていて羨ましかったのですが、それに使い勝手が近そうな印

    Poetryとtoxを組み合わせてPythonのテストコードを動かす - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Rustを少し触っていて遊んでいた(コンパイルが通らずに泣いていた)ときに、開発ツールのcargoが洗練されていて羨ましかった / toxを通常実行すると、その都度setup.pyを読み込んでインストールする" 2018
  • コードを1行も書かずにpytestを実行する - Qiita

    pytest-playとは コードを書かずにテストできる テストコードは必要だけど作るのは大変ですよね。まるで確定申告のようです。 pytest-playはYAMLファイルを書くだけでテストを実行できるライブラリです。 コードを書く必要がないため、プログラマじゃない人にテストの委託もできそうです。 機能 下記のような機能があります。 実行時間の計測 JUnit XML report StatsD/graphiteを用いたテストメトリクスの監視 プラグイン play_selenium play_requests play_sql play_cassandra play_dynamodb play_websocket play_mqtt play_requestsやplay_seleniumを使うと、DjangoやFlaskなどのWebサーバのテストが行なえます。WebサーバはPython製で

    コードを1行も書かずにpytestを実行する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-playはYAMLファイルを書くだけでテストを実行できるライブラリ / play_requestsやplay_seleniumを使うと、DjangoやFlaskなどのWebサーバのテストが行なえます / Railsなどで作られたWebサーバでも構いません" 2019
  • pytest でモジュールコードとテストコードをディレクトリで分離して unittest を実行するには? - Qiita

    pytest でモジュールコードとテストコードをディレクトリで分離して unittest を実行するには?Pythonpytest やりたいこと pytest を使って unittest を実行したい プロダクトコードとテストコードはディレクトリで分けたい まさに参考リンクのイメージ 実行時は python -m pytest とかで勝手に test_XXX を discover して実行してほしい 上手くいかないこと 参考リンクの通りで、class_module.py の imoprt class_BaseModule で ModuleNotFoundError になる テスト対象スクリプトから同ディレクトリ内の別モジュールを素でimportしていて、これが見つからない 解決法にある sys.path.append() って全テストコードの先頭に書くの?しかもモジュールコードまでの相対パ

    pytest でモジュールコードとテストコードをディレクトリで分離して unittest を実行するには? - Qiita
    sh19910711
    sh19910711 2024/06/17
    "モジュールとしてきちんとディレクトリ分けてテストを管理したいなら、pytestにあるようなプラクティスに従おう / テストの準備が簡単にできるようなスケルトン生成ツールみたいなのはあってもいいんじゃないか" 2019
  • pytestで1ファイル/1テストだけ実行したい(他よく使うオプション) - Qiita

    import unittest class TestExample(unittest.TestCase): def test_example_ok_pattern(self): actual = True expected = True assert actual == expected

    pytestで1ファイル/1テストだけ実行したい(他よく使うオプション) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest実行時に便利なオプション / --lf: 最後にコケたテストだけ実行する / -x: テストが1つでもコケたらそこでテスト実行を止める / -vv: テストがコケた時に結果を詳細に表示する" 2019
  • pytest でパラメータを替えて生成したインスタンスのメソッドをテストしたい - Qiita

    Overview インスタンス生成時の引数と、期待する結果だけ指定すれば、テーブルドリブンテストが走るようにしたかった。 @pytest.mark.parametrize の indirect 引数に関数名を指定すると fixture のパラメータ化ができるらしいので、 テストのパラメータ化と合わせて、こんな感じ。 import pytest class Sample: """これをテストしたい""" def __init__(self, val): self._val = val def m1(self): return self._val[:2] def m2(self): return self._val[2:7] def m3(self): return self._val[7:10] def f(self): return len(self._val) == 10 # テストする

    pytest でパラメータを替えて生成したインスタンスのメソッドをテストしたい - Qiita
    sh19910711
    sh19910711 2024/06/17
    "インスタンス生成時の引数と、期待する結果だけ指定すれば、テーブルドリブンテストが走るようにしたかった / pytest.mark.parametrize の indirect 引数に関数名を指定すると fixture のパラメータ化ができる" 2019
  • pytestのテスト関数にパラメータつけてみる(parametrize, pytest_generate_tests) - Qiita

    pytestのテスト関数にパラメータつけてみる(parametrize, pytest_generate_tests)Pythonテスト自動化pytest 単体テスト書いてますか? めんどくさくてサボりがちになってしまいますが。ていうか、サボってますが。今後もコードを触る可能性があるなら、単体テストを書く作業は必ずペイします。低リスク、利益率数百パーセントという夢のような投資です。 これ読みに来てる人は、そんなの分かってると信じて。 テストコードをコピペする作業に飽きた人のために、pytestのテスト関数にパラメータ付けをしてみます。 今回は、私が開発している量子コンピュータ用ライブラリBlueqatで実際に使われているテストコードから、実際の例を抜き出してみます。 pytest.mark.parametrizeを使う 見た方が早いので、いきなり実例です。 @pytest.mark.par

    pytestのテスト関数にパラメータつけてみる(parametrize, pytest_generate_tests) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "単体テストを書く作業は必ずペイします。低リスク、利益率数百パーセントという夢のような投資 / テストのあるディレクトリにconftest.pyというファイルを作り、そこにpytest_addoptionという関数を定義" 2019
  • AWS Chalice で実装したアプリケーションのユニットテスト - Qiita

    AWS Chalice とは AWS SDK for Python を開発するチームによってメンテナンスされている、AWS Lambda に展開するアプリケーションを実装するための Python のマイクロフレームワークです。 ビルトインされている @api.route, @app.on_s3_event などのデコレータを用いて関数を実装し、CLI で簡単にそれらを実際に AWS 上に展開することが出来るようになります。 例えば、chalice CLI の中にある chalice new-project コマンドでプロジェクトの雛形を作成するとこのような実装が生成されます。 from chalice import Chalice app = Chalice(app_name='test') @app.route('/') def index(): return {'hello': 'wo

    AWS Chalice で実装したアプリケーションのユニットテスト - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Chalice: AWS SDK for Python を開発するチームによってメンテナンスされている、AWS Lambda に展開するアプリケーションを実装するための Python のマイクロフレームワーク / デコレータを用いて関数を実装" 2019
  • PytestでPublic関数をMockする方法 - Qiita

    こんにちは、セールで買った某M○Proteinの「ほうじ茶ラテ味」プロテインが海老の出汁みたいな味で飲めないこの頃です(なに さて弊社のDjangoサーバーのAPIはテストで120%カバレッジするというという方針のもと、日々テストコードを実装コードの倍ぐらい書いていく作業をしています。そんな中で日は「Helperクラスで実装したPublic関数をどうやってAPI経由でテストするか(そしてどこで詰まったか」についてざっくりと紹介します。 テストしたい実装内容 実装した関数は以下の2つです(投稿用に関数名などはダミーにしています、またsetting.pyやurls.pyは別途設定済みです) from rest_framework.views import APIView from app.helper import helper_foo from app.models import Hoge

    PytestでPublic関数をMockする方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "テストで120%カバレッジするというという方針 / 日々テストコードを実装コードの倍ぐらい書いていく / UnittestのMockモジュールにあるpatchで以下のように関数をモック化できる" 2020
  • pytestのmarkを使って一部のテストをデフォルトで実行しない方法 - Qiita

    状況 毎回は実行したくないテストをpytestで書いている(エンドツーエンドテスト、負荷テストなど)。 引数なしのpytestコマンドだけで、必要なテストが実行できると便利。 問題 pytestに引数を付けないと、すべてのテストが実行されてしまう。 負荷テストなどを選択して実行するときは、簡単な引数だと嬉しい。 解決方法 pytest.markを使って、普段実行しないテストをマークする(印を付ける)。pytest.iniで、マークしたテストを実行しないように設定する。 some_test.py: import pytest def test_something(): ... def test_another(): ... @pytest.mark.performance def test_performance(): ...

    pytestのmarkを使って一部のテストをデフォルトで実行しない方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "毎回は実行したくないテスト / 引数なしのpytestコマンドだけで、必要なテストが実行できると便利 / pytest.markを使って、普段実行しないテストをマークする(印を付ける)" 2020
  • [Python] pytestで処理の遅い箇所を可視化して特定する - Qiita

    プロジェクトのテスト数が増えてくるとCI回すのも遅くなるし、ローカルでこまめにテスト回すぞっていうときもストレスは増えていきます。テストが1万件もあればしょうがないかな、という気にもなりますが、時に「あれ、なんかやたら遅いテストケースがあるぞ?」ということもあります。テストが遅い原因がプロダクトコードにあるのであればより問題です。 pythonのテストフレームワークはpytestを使っているので、以下pytestの場合はこんなことして遅い処理を探し出しているという備忘録。 主にやったことは以下の2つ。 ① pytestの--durationsオプションで処理時間の大きいテストケースを出力する ② pytest-profilingでプロファイルして処理の遅い箇所を特定 テストコード 記事で使用したテストコードです。1~10000000の整数を順に突っ込んだリストを4パターンの方法で作成して

    [Python] pytestで処理の遅い箇所を可視化して特定する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytestの--durationsオプションで処理時間の大きいテストケースを出力 / pytest-profilingでプロファイルして処理の遅い箇所を特定 / --durations=Nというオプションをつけると、最も遅いテスト+前後の処理N個を実行結果に表示" 2020
  • pytest-htmlでテスト関数のdocstringをレポートに出力する - Qiita

    テスト関数の詳細情報としてdocstringをpytest-htmlのレポートに出力する方法をまとめます。 1. conftest.pyを編集 testsディレクトリ直下のconftest.py(なければ作成)に以下の設定を追記します。 テーブルヘッダーの3列目にタイトル、テーブルボディの3列目にテスト関数のdocstringの情報を挿入しています。 import pytest from py.xml import html def pytest_html_results_table_header(cells): cells.insert(2, html.th('Description')) def pytest_html_results_table_row(report, cells): cells.insert(2, html.td(report.description)) @pyte

    pytest-htmlでテスト関数のdocstringをレポートに出力する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "テスト関数の詳細情報としてdocstringをpytest-htmlのレポートに出力する / testsディレクトリ直下のconftest.py(なければ作成)に以下の設定を追記 / pytest_html_results_table_header + pytest.hookimpl(hookwrapper=True)" 2020
  • 【pytest】をFlask+docker開発で初めて使ってみた - Qiita

    Flask + docker-composeでのWebアプリ開発に初めてpytestを使用しました。 その際のテストファイルと、設定内容をザックリまとめました。 親の記事はコチラとなります。 ■Flask+Docker+Vue.js+AWS...でゲームWebAppを作ってみた。 ■Githubにソースコード公開しています テスト書くとこんなに良い事ある 今まで、テストプログラムを避けていた人生でした 偶然ですが、テストを必要としないプロジェクトばかりで使う機会が無かったといえば言い訳ですが、心のなかで「あー、当はテストとか書いといた方が良いんだろうなー」と思いつつも、重い腰が持ち上がらず。。。 そんな方は、私だけでなく多いと思います! 心機一転でテストを書こうと決心したのは、こんなメリットがあります。 テストコードを書くメリット コード変更した際に、挙動確認が簡単&確実になる。 テスト

    【pytest】をFlask+docker開発で初めて使ってみた - Qiita
    sh19910711
    sh19910711 2024/06/17
    "テストを通すことで、チーム内のエンジニア同士で、問題なく動くことのエビデンスとなる / エラーがいつからどこで、おかしくなったのか、把握することが容易 / チーム内のエンジニア同士の仕様の齟齬を無くす" 2020
  • pythonでpytestを使ってテスト駆動開発するときのディレクトリ構造 - Qiita

    概略 ただの箇条書きです。 一番重要なのは、from ... import ...が出来るかどうかです。 自作モジュールのディレクトリと、 テストモジュールのディレクトリ階層がどちらも深いときに。 3階層以上で挙動が変わるみたいです。 ストーリー 以下の構造のように階層が深い時のサンプルコードが、 ググっても見つからなかったので記事にしました。

    pythonでpytestを使ってテスト駆動開発するときのディレクトリ構造 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "一番重要なのは、from ... import ...が出来るかどうか / Python 3.3以降では、PEP420で定義された名前空間パッケージ(namespace packages)の導入 / __init__.pyがない場合でも、Pythonはそのディレクトリをパッケージとして認識" 2020
  • すぐに pytest 実装したい人向けのチュートリアル - Qiita

    pytest について ここでは pytest についての使用方法について紹介します。ドキュメント読んでたまに頭痛くなるので、頭痛軽減目的で書きます。 pytest とは python でテストできるライブラリです。 pytest xxxx.py と実行することで、xxxx.py に書かれているテストケースを実行することができ、また pytest dddd/ というようにディレクトリを指定することでディレクトリ配下にある テストファイルを全て実行することができます。 なぜ pytest を使用するか? pytest 以外のテスト系ライブラリといえば、標準搭載されている unittest があります。unittest は TestCase というクラスを継承し、それをベースにメソッドを作成することで、それぞれのメソッドに書かれているテストケースを実行することができます。 しかし、unitte

    すぐに pytest 実装したい人向けのチュートリアル - Qiita
    sh19910711
    sh19910711 2024/06/17
    "unittest は TestCase というクラスを継承し、それをベースにメソッドを作成 / サブクラスを作成する必要があったり、かつ.assert のようなメソッドを使用する必要があったりして、結構面倒な実装が求められます" 2020
  • pytestのフィクスチャが便利だった - Qiita

    はじめに 2020年度XTechグループアドベントカレンダーの18日目の記事です。 XTech株式会社のタカクです。 ここ最近Pythonを使って開発をしています。 Pythonには標準のテストフレームワークであるunittestがありますが、私が関わっているプロジェクトでは3rdパーティー製のpytestを好んで使っています。 pytestはテスト失敗時に詳細なメッセージを表示してくれたり、フィクスチャの機能が便利なことから採用しています。 今回はpytestの基とフィクスチャについて書きます。 pytestの基 pytestは3rdパーティー製のテストフレームワークのため、Python標準のunittetとは違い個別でのインストールが必要なのでインストール。

    pytestのフィクスチャが便利だった - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytestはテスト失敗時に詳細なメッセージを表示してくれたり、フィクスチャの機能が便利 / unittestはクラスベースなのに対してpytestは関数ベース / -v/--verbose オプションを付けると詳細なエラーメッセージを表示" 2020
  • [Python] pytest-mock使い方メモ - Qiita

    class MyClassTests: def test_something(self, mocker): pass モックの作り方 モック - Mockを作るには、mocker.Mockを使ってインスタンスを生成するやり方と、mocker.patchを使ってダイナミックにMockインスタンスに置き換えていくやり方があります。 題材として、このようなモジュールがあったとします。

    [Python] pytest-mock使い方メモ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "mocker.Mockを使ってインスタンスを生成するやり方と、mocker.patchを使ってダイナミックにMockインスタンスに置き換えていくやり方があり / mocker.Mock: specとしてクラスを指定することで、クラスに実在する属性のみが生える" 2020
  • pytest-mock についてざっくり紹介 - Qiita

    ここでは簡単に pytest-mock について紹介します。 モックの意義 モジュールや flask アプリをテストしたい場合は、pytest でテストケースを書くとは多々あるかと思います。 しかし、テスト対象に HTTP と外部とコミュニケーションする処理が含まれている場合、どうしますか。 テスト時にエンドポイントを作成したり、あるいはテスト時に if 分岐を作成するという方法があります。しかし、エンドポイント作成するとなるとバックエンド変更しないといけなかったり、if だと実装が煩雑になるという問題が生じます。 そこで登場するのが pytest-mock です。 pytest-mockとは unittest.mock の薄いラッパーです。既存ライブラリや関数等をモック(既存品の模型)するプラグインライブラリで、pytest 時にモックされたオブジェクトの実挙動を回避することができます。

    pytest-mock についてざっくり紹介 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "エンドポイント作成するとなるとバックエンド変更しないといけなかったり、if だと実装が煩雑になる / pytest-mock: unittest.mock の薄いラッパーです。既存ライブラリや関数等をモック(既存品の模型)するプラグイン" 2020
  • Django + jsonrpcserver + Docker Compose で作った JSON-RPC API を pytest-django の parametrize でテストする - Qiita

    Django + jsonrpcserver + Docker Compose で作った JSON-RPC API を pytest-django の parametrize でテストするDjangoDockerjson-rpcユニットテストpytest 以前、Django + jsonrpcserver + Docker Compose で作った "JSON-RPC 2.0" 準拠の API 動作環境に関する記事を投稿しました。 →「Python の jsonrpcserver ライブラリを使ったら Django が JSON-RPCAPI サーバになった」 今回はこの環境に pytest を追加して parametrize で複数パターンの一括テストを行い、またテストクライアントの IP アドレスを偽装してみます。 pytest を使う(unittest ではなく) Python

    Django + jsonrpcserver + Docker Compose で作った JSON-RPC API を pytest-django の parametrize でテストする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "parametrize で複数パターンの一括テスト / Django では unittest が標準のユニットテストフレームワークですが、ここではサードパーティの pytest と pytest-django をインストールして使用" 2021
  • pytestでデバッグする際の個人的頻出オプション - Qiita

    def test_success(): assert(1+2) == 3 def test_success2(): assert(2+3) == 5 def test_failed(): assert(1+2) == 4

    pytestでデバッグする際の個人的頻出オプション - Qiita
    sh19910711
    sh19910711 2024/06/17
    "-k: 特定のテストケースを実行する / -s: printを出力する / --pdb: テスト失敗時にデバッグモードにする / テストがpassするとテストケースの中に記述したprint文はコンソール上に出ない" 2021
  • pytestのtest IDにパラメータ由来の日本語を使う方法 - Qiita

    TL;DR pytestのtest IDにパラメータ由来の日語を真っ当に表示するためには pytest.ini で disable_test_id_escaping_and_forfeit_all_rights_to_community_support をTrueに設定する必要がある これを設定するとidsを指定すればきちんと表示されるようになるが、個別のidを設定すると表示が崩れる 何がしたかったか パラメタライズドテストでパラメータごとに分かりやすい名前を日語で付けたかった。 例えば、 @pytest.mark.parametrize( "param", [True, False], ids=["真", "偽"], ) def test_テスト(param: bool): assert param このようなテストでは、 test_テスト[偽] - assert False と出力

    pytestのtest IDにパラメータ由来の日本語を使う方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "パラメタライズドテストでパラメータごとに分かりやすい名前を日本語で付けたかった / パラメータ由来の日本語はエスケープされた状態で出力されてしまう / 一部のUnicodeの扱いに難がある環境に配慮" 2021
  • 【Python】モダンなツール群でゼロからパッケージ開発 - Qiita

    概要 自分の知識が昔読んだ初版の『入門Python3』から更新されていないことに危機感を覚え、一念発起でモダンなツール群を調べた際の備忘録。以下のツール群1を駆使してゼロからパッケージを開発し、PyPiへの公開までやってみる。コードはGitHubに置いておくので、誰かの参考になれば。 Poetry pytest mypy Black Flake8 題材 手の込んだパッケージを作るのが目的ではないので、今回はシンプルにNPS (Net Promoter Score)を計算するパッケージを作ってみる。利用イメージは以下。 import npspy npspy.categorize(10) # "promoter" npspy.calculate([0, 7, 9]) # 0

    【Python】モダンなツール群でゼロからパッケージ開発 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "自分の知識が昔読んだ初版の『入門Python3』から更新されていないことに危機感 / コードを書き始める前に、まずはいい感じのディレクトリを作りたい。これはPoetryに任せる / 今後のために型テストも導入" 2021
  • [Python]Page Object Modelパターンを用いたSelenium テストの記述方法メモ - Qiita

    Page Object Modelパターンを利用したSeleniumテストの記述方法についてメモする。 POM(Page Object Model)とは ページをクラスオブジェクトとして扱うブラウザ自動化テストのデザインパターンの一つ。 主な概念 テストクラス 対象ページのテストケース。 ページオブジェクト 各Webページオブジェクトを作成することを目的としたクラス。 テスト用コードとWebページアクセス用コードを分離。 ロケータ ページ要素を取得させる。 利点 可読性の高いテストケースを書くことができる。 複数のテストケース間で共有できる再利用可能なコードを作ることができる※コード重複を防ぐことができる。 構成 root - TestBase.py |_ test_GoogleSearch.py |_ chromedriver.exe |_ Pages -- google_page.py

    [Python]Page Object Modelパターンを用いたSelenium テストの記述方法メモ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "ページをクラスオブジェクトとして扱うブラウザ自動化テストのデザインパターン / ページオブジェクト: テスト用コードとWebページアクセス用コードを分離 / 可読性の高いテストケースを書くことができる" 2021
  • GitHub Actionsを用いた自動テストの実行と結果集計 - Qiita

    1. はじめに GitHub Actionsを用いて自動テストの実行と結果の集計を行う方法を説明します。 具体的には、ソースコードがGitHubへpushされたタイミングで、pythonで書かれたテストをpytestを使って実行し、GitHub上に下図のサマリを表示します。 今回、GitHub Actionsを初めて使ったので、学習のためにGitHub Actionsの基についても触れています。 2. GitHub Actionsとは GitHubのCI/CDツール。 push, pull requestなどのGiHub上のアクティビティやスケジュールした時間、外部イベントをトリガーとして、ワークフローを作成できます。 特徴 Linux, macOS, Windowsすべてのコンテナに対応 Node.js, Python, Java, Rubyなど、様々な言語に対応 複数のジョブを並行し

    GitHub Actionsを用いた自動テストの実行と結果集計 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "VSCodeの場合、GitHub Actionsという拡張機能を使うとよい / サードパーティ含むアクションのライブラリが充実していて、思ったよりもゴリゴリコマンドを書く必要がない印象" 2021
  • 【FastAPI】テストケース毎に独立したDBデータを使用する(GitHub Actions付き) - Qiita

    ORMと連携した機能のテストを行う際、テストケース(= テスト関数)毎にクリーンなデータベースが欲しい(テストケース間の依存関係が生まれてほしくない)。 この点についていい感じの方法が実現できたためご紹介する。 参考(一部重複内容あり) FastAPIでテスト用のクリーンなDBを作成してpytestでAPIUnittestを行う 記事のソースコード:skokado/fastapi-tutorial 環境 Python: 3.8 fastapi==0.68.2 SQLAlchemy==1.4.25 SQLAlchemy-Utils==0.37.8 pytest==6.2.5 factory-boy==3.2.0 アプリケーション準備 ユーザ認証とブログ管理を行う簡単なアプリケーションを用意する。 ※アプリケーション体のコードは割愛するためリポジトリを参照 ※ディレクトリ構成 . ├──

    【FastAPI】テストケース毎に独立したDBデータを使用する(GitHub Actions付き) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "クリーンなデータベースが欲しい / テスト用データベースを使用する設定をconftest.pyに仕込んでおき、データベースをfixtureとして使用できるようにしておく / ポイントはdbフィクスチャのスコープをfunctionとしている点" 2021
  • [pytest] monkeypatchを広いスコープで使う - Qiita

    はじめに pytestで単体テストを書いているときに以下のようなエラーに遭遇したことはないでしょうか。 ScopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'module' scoped request object, involved factories この記事では、このエラーについて解説し解決策を示します。 エラーの解説 エラーメッセージに書いてある通り、functionスコープのfixtureであるmonkeypatchをより広いmoduleスコープで使おうとしたことによって、スコープがあっていないよ!と言われています。 pytestではfixtureの中で別のfixtureを入力として受け取り、使用することができます。この時気をつけなくてはいけないのは、fixt

    [pytest] monkeypatchを広いスコープで使う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytestではfixtureの中で別のfixtureを入力として受け取り、使用することができます / 気をつけなくてはいけないのは、fixtureの「スコープ」という概念 / 狭いスコープのfixtureをより広いスコープで使うことはできません" 2021
  • pytestのfixtureを引数付きで実行して戻り値を返却して後処理をする方法 - Qiita

    pytestのfixtureを引数付きで実行と戻り値の返却をして後処理をする際に少しつまづいたので、備忘録として残しておく。 はじめに 以下のやり方は、分かっていたが、戻り値を返却した後、テスト後の処理を追加する方法がわからなかった 後処理を実行する方法 @pytest.fixture def setUp(): print('start') yield print('end')

    pytestのfixtureを引数付きで実行して戻り値を返却して後処理をする方法 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytestのfixtureを引数付きで実行と戻り値の返却をして後処理をする / yield でメソッドを返却してその後に後処理を行う" 2021
  • ユニットテスト大事なのでちゃんと勉強した話 - Qiita

    まえがき 私は、弊社の案件で運用しているAIシステムで、主にバッチ処理を定期的に動かしたり、リリースを管理したりと、アルゴリズム開発というよりは主にインフラ側の保守を担当しています。 納期が短かったため、開発当時は「番環境でバッチが動けばオッケー牧場!」というマインドで運用していました。 事前テストも、あらかじめ番環境に近い環境で動かして、正常に動くことを目視確認していました。 当は、モジュールも1つずつテストしたいんですよね。 なんでテストが必要なの? でも、テストって、ぶっちゃけめんどくさいですよね、書くの。 コードの実装がすでに頭に浮かんでいて、さっさと実コードを書いてしまいたい場合が多いと思います。 「動いてんだからいいじゃん!」実際、私もそうでした。 しかし、ことデータシステムにおいては、次のようなケースがよくあることがわかりました。 タイムゾーン無しの時刻型で処理していた

    ユニットテスト大事なのでちゃんと勉強した話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "エラーは、主に「プログラム自体の間違い」か「メモリ枯渇や権限などのインフラ的な問題」 / テストが間違っていて、リリース後に不具合が発生した場合は、テストケースを追加して、それが通るように修正" 2021
  • PySide & Pytest での テスト駆動開発 スタートアップ - Qiita

    はじめに PySide勉強会での、「PySide & Pytest で テスト駆動開発スタートアップ」の補足記事。 および、PySideとPytestでテスト駆動開発をするためのメモ。 開発環境 Windows 10 Python 3.7.7 Pytest サンプルファイル GitHub 初期整備 ディレクトリとファイルの準備 root |- sample | |- __init__.py | |- gui.py |- tests | |- __init__.py | |- conftest.py | |- unit | |- test_gui.py |- requirments.txt import sys from PySide2 import QtCore from PySide2 import QtWidgets class SampleDialog(QtWidgets.QDial

    PySide & Pytest での テスト駆動開発 スタートアップ - Qiita
    sh19910711
    sh19910711 2024/06/17
    "PySideは、QtTestという機能をあらかじめ用意しており、これを使用することでGuiの挙動をシミュレートできる / QtTest.QTest.mouseClick: 『ボタンをクリックすることによって』というのをテスト上でシミュレート" 2021
  • テンプレートエンジン Handlebars を Rust で扱う - Qiita

    はじめに Tauri のインストーラースクリプト作成に Hnadlebars が使われているのを見かけた。 今後 Rust でのテンプレートエンジンはどれにしようかなとも思っていたのと、Hnadlebars 自体は初めてなので、挙動や書き方をメモろうと思ったのでこのポストを書く。 確認環境 handlebars 5.1.2 Windows 11 Pro 23H2 Rust 1.77.2 導入 use handlebars::Handlebars; use serde::Serialize; #[derive(Serialize)] struct Data { world: String, } fn main() { // オブジェクトを作成 let mut handlebars = Handlebars::new(); // 代入するための構造体を作成 let data = Data {

    テンプレートエンジン Handlebars を Rust で扱う - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Rust でのテンプレートエンジン / Tauri のインストーラースクリプト作成に Hnadlebars が使われているのを見かけ / Handlebars 自体は色んな言語環境で使われている様子だし、そんなに書き方も違和感を感じない"
  • pytest mark を使用した実行するテストの絞り込み - Qiita

    #!/usr/bin/env python import calc def test_add(): assert calc.add(6, 3) == 9 def test_sub(): assert calc.sub(6, 3) == 3 def test_adds(): assert calc.adds(6, 3, 1) == 10 $ pytest ========================== test session starts ========================== platform linux -- Python 3.8.3, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 rootdir: /home/username/calc collected 3 items test_calc.py ...... [100%] ====

    pytest mark を使用した実行するテストの絞り込み - Qiita
    sh19910711
    sh19910711 2024/06/17
    "簡単にテストが実行出来て便利ですが、時と場合によっては全部のテストを行いたくない / pytest.mark: 用途別にテストを実行したい場合に有用 + 数種類使用する場合は、makefile にコマンドとして記載しておくと便利" 2021
  • PythonのFastAPIをLambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り) - Qiita

    PythonFastAPILambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り)PythonunittestpytestSQLModel はじめに Pythonデータ分析スクレイピングや画像認識などをやっているのですが、Webアプリのバックエンドとして仕事格的に利用したいと思い、いろいろ調べてみると、AWSLambdaFastAPIを動かすとの話題が多く目に留まり、ふむふむ、と進めていくと、SQLModelも一緒に利用したいと思い、半日ほど試行錯誤してみたのでまとめてみたいと思います。 ソースはgithubに登録しております。 SQLModelの概要 SQLModelは、直感的で使いやすく、互換性が高く、堅牢になるように設計されており、Pythonの型アノテーションに基づき、PydanticとSQLAlchemyを利用して

    PythonのFastAPIをLambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "SQLModel: Pythonの型アノテーションに基づき、PydanticとSQLAlchemyを利用 + 直感的で使いやすく、互換性が高く、堅牢になるように設計 / async sessionにも対応しており、FastAPIと一緒に利用すると作業が捗りそう" 2022
  • [Python]コードサンプルが正しく動くことを担保し続けるためのdoctest入門 - Qiita

    最近自作Pythonライブラリでがっつりdoctestを使い始めたので記事にまとめておきます。 doctestってなに? dostring内に書くコードサンプルを実際にPythonで動かしてエラーにならないことや返却値が正しいかどうかをチェックすることができる機能です。 ※docstringについては必要に応じて以下の記事などをご確認ください。 ※Rustなどにも似たような機能がビルトインで入っています。 doctestを書くとなにが嬉しいの? docstringにコードサンプルが載っているとユーザーがエディタ上などでさくっと使い方を確認できてユーザーフレンドリーです。 一方で書いただけだとそのコードサンプルはテストやLintでチェックされるわけではありませんので正常に動作しないケースが発生し得ます。書いたときは動いていても日々のアップデートでいつの間にか動かなくなってしまうこともあるかも

    [Python]コードサンプルが正しく動くことを担保し続けるためのdoctest入門 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "doctest: dostring内に書くコードサンプルを実際にPythonで動かしてエラーにならないことや返却値が正しいかどうかをチェックすることができる機能 / pytestはdoctestの機能を有している" 2022
  • pytest(主に pytes-mock)のモックについて、ややこしいと思ったこと - Qiita

    はじめに pythonとユニットテストについて学び始めたのでメモを残す。 誤りや意見などあれば、是非お願いします。 今回は、osモジュールを例にモックするパターンを考えていこうと思う。 大きく2つに分けて、下記パターンを考える。 mocker.patch()でモジュールの対象メソッドをモックする mocker.patch.object()でモジュールの対象メソッドをモックする (オプション)monkeypatch.setattr()でモックする また、from ~ importを利用する場合の考慮点も書いてみる。 boto3 モジュールのモックについても余力があれば書きたい。 学習する中で思ったこと pythonのユニットテストは、そこそこ種類(名前が違うだけで動作はほぼ同じはず)があり混乱した。 このstackoverflowの内容に共感した。 テスト関係のモジュール pytest py

    pytest(主に pytes-mock)のモックについて、ややこしいと思ったこと - Qiita
    sh19910711
    sh19910711 2024/06/17
    "from os.path import joinこんな感じでインポートしたとき、テストコード側も変わる / 対象のモジュールがオブジェクトとしてインポートされていることを意識することが大事 / サポートしているならmotoを使う" 2022
  • テストの並列実行に使うpytest-xdistの便利な使い方まとめ(主にUIテスト向け) - Qiita

    pytest-xdistとは pytest-xdistはテストの並列実行・分散実行に使うpytestのプラグインです。 これをインストールし、実行時に並列ノード数をオプションとして渡すだけで、勝手にテストを振り分けて実行してくれます。 記事ではpytest-xdistを実際に使ってみて分かった便利な使い方、オプションなどをメモとしてまとめます。 なお、私はpytestをユニットテストではなく、主にSeleniumやPlaywrightを使ったUIテスト用途に利用しているため、それに特化した内容になっていることをご承知おきください。 内容は随時更新します。 インストール pip install pytest-xdist テストの並列実行 pytest -n 4 test.py -nのあとにテストを並列実行するノード数(ワーカー数)を入力します。 数値の代わりにautoを指定すると利用可能な

    テストの並列実行に使うpytest-xdistの便利な使い方まとめ(主にUIテスト向け) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-xdist: テストの並列実行・分散実行に使うpytestのプラグイン / pyproject.tomlを作成し、以下のように記載することで毎回のオプション入力を省略 / --dist each: 全ノードで同じテストを実行" 2022
  • pytestで曖昧だったこと(Mock,spec,wrap) - Qiita

    はじめに 自作のclassをモックする際に、調べたことをメモる。 クラス自体をモックする mocker.patch(’モジュール名.Class名’, autospec=True) でモックする 返り値にmockオブジェクトが取得できる return_value, side_effect, assert_called系メソッドが利用できる autospecを利用することで、モック対象のClassの属性・操作を模倣できる。定義なしにアクセスすると例外発生させることができる。 mock = mocker.Mock(spec=モジュール名.Class名) で一回、mockを定義する そして、mocker.patch(’モジュール名.Class名’, mock) でモックする このときpatchからの返り値もモックオブジェクトが取得でき、第2引数で指定したmockと同一変数 mocker.patch

    pytestで曖昧だったこと(Mock,spec,wrap) - Qiita
    sh19910711
    sh19910711 2024/06/17
    "mocker.patch: 返り値にmock + return_value, side_effect, assert_called系メソッド / autospecを利用することで、モック対象のClassの属性・操作を模倣 / wraps: 実際のモック対象のメソッドが呼ばれる" 2022
  • ざっくり分かるpytestのfixture - Qiita

    pytestにおけるfixtureとは テストの事前処理、事後処理を記載できるpytestの機能です。 SetUp(事前処理), TearDown(事後処理)を1つの関数で書けます。 setup_class, setup_functionのように、スコープごとに違う関数を呼ぶ必要がありません。 fixtureからfixtureを呼び出すことができ、処理を階層的に記述できます。 SetUp, TearDownじゃダメなの? ダメかと言われるとダメじゃありません。チーム内でスタイルが統一されている方が大事です。 機能面だけで言うと、pytestにおいてはfixtureを利用する方がリッチではあります。 ブラウザ操作自動化ツールであるPlaywright for Pythonはfixtureを利用しています。 上記を採用する場合、可読性と保守性の観点からfixtureに統一することを勧めます。

    ざっくり分かるpytestのfixture - Qiita
    sh19910711
    sh19910711 2024/06/17
    "fixture: SetUp(事前処理), TearDown(事後処理)を1つの関数で書けます + setup_class, setup_functionのように、スコープごとに違う関数を呼ぶ必要がありません / fixtureからfixtureを呼び出すことができ、処理を階層的に記述" 2022
  • pytest fixtureでユニットテストの前処理をする - Qiita

    Pytestによるテスト実行前に「環境設定をテスト用に差し替えたいなあ...」と思うことがありました。(接続先データベース等) pytestコマンドの実行前に手動で環境変数を書き換えることも可能ですが、煩わしいので自動化したいです。 そこで今回はpytest fixtureでテストの実行前に自動で環境変数を書き換えました。 pytest fixtureを使えばテストの実行前に特定の処理を自動で実行することができます。 環境 Python3.8.10 pytest flask ソースコード from http.client import BAD_REQUEST, INTERNAL_SERVER_ERROR, NOT_FOUND from dotenv import load_dotenv from flask import (Flask) from app.presentation.shar

    pytest fixtureでユニットテストの前処理をする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "環境設定をテスト用に差し替えたい / fixtureでテストの実行前に自動で環境変数を書き換え / デコレータをつけた関数がテストコードの前に実行 + 引数により実行タイミングや自動実行の有無を設定" 2022
  • Playwright for PythonでPytestコードが生成できるようになった - Qiita

    サマリ Playwright for PythonのVer.1.22からPytestコードが生成(codegen)できるようになっています。 記事ではPlaywrightのインストールからPytestコードの生成までを試します。 Codegen now supports generating Pytest Tests インストール > playwright codegen --help Usage: playwright codegen [options] [url] open page and generate code for user actions Options: -o, --output <file name> saves the generated script to a file --target <language> language to generate, one

    Playwright for PythonでPytestコードが生成できるようになった - Qiita
    sh19910711
    sh19910711 2024/06/17
    "Playwright for PythonのVer.1.22からPytestコードが生成(codegen)できるように / Recordボタンが赤になった状態でブラウザ操作をすると自動でPytestのコードが記載 / PWDEBUG: Playwright Inspectorをデバッガとして起動" 2022
  • GraphQL Meshを使ってMySQLのDBをGraphQLで操作してみる - Qiita

    はじめに GraphQL Meshとは複数のバックエンドサービスを束ねるGraphQLゲートウェイを構築するためのフレームワークです。GraphQL Mesh自体についての詳細は、数多くの記事が世の中にあるため省きます。 今回はGraphQL Meshを利用して、MySQLをラップしてGraphQLで扱う方法について試していきます。GraphQL Meshを経由して扱うことで、スキーマを自前で用意せずに既に存在するDB情報から自動で生成して取り扱うことができるようになります。 ローカルで動かすまでの手順 今回はローカルのdevサーバーとしてGraphQL Meshを立てて、任意のMySQLDBを操作するところまで試します。 準備しておくもの ローカルからアクセス可能なMySQLサーバー 検証用に適当なデータベースとテーブルを作っておく 今回はMySQL8.0を使っています 必要なパッケー

    GraphQL Meshを使ってMySQLのDBをGraphQLで操作してみる - Qiita
    sh19910711
    sh19910711 2024/06/17
    "GraphQL Mesh: 複数のバックエンドサービスを束ねるGraphQLゲートウェイを構築するためのフレームワーク / スキーマを自前で用意せずに既に存在するDB情報から自動で生成して取り扱うことができる" 2023
  • GraphQL クライアントではクエリインジェクションに注意しよう - Qiita

    発端 GraphQL API の利用者から API クライアントのコードレビューに付き合ってほしいと言われたので出席したんですが、とんでもない実装になっていて腰を抜かしてしまったので、注意喚起しようかなと。 はじめに結論 クエリの一部にユーザ入力を文字列連結するのはやめましょう! 動的パラメータは variables で指定しましょう。 variables の指定例は以下を参照。 https://graphql.org/learn/serving-over-http/#post-request ポピュラーな GraphQL クライアントであれば、 variables に当たる変数を渡すことができるインタフェースが用意されていると思います。 インジェクションが起きる仕組み 実装言語は何でも良いです。 以下のような API クライアント実装があるとします。 const userInput =

    GraphQL クライアントではクエリインジェクションに注意しよう - Qiita
    sh19910711
    sh19910711 2024/06/17
    "クエリの一部にユーザ入力を文字列連結するのはやめ / 動的パラメータは variables で指定しましょう / ポピュラーな GraphQL クライアントであれば、 variables に当たる変数を渡すことができるインタフェースが用意されて" 2023