タグ

2024年6月16日のブックマーク (361件)

  • PostgreSQLとPostGraphileでサクッとGraphQLエンドポイントを作成する - Qiita

    ゆめみ その2 Advent Calendar 2019 23日目の記事です。 はじめに PostgreSQL のスキーマ情報から、自動的にGraphQLエンドポイントを作成する PostGraphile というツールを見つけたので試してみました。 PostGraphile https://www.graphile.org/postgraphile/ PostGraphile とは PostGraphile は PostgreSQL のテーブル、列、インデックス、リレーションシップ、View、型、関数、コメントなどを自動的に検出し、GraphQL APIを提供する Node.js 製のオープンソースソフトウェアです(以前は「PostGraphQL」と呼ばれていました)。 基的な使い方としては PostgreSQL を用意して、コマンドラインから postgraphile コマンドに引数を

    PostgreSQLとPostGraphileでサクッとGraphQLエンドポイントを作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "PostGraphile: テーブル、列、インデックス、リレーションシップ、View、型、関数、コメントなどを自動的に検出 + 自動的にGraphQLエンドポイントを作成 / DB定義を更新すると、GraphQLスキーマが自動生成される" 2019
  • Goで始めるGraphQL Federation - Qiita

    この抜粋の内容は次のとおりです。 Subgraph Server の実装 Gateway Server の実装 Subgraph を通す Gateway を通す さらに詳しく知りたい方は読み続けてください。 2023年7月4回目です。 GraphQL Fedetaion についてです。 弊社のモバイルアプリの1つは、ユーザーのネットワーク帯域幅による影響を避けるため、GraphQL を BFF として使っています。 単一ドメイン業務においては、1つの GraghQL で問題ないと思います。 しかし、複数のドメイン業務を扱う場合、各チームは独立して自分たちの GraphQL サービスを開発するため、Supergraph(GraghQL Federation)1 にしていく必要があると思います。 現在弊社の第1言語は、Go です。Go による GraphQL Federation について見て

    Goで始めるGraphQL Federation - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Go による GraphQL Federation + Gateway として、Bramble / 複数のドメイン業務を扱う場合、各チームは独立して自分たちの GraphQL サービスを開発するため、Supergraph(GraghQL Federation)にしていく必要がある" 2023
  • GraphQLのSchemaを元にサクッとモックサーバーを作る - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    GraphQLのSchemaを元にサクッとモックサーバーを作る - Qiita
    sh19910711
    sh19910711 2024/06/16
    "msw: リクエストをインターセプトし、モックのレスポンスを返す / typescript-msw: クライアントで定義したquery/mutationから型セーフなmswのhandlerを自動生成 / graphql-codegen-typescript-mock-data: Schemaからデータ自動生成" 2023
  • ヘキサゴナルアーキテクチャでハイブリッドな GraphQL + REST API ゲートウェイを実現する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 書きたいことを詰め込んだらタイトルが長くなってしまいました。 インフラ、フロントエンドと記事を書いてきたのでようやくバックエンドに触れます。 今回もサンプルを用意していますので最後までお付き合いください。 対象読者 マイクロサービス化を見据えたモノリシックアプリケーションを検討されている方 GraphQL サーバーと REST API サーバーのコードを共通化したい方 中規模以上のプロジェクト / プロダクトの技術選定を任された方 Scala や ZIO、関数型プログラミングに興味がある方 注意事項 サンプルはドメイン駆動設計(DDD)

    ヘキサゴナルアーキテクチャでハイブリッドな GraphQL + REST API ゲートウェイを実現する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQL サーバーと REST API サーバーのコードを共通化したい / マイクロサービスを実践することは開発組織の習熟度や所属エンジニアのスキルなど中々ハードルも高く + モノリシックなアプリケーションから始めたい" 2023
  • 比較的簡単にできるGraphQLのパフォーマンス改善 - Qiita

    はじめに 最近フロントエンドの通信をGraphQLに統一すべく頑張っているのですが、元々フロントエンドメインで開発していたのもありパフォーマンス度外視のBFF実装をしてしまいました。今回はGraphQLのパフォーマンス改善のために取り組んだこと2つをまとめていきたいと思います。2つしか書かない分できるだけ丁寧に書いたつもりです。普段BFFをGo言語で実装してるためサンプルコードはGo言語で書きますが、Goがわからない人にもわかりやすく説明するので最後までお付き合いいただけると幸いです。 触れること 取得するフィールドの制限してオーバーフェッチングを防ぐ Dataloaderを利用したN+1問題の解決 触れないこと GraphQLの基礎的なこと スキーマ設計とか 外部ツールを導入して計測をしたりだとか 現状そこまでしてパフォーマンス改善を行なった経験がないため 導入コストが高そうなので今回は

    比較的簡単にできるGraphQLのパフォーマンス改善 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DataLoader: 短い時間内に同じリソースへのアクセスを「バッチ化」することで、複数のリクエストを一度のリクエストにまとめて処理し、データベースへのアクセス回数を大幅に削減" 2023
  • 初めての Relay Connection によるページネーション実装 - Qiita

    前期に初めて Relay Connection を使ったページネーション実装を行いました。 実装要件の制約もあり、その良さを最大限に生かした実装にはならなかったものの、カーソルベースのページネーションの考え方や Connection の仕様など、個人的に新しく学ぶことができました。 実際の実装イメージともに、それらの学びをまとめとして共有したいと思います。 前提 ページネーションの実装方式 そもそもページネーションの実装にはいくつか方法があり、代表してオフセットベースとカーソルベースがよく取り上げられます。 それぞれ得意とすることが異なるため、適材適所で使い分ける必要があります。 オフセットベースページネーション (offset-based pagination) SQL の OFFSET/LIMIT 句を使ったページネーション方式です。 データの先頭から数えて offset で指定した数

    初めての Relay Connection によるページネーション実装 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ページネーション: 一般的にはページ番号を指定して任意のページに遷移させる必要がある場合はオフセットベースのページネーションが使われることが多い / 指定のページに到達するまでの全行を数える必要がある" 2023
  • Goで学ぶGraphQLサーバーサイド(8)ーN+1問題の回避 - dataloaderの導入 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Goで学ぶGraphQLサーバーサイド(8)ーN+1問題の回避 - dataloaderの導入 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "SQLBoilerによって発行されているSQLクエリをログに出力して残すオプションがある / DataLoaderを使って、先ほどのような「Issueの作者(ユーザー)の情報をN回取得するときに、DBにselectクエリがN回飛ぶ」状況を回避" 2023
  • GraphQLとPrismaの連携 - Qiita

    この記事は セゾン情報システムズ Advent Calendar 2023 2日目の記事です。 はじめに GraphQLAPIに関わる部分で、開発者にとっての利便性を向上させてくれるツールだと考えています。 例えば、 クライアント側からのリクエスト過多によるパフォーマンスを改善したい 強固な型安全性を担保したい Swagger的な役割のものが欲しい といったニーズに応えてくれると思っています。 ただし、クライアント側、サーバー側両方との連携が要求されるため考慮することは多くなります。 サーバー側であれば、データベース連携がその1つです。 この部分をなるべくシンプルに連携するために、Prismaを使用して検証してみました。 記事では、GraphQLの基礎について理解を深めるとともに、Apolloを用いてGraphQLサーバーを実装し、Prismaとの連携手順を知ることを目的とします。 前

    GraphQLとPrismaの連携 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "クライアント側、サーバー側両方との連携が要求されるため考慮することは多くなり / なるべくシンプルに連携するために、Prismaを使用して検証してみました / Prisma: Node.jsを対象としたオープンソースORM" 2023
  • flutterでgraphQLを使用してみた(graphql_codegenとgraphql_flutter) - Qiita

    株式会社Neverのkousoです。 株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。 https://neverjp.com/contact/ 概要 最近、graphQLを使用しているので、勉強のためにタイトル記載のパッケージを使用してみました。 色々なパッケージがある中、mutationやqueryをコード生成してくれるgraphql_codegen、キャッシュ機能があるgraphql_flutterが実際に活かせそうだと思ったので使用してみました。 GraphQLAPI 今回はこちらを使用しました デモアプリ 20件取得して、次のページでさ

    flutterでgraphQLを使用してみた(graphql_codegenとgraphql_flutter) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "キャッシュ機能があるgraphql_flutter / query、mutationはgraphql_codegenで自動生成し、Widget内で状態が完結する場合は、hooksとgraphql_flutter、他の画面でも状態管理が必要な場合はRiverpodを使用する" 2023
  • ここがいいよねGraphQL - Qiita

    こんにちは。フリーランスで、主にRailsを使った開発の仕事をしている ymstshinichiro と申します。 直近約3年GraphQLの現場で仕事をしつつ、今年4月からはOpenAPIの現場でも並行で稼働しているのですが、両方を使ってみて個人的にGraphQLのここが良いなと思ったポイントをまとめてみました。 おことわり: 「これからGraphQLを使っていくべきか迷っている」という方へ向けた記事になったので、既にGraphQLをガンガン使いこなしている人には当たり前のことしか書いてないかもです あくまで僕の 好み・主観・経験 に基づく記事なので、その辺考慮の上で読んでいただけると助かります 記事中のサンプルコードはRailsで書かれています GraphQLを使うと自然にCQSに近づく 先日、YOUTRUSTさんが主催する実際のproductionコードを見ながら会話する勉強会 に参

    ここがいいよねGraphQL - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQLを使うと、単一のエンドポイント (/graphql) -> Query || Mutation -> それぞれの Resolver と辿ることで、CQSに近いUseCaseレベルでの分離 / モデルにロジックを書かず、更新とバリデーションは常にCommandから通す" 2023
  • FirestoreからRDBへの移行を支える技術 - Qiita

    ビットキーではこれまでメインのDBとしてFirestoreを使ってきましたが、現在RDBへの移行を進めています。 移行の理由としては、主にビジネス上のドメインが広がり、Firestoreにおける検索性能の弱さがネックになってきたことが挙げられます。 これまで検索性を補完するためにElasticsearchやAlgolia、検索用途のRDBなどを併用してきましたが、メインDBRDBとすることで基はサブのDBなしに運用できるようにしていきたいと考えています。 今回はオフィス領域のプロダクトである workhub において移行を進める際に、どのように実装したのかについて紹介します。 方針 今のところ、Pubsub等の非同期は使わずに同期的にRDBへデータを同期しています。 これは書き込み直後の整合性を重視するためです。 移行の単位は基(一部の仕様整理まで踏み込んだもの以外)はコレクション単

    FirestoreからRDBへの移行を支える技術 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Firestoreをサポートしている Google Cloud の Dataflow を検討 / Javaを書かないといけないとなるとチーム内でスケールに時間がかかることからDataflowの採用は見送りました + 自前でETLを行う" 2023
  • Apollo ClientでのSuspense対応について - Qiita

    これは GLOBIS Advent Calendar 2023 10日目の記事です。 はじめに こんにちは。GLOBIS学び放題でWebエンジニアをしている富山です。 GLOBIS学び放題のWebフロントエンドの構成は、React(TypeScript) / GraphQLで、GraphQLのクライアントライブラリには、Apollo Client + GraphQL Code Generatorを利用しています。 今回は、Apollo Clientのバージョンアップにより、Suspenseが利用可能になったので、記事では、実際に学び放題のコードベースに適応しようとするとどうなるか検証してみました。 Apollo Client v3.8からSuspense対応された Suspense自体はReact18でリリースされたもので、Reactを利用してる方ならお馴染みの機能ですが、Relayやu

    Apollo ClientでのSuspense対応について - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Relayやurql等、他のGraphQL APIのクライアントライブラリがSuspenseに対応してる中、Apollo Clientはやや周回遅れ気味でした / 非同期処理を管理する機能で、対象のコンポーネントがフェッチデータを持っていることを伝える" 2023
  • GraphQLは「オワコン」「流行らない」のか? - Qiita

    はじめに 今回はタイトルの通り、「GraphQLは「オワコン」「流行らない」のか?」という問に対して、個人的に調査した内容となります。 今回のタイトルで記事を書くことにしたのは、Googelの検索フォームに「GraphQL」と入力したところ、サジェストに「Graphql 流行らない」「Graphql オワコン」と表示されたことがきっかけです。 (試しにシークレットモードで入力してもサジェストされるので、私の検索履歴などのパーソナル情報によるバイアスはかかっていないはずです) 「Graphql オワコン」での検索結果TOPに「GraphQLはオワコンですか?これからはtRPCの時代ですか?REST APIの位置づけは何ですか?」というページがあったので読んでみました。 回答者はNodejsユーザグループ代表の古川さんで「GraphQLをオワコンと称するにはまだ早い」と回答されています。 私も

    GraphQLは「オワコン」「流行らない」のか? - Qiita
    sh19910711
    sh19910711 2024/06/16
    "検索フォームに「GraphQL」と入力したところ、サジェストに「Graphql 流行らない」「Graphql オワコン」と表示された / 財団から大手企業が抜けており、今後も流行が続くかという点については注視が必要" 2023
  • 【2023年版】分散GraphQLの動向~Fusionを中心に~ - Qiita

    はじめに GraphQLConf 20232023/9/19-21で開催されていました。 そこで個人的に特に気になったのがOpen FederationやFusionといったGatewayの仕様周りの話題です。 これら2つは何が異なるのか、Apollo Federationと何が異なるのか、それらを実装したサーバにはどんなものがあるのか、等いくつか気になることがあったので、講演と自身で調べた内容を併せて紹介したいと思います。 ちなみにGraphQLConfはアーカイブをYoutubeで公開しているので興味ある方はぜひ。 想定読者 GraphQL Gateway歴史を知りたい方 GraphQL Gatewayについての知見を深めたい方 Open FederationとFusionの違いを知りたい方 GatewayとしてのGraphQL歴史 元々はFaceBookでは以下のようなモノリシ

    【2023年版】分散GraphQLの動向~Fusionを中心に~ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Open FederationやFusionといったGatewayの仕様周りの話題 / オープンな仕様がないので実際にはベンダーロックインされてしまう / Open Federation: Apollo Federationをベース + WunderGraphとThe Guildが中心となって仕様策定" 2023
  • ent + gqlgenによる爆速GraphQLバックエンド開発 - Qiita

    はじめに この記事では、バックエンドのコード生成が可能なGoのライブラリentとgqlgenを使用して、爆速&省エネでGraphQLバックエンドの開発を行います。 GraphQLを用いたバックエンドの開発負担を、可能な限り軽減することが目的です。 自分用の備忘録でもあるため、蛇足な説明があるかもしれないです。ご容赦ください。 なぜGoGraphQLバックエンドを開発するのか GraphQLは、クライアント側で必要なデータの形式や量を柔軟に指定できるAPI用のクエリ言語です。そのため、REST APIとは異なり、必要最低限のリクエストで必要なデータだけを抽出するすることができます。(オーバーフェッチの排除) 一方、リクエストパターンが増加することで、その分サーバー側の開発の負担が増加するというデメリットがあります。 そこで、サーバー側の開発負担を軽減しようと考えるのが自然かと思います。その

    ent + gqlgenによる爆速GraphQLバックエンド開発 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQLを用いたバックエンドの開発負担を、可能な限り軽減する / Goはバックエンド機能に関してコード生成可能なライブラリが多くサポートされ / 開発にあたって、実装部分をできるだけ自動生成に置き換え" 2023
  • AWS AppSync がアツい! RDS Data API を使って GraphQL API を爆速で作ってみた - Qiita

    Step2. Secret Manager に DB 認証情報の保存 AWS AppSync は Amazon Aurora クラスターに接続する際に Secret Manager に保存されたシークレットを使用します。シークレットのタイプを「Amazon RDS データベースの認証情報」を選択肢、認証情報をデータベースを選択します。それ以外はデフォルトのまま、作成に進みます。 Step3. GraphQL API の作成 次に、GraphQL API を作成しましょう。GraphQL API データソースで「Amazon Aurora クラスターから始める - New」を選択し、次に進みます。 次に、API 名にわかり易い名前を入力します。今回はデフォルトの「My AppSync API」としました。 次にデータベースを選択します。 「データベースを選択」をクリックすると接続したい Am

    AWS AppSync がアツい! RDS Data API を使って GraphQL API を爆速で作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "AppSync: Aurora クラスター内のデータベースに対してイントロスペクションを行うことで、検出したテーブルに適合した GraphQL API のインターフェイスを簡単に作成することが可能に" 2023
  • Next 14 の Server Actions 上で実行する graphql-request で例外メッセージを型安全に処理する - Qiita

    背景 今まで GraphQLNext.js と併用する場合、スキーマ情報をフロントエンドと共有するために graphql-codegen を用いて型を自動生成し、 apollo client や urql 向けのプラグインを用いてブラウザから直接 GraphQL リクエストを送信するクライアントを作り、受け取ったデータをコンポーネントに反映していた。 しかし RSC や Server Actions の登場により、ブラウザ上で直接 GraphQL リクエストを送信する必要がなくなり、Node ランタイム上で GraphQL リクエストのやりとりができるだけで十分になった。 そこで、とある新規プロジェクトでシンプルに GraphQL リクエストの送受信だけできるクライアントライブラリである graphql-request を採用した。 graphql-codegen が graphql

    Next 14 の Server Actions 上で実行する graphql-request で例外メッセージを型安全に処理する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "RSC や Server Actions の登場により、ブラウザ上で直接 GraphQL リクエストを送信する必要がなくなり、Node ランタイム上で GraphQL リクエストのやりとりができるだけで十分になった" 2023
  • mongoDBでもRDBのように外部Collectionを結合したい!(populate & aggregate $lookup) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    mongoDBでもRDBのように外部Collectionを結合したい!(populate & aggregate $lookup) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "mongoDBのaggregate pipelineは複数のステージを指定することができ、一度のaggregateメソッドで複数の操作を同時に行うことが可能 / mongooseではQuery.prototype.explain()を使って実行されるクエリを確認することができる"
  • graphql-java を使うときはクエリのサイズ制限に注意しよう - Qiita

    環境 java 17 spring-boot 3.1.2 graphql-java 21.0 発端 GraphQL API の利用者から「クエリが実行できない!」という報告を受けました。 報告があったエラーは以下。 graphql.parser.exceptions.ParseCancelledException: More than 15,000 'grammar' tokens have been presented. To prevent Denial Of Service attacks, parsing has been cancelled. メッセージを見てすぐに「巨大なクエリを送っているクライアント側の責任だろう」とは思いましたが、そんな制限を実装したつもりは無いし、 API ドキュメントでも明言していなかったので、発生源を確認しました。 サイズ制限エラーの発生源 ログにスタ

    graphql-java を使うときはクエリのサイズ制限に注意しよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "計算リソースを過剰に消費させるような DoS 攻撃が成立し得るということで、デフォルトで制限が入っている / variables や fragment を使って GraphQL クエリをコンパクトにする + クライアントに「うまいことやってもらう」"
  • GraphQLクライアント Relayのキャッシュを有効化する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Relayとは Meta 製の GraphQL クライアント。 記事執筆時の最新バージョン:Relay v16.1.0 Cacheについて 一口にキャッシュにもいくつか種類があり、ここでは以下2つのキャッシュを扱う。 Query Cache(Document Cache) query単位のcache dataのこと consoleで以下オブジェクトに情報が格納されていることが確認できる __RELAY_DEVTOOLS_HOOK__.environments.get(1)._store._roots store生成時のoptionで有効

    GraphQLクライアント Relayのキャッシュを有効化する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Relay: Meta 製の GraphQL クライアント / loadQuery の option で fetchPolicy を指定すれば、画面ごとにキャッシュの利用有無を設定できる / storeのインスタンス化の際に、query cache の有効期限を設定"
  • サーバクライアント型のシステムでGraphQLの採用を避けた方が良いと思う理由 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 自ブログからの引用です。 はじめに GraphQLは非常に高機能なツールである一方、万能が故に来必要でないケースでも気軽に利用されている印象を受けます。 筆者は同じ組織で同じ目的のために構築されたサーバとクライアントの通信において、GraphQLを採用すべきでないと考えており、記事ではそのポイントを整理していきます。 なお、記事ではこのような1対1型のシステムをサーバクライアント型とよびます。 念のために記載しますが、GraphQLは素晴らしい技術であり、記事はGraphQLを批判するものではありません。 TL;DR (当の意

    サーバクライアント型のシステムでGraphQLの採用を避けた方が良いと思う理由 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "できるだけSimpleに保ちつつも、開発生産性とのトレードオフを考えるながら用法要量を守ってEasyを適用していく / tsoa: OpenAPIをCode Firstで開発するツール + 少ない注釈(デコレータ)で自然"
  • graphql_codegenで生成したクラスをテスト実行時にモックする際の注意点 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    graphql_codegenで生成したクラスをテスト実行時にモックする際の注意点 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "mockitoがgraphql_codegenで生成したクラスを読み込むことができず / graphql_codegenで生成したクラスを更に、mokitoでモック化したクラスにするためには、build_runnerの設定を変更する必要"
  • 【GraphQL】 Fragment Colocation とは - Qiita

    はじめに GraphQLを使う中で、Fragment Colocationという手法があることを知りました。 実際に使ってみて Fragment Colocation を利用することでの利点が見えてきたので、記事にまとめようと思います。 GraphQL の Fragment とは GraphQL には Fragment という機能があります。 Fragment はクエリのフィールドをまとめ、再利用可能にします。 Fragment を使うと何が嬉しいのか 再利用が可能になることで、繰り返し記述することを避けられる 繰り返し処理を Fragment としてまとめることで見通しが良くなる 仮にフィールド名が変更になったときに複数箇所変更する必要がなくなる Fragment の実用例

    【GraphQL】 Fragment Colocation とは - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Fragment: フィールド名が変更になったときに複数箇所変更する必要がなくなる / Fragment Colocation: fragmentを用いてクエリを分割し、データと UI Component を同じ場所に配置"
  • GraphQLの構文まとめてみた - Qiita

    はじめに 前回の記事では、GraphQLについて軽く触れましたが、その時の理解は浅かったため、今回は深めることを目的として、GraphQLの構文をまとめてみました。 スキーマ GraphQLのスキーマは、サーバーがクライアントに提供するデータ構造とAPIの操作を定義します。ここでは、スキーマ定義の基的な構成要素を見ていきます。 Type TypeはGraphQLの核となる部分です。データの形状を定義し、クエリやミューテーションで扱うオブジェクトの「設計図」となります。 上記のBookタイプでは、idとtitleフィールドが非Nullであることが!によって指定されています。これは、これらのフィールドがクエリの結果に必ず含まれるべきであることを意味します。一方で、authorフィールドには!が付いていないため、このフィールドはnullを許容します。つまり、authorフィールドが値を持たない

    GraphQLの構文まとめてみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Variables: クエリやミューテーション内で変数を使用することで、クエリの再利用性を高める / Fragment: 複数のクエリやミューテーションで再利用可能なフィールドの集合を定義するために使用 + クエリの複雑さを減らす"
  • Python用GraphQLライブラリStrawberryのログ出力 ~スタックトレースを出力させない方法~ - Qiita

    FastAPIの公式ドキュメントには、GraphQLのライブラリが紹介されています。 そこでおすすめのGraphQLのライブラリとして紹介されているのが、Strawberryです。 今回はStarawberryのライブラリを使ってGraphQLAPIを実装しているときに、ログ出力で苦労したことがあったので、何が問題なのかとその解決方法を書きます。 Strawberryについて 改めてStrawberryとはPython用のGraphQLライブラリです。Python用のGraphQLのライブラリはGrapheneが古くからあるライブラリでドキュメントを豊富です。対してStrawberryは比較的新しいライブラリです。 FastAPIのドキュメントには、Strawberryを使用することをお勧めしています。 FastAPIとの設計思想が似ているらしいです。 Strawberryはまだまだ開発

    Python用GraphQLライブラリStrawberryのログ出力 ~スタックトレースを出力させない方法~ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Starawberry: Python用のGraphQLライブラリ + FastAPIとの設計思想が似ている / Extension: resolver、mutationの処理が終わった後に何か処理を差し込む / GraphQLRouter: レスポンスを作成する時に処理を差し込む" 2022
  • Next.js + SupabaseでGraphQLを利用する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? SupabaseではSQLだけでなく、GraphQLを利用したデータ取得も行うことができます。 今回はGraphQLでデータを取得して、添付画像のような集計アプリを作ってみます。 Supabaseの準備 ①:Supabaseプロジェクトの作成 Supabaseにログイン(登録していないければアカウント登録から)して、 トップページの「New Project」を押します。 すると、下記の様な画面が表示されます。 適当なプロジェクト名とデータベースのパスワードを入れて新しいプロジェクトを作成しましょう。 ※Regionはできれば自分の住んで

    Next.js + SupabaseでGraphQLを利用する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Supabase: SQLだけでなく、GraphQLを利用したデータ取得も行うことができます / GraphQLのクエリにはあくまでCRUD(作成、読み出し、更新、削除)のそれぞれに該当した基本的な機能しかないため、詳細な実装はNext.jsに任せ"
  • Hasuraを使って環境構築してガンガン工数削減 - Qiita

    ある機会がありHasuraというものを知りました Prismaチームが開発したPlaygroudは使用した経験があるので、Hasuraとどんな違いがあるのか調べてみたらPlaygroudより使いやすく開発工数をガンガン削減出来るなと感じました! なので、もしこの記事を読んでHasuraのことを知ってもらえればと幸いです Hasuraについて 簡単に言うとGraphQLサーバーになります Hasuraはテーブルを追跡することでCRUDや集計用Queryなどを自動的に用意してくれる優れものです また、他の自前で用意したGraphQLサーバーとHasuraを統合してリクエストをHasura一つにお任せすることも可能です 単純なCRUDや集計はHasuraに任せて、ビジネスロジックを含むような処理は自前で用意したGraphQLサーバーに任せることで工数の削減に繋げられるかと思います Hasuraに

    Hasuraを使って環境構築してガンガン工数削減 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Hasura: テーブルを追跡することでCRUDや集計用Queryなどを自動的に用意 / 自前で用意したGraphQLサーバーとHasuraを統合してリクエストをHasura一つにお任せすることも可能"
  • 型アサーションの回避と型安全性の向上: GraphQLとReactでuseFragmentを利用する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに フロントエンド開発でGraphQLを使っているプロジェクトは多いと思いますが、以前はFragmentで定義された部分の型定義の方法がわからず、型アサーションを使用して無理やり型定義していました。しかし、GraphQLにはuseFragmentという機能があり、これを使うことで、型アサーションを用いるよりもずっと型安全にデータの型を定義できます。なので今回はuseFragmentについて記述していきます。 そもそもuseFragmentとは useFragmentは、Reactアプリケーション内でGraphQLフラグメントを効果

    型アサーションの回避と型安全性の向上: GraphQLとReactでuseFragmentを利用する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQLにはuseFragmentという機能があり、これを使うことで、型アサーションを用いるよりもずっと型安全にデータの型を定義できます / Fragment: クエリ内で再利用可能なデータの塊を定義するための機能"
  • nodejsのAPIをGraphQLで実装してみた - Qiita

    はじめに GraphQLというものをなんとなく知っていたものの、ちゃんと理解できてなかったなと思い 今回簡単な実装を交えて勉強しました。 GraphQLってなに? GraphQLは、Web APIのためのクエリ言語であり、データ操作と取得のためのランタイムです。 Facebookによって2015年に開発され、以降、データを効率的に取得する方法として急速に普及しています。 GraphQLの主な特徴は、クライアントが必要とするデータの形をクエリで明確に指定できる点にあります。 これにより、過剰または不足なデータの取得を避け、アプリケーションのパフォーマンスを最適化できます。 Restとの違いは? 下記の違いがあります。 特徴 GraphQL REST

    nodejsのAPIをGraphQLで実装してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQL: Facebookによって2015年に開発され、以降、データを効率的に取得する方法として急速に普及 / クライアントが必要とするデータの形をクエリで明確に指定できる / 初めはとっつきにくい + 変更にも強そう"
  • GraphQLのスキーマと型を学び直した - Qiita

    はじめに 既存のシステムでGraphQLを触っているのですが、スキーマを一から作成した経験がないことと、スキーマと型システムの基礎的な部分の理解が浅いなぁと感じていたので学び直しました。 学習方法としては、具体的な題材を元にスキーマを作っていくと知識が定着しやすかったので、その過程も含め、スキーマと型システムの基礎的な内容を共有しようと思います。 記事の題材と作成するもの 記事では、ピザとパスタの2種類の商品を提供するオンラインデリバリーサービスを題材にし、2つの商品情報をCRUDするためのGraphQL APIの仕様(スキーマ)を作っていきます。 前提情報 最初にGraphQLのスキーマと型システムについてざっくり説明します。 GraphQLのスキーマとは? 前述の通り、Graphql APIの仕様を定義するものです。 具体的には、GraphQL APIがどのようなデータを持っており

    GraphQLのスキーマと型を学び直した - Qiita
    sh19910711
    sh19910711 2024/06/16
    "スキーマと型システムの基礎的な部分の理解が浅い + 具体的な題材を元にスキーマを作っていくと知識が定着しやすかった / GraphQLの型システムは、APIを通じてやりとりされるデータの種類や形式を定義するもの"
  • BFFアーキテクチャとGraphQLに入門します - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに GraphQLとはBFF(backend for frontend)とはなんぞやということで、触ってみました。 今回作成したものこちら とんでもなく参考にした記事 そもそもGraphQLとは? GraphQLは、Facebookによって開発されたデータクエリ言語および実行環境です。RESTful APIの代替として設計され、クライアントが必要とするデータを効率的に取得できるようにします。REST APIとは異なり、GraphQLではクライアントが必要なデータの構造とフィールドを明確に指定できます。 メリット 柔軟性: クライア

    BFFアーキテクチャとGraphQLに入門します - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQL: RESTと比較して新しいコンセプトやクエリ言語を学ぶ必要 + REST APIよりもキャッシングが難しい場合があります / 設計に失敗すると、不要なデータを取得する「オーバーフェッチング」や ~ "
  • FlutterでGraphQLとgraphql_codegenを使ってみたので簡単にまとめてみた! - Qiita

    GraphQL 今回は業務の中でGraphQLを使用する機会があったので、簡単にまとめてみました! 記事のターゲット graphql_codegenを使ってみたい人 GraphQLの基礎を学びたい人 この記事に記載されていないこと Fragmentについて(今後の記事で扱うかも) 自動生成を行わないで実装する方法 GraphQLとは GraphQLとは、APIを作成し、クライアントがサーバーからデータを取得するためのクエリ言語です。簡単に言えば、クライアントとサーバー間でデータを効率的にやり取りする方法です。 GraphQLとREST APIの違い GraphQLとよく比較されるのがREST APIです。REST APIGraphQLの主な違いは以下の通りです。 特徴 REST API GraphQL

    FlutterでGraphQLとgraphql_codegenを使ってみたので簡単にまとめてみた! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "graphql_codegen: クエリやミューテーションを手動で書く手間を大幅に減らせます。自動生成されたコードを使用することで、構文エラーを防ぎ、効率的に開発を進める / 型が明示的に定義 + コンパイル時にエラーを検出でき"
  • GraphQL-MarkdownでGraphQLスキーマからドキュメントを自動生成する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    GraphQL-MarkdownでGraphQLスキーマからドキュメントを自動生成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GraphQLのスキーマも見やすい形でドキュメント化して開発メンバーに共有することで開発効率をあげる / GraphQL-Markdown: GraphQLスキーマからドキュメントを生成するライブラリ"
  • GraphQLにおけるN+1問題の解決策 - Qiita

    バックエンドにあるREST APIからデータを取得して、GraphQLのスキーマに載せて返すようなBFF(Backend for Frontend)を設計しています。 その過程で、GraphQLでN+1問題を回避するにはどうしたらいいか?という課題に直面したので、今回はその解決策をまとめてみます。 N+1問題とは何か まず、N+1問題とは何かという話から始めます。 例えば、データベース上にAuthor(著者)テーブルとBook()テーブルが存在し、関連は次のようであるとします。 今回は「著者の一覧を、各著者に紐づくの情報とともに取得できるようにしてほしい」というクライアントからの要件を受けて、次のようなGraphQLのスキーマを定義しました。 type Query { """著者一覧取得""" authors: [Author!]! } type Author { books: [Bo

    GraphQLにおけるN+1問題の解決策 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "REST APIからデータを取得して、GraphQLのスキーマに載せて返すようなBFFを設計 / N+1問題: 親ノードを取得するために1回のデータ取得が行われた後、紐づく子ノードを取得するためにN回のデータ取得を行ってしまう"
  • Fast API を使って、改めて RESTful API と GraphQL を学び直してみた - Qiita

    API のバージョン管理 疎結合なシステムにはバージョン管理が必要です。バージョン管理により、クライアント側のシステムやプログラム更新などを考慮せずに、API を改修することができます パフォーマンスを意識する 単に API を実行すると、リソースの取得をはじめとしたコストがかかります。以下の点を意識すると、パフォーマンスを落とさずに作成することができます キャッシュの活用 データ圧縮 パラメータは最小限(簡潔なパラメータ設定) 非同期処理 データ分割 また、日々パフォーマンスを監視して、重い処理がないかを視ることも重要です GraphQL とは GraphQL は、API を開発するためのクエリ言語、ランタイムの一種です。Meta(旧 Facebook)社によって 2015 年頃に公開されました。 GraphQL は、REST の課題を解決するために生まれたもので、以下の要素によって構成

    Fast API を使って、改めて RESTful API と GraphQL を学び直してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "より深い理解のために、作ってみたほうが早い / GraphQL: リクエストを 1 つにまとめられる + バージョン管理が不要で、データ構造の変更に影響されず API を提供できる + 学習コストが高い(RESTful API 比)"
  • GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる - Qiita

    こんにちは。@masatomix です。 最近、現場でGraphQLとRESTサーバを構築する機会があったので、そのとき得られたナレッジを備忘としてまとめておこうと思います。 TL;DR RESTサーバとGraphQLサーバを構築します EntityとRepositoryから RESTサービスを自動生成します(Spring Data RESTの機能) EntityからDDLを実行してテーブルの作成、データ投入を行います(SpringBootとJPAの機能) JPAとSpring Data RESTの機能を使って ManyToOneの関連があるRESTサービスを自動生成します Swggger(OpenAPI)を有効にします。API仕様書のJSONもダウンロード出来ます openapi-generator をつかってRESTにアクセスするプロキシ(TypeScript)を自動生成します Apo

    GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Apollo Serverの機能を使ってGraphQLのリクエストを受け取って、RESTからデータを取得してGraphQLで返却 / openapi-generator をつかってRESTにアクセスするプロキシ(TypeScript)を自動生成"
  • GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる。つづき。関連のあるデータの取得 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる。つづき。関連のあるデータの取得 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "よけいなSQL文を発行しないよう微調整 + GraphQL がQueryで指定するプロパティに応じて、必要なときだけBackendにデータを取りに行く / 下記のところからCURLのコマンドも取得できる"
  • redoclyで作成したAPI仕様書からモックを作る - Qiita

    はじめに API仕様書を作成する手段としてよく使われるものに、以下があると思います。 API Blueprint + aglio Swagger redocly Excel PDF 昨年「API Blueprint + aglio」で作られたAPI仕様書をredoclyで作り直しました。 作り直した理由は以下です。 「API Blueprint + aglio」の仕様書の記法が好きではなかった YAMLを使ったAPI仕様書がイケイケな雰囲気になっている 「API Blueprint + aglio」の場合は、API仕様書を作成して終わり 「リクエストパラメタ一覧を書く + JSONのサンプルを書く」という手間が煩わしい 作り直す中で、便利だった機能なので紹介しようと思います。 この記事を見てredoclyを選択するきっかけになっていただけたらと思います。 注意 この記事では redocly

    redoclyで作成したAPI仕様書からモックを作る - Qiita
    sh19910711
    sh19910711 2024/06/16
    "YAMLを使ったAPI仕様書がイケイケな雰囲気になっている / API仕様書は作って終わりではなく、API仕様書からモックを作れる / クライアント側はAPIの実装を待たずして開発ができるので便利"
  • OpenAPI Generator でクライアントライブラリを作成してみる - Qiita

    はじめに Web APIサービスに対応したクライアントライブラリ開発を手助けしてくれる OpenAPI Generator について調べてみた。 ※ ここでは言語対象を「Python」として記載する。 Swagger CodeGenとの違い 同じくOpenAPI Specificationを使ってコード生成するツールとして Swagger CodeGen もある。 Swagger CodeGenはSMARTBEAR社によってサポートされているプロジェクトOpenAPI Generatorは、2018年にSwagger CodeGenからフォークして始まった開発コミュニティ主体のプロジェクト。 誕生経緯は以下で語られている。 https://speakerdeck.com/akihito_nakano/gunmaweb34 Swagger CodeGenは現在もメンテナンスはされているが

    OpenAPI Generator でクライアントライブラリを作成してみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OpenAPI Generatorは、2018年にSwagger CodeGenからフォークして始まった開発コミュニティ主体のプロジェクト / テストコードも生成される + 良くも悪くもほぼ全てのコードがOpenAPI Generatorに依存" 2023
  • OpenAPIからコードを自動生成!『Orval』のメリットと選定理由 - Qiita

    これはOrvalの作者自身がswagger codegenといった他の自動生成ライブラリに物足りなさを感じ、特定の技術の上で最適なコード生成をしたいというモチベーションが根底にあります。 Orvalとは? 改めてOrvalはOpenAPIからclientコードを自動生成するライブラリです。(公式によると)その特徴は、大きく3つ挙げられます。 Productivity Save time to drink a 🍺, get your api ready out of the box in a few seconds. Prevent human error, be sure on the return result by imposing standard formatting. ビールを飲む時間も与えないほど早く、数秒にしてAPI処理のコードを自動生成します!また、標準的な形式を適用する

    OpenAPIからコードを自動生成!『Orval』のメリットと選定理由 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Orval: OpenAPIからclientコードを自動生成するライブラリ / Orvalの作者自身がswagger codegenといった他の自動生成ライブラリに物足りなさを感じ / 特定の技術の上で最適なコード生成をしたいというモチベーション" 2023
  • OpenAPI Specificationの記載ルールについて - Qiita

    概要 OpenAPI Specificationの記載ルールの基的な部分をまとめる。 必須のルートオブジェクト部分だけ深堀りして記載する。 OpenAPIドキュメントについて OpenAPIドキュメントの記載はプロジェクトによって固有のルールがあるっぽいので郷に入っては郷に従うほうがいいと思う。 OpenAPIドキュメントそのものも、「1リクエストにつき1ファイル」のこともあれば「関連するリクエストは1ファイルにまとめる(ユーザー系は1ファイルにまとめる)」等のルールが有ると思う ルートオブジェクトについて openapi, info, pathsのルートオブジェクトは必須となる。とりあえずこの3オブジェクトが記載されていればOpenAPIの仕様書として成り立つ。 記載のセオリーとしてはできるだけcomponentsオブジェクトにpathsオブジェクトとsecurityオブジェクトで使用

    OpenAPI Specificationの記載ルールについて - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OpenAPIドキュメントの記載はプロジェクトによって固有のルールがあるっぽいので郷に入っては郷に従う / openapi,info,pathsのルートオブジェクトは必須 + 3オブジェクトが記載されていればOpenAPIの仕様書として成り立つ" 2022
  • DjangoでSwaggerUIを使おう!設定方法を徹底解説 - Qiita

    from django.urls import path from drf_spectacular.views import ( SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView, ) urlpatterns = [ path("admin/", admin.site.urls), # 127.0.0.1/8000/api/schema にアクセスするとテキストファイルをダウンロードできます path("api/schema/", SpectacularAPIView.as_view(), name="schema"), # SwaggerUIの設定 # 今回は127.0.0.1/8000/api/docs にアクセスするとSwaggerUIが表示されるよう設定します path( "api/docs/", Sp

    DjangoでSwaggerUIを使おう!設定方法を徹底解説 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ホットリロードされるので変更のたびにローカル上でrunserverし直したり、コンテナを手動でrestartする必要がない / extend_schema: request内のパラメータを予め指定したり200、400の時のレスポンス例を作成" 2022
  • Swagger Inspectorを使用して既存APIのOpen API Specificationを作成する - Qiita

    Swaggerを使用してAPIの仕様書を作成する際、Swagger EditorやStoplight Studioを使用する選択肢などが考えられます。 新規APIの場合はそれらを使用し0から作成する必要がありますが、既存APIの場合Swagger Inspectorを使用することである程度の仕様を反映させた仕様書を自動生成することができます。 現在の業務で「SwaggerHubを使用した既存APIのドキュメント化」を行う必要があるのですが、「1からすべて作成していくのが面倒・・・」と思い探していたところこちらのツールを発見し、試してみました。 【注意】APIの公開設定について 今回はSwaggerHubの無料プランを使用していますが、APIの公開設定はPublicしか選択することができません。 Privateを選択するにはTeamプラン以上を登録する必要があるため、注意が必要です。 既存A

    Swagger Inspectorを使用して既存APIのOpen API Specificationを作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Swagger Inspectorを使用して既存APIのOpen API Specificationを作成 / Schemaを別途設定したり、他の項目についても追加する必要はありますが、ある程度のパラメータやレスポンスは自動で生成 + 1から自分で書くよりは非常に楽" 2022
  • 「Laravelで実装したAPI」と「OpenAPIの定義ファイル」に相違が無いことをテストしたい - Qiita

    会社で「SwaggerHubを導入するから」と担当を任され、 既存のAPIOpenAPIを導入する方法を検討中のtenryuです。 多くのOpenAPI導入記事で作成した仕様書とAPIに相違が発生しないようテストが実施されており、 弊社のSwaggerHub導入でも必須だと感じました。 私の担当プロジェクトでは、APIの実装にPHPフレームワークのLaravelが使用されています。 「Laravelで実装したAPI」と「仕様書」に相違が無いことを確認するため, openapi-psr7-validatorというライブラリを利用しテストしている記事がいくつかありました。 しかし、わかりにくい部分が多々あったり、そもそも情報量が少なかったのでまとめたいと思います。 openapi-psr7-validator How To Validateでいきなり躓く 使い方がよくわからない・・・ Ser

    「Laravelで実装したAPI」と「OpenAPIの定義ファイル」に相違が無いことをテストしたい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "openapi-psr7-validator: 「Laravelで実装したAPI」と「仕様書」に相違が無いことを確認する / PSR-7: PSR(PHP Standards Recommendations)と言われるPHPコーディング規約の一つ + HTTPのリクエスト、レスポンスに関する規約" 2022
  • OpenAPI 定義からyup定義を生成するRust製CLIを作ってみた - Qiita

    /* tslint:disable */ /* eslint-disable */ //DO NOT EDIT MANUALLY import { object, string, number, date, array, bool } from 'yup'; export const LightingSummary = object({ zones: array().of(object({ id: string().optional(), name: string().optional(), deviceId: number().integer().optional(), deviceType: string().optional(), zone: string().optional(), })).optional(), zoneStatus: array().of(object({ id

    OpenAPI 定義からyup定義を生成するRust製CLIを作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OpenAPIv3の定義ファイルからyupのバリデーション定義を自動生成 / APIにgoa、FrontにReact(Typescript)、FrontのAPIまわりは openapi-generator-cliで自動生成させる構成 / 2重でバリデーション定義を管理しないといけないのが辛い" 2022
  • OpenAPI(Swagger)とPrismでモックサーバーを建てたらテストが捗った - Qiita

    背景 先日、とある開発にてWebAPIを複数作成することとなり、APIの単体テストやサブシステム間のテストをどのように進めるか考えていた際に、モックサーバーというものをご教示いただいたことで、その後のテストが大変捗ったため、個人の記録として書き記すものです。 先人たちの知恵をお借りするなどして解決できたことを、この場をお借りして感謝するとともに、大変恐縮ですが自分のメモとして、こちらへまとめておきます。 OpenAPI(Swagger)とは API構造を記述するインターフェース記述言語です。yamlもしくはjsonで記述することで、綺麗なAPIドキュメントを作成することができたり、この記事で紹介するようにモックサーバを建てることができます。 https://swagger.io/ https://swagger.io/tools/swagger-ui/ https://swagger.io

    OpenAPI(Swagger)とPrismでモックサーバーを建てたらテストが捗った - Qiita
    sh19910711
    sh19910711 2024/06/16
    "APIの単体テストやサブシステム間のテストをどのように進めるか考えていた際に、モックサーバーというものをご教示いただいたことで、その後のテストが大変捗った / Prism: Stoplight社によって開発" 2022
  • SvelteKitでスキーマ駆動的な - Qiita

    やりたかったこと Svelte公式チュートリアルのfetch(uri)の代わりに、 OpenAPI定義から自動生成した型定義されたTypescriptコードを使ってバックエンドと通信したい タイトルに書いてしまったけどスキーマ駆動という語が妥当なのかはよくわからない... 調べ方が悪いのかやろうとする人にとっては当然の内容なのか、調べても出てこなかったので備忘録として やったこと 公式チュートリアルを一通り眺めた状況からスタート SvelteKitの準備 API定義からコード生成 実装 SvelteKitの準備 viteってビルドツールが全部やってくれた(全部Yes) > yarn create vite √ Project name: ... sample √ Select a framework: » Svelte √ Select a variant: » SvelteKit ↗ √

    SvelteKitでスキーマ駆動的な - Qiita
    sh19910711
    sh19910711 2024/06/16
    "自動生成した型定義されたTypescriptコードを使ってバックエンドと通信したい / 変更容易性高めるとかスキーマに合わせて開発して齟齬無くすとか / 思想は分かっても技術力がついていかないのでできることを模索" 2022
  • OpenAPI (Swagger) まとめ - Qiita

    はじめに 自分は実務でReact×TypeScriptを利用したフロント周りとNode.js(Nest)やRailsを用いたバックエンド(API)の開発をしています。 記事では、OpenAPIを用いたAPI設計の書き方及び、Swaggerの説明と使い方についてまとめていきます。 この記事の対象者 プログラミング初心者から中級者 APIの基礎を理解している人 OpenAPIを用いてサクッとモックサーバーを試したい人 この記事の目標 モックサーバーの環境構築を学ぶ Swaggerの使い方を理解する OpenAPIを用いてAPI設計の具体的な書き方を学ぶ この記事でやらないこと 記事ではOpenAPIの「書き方」をメインで解説するため、API設計についての細かい解説は省きます。 なおAPI設計については下記の記事でまとめているので、ぜひ参考にしてみてください。 用語解説 OpenAPI 公式

    OpenAPI (Swagger) まとめ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Prism: OSSのモック&プロキシサーバで、OpenAPIドキュメントを使用してモックサーバを起動する / サーバー側の環境構築をせずとも、OpenAPIがあればデータのやり取りを試すことが容易" 2022
  • FastAPIで自動生成されるドキュメントを保存する方法 - Qiita

    はじめに FastAPI は、WebAPI を構築するためのモダンなWebフレームワークです。 類似したフレームワークに、Django(Rest framework)やFlaskがありますが、大きな特徴として、コードからOpenAPIに準拠したAPIドキュメントを自動生成できることが挙げられます。/docsや/redoc、/openapi.jsonで見れるやつです。 ただ、自動生成されるドキュメントを保存する方法についてあまり日語の情報が見つからなかったのでまとめておきます。 (フロントエンドとバックエンドで分かれて開発を行なっていて、APIの仕様だけ決めてドキュメントをGitHubPagesなどで共有、それを元にそれぞれ作業を進めたい時などに便利かと思います。) openapi()メソッドを利用してhtmlを生成する FastAPIにはopenapiスキーマを返すopenapi()メソ

    FastAPIで自動生成されるドキュメントを保存する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "FastAPI: コードからOpenAPIに準拠したAPIドキュメントを自動生成できる + /docsや/redoc、/openapi.jsonで見れる / astAPIにはopenapiスキーマを返すopenapi()メソッドというものがある" 2022
  • GithubActionsでSwaggerドキュメントを自動更新して、PRへコメントをつける - Qiita

    はじめに いくつかのプロジェクトにてSwaggerを利用した、API仕様書の運用をしています。 エンドポイントの追加・変更などがあった場合に、ドキュメントの更新を忘れがちなので、github上でPRを作成した際に、swaggerドキュメント生成のためのコマンドを自動実行し、差分があった場合はPR上にコメントするようなフローを作成しました。 使用言語及びライブラリは以下。 https://github.com/swaggo/gin-swagger 前提として、DockerfileやMakefile等でSwaggerドキュメントの生成ができている状態とします。 (各種ライブラリなどで設定方法・実行方法は違うと思うので、Swaggerの設定部分については割愛します。) 実行ファイル 全体の設定ファイルです。以下で一つ一つ見ていきます。 PRのオープン・プッシュのイベントでトリガーされます。 na

    GithubActionsでSwaggerドキュメントを自動更新して、PRへコメントをつける - Qiita
    sh19910711
    sh19910711 2024/06/16
    "エンドポイントの追加・変更などがあった場合に、ドキュメントの更新を忘れがち / swaggerドキュメント生成のためのコマンドを自動実行し、差分があった場合はPR上にコメントするようなフローを作成しました" 2022
  • JSON SchemaのanyOfをTypeScriptの型で表現する - Qiita

    type AnyOf<T extends any[]> = T extends [infer A, ...infer B] ? A | AnyOf<B> | (A & AnyOf<B>) : never; JSON Schema とは JSON Schema というものを聞いたことがあるでしょうか。 詳細は https://json-schema.org/ を読んでいただければと思いますが、簡単に説明すると JSON をバリデーションする (または 型をつける)もので身近なところでは OpenAPI などのレスポンス型定義などに用いられます。 他にも各種設定ファイルで JSON や YAML を書くときにテキストエディタ上で補完が効くものは内部的に JSON Schema が使われていることがほとんどだと思います。 例: { "type": "object", "properties":

    JSON SchemaのanyOfをTypeScriptの型で表現する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "JSON Schema: JSON をバリデーションする (または 型をつける)もの + 身近なところでは OpenAPI などのレスポンス型定義など / テキストエディタ上で補完が効くものは内部的に JSON Schema が使われている" 2022
  • docusaurusにopenapiを突っ込んでredocで見れるようにする - Qiita

    redoc on Docusaurusがしたいと思ったことが結構あります。 理由は単純で、Github PagesでDocusaurus製のドキュメントを作ってさらにRedocを置くとなると場所が足りないからです。 なんか頑張ればサブディレクトリとかでどうにかできなくもなさそうな気がするんですが、仮にできてもそれぞれのドキュメントをまたぐ際などに手間がかかるのであまりスマートではない気がします。 なので、Docusaurus上でいい感じにOpenAPIのファイルを表示してくれるプラグインかなにかはないかと探していました。 そんな中で見つけたのが、redocusaurusです。もう直球ですね。 redocusaurusを試す これです 以下のコマンドを実行します。 presets: [ // Redocusaurus config [ "redocusaurus", { // Plugin

    docusaurusにopenapiを突っ込んでredocで見れるようにする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Github PagesでDocusaurus製のドキュメントを作ってさらにRedocを置くとなると場所が足りない / redocusaurus: Docusaurus上でいい感じにOpenAPIのファイルを表示してくれる" 2022
  • API設計: gRPC、OpenAPI、REST - Qiita

    はじめに こんにちは、rendaman0215です。 APIの設計のフェーズでGoogleの記事で以下のような記事を読みました。 とてもわかりやすかったので、良い機会のためまとめてみようと思います。 HTTP通信3つの主要な方法 記事内では、以下の3つが主要な方法として紹介されています。 REST gRPC OpenAPI これが主題になるのですが、gRPCはさておき、そもそもOpenAPIはRESTを記述するフォーマットなので比較対象にならないのでは??と思いました。 よくよく読み進めてみると、記事内でOpenAPIと言われているものは、RESTに関わらずRPCのような使い方を指しているように見受けられました。 REST RESTと呼ばれる以下の4つの定義に合致するもの 状態管理を行わず、やり取りされる情報のそれ自体で完結して解釈することができる 情報を操作する命令の体系があらかじめ定義

    API設計: gRPC、OpenAPI、REST - Qiita
    sh19910711
    sh19910711 2024/06/16
    "gRPC: Protocol Buffersを用いてスキーマを記述しシリアライズ + シンプルな直感的な方法でリモートプロシージャを定義 / 自動的にコードを生成してくれるためHTTPを意識せずに開発ができます" 2022
  • OpenAPI Generatorで生成したRustのコードを本番利用するまで - Qiita

    これは株式会社LabBase テックカレンダー Advent Calendar 2022 4日目の記事です。 株式会社LabBaseでエンジニアをしている高橋です。 昨日の記事は @yiwi さんによるRust学習の試行錯誤の記事でした。(こちら) 今回はOpenAPI Generatorで生成したコードRustのコードを、検証プロダクトの場環境利用するまでに行ったことについて紹介します。 TL;DR rust-serverでサポートしてない機能に対して、自力で実装して乗り切った OSSを使う際は自己責任で OpenAPI GeneratorのRust言語サポートについて OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and

    OpenAPI Generatorで生成したRustのコードを本番利用するまで - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Open API Generator: rust-server を指定するとRustのコードが生成 / BearerTokenをサポートしていないのでリクエストヘッダにJWTを指定した認証(認可も)がサポートされていません / 「できそう」と「できる」は違う" 2022
  • Laravel API Documentation Generatorがインストールできないのでscribeをいれてみた - Qiita

    概要 既存のLaravelプロジェクトへSwaggerを導入するにあたり、「Laravel API Documentation Generator」なる便利パッケージでSwaggerのyamlを自動生成できることを知りました。 しかし、インストールを試みたところ↓のエラーが発生しインストールできませんでした。 Your requirements could not be resolved to an installable set of packages. Problem 1 - mpociot/laravel-apidoc-generator v4.x-dev requires ramsey/uuid ^3.8 -> found ramsey/uuid[3.8.0, ..., 3.x-dev] but the package is fixed to 4.2.1 (lock file ve

    Laravel API Documentation Generatorがインストールできないのでscribeをいれてみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "既存のLaravelプロジェクトへSwaggerを導入するにあたり、「Laravel API Documentation Generator」なる便利パッケージでSwaggerのyamlを自動生成できることを知り / よくあるパッケージの依存関係エラー" 2022
  • openapi.ymlで開発を効率化しよう! - Qiita

    はじめに この記事はOPENLOGI Advent Calendar 20227日目の記事です! 私事ですが2022/12月にオープンロジにジョインしました!頑張ります! まだ入社して間もないので業務にあまり関われてないのですが個人的に最近やったことを紹介させていただきます! 開発にコミットするAPIドキュメントを作る 皆さんの現場ではAPIドキュメントは開発にコミットしていますか? 開発にコミットしていないAPIドキュメントの例として、 Swaggerを誰かが作ったけどメンテナンスされていない メンテナンスしているけど誰も見ていない メンテナンスしているけど信頼性が担保されていないので使えない みたいな状態になっていませんか? APIドキュメントを書くと何がいいの? APIドキュメントって何に使うの?と思うエンジニアも意外と多いのではないでしょうか 実際SwaggerやStoplight

    openapi.ymlで開発を効率化しよう! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "開発にコミットしていないAPIドキュメント: 作ったけどメンテナンスされていない + メンテナンスしているけど誰も見ていない / Dredd: コードを書かずに、openapiで記述されたレスポンスの型が帰ってくるかをテスト" 2022
  • Rustでutoipaを使ってOpenAPIドキュメントを公開する - Qiita

    これは株式会社LabBase テックカレンダー Advent Calendar 2022 8日目の記事です。昨日の記事はこちらです。 今回はutoipaを使って、Rustで実装したAPIを確認できるようにします。 TL;DR utoipaをcloneする。 examplesディレクトリにある好きな環境で、cargo run実行する。 http://localhost:8080/swagger-uiへアクセスする。 Swagger UIAPIが確認できる。 はじめに Rustで作ったバックエンドのAPIドキュメントを作成するために、Rustだけでどうにかならないかなと検索したら、utoipaというライブラリで解決できそうだったので、組み込んでSwagger UIで確認してみました。 がんばればOpenAPI Generatorが生成したコードを使えるようです(参考記事) utoipaとは

    Rustでutoipaを使ってOpenAPIドキュメントを公開する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "バックエンドのAPIドキュメントを作成するためにRustだけでどうにかならないか / utoipa: Rustだけでいい感じにドキュメントを作れる / 今回はactix-webを使いますが、他のフレームワーク(axum、...)にも対応" 2022
  • OpenAPIで特定のAPIを使わないように明示したい - Qiita

    OpenAPIで使うな危険を示したいときのtips 例えばこんな時 APIを削除・追加したいのでOpenAPIを修正しなければいけない OpenAPIで仕様共有をしているけど、一部のAPIを近い将来に廃止したい APIのパス設計を見直したので、古いパスのほうは使わないようにしてほしい 例:/user_profile/xxx -> /user/profile/xxx OpenAPIで使うな危険を示す方法 deprecated=true に設定する(OpenAPI Specification) ポイント 要らなくなったソースコードをごそっと削除するのとは違い、現在使われているAPIの場合、 丸ごと定義を削除してしまうと「あれ?あのIF仕様どこいった??」と思われてしまう しばらくの期間deprecatedの状態で置いておき、全体への周知が終わってから削除するべき

    OpenAPIで特定のAPIを使わないように明示したい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "使うな危険を示したい / APIを削除・追加したいのでOpenAPIを修正しなければいけない + 一部のAPIを近い将来に廃止したい + 古いパスのほうは使わないようにしてほしい / deprecated=true に設定" 2022
  • コードを書きたくないのでコードを書くコードを書いた話 - Qiita

    はじめに こんにちは。READYFOR のプロダクトエンジニアのもっさんです。 この記事は「READYFOR Advent Calendar 2022」の 12 日目の記事です。 概要 READYFORでの機能開発 READYFOR では、新規・追加開発を行う際、スキーマ駆動開発を利用して開発を進めています。 スキーマの定義には OpenAPI を利用していて、定義の yaml ファイルをメンバーで相談しながら作成後、その定義を元にフロントエンドとバックエンド分かれて実装を進めています。 フロントエンド領域でのスキーマ利用 フロントエンドでは TypeScript で開発をおこなっているので、この定義をもとに型定義ファイルを作成、実装を行なっています。 READYFOR のフロントエンドでは、SPA またはマイクロフロントエンドがコンテキストごとにいくつか分かれて存在しています(SPA ま

    コードを書きたくないのでコードを書くコードを書いた話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "yaml ファイルから型定義ファイルの作成に openapi-typescript を、fetch ライブラリとして SWR を、レスポンス内で取得した JSON のパースに zod / この方式で開発を進めると以下の事をそれぞれのリポジトリで繰り返す必要" 2022
  • openapi-generator で自作テンプレートを用いて iOS API クライアントを自動生成した話 - Qiita

    この記事は ドワンゴ Advent Calendar 2022 11 日目の記事です。1日遅刻してしまいました こんにちは、@tasuwo です。普段はニコニコ動画 iOS アプリの開発に携わっています。ニコニコ動画iOSアプリ (以下、動画iOSアプリ) では3年程前から OpenAPI 仕様を元に APIクライアントを自動生成し、動画iOSアプリとボカコレアプリで利用しています。その中で得られた知見について紹介しようと思います。(そもそも OpenAPI とは?という話は、今回は割愛します ) コード自動生成導入の経緯 主なモチベーションはやはり省力化でした。導入以前は仕様書を元に実装を行い、同じ仕様書を元にレビューするといった工程が必要でしたが、仕様書からコードが自動生成できれば多くの手間を省くことができます。 また、動画iOSアプリから主に利用するAPIでは既にOpenAPI仕様が

    openapi-generator で自作テンプレートを用いて iOS API クライアントを自動生成した話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "導入以前は仕様書を元に実装を行い、同じ仕様書を元にレビューするといった工程が必要 / 当時のAPIクライアントライブラリはObjective-C製であり、Swift製に移行することを検討している最中でした" 2022
  • Open API落穂拾い - Qiita

    この記事は 株式会社ビットキー Advent Calendar 2022 14日目の記事です。 今回は workhubプロダクトチームの maruware が担当します。 背景 BitkeyではOpen APIを以下のような用途で活用しています。 API仕様、ドキュメント 自社製のジェネレータによるサーバー実装やクライアント実装生成 サブシステムのモックサーバー Open APIに則ることで、1のメリットはもちろん、2によりサーバー実装で統一的なアーキテクチャ・validation・テストなどを得られたり、テストサーバー・クライアント間で整合した実装を得られたりといったメリットがあります。 しかし、残念ながら提供しているAPIはすべてがOpen APIで定義されている状態にはなっておらず、それらについてもOpen APIに載せていく移行を進めています。 その移行作業やジェネレータ整備などを

    Open API落穂拾い - Qiita
    sh19910711
    sh19910711 2024/06/16
    "既存の 非Open APIなAPIはTypeScriptで実装 されており、これをまずOpen API Specに移行する必要 / 何も考えずにやるとyamlをちくちく手で書いていくことになり / 幸いにも typeconv というOSSツールを公開してくれている方がいて" 2022
  • swagger-typescript-api で型安全な API クライアントを自動生成する - Qiita

    openapi: 3.0.0 info: title: OpenAPI example description: "OpenAPI example" version: 1.0.0 servers: - url: https://example.com/api/v1 paths: /user/{username}: get: operationId: getUserByName summary: Get user by user name parameters: - name: username in: path required: true schema: type: string responses: "200": description: successful operation content: application/json: schema: $ref: '#/component

    swagger-typescript-api で型安全な API クライアントを自動生成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "swagger-typescript-api: OpenAPI のスキーマから TypeScript の型生成するツール / SWR: データ取得のための React Hooks ライブラリ + 取得状態の管理や、データキャッシュを簡単に扱うことができて便利" 2022
  • 現状のSwaggerスキーマとシリアライザの改善を行なった話 - Qiita

    はじめに Railsで運用されているAPIサーバーのシリアライザとSwaggerスキーマをリファクタリングした話と、そこで当たった問題(余談)の紹介です。 現状の状態 社内のサービスはAPIサーバーとしてRailsを用いて運用されているのですが、長く運用されているため、手動で作成されるSwaggerスキーマとそれに対応したシリアライザが無秩序な状態にあり、新規APIの実装や修正が入るたびに各人の裁量でスキーマおよびシリアライザを使用・作成していて、運用しづらくなっていました。また、ActiveModel::Serializerなどは使っていなく、独自で実装を行なっています。 実際にどのような構成になっていたかの例を大雑把に。 例 例えば、以下のようなモデルがあったとして class Member < ActiveRecord::Migration def change create_tab

    現状のSwaggerスキーマとシリアライザの改善を行なった話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "長く運用されているため、手動で作成されるSwaggerスキーマとそれに対応したシリアライザが無秩序な状態 / 修正が入るたびに各人の裁量でスキーマおよびシリアライザを使用・作成していて、運用しづらくなって" 2022
  • [Go] OpenAPI コード自動生成でビジネスロジックに集中する開発へ - Qiita

    はじめに 今回は Go 言語で OpenAPI のコード自動生成を試してみたいと思います。「コード自動生成って何だ?」という方や「OpenAPI ってそもそも何?」という方にもわかりやすく解説していこうと思います。 まず、OpenAPI でコード自動生成ができると以下の嬉しいことがあります。 ただの作業になりがちなモデルの作成が自動化できる 仕様書通りにモデルや API インターフェースが自動生成されるので、バグが入りにくい 仕様書通りのリクエスト・レスポンスかどうかを簡単にバリデーションできる その結果、ビジネスロジックに集中する開発ができる です。 今回のサンプルコードはこちらに置いてあります。 OpenAPI とは OpenAPI とは、 REST API の定義を記述する仕様のことです。例えば、以下は「GET /users API を叩いたら200ステータスで id, name を

    [Go] OpenAPI コード自動生成でビジネスロジックに集中する開発へ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Go 言語で OpenAPI のコード自動生成 / ただの作業になりがちなモデルの作成が自動化 + 仕様書通りのリクエスト・レスポンスかどうかを簡単にバリデーション + ビジネスロジックに集中する開発ができる" 2022
  • CDKのAPIGateway+Lambda構成をOpenAPIの定義から作成する - Qiita

    どんな内容か CDKにてAPIGateway+Lambdaの構成を作る際に、RestApiではなくOpenAPI定義からAPIGatewayを作ることができるSpecRestApiを使ってみたという内容になります。 OpenAPIとは OpenAPIとは、RESTful APIを記述するための標準化されたフォーマットのことで、OpenAPI Specification(OAS)やOpenAPI Generatorなど取り巻く技術の総称としても呼ばれています。 もともとswaggerとして有名だったのですが、OASとして標準化されてからはOpenAPIと呼ばれることが多く、swaggerはOpenAPIのツール的な位置付けになっています。 例えば、https://jsonplaceholder.typicode.com/ というRESTfulAPIを公開しているサービスがあるのですが、その中

    CDKのAPIGateway+Lambda構成をOpenAPIの定義から作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "SpecRestApi: OpenAPI定義からAPIGatewayを作ることができる / もともとswaggerとして有名だったのですが、OASとして標準化されてからはOpenAPIと呼ばれることが多く、swaggerはOpenAPIのツール的な位置付け" 2022
  • スキーマ駆動開発 with Open API - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに こんにちは!株式会社80&Companyの技術広報です。 弊社の開発部署では毎週火曜日の朝9:30から社内勉強会を行なっています。 今回の記事は社内のエンジニアフロントエンド業務を担当していた際に、API周りの作業改善のため、スキーマ駆動開発の導入提案を社内勉強会で発表したものを紹介します。 スキーマ駆動開発を検討中の方は参考にしてみて下さい♪ 読者の対象 スキーマ駆動開発に興味がある方 スキーマ駆動開発の導入を検討している方 スキーマ駆動開発とは スキーマ駆動開発とはAPIのスキーマを最初に定義して、定義をもとにバックエン

    スキーマ駆動開発 with Open API - Qiita
    sh19910711
    sh19910711 2024/06/16
    "スキーマ駆動開発: フロントエンドとバックエンドの実装を同時並行で進めることができる + 実装が仕様より先行していたり仕様書の更新漏れを防ぐ / Open APIではどう書くのかを一つ一つ調べていく必要" 2022
  • 【Laravel】API仕様書と実装のテストにツールとしてSpectatorを検討してみた - Qiita

    みなさんはSwagger Editor等で作成したAPI仕様書と実装の乖離をどのようにテストしていますか? 多くの記事で目にするのは、openapi-psr7-validatorというライブラリです。 こちらはPSR-7に準拠したバリデータを使用するため、リクエストとレスポンスもPSR-7仕様に変換するという、少し面倒な工程が必要となります。 もう少し手軽にテストができるライブラリがないか探していたところ、こちらのSpectatorというライブラリを見つけました。 こちらもリクエストとレスポンスの型をテストできるらしく、試しに使ってみたのですが・・・という記事になります。 環境 PHP 8.0.8 Laravel Framework 8.58.0 Spectator v1.7.1 仕様書の保存場所に注意 今回OpenAPI Specのyamlをapp/OpenApiの中に保存しました。 そ

    【Laravel】API仕様書と実装のテストにツールとしてSpectatorを検討してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "openapi-psr7-validator: PSR-7に準拠したバリデータを使用するため、リクエストとレスポンスもPSR-7仕様に変換するという、少し面倒な工程が必要 / Spectator: リクエストとレスポンスの型をテストできる" 2023
  • デフォルトのエンドポイントの有効無効をAWS CFnテンプレートとOpenAPIで指定する - Qiita

    AWS CloudFormation と OpenAPI を使用して Amazon API Gateway を構築する時、「デフォルトのエンドポイント」を無効にする方法がわかりづらかったので、ノウハウを残します。 AWS SAM の AWS::Serverless::API リソースには、デフォルトのエンドポイントの有効と無効を切り替える DisableExecuteApiEndpoint プロパティがあります。 しかし、AWS CloudFormation テンプレートで OpenAPI を DefinitionUri 使用して設定している場合(調査中)、DisableExecuteApiEndpoint プロパティが効きません。 従って、AWSOpenAPI 拡張を使用し、AWS CloudFormation テンプレートではなく、OpenAPI 内に設定を定義する必要があります

    デフォルトのエンドポイントの有効無効をAWS CFnテンプレートとOpenAPIで指定する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "公式ドキュメントに記載されている通り、x-amazon-apigateway-endpoint-configuration オブジェクトは Swagger 2.0 の場合は「最上位ベンダー拡張」、OpenAPI 3.0 の場合は「server オブジェクトのベンダー拡張の下」 + 具体的にどこなのか"
  • DjangoでAPIドキュメントを自動生成しよう - Qiita

    開発している家計簿アプリSUMUMAのAPIAPIドキュメントを公開しました。 ドキュメントはSwaggerとRedocの2種類で公開しています。 Swagger SUMUMA API Redoc SUMUMA API APIとドキュメントの公開には、Django Rest Frameworkとdrf-yasgを使いました。 Django Rest Framework Django Rest Framework(以下DRFで表記)は、DjangoアプリでAPIを提供するためのパッケージです。DjangoAPIを実装するときに、必ずと言っていいほど使われています。 DRFはOpenAPIという、RESTful APIを定義するためのフォーマットをサポートしています。OpenAPIを元にAPIドキュメントを生成することもできます。 DRFのドキュメントには、パッケージを使わずにAPIドキュ

    DjangoでAPIドキュメントを自動生成しよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DRF; Django Rest Framework: OpenAPIという、RESTful APIを定義するためのフォーマットをサポートしています。OpenAPIを元にAPIドキュメントを生成することもできます / drf-yasgはSwagger Codegenもサポートし" 2023
  • OpenAPI × AWS CDK × APIGateway でRest APIを管理する

    OpenAPI定義からAPIGatewayをいい感じに作成できたので、伝えたかった記録になっています。 どんな流れで 「OpenAPI ×CDK」 に辿り着いたのか、つらつら書いています。 長い記事になっていますが、当に伝えたいのは最後のCDKの話だけです! 時間が勿体ない方は最後の方だけ読んでいただけたらと思います。 【想定している層】 APIGateway そこそこ分かる CDK 聞いたことある OpenAPI(Swagger) 聞いたことない 【私のレベル】 APIGateway 2年くらい使っているけど未だにCorsエラーとかで沼る。 CDK 1ヶ月前くらいから触り始めたけど、既に好き。CloudFormationに戻れない。 OpenAPI 『スキーマ駆動開発』、とかの記事をみて気になっていて、最近初めて実際に触った。 OpenAPIとは? 「Restful APIの定義を記述

    OpenAPI × AWS CDK × APIGateway でRest APIを管理する
    sh19910711
    sh19910711 2024/06/16
    "openapix: OpenAPIの定義は保ったまま、CDKのコード側でAWSの設定を行う / OpenAPI: 便利な周辺ツールが充実しており、モックサーバーを動かしたり・定義したAPIを使用するためのプログラムを生成出来たりします" 2022
  • 複数に分割された OpenAPI の yaml から TypeScript の型を自動生成する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    複数に分割された OpenAPI の yaml から TypeScript の型を自動生成する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "openapi-typescript を使って、TypeScript の型を自動生成する / yaml で分割している場合はうまく型定義を作ることが出来ません / swagger-cli で yaml を一つの json に統合して出力" 2023
  • OpenAPI + OrvalでrequestをカスタマイズしたSWRフックを生成する - Qiita

    リクエストをカスタマイズしつつOpen APIの定義ファイルからSWRフックを生成する方法をメモがてら記載する。 リクエストをカスタマイズしたい需要としては、APIエンドポイントに認証など追加の手続きが必要な処理が存在する場合に、その手続きを実施するためのカスタマイズを行うなどである。 Orvalの選定理由 Open APIからコードを生成するツールは多々あり、選定が難しい。最終的に残った候補のみを記載する。 Orval 設定ファイルが単純かつ、ドキュメントがしっかり書かれている。カスタマイズもある程度柔軟に可能。生成されるコードが比較的シンプルでわかりやすい。 swagger-typescript-api ejsを利用したテンプレートを利用し柔軟にカスタマイズできるため複雑なケースには有用だが、ejsは読みにくく開発難度が高い。(別プロジェクトで導入実績があるため、Orvalで実現できな

    OpenAPI + OrvalでrequestをカスタマイズしたSWRフックを生成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Orval: Open APIからコードを生成するツール + 設定ファイルが単純かつ、ドキュメントがしっかり書かれている。カスタマイズもある程度柔軟に可能。生成されるコードが比較的シンプルでわかりやすい" 2023
  • 【Go/Next.js】OpenAPIでサクッとはじめるスキーマ駆動開発 - Qiita

    OpenAPIとは OpenAPI(旧称Swagger)は、RESTful APIの定義とドキュメント化のための仕様です。この仕様を使用して、APIのエンドポイントやリクエスト・レスポンスのフォーマットをJSONまたはYAMLで記述します。OpenAPIを用いることで、開発者はAPIの仕様をチーム内でスムーズに共有することができ、さらにツールを利用することで型定義などのコードを自動生成することができます。 OpenAPIAPIの仕様を記述した例 openapi: 3.0.3 info: title: Sample API version: 1.0.0 servers: - url: "http://localhost:8080" description: "ローカル環境" - url: "http://sample.com" description: "番環境" tags: - nam

    【Go/Next.js】OpenAPIでサクッとはじめるスキーマ駆動開発 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "標準化されたフォーマットでAPIの詳細を明確にする / 開発者間のコミュニケーションが容易 + 誤解やミスを減少 / ドキュメントやクライアントライブラリを生成するツールが利用できる + 開発やテストの効率が向上" 2023
  • 今日から始めるswagger入門(最低限書けるようになる) - Qiita

    swaggerとは 古の時代、API仕様書はwordやexcelで表現され、各所に共有されるというのが一般的でした。 ですが近年、API仕様を表現する際にはswaggerを利用するのが最も効率的で、保守性が高く、世間一般で仕様化され、見やすいというのもあり、一般化されてきたのではないのでしょうか 今回はそんなswaggerの書き方について、まずは書くために覚えておきたいポイントを解説していこうかと思います! どう書いてくか swagger editorで書く 公式がWeb上に提供しているツールを利用し、すぐにでもswaggerの執筆が可能となっています! なにをインストールする必要もなく開始1秒で利用できるので、私も重宝してます なお、ページを開くとサンプルAPI仕様がすでにある状態でのスタートとなり、記法の参考などにもなります vscodeで書く 必要なプラグインをインストールし、vsc

    今日から始めるswagger入門(最低限書けるようになる) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "古の時代、API仕様書はwordやexcelで表現され、各所に共有されるというのが一般的でした / 近年、API仕様を表現する際にはswaggerを利用するのが最も効率的 / 最低限覚えるべきはpaths + pathsの中さえかければなんとかなる" 2023
  • GitHub ActionsでOpenAPIの静的HTMLを自動出力する(redocly/cli) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    GitHub ActionsでOpenAPIの静的HTMLを自動出力する(redocly/cli) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "redocly: OpenAPIのYAMLファイルから可読性の高い・静的なHTMLを生成 / YAMLを修正する度に redoclyを実行→HTMLファイルをアップロード していたので非常に面倒 / GitHubのページで共有できるので便利" 2023
  • OpenAPIを用いてSwitchbot Hubのデータを取得するAPIを実装する - Qiita

    openapi: '3.0.3' info: title: SwitchBot version: "0.0.1" servers: - url: https://api.switch-bot.com/v1.0 security: - Authorization: [] paths: /devices: get: operationId: devicesget responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/Devices" /devices/{deviceId}/status: get: operationId: devicesidstatusget parameters: - name: deviceId in: path required: tr

    OpenAPIを用いてSwitchbot Hubのデータを取得するAPIを実装する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "スマート家電からデータを取得するAPIをOpenAPIを用いて実装 / openapi-generator-cli: yamlファイルから、クライアントのコードを生成 / 生成したクライアント側のコードを通じて、簡単にAPIを呼び出す事ができる" 2023
  • 開発効率を爆上げするswagger術 - Qiita

    今回は、swaggerを使って開発効率を爆上げしたいあなたに、ちょっと踏み込んだswagger活用術を紹介したいと思います! paths sectionを修正しなければいけない機会を最大限少なくする paths sectionってそもそも指定すべきプロパティが多いので、ちゃんとAPI仕様を作ろうと思うとどうしても見づらくなります 特に、parametersやrequestBody、responsesが同居すると記述のルールが違うので統一感がなく、階層が深くなり見づらいです そんなpathsはやはり最大限シンプルに保つべきというのが運用していて思うことです 以下にpathsを最大限シンプルに記述した例を提示しますので、是非参考にしてみてはいかがでしょうか! openapi: 3.0.3 servers: - url: http://localhost:3000 info: title: te

    開発効率を爆上げするswagger術 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "swaggerにexamples記述をすると以下のキャプチャのように、レスポンス仕様を複数、UI内で表現し使用者に閲覧させることが / prismでも、リクエストヘッダーにキーワードを載せることで期待するレスポンスも得られる" 2023
  • Next.js + Redoc で1秒以内でレスポンスする API 仕様書をつくった - Qiita

    こんにちは zane です。 Collections というオープンソースのヘッドレス CMS をつくっています。今回パブリックな API 仕様書が必要になり Next.js(Nextra) + Redoc という組み合わせを試したら、なかなか良かったので手順としてまとめてみました。 OpenAPI(Swagger)などを使った API 仕様書はだいたいどのプロジェクトでも作成しますが、それを公開するとなると、機会はあまり多くはないかもしれません。が、大きく技術トレンドが変わる分野でもないので、覚えておくといずれ役に立つかもしれません! 完成品 公開されているページはこちら コードはすべて GitHub で公開していますので、参考にしてみてください。 https://github.com/collectionscms/collections/blob/main/docs/pages/ref

    Next.js + Redoc で1秒以内でレスポンスする API 仕様書をつくった - Qiita
    sh19910711
    sh19910711 2024/06/16
    "パブリックな API 仕様書が必要になり Next.js(Nextra) + Redoc という組み合わせを試したら、なかなか良かった / Redoc: OpenAPI 仕様で記述された yaml ファイルから HTML ファイルを生成し、静的なドキュメントにしてくれる" 2023
  • OpenAPIのTagsを使って特定のエンドポイントに対してのみミドルウェアを適用する - Qiita

    はじめに こんにちは、kenです。 先日、システム内で異なる権限を持つユーザーに対して、一部叩けるAPIに制限をかける必要がありました。その際OpenAPIyamlに書かれる「Tags」機能を使うことでこの問題を解決したので、記事ではこの方法の詳細と実際の実装サンプルをご紹介したいと思います。これは比較的簡単で、かつメンテナンスが容易な方法だと思います。 記事はHRBrain Advent Calendar 2023の14日目の記事です。 経緯 経緯については差し障りがないよう一部情報をぼかして書きますが、先日業務の中で「とある条件Aを満たしているユーザーについては一部のAPIを叩けないようにする」という対応をする必要がありました。 身近な例で例えると、一般会員とプレミアム会員のように会員の中でグレードがあるようなシステム体系のなかで、プレミアム会員にだけ許されているAPIを一般会員

    OpenAPIのTagsを使って特定のエンドポイントに対してのみミドルウェアを適用する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "異なる権限を持つユーザーに対して、一部叩けるAPIに制限をかける / OpenAPIのyamlに書かれる「Tags」機能を使うことでこの問題を解決 / oapi-codegenで生成されるコードをうまく使えばTagsの情報まで取得することができる" 2023
  • OpenAPI 定義ファイルから自動生成された Flutter (Dart) の API クライアントの便利な使い方 - Qiita

    この記事はカバー株式会社 Advent Calendar 2023 15日目の記事になります。 カバー株式会社エンジニアのSです。よろしくお願いいたします。 前回の記事は @ys-cover による「カバー株式会社におけるAWS Control Towerの導入」でした。AWS Control Tower の導入を検討されている方にとって、とても興味深い内容となっておりますので、こちらの記事もぜひご覧ください。 はじめに 先日弊チームメンバーが作成した記事が公開されました。記事に対する反応で多かったのが API クライアントの自動生成の箇所でした。 API クライアントの自動生成には openapi-generator の dart モジュールを利用しています。早期に API クライアント自動生成の仕組みを整えることで、クライアントチームは質的な機能実装に注力可能になりました。 また A

    OpenAPI 定義ファイルから自動生成された Flutter (Dart) の API クライアントの便利な使い方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "早期に API クライアント自動生成の仕組みを整える + 本質的な機能実装に注力 / クライアントは Dart 標準の http ライブラリを用いて作成されるため、メンテナンスコストを低く抑えられ、拡張性も高く様々な要件に柔軟" 2023
  • Zodのバリデーション実装時間を短縮しバックエンドとの整合性を保つ - Qiita

    はじめに NRI OpenStandia Advent Calendar 2023の 20日目担当のあやかです。 フロントエンドのバリデーション定義ファイルを自動生成出来ないか試してみたので紹介します この記事の前提として、 バリデーションライブラリとして、TypeScript first でスキーマ定義とバリデーション設定を行うことが出来るZodを使用 OpenAPI Specification(以下OAS)とJSON Schemaからファイル生成出来るかを検証 手動でバリデーション定義をしたファイルと自動生成したファイルの両方のバリデーションチェックを適用出来るか検証 を行い、その結果を紹介する記事です。 背景 業務でとあるWebアプリを開発しています。 このアプリは入力項目がとても多く、フロントエンドでもバックエンドでもバリデーションをかけなければいけないという要件があります。 そう

    Zodのバリデーション実装時間を短縮しバックエンドとの整合性を保つ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Zod: TypeScript first でスキーマ定義とバリデーション設定を行うことが出来る / json-schema-to-zod: JSON スキーマオブジェクトまたはファイルを JavaScript コード形式の Zod スキーマに変換" 2023
  • OpenAPI+Fastifyでスキーマファースト開発 - Qiita

    この記事は mediba Advent カレンダー2023 の20日目の記事です。 ※記事の内容はあくまで個人の発信であり、会社を代表する意見や見解ではありません。 ※記事内のコードは実際のプロダクトのものではなく記事用に作成したものです。 この記事ではNode.jsのHTTPサーバフレームワークであるFastifyでのAPI開発で、OpenAPIを使ったスキーマファースト開発を実現した話を書きたいと思います。 はじめに あるプロダクトを短期間で開発する必要があり、FE/BEの開発を並行してスタートできるようにスキーマファーストで開発することにしました。 FE/BEメンバーが集まって、APIのIF定義をOpenAPI Specification v3.0形式のYAML(以下、OpenAPI)で記述しながら決めました。 APIの開発において、フレームワークには前プロダクトを踏襲してFasti

    OpenAPI+Fastifyでスキーマファースト開発 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Fastify: スキーマ定義によりリクエストパラメータのバリデーションとTypeScript型付けをしてくれる機能 / OpenAPIのスキーマ定義部分はJSON Schemaに準拠しており、FastifySchemaの各項目もJSON Schema指定できる" 2023
  • Postman + ChatGPT = 100倍速APIサーバー開発 - Qiita

    はじめに こんにちは。@komasayukiです。 この記事は、全世界2,800万人以上の開発者に使われているAPIプラットフォームPostmanの記事を書こう by Postman Advent Calendar 2023 の8日目です。 PostmanChatGPTを組み合わせて、APIサーバーの開発を爆速で行う方法を紹介します。 Qiitaのようなナレッジ共有サービスを作ることを題材としてやってみましょう。 なお、今回使うサービスはすべて無料で利用できます。 ChatGPTを使ってQiitaクローンのOpenAPI仕様を作る OpenAPIとは、APIの仕様を記述するための標準規格です。サーバーがどういうRESTリクエストを受け付けて、レスポンスするかを記述します。 これは重要な作業ですが記述が難しいです。ChatGPTにお願いしましょう。 以下のようなスクリプトを書きました。 あ

    Postman + ChatGPT = 100倍速APIサーバー開発 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Postmanにはモックサーバーをインターネット上に作る機能 / ChatGPTを使ってPostman向けのOpenAPIやテストを自動生成 / そのままでは製品開発に使えなくても、Postman初心者にはとても役に立つのでは" 2023
  • OpenAPI・Swaggerでインタラクティブな API 仕様ドキュメントを作成する - Qiita

    初めに 今回はOpenAPIを用いたAPI設計書の書き方とSwagger(UI)の使い方についてまとめていきます。 この記事の目標はタイトルの通り、OpenAPI仕様に則ったAPI定義を作成し、SwaggerからそのAPI仕様を確認できることです。 API設計などについては省いており、あくまでOpenAPI仕様の書き方についての解説記事になります。 OpenAPIとは RESTful APIのインターフェースを記述するためのフォーマットです。 定められたフォーマットに則ってAPIの構造と動作を明確に定義することで 開発者はAPIのエンドポイント、パラメータ、レスポンスなどを正確に文書化し、共有することができます🚀 Swaggerとは Swaggerは、OpenAPI仕様を視覚化し、対話式のAPIドキュメントを提供するための一連のツールです。 以下のようなものがあります。 ツール 概要

    OpenAPI・Swaggerでインタラクティブな API 仕様ドキュメントを作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OpenAPI仕様に則ったAPI定義を作成し、SwaggerからそのAPI仕様を確認 / Swagger Codegen: OpenAPI仕様からクライアントライブラリ、サーバースタブ、APIドキュメントを自動生成するためのツール" 2023
  • Next.js14, Prisma5 で作る工数が激減する RESTFull API - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 弊社は、ハノイの小さなソフトウェア開発会社だ。あんまり忙しいのは嫌なので、規模は拡大せず、少人数で開発を行っている。私以外は、ベトナム人エンジニアで、スキルはまちまちだ。 受託案件では API を作ることが非常に多い。何度も作るので、なるべく工数がかからないように、なるべく品質が一定になるように作りたい。API に限らず、弊社では、Agile, Assets & Automation という 3 つの戦略で開発を行っている。Agile と Automation はその名の通りで、Assets は、簡単に言えば再利用可能なモジュ

    Next.js14, Prisma5 で作る工数が激減する RESTFull API - Qiita
    sh19910711
    sh19910711 2024/06/16
    "受託案件では API を作ることが非常に多い。何度も作るので、なるべく工数がかからないように、なるべく品質が一定になるように作りたい / ER図は、prisma-erd-generator、DBML は、prisma-dbml-generator で生成"
  • APIGatewayを作成するときにOpenAPIから型情報を読み込み補完がきくようにしたメモ - Qiita

    概要 API Gatewayの設定にOpenAPIを連携できないか検討した。 OpenAPIのJSONから型情報を読み込む形で実装してみたメモを残す。 検討 cdk - openapi-definitionを読むと、定義はすべてOpenAPIのほうに書く必要があるもよう。また、OpenAPIは3.1は使えず3.0か2.0を使う必要がある。 すべてのリソースとメソッドは OpenAPI 仕様ファイルの一部として定義する必要があり、CDK を介して追加することはできません。これは、これらのプロパティの重複や潜在的な混乱を防ぐためです。 こちらの記事で「OpenAPI定義にAWS用の設定値を記載するのが嫌だ」と言っているように、OpenAPIAWSの設定は分けて管理したい。 記事中ではopenapixを使用しているが、1年更新がないのが不安。 型定義をOpenAPIから取り込む方法を考える。

    APIGatewayを作成するときにOpenAPIから型情報を読み込み補完がきくようにしたメモ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "API Gatewayの設定にOpenAPIを連携できないか + JSONから型情報を読み込む形で実装 / OpenAPIは3.1は使えず3.0か2.0を使う必要がある / OpenAPIとAWSの設定は分けて管理したい + 型定義をOpenAPIから取り込む"
  • OpenAPIのスキーマ定義を、プログラム的に書けるTypeSpecを使ってみた - Qiita

    皆さんは、WebアプリのAPI仕様を定義するときはどのような方法をとっているでしょうか。StoplightのようなGUIツールを使うか、それともyamlをそのまま記述するか…。 私は今まで、後者のようにそのまま頑張ってyamlを書いていました。ただ、OpenAPIの文法を覚えなくちゃいけなくって大変だったり、冗長な作業になることもあったりして退屈だなぁーと思っていました。そんな中、この記事の主題であるTypeSpecというものを知って使ってみたので、その内容をこちらにまとめたいと思います。 概要 TypeSpecはMicrosoftが開発をしている、API仕様の定義などに特化した独自言語です。JavaScriptに似た使用感でAPI仕様を記述することができます。また、node.jsのエコシステムでコンパイルまで完結でき、セットアップの手順も少なく簡単でした。 セットアップ コンパイラのダウ

    OpenAPIのスキーマ定義を、プログラム的に書けるTypeSpecを使ってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "頑張ってyamlを書いて~ OpenAPIの文法を覚えなくちゃいけなくって大変だったり、冗長な作業になる / TypeSpec: Microsoftが開発 + API仕様の定義などに特化した独自言語 / JavaScriptに似た使用感でAPI仕様を記述"
  • OpenAPIを元にしたPostmanコレクションの作成・更新を自動化する方法 - Qiita

    はじめに これは、REST APIの仕様書としてOpenAPI Specification(以下、OAS)を管理していて、そのOASを元にPostmanコレクションを作成・更新したい思っている人向けの記事です。 PostmanGUIベースのアプリケーションであり、このGUIからOASをインポートして新規のコレクションを作成できます。作成後は、GUIを介してコレクションを直接更新ができます。しかし、この手動でのGUIを通したコレクションの作成・更新だけでなく、自動化したいニーズもあるかと思います。たとえば、GitHubなどのコード管理システムでOASファイルを管理しているシナリオでは、以下のような手順でのコレクションの作成・更新が考えられます: コード管理システム(GitHubなど)で管理しているOASファイルを更新する OASファイルの更新をトリガーにCI/CDワークフロー(GitHub

    OpenAPIを元にしたPostmanコレクションの作成・更新を自動化する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OASを元にPostmanコレクションを作成・更新したい / openapi-to-postman: Postmanが提供するOSS + OpenAPI 3.0 仕様を Postman コレクションv2 形式に変換するためのCLIやライブラリを提供"
  • Step CI で手軽に API をテストする

    3-shake Advent Calendar 2022 の 1 日目です。 株式会社スリーシェイクのメンバーが各々自由に技術・非技術ネタを投稿していきます。 1 日目のこの記事では、 Step CI という API テストツールが最高だったので紹介します。 概要 Step CI は API をテストするためのシンプルなオープンソースのコマンドラインツールです。 REST はもちろん、 GraphQLgRPC などその他様々な種類の API に対応しています。 stepci CLI をインストールして簡単な YAML ファイルを作成するだけで API のテストを実行することができます。 実行イメージ 検証環境 Step CI v2.5.5 Node.js v18.12.1 リポジトリ この記事内で使用しているサンプルコードは以下のリポジトリで管理しています。 使い方 1. インストー

    Step CI で手軽に API をテストする
    sh19910711
    sh19910711 2024/06/16
    "Step CI: REST はもちろん、 GraphQL や gRPC などその他様々な種類の API に対応 / CLI をインストールして簡単な YAML ファイルを作成するだけで API のテストを実行 / 検証では正規表現を使用したりその他様々なマッチャ" 2022
  • Step CIを用いたAPI自動テストのすゝめ

    はじめに こんにちは、D2Cエンジニアの吉田です。 日は私たちのチームが普段 Web API 開発で実際に利用している Step CI を用いたAPI自動テストの構築例を紹介しようと思います。 Step CI の簡単な使い方や利点をまとめ、CI/CDパイプラインとの統合についてまとめます。 Step CI とは Step CI はオープンソースのAPI自動テストツールです。 言語にとらわれず、YAML形式で簡単にAPIテストを記述することが可能です。 この記事ではRESTベースのAPIテストを紹介しますが、GraphQLgRPC、tRPC、SOAPといった異なるタイプのAPIテストを1つのワークフローでテストすることができます。 他にもCI/CDに組み込むことも可能で、Github ActionやBitbucket Pipelinesと統合することで継続的に自動テストを実行することが

    Step CIを用いたAPI自動テストのすゝめ
    sh19910711
    sh19910711 2024/06/16
    "Step CI: オープンソースのAPI自動テストツール + 言語にとらわれず、YAML形式で簡単にAPIテストを記述することが可能 / Github ActionやBitbucket Pipelinesと統合することで継続的に自動テストを実行"
  • [Vue3]Supabaseで作ったバックエンドを元にOpenAPIのドキュメントを出力しよう - Qiita

    個人プロジェクトでバックエンドとしてSupabaseを使っている。 SupabaseだとUIをぽちぽちするだけでバックエンドが完成。とても便利だ。 フロントエンドに集中した開発ができる。 今回はSupabaseで設定したバックエンド情報を元にTanStack Queryのエンドポイントメソッドを自動生成してみようと思う。しかし、OpenAPIのドキュメントをいちいち書くのがめんどくさいのでSupabaseさんに生成してもらいたい。 OpenAPIドキュメント生成 公式ドキュメントやGoogleドキュメントで調べてみてもやり方が見つからず、、 ChatGPT先生に聞いてみた。 Supabaseは、自動生成されたAPIドキュメントを提供しています。これを取得するには、以下のURLにアクセスします。 https://YOUR_PROJECT_ID.supabase.co/rest/v1/?api

    [Vue3]Supabaseで作ったバックエンドを元にOpenAPIのドキュメントを出力しよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Supabase: UIをぽちぽちするだけでバックエンドが完成 + フロントエンドに集中した開発ができる / Supabaseで設定したバックエンド情報を元にTanStack Queryのエンドポイントメソッドを自動生成してみよう"
  • Interface Definition Language (IDL) Shared Module 構築 - Qiita

    こんにちは。今回のポストでは、OpenAPI Specification、protobuf、gRPC、avroなど、一般的にインターフェース定義言語 (IDL) と呼ばれるものをPolyglot MSA環境で共有モジュールとして導入した事例について紹介したいと思います。 IDLとは? 一般的にIDLと呼ばれるgRPCを例に取ると、以下のように「通信」に関する仕様を記述することができます。 通信を仕様化することで共通のコードを通じた通信の共有 IDLによる前方/後方互換性の確保 通信を仕様化することで共通のコードを通じた通信の共有 ほとんどのIDLツールはCodeGenをサポートしています。例えば、上記の例の仕様を作成すると、通信部のオブジェクトとコードがすべて生成されます。これはクライアントとサーバーの両方で使用でき、IDLを作成することで、別途のI/O検証なしに信頼性の高いコードを作成で

    Interface Definition Language (IDL) Shared Module 構築 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ほとんどのIDLツールはCodeGenをサポート / クライアントとサーバーの両方で使用でき、IDLを作成することで、別途のI/O検証なしに信頼性の高いコードを作成できる / インターフェースファースト + すべてが自動化"
  • OpenAPIのyamlファイルとoapi-codegenでGoの自動生成をやってみた - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    OpenAPIのyamlファイルとoapi-codegenでGoの自動生成をやってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "OpenAPIドキュメントからGoのコード生成 / $refを使って別のファイルを参照しています。このままoapi-codegenを実行するとエラー / Redocly CLI: 自動的にOpenAPIドキュメントを結合 + 子ファイルを勝手に読み込んでくれる"
  • 最小限のテスト容易性を確保するための一提案 - Qiita

    要約 システムの保守性をあげるために自動テストを書くのは良いアプローチといえる しかし自動テストを書く時間がなかったり書くスキルがないメンバがいるという諸事情はよく発生する そうした時は最初(書き始め)のタイミングで、テスト対象のクラス・メソッドの処理を最後まで処理が通る1ケースだけ書こう このアプローチはシステムの保守性をあげるだけではなく、個人・メンバのスキルアップにも繋がることがある テスト容易性とは テスト容易性をGoogleで調べると難しそうな話が出てきますが、記事では テストがしやすい というふんわりとした言葉の意味合いで使っていきます テスト容易性はシステムの保守性を支える1要素ともいえ、このテスト容易性を高めることでシステムの保守性を少しでも高めることができるものです。(もちろん銀の弾丸ではありません) 質とスピード by t_wadaさん テスト容易性をあげるアプローチ

    最小限のテスト容易性を確保するための一提案 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テスト容易性を確保する: 新規のクラス、メソッドを作る最初のタイミングで自動テストを作れば良い / 面倒くさい: 前提や準備が既に多い + オブジェクトが複数の責務を持っていたり、何かと密結合になっている" 2022
  • RSpecでit / example / specifyはどのように使い分けるのか?〜日本語で書くならexampleって本当?〜 - Qiita

    RSpecでit / example / specifyはどのように使い分けるのか?〜日語で書くならexampleって当?〜RubyRailsRSpec はじめに 最近ときどき「RSpecでit/example/specifyをどのように使い分けたら良いのか」という話題を見かけるので個人的な私見を書いてみます。 使い分けに何か決まりはあるのか? → 技術上の決まりは何もありません it/example/specifyは技術的にはまったく同じメソッドです。なので、itをexampleやspecifyに置き換えても問題なく動きます。 # itを使う it 'adds numbers' do expect(1 + 1).to eq 2 end # itの代わりにexampleを使う example 'adds numbers' do expect(1 + 1).to eq 2 end # i

    RSpecでit / example / specifyはどのように使い分けるのか?〜日本語で書くならexampleって本当?〜 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストコードを英文として読みやすくする / it/example/specifyは技術的にはまったく同じメソッド / itとexampleで英語と日本語を使い分けなくてもRSpecは問題なく動きます + itに比べると若干違和感を減らせる" 2022
  • cancancanのテストをRSpecで書く - Qiita

    cancancanを使った際、テストに学びがあったので投稿します。 前提:cancancanとは 権限による制御が簡単にできるgemです。 cancancan Rails|CanCanCanの使い方解説 ↓私も1つ記事を書きました。 cancancanでモデル名に紐づかない制御をする方法 cancancanのテスト requestスペックなどで特定の権限が各アクションを実行できるかどうかをテストする方法もあると思いますが、今回はcancancanが用意しているmatcherを使ってテストする方法を紹介します。 参考 https://github.com/CanCanCommunity/cancancan/blob/develop/docs/testing.md require "cancan/matchers" describe "User" do describe "abilities"

    cancancanのテストをRSpecで書く - Qiita
    sh19910711
    sh19910711 2024/06/16
    "cancancan: 権限による制御が簡単にできるgem / cancancanが用意しているmatcherを使ってテストする / cancan/matchersをrequireすることでbe_able_toというmatcherを使えるようになる" 2022
  • リーダブルRSpec(カスタムマッチャー+RSpec::ContextHelper編) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    リーダブルRSpec(カスタムマッチャー+RSpec::ContextHelper編) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "読みやすいRSpec: 簡潔でテストケースを見てテスト内容が理解しやすいもの / テストケースを見てテスト内容を理解できるカスタムマッチャーが作れる場合は、使った方が読みやすい" 2022
  • 最近思うrspecをシンプルにする書き方(オレ流) - Qiita

    rspec書き方指南ではない 最近自分でやってみて、テストが意外に楽に書けるのではないかと思うやり方をまとめてみた。 ベストだとか唯一の書き方だとかそういう事を言いたいわけではない。各自自分の好きなやり方で書けばいいと思う。最終的には自分の書いたクラスがちゃんとテスト出来ていれば目的は達成している。 個人的な主観としてテストは出来るだけシンプルにしたい。そうじゃないと個人的にテストを書くのが嫌になるし、テストが間違ってて、そもそも何をテストしてるのか?という事になりたくない。 と言うことを解決できるのではないかという投稿。 要点 クラス内のメソッド(処理)は出来るだけシンプルにしたい 一度しか呼ばれないようなロジックでもメソッドに落とし込みたい メソッドが増える分、内部のメソッドと外部向けのメソッドをちゃんと意識する itに説明は要らない テスト中に使用する変数内容は実際の条件を意識しない

    最近思うrspecをシンプルにする書き方(オレ流) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストは出来るだけシンプルにしたい / 変数が30個もあるようなメソッドと比べ、頭の中で覚えることが極端に減る、ので1年後の自分でも理解が楽 / 表に出ているメソッドだけを見て動かせるような構造にしたい" 2022
  • AWS SDK Rubyでスタブを行う - Qiita

    はじめに AWS SDKを使用したコードに対してテストを記述したい場合、AWSのSDKで用意されているClientStubsを使用して、スタブを行うことが可能です。 ドキュメント自体は公式が出しているものがありますが、この例だけではやりたいこと(Aws::S3::Client以外のインスタンスを使うケース)が実現できなかったので、今回調べたことについてまとめました。 環境 Ruby: 2.7.1 aws-sdk: 3.1.0 aws-s3-sdk: 1.114.0 公式ドキュメントから このドキュメントにあるようにAws::ClientStubsというモジュールが、各サービスに対応したClientクラスにincludeされています。 今回はS3を使って、その例を紹介します。 このモジュールに定義されているのはapi_requests, stub_data,stub_responsesの3つ

    AWS SDK Rubyでスタブを行う - Qiita
    sh19910711
    sh19910711 2024/06/16
    "AWS SDKを使用したコードに対してテストを記述したい / SDKで用意されているClientStubsを使用して、スタブを行うことが可能 / Aws::ClientStubsというモジュールが、各サービスに対応したClientクラスにincludeされています" 2022
  • RSpecでElasticsearchを使用しているモデルのテストでのみインデックスの初期化を行う方法 - Qiita

    TL;DR RailsのメソッドをRspecでテストする際に、Elasticsearchを使ったモデルに対してのテストの実行時にのみ、実行前後でElasticsearchのインデックスを初期化する処理を入れる方法です。 やりたかったこと elasticsearch-railsgemを用いたRailsのアプリケーションにおいて、下記のようにElascticsearchを用いて検索や絞り込みを行うメソッドを実装しました。 class SampleClass < ApplicationRecord def search(filter_ids, target_ids: [], min_price: nil, max_price: nil, size: 200) __elasticsearch__.search({ size: size, query: build_query(filter_ids,

    RSpecでElasticsearchを使用しているモデルのテストでのみインデックスの初期化を行う方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Elasticsearchを使ったモデルに対してのテストの実行時にのみ、実行前後でElasticsearchのインデックスを初期化する / workflowの中でElasticsearchのコンテナを用意して、テストの実行環境から読み込めるようにすればOK" 2022
  • テストにおけるリーダブルとDRYの両立(あるいは妥協案) - Qiita

    更新 2023/02/12 rspec-parameterized gemを使用したコードサンプルを追加 完全なコードベースのリンクを追加 Tl;DR テストにおいて、可読性は最重要 一方でDRYに書かないと保守性が悪い場合もある 折衷案として、コメントやインデントを活用するといいかも・・! rspec-parameterized gemを利用するとより良い 前提 記事では、言語/テストフレームワークとしてRuby/RSpecを使用します あくまで筆者の主観/経験に基づく一意見であることに留意ください テストにおいて、可読性は最重要 テストにおいて、可読性は最も重要だと考えます。例えば以下のような関数をテストしたい場合、 # 半角数字7桁の文字列かどうかを判定する def self.valid_postcode?(postcode) return false unless postcod

    テストにおけるリーダブルとDRYの両立(あるいは妥協案) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テスト仕様書を書いているつもりで、上から順番に読めばテストしたい内容が一目でわかるような作りが望ましい / 入力と期待値を一行ずつ列挙するテスト + この手法をサポートするための便利なgemがあります" 2023
  • リファクタリングしても壊れないテストコード - Qiita

    はじめに 記事は、私が最近読んだ著書 「単体テストの考え方/使い方」で紹介されている、リファクタリングに強いテストを書くためにはどうするべきか、という記述について簡単にまとめたものです。ここで紹介する内容以外にも多くの素晴らしい情報が詰まったなので、是非皆様も読んでみてください! リファクタリングへの耐性 まず、書において作者は、テストの目的とはバグを起こすことなく、新しい機能の追加やリファクタリングを行えるようにすることだと述べています。 そこで、テストコードが備えるべき要件の一つとして、リファクタリングへの耐性を挙げています。 参考:良い単体テストを構成する4の柱 バグに対する保護 リファクタリングへの耐性 迅速なフィードバック 保守のしやすさ リファクタリングへの耐性とは、テストが失敗することなく、コードのリファクタリングが行えるかどうかを示す指標です。 例えば、リファクタリ

    リファクタリングしても壊れないテストコード - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストの目的とはバグを起こすことなく、新しい機能の追加やリファクタリングを行えるようにすること / リファクタリングへの耐性: テストが失敗することなくコードのリファクタリングが行えるかどうかを示す指標" 2023
  • テストの正常系、異常系、準正常系について - Qiita

    テストの正常系、異常系、準正常系について ソフトウェアテストは正常系、異常系、そして準正常系のケースをカバーすることが重要です。これにより、アプリケーションが予想どおりに動作し、エラーや問題に対処できるかどうかを確認できます。 1. 正常系テスト 正常系テストは、アプリケーションが正常な状態で正しく動作するかどうかを確認します。ユーザーが期待通りの操作を行う場合の挙動をテストします。例えば、ユーザーがログインし、メールを送信するなどです。 2. 異常系テスト 異常系テストは、アプリケーションが異常な状況に遭遇したときにどのように振る舞うかを確認します。ユーザーが誤った情報を提供したり、システムエラーが発生した場合のテストです。これにより、エラーメッセージが正しく表示され、セキュリティの問題やデータ損失を防ぎます。 3. 準正常系テスト 準正常系テストは、正常系と異常系の中間に位置します。一

    テストの正常系、異常系、準正常系について - Qiita
    sh19910711
    sh19910711 2024/06/16
    "正常系テスト: 主要な機能を確認 + 品質を保証 / 異常系テスト: セキュリティと信頼性を強化 + 準正常系テスト: ユーザーエクスペリエンスを向上 + ユーザーが必要事項を入力したがパスワードが弱い場合のテスト" 2023
  • Everyday RailsでRspecについて学んだこと - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Everyday RailsでRspecについて学んだこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "コントローラのテストは最近では非推奨 + 代わりとしてリクエストスペックの使用が推奨 / 失敗のテストはまとめる: 通常、一つの検証が失敗するとそこで停止 + aggregate_failuresで囲むと一つ検証が失敗しても続けて検証" 2023
  • RSpecでテストケースのテストを書きたい - Qiita

    SmartHR Advent Calendar 2023 シリーズ2の1日目です。 最近、あるメソッドに対してテストケースが漏れなく書かれていることを保証するテストがほしいと思うことがあったので調べてみた記録を残します。 どういうときにそのようなテストが欲しくなるか、具体例を見ながら説明していきます。 具体例 ここに2つの数値と演算子となる文字列を渡すと計算結果を返してくれる.calcメソッドを持つCalculatorクラスがあります。 現時点では足し算(plus)、引き算(minus)に対応しています。 class Calculator AVAILABLE_OPERATORS = %w(plus minus)# 足し算、引き算のみできる def self.calc(left, operator, right) raise ArgumentError unless AVAILABLE_OP

    RSpecでテストケースのテストを書きたい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "あるメソッドに対してテストケースが漏れなく書かれていることを保証するテストがほしい / RSpecにはメタデータを取得するメソッドが用意されており、それを使うことでやりたいことを実現できそう" 2023
  • 運ゲー化していた動的UIのテストをリトライするためにrspec-retry_ex gemを導入しました - Qiita

    発生した問題 私たちが扱うプロダクト内では、ユーザーの入力値に基づき表示が変化する動的なUIが存在します。 このフロントエンドのテストはRSpecを用いて行っていました。 しかし、このような動的UIの自動テストは、何回かに1回の確率で落ちてしまい、GREENになるかどうかがある意味「運次第」となる傾向がありました。 問題が発生することの課題 変更していない箇所に対してテストが落ち、CIツールの画面上で「Retry」をすることは開発スピードの足を引っ張ります。 そこで、落ちやすいテストに関して自動でリトライしてくれるgemを導入しました。 対象となるテスト example '試算ができないこと' do visit('/try/input') fill_in('simulation_postcode_1', with: '100') fill_in('simulation_postcode_2

    運ゲー化していた動的UIのテストをリトライするためにrspec-retry_ex gemを導入しました - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ユーザーの入力値に基づき表示が変化する動的なUI / 何回かに1回の確率で落ちてしまい、GREENになるかどうかがある意味「運次第」となる傾向 / 落ちやすいテストに関して自動でリトライしてくれるgemを導入" 2023
  • Rubyで、テスト対象のコードで exit していると RSpec がそこで正常終了する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rubyで、テスト対象のコードで exit していると RSpec がそこで正常終了する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "RSpec のテストの実行数がなぜか実行ごとに異なるという問題 / 原因はテストコード中で exit を実行していること。特に rake タスクのテストとかで結構ある / RSpec ごと終了するので何もテスト実行されてない" 2023
  • RSpecのパラレル実行:効率的なテストのための道 - Qiita

    はじめに 開発の現場では、テストの実行時間がプロジェクトの生産性に直接影響を与えます。特に大規模なプロジェクトでは、テストが肥大化し、時間がかかりがちです。ここ最近は私が普段使っているRSpecというRuby on Railsでよく使われるテストの実行時間を削減するためにも、パラレル実行(並列で実行するテストの方法)の導入の必要性を感じ始めました。 この記事は「テストをパラレル化してみたいよ」という計画についてまとめたものになります。 パラレル実行の必要性 テストの実行時間を短縮することは、開発サイクルを加速し、より迅速なフィードバックを可能にします。これは、バグの早期発見や機能改善の迅速な実装につながり、結果として生産性が向上します。 実現方法の具体化(Myappの例) 例えばMyappアプリというでRSpecのパラレル実行を設定するには、以下の手順に従います: Gemの導入 Gemfi

    RSpecのパラレル実行:効率的なテストのための道 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "RSpecのパラレル実行は、テストの効率化に大きな可能性 / 適切なツールと戦略を用いることで、テストプロセスを高速化し、生産性を向上させる / パラレル実行の効果を評価するためにはモニタリングが重要"
  • 大規模 Rails で役立つテクニック: コード品質の担保 - Qiita

    はじめに 先日、LTイベント「Qiita Night~Rails~」にて登壇させていただきました。 そこで、Railsで大規模Webアプリケーションを 開発するときに知っておきたいテクニックを Qiita の Rails を例にいくつか紹介しました。発表資料はこちらです。 アーカイブ動画もあります。 これまで大規模 Rails で役立つテクニックをそれぞれ記事として紹介しました。 この記事は、LT で話した残りの部分、「Qiita が Rails のコード品質を担保するためにやっていること」を紹介します。 Qiita が Rails のコード品質を担保するためにやっていること それぞれ簡単に紹介していきます! RuboCop Qiita の Rails では RuboCop を導入しています。RuboCopRuby のコードを静的解析し、よくない書き方があると指摘してくれます。 実行

    大規模 Rails で役立つテクニック: コード品質の担保 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストが多いことによるデメリットとして Flaky Test が発生してしまったり、仕様が大きく変化するとテストの修正箇所が多くなってしまう / テストがあることで得られる恩恵を考えると、それを直すのも苦ではない"
  • 忘れやすいRspecのletとlet!の違い - Qiita

    はじめに rspecのletとlet!の違いを忘れてしまうことが多いのでここにメモする 問題 letとlet!はRSpecのヘルパーメソッドで、テスト内で使用するデータを定義するために使われます。しかし、それらはいつデータが生成されるかという点で違いがあります。 このような場合はcourseが複数保存されている必要があるのでlet!で定義しないとなにも保存されていない状態になります。 get "/api/v1/courses" expect(JSON.parse(response.body)[0]["authority"]).to eq(course.authority) expect(JSON.parse(response.body)[0]["travel_mode"]).to eq(course.travel_mode) expect(JSON.parse(response.body)

    忘れやすいRspecのletとlet!の違い - Qiita
    sh19910711
    sh19910711 2024/06/16
    "letとlet!はRSpecのヘルパーメソッドで、テスト内で使用するデータを定義 / let: 遅延評価 + 呼び出されたときに初めて生成 / let!: 即時評価を行います + テストケースが実行される前にデータが存在することを保証"
  • 複数台で parallel_tests を動かす場合でも、実行時間ベースでテストを分割できるようにする - Qiita

    RSpec を並列に実行してくれるツールとして parallel_tests があります。このツールは CPU 数などの情報から、自動で最適な並列数で RSpec などを複数同時に実行してくれるツールです。これにより通常よりも早くテストを完了することが出来ます。 Qiita でも parallel_tests を使いつつ、複数のマシンを利用して CI での自動テストを回しています。(テストが大量にあるのと、テストを動かすマシンスペックの都合などで、こういう構成になっています。) こういう感じで並列にテストを回す場合は、実行時間ベースでテストを分割して割り振ることで、テスト完了までの時間が早くなります。parallel_tests かつ複数マシンの場合、そうするのがやや面倒なのですが、うまく設定できたので、今回はそのやり方一例として紹介します。 (前提知識): parallel_tests

    複数台で parallel_tests を動かす場合でも、実行時間ベースでテストを分割できるようにする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "parallel_tests: CPU 数などの情報から、自動で最適な並列数で RSpec などを複数同時に実行してくれる / 並列にテストを回す場合は、実行時間ベースでテストを分割して割り振ることで、テスト完了までの時間が早くなります"
  • Rspecでモックを使用してテストを書いてみた - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rspecでモックを使用してテストを書いてみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存 / テスト内でも何かしらの処理を持たせることで、テストダブルに別のテストダブルを呼ばせるなどの動作も取れる"
  • 【一網打尽】Specが書かれていないメソッドを検知する構文解析CLIツール"omochi"の紹介 - Qiita

    課題 わたしは、Ruby on Rails を使ってアプリケーション開発を業としているエンジニアです。 Railsで機能を開発すれば、当然Specも書く必要がありますよね。Specを書かないと動作確認ができていない状態でリリースしてしまう危険性があります。 しかし、開発中に多くのクラスやメソッドを書いていると、どのクラスに対して/どのメソッドに対してSpecを書いたのか忘れてしまいます。そうすると、十分に動作を検証していない状態で、PRがマージされてしまうことがあります。 Railsのアプリケーションにおいて、どのメソッドにSpecが書かれていて、どのメソッドには書かれていないのかをSpecファイルを見なくても明らかにしたい!そんなふうに考えたことはないでしょうか。 わたしは、実装を見た瞬間に対応するSpecが存在することが保証されている(または、実装側にSpecが不要であることが明示さ

    【一網打尽】Specが書かれていないメソッドを検知する構文解析CLIツール"omochi"の紹介 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "実装を見た瞬間に対応するSpecが存在することが保証されている(または、実装側にSpecが不要であることが明示されている)ようにしたい / RSpecのコードの雛形を自動生成する機能 + Bedrockの機能を活用"
  • RSpecによるRailsテスト入門を読んで - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 今回はRSpecによるRailsテスト入門というを読んだので、そちらの感想を書いていこうと思います! 今回読んだはこちらです。 良かったところ RailsRubyの書籍はたくさん存在していますが、自動テスト(RSpec)についての日語の書籍はなかなか見たことがありませんでした。よくRailsの書籍の最後の方に少しだけのっていたり、動画の中で少し触れていたりというものはありますが、ガッツリテストのって見かけないのでテストの学習をしたい方にはとても良いと思いました。 悪かったところ テストって結構簡単に書けると思われてい

    RSpecによるRailsテスト入門を読んで - Qiita
    sh19910711
    sh19910711 2024/06/16
    "期待する結果は能動形で明示的に記述 + exampleの結果がどうなるかを動詞を使って説明する / チェックする結果はexample1つにつき1個だけにする / 起きてほしいことと、起きてほしくないことをテストする"
  • FactoryBotでtraitを使おう - Qiita

    はじめに FactoryBotでテストデータを作成するに当たってtraitを押さえるのは必須かなと思います。 RSpecをこれから始める方向けにこの記事を書きます。 traitを使ってみる 一例としてTaskのファクトリを作成する場面を想定してtraitを使ってみます。 # spec/factories/tasks.rb FactoryBot.define do factory :task do title { 'Task' } status { :todo } from = Date.parse("2019/08/01") to = Date.parse("2019/12/31") deadline { Random.rand(from..to) } trait :done do status { :done } completion_date { Time.current.yester

    FactoryBotでtraitを使おう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "FactoryBot: テストデータを作成するに当たってtraitを押さえるのは必須 / 一例としてTaskのファクトリを作成する場面を想定 / statusがdone、completion_dateがTime.current.yesterday のtaskが作成でき + traitを使えば簡潔に書ける" 2020
  • 【RSpec】フレーキーなテスト(たまに落ちるテスト)の直し方 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 自動テストを整備しておくと大量のテストを自動実行してくれるので大変便利です。 ですが、テストコードが増えてくると「パスするはずなのに、なぜかたまに失敗する」というテストが出てきます。 このような不安定なテストを「フレーキー(flaky)なテスト」と呼びます。 フレーキーなテストの問題点 フレーキーなテストは「たまに失敗するだけ」なので、何度かやり直せばパスします。 なので、GitHub ActionsのようなCIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがちです。 し

    【RSpec】フレーキーなテスト(たまに落ちるテスト)の直し方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "フレーキーなテスト: 「たまに失敗するだけ」なので、何度かやり直せばパス / CIツール上でテストが落ちても、「あ、また落ちた。再実行したら直るかな(ポチッ)」という安易な解決策に走りがち"
  • PlaywrightをRailsに導入して手動テスト工数を減らす - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 対象者 Cypressを使ったテストを書いたことがある人 RailsのRSpecを使ったテストを書いたことがある人 手動テスト辛い 私が担当している案件の中には、1年以上運用しているwebサービスがあります。 フロントエンド・バックエンド共に存在します。 課題は色々あるのですが、一番課題に感じているのがテストです。 そのサービスの前回の機能追加リリース時は、画面操作系のテストは手動で行いました。 そうなってしまった理由は大きく分けて以下3点です。 画面操作系の自動テストを書く時間がない 手動テストした方が早いという考えがある 今の画面操

    PlaywrightをRailsに導入して手動テスト工数を減らす - Qiita
    sh19910711
    sh19910711 2024/06/16
    "画面操作系の自動テストを書く時間がない + 画面操作後のDB値チェックができない + 手動テストした方が早いという考えがある / Playwright: Microsoftが開発しており、近年人気で出てきている"
  • Factorybotのtransient属性とは何か - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに Factorybotのコード内に transient という定義を見かけました。 初めて見かけた属性だったので調べてみました。 transient属性とは? factory_bot gemのGETTING_STARTEDドキュメントには以下のように定義されていた。 Transient attributes are attributes only available within the factory definition, and not set on the object being built. This allows

    Factorybotのtransient属性とは何か - Qiita
    sh19910711
    sh19910711 2024/06/16
    "transient: モデルに定義された属性とは別にファクトリー内の一時的な変数のように利用できる属性 / ファクトリーでcreateするときに、フラグの値を渡すことで任意のデータを登録するようにできる"
  • Rails7(Hotwire)のSPA体験が快適すぎるので紹介する - Qiita

    Rails7を使った管理画面を業務で、2件ほど進めているのですが、 Rails7から搭載されたHotwireによるSPAっぽい開発が良すぎたので紹介します。 特に今回はRansack、Kaminariをつかった検索一覧画面の実装を紹介します。 これを例えば、Rails API + Vue.jsとかでやろうものなら、なかなか大変ですね。(っていうかめんどくないのでやらない) 事前準備 今回使うプロジェクトはこちら 情報 ruby2.7 Rails7.0 css: tailwind css 使用するデータ シンプルにべ物を管理するアプリを作りたいと思います # べ物をカテゴライズする種別データ create_table :kinds do |t| t.string :name t.timestamps end # べ物データ create_table :foods do |t| t.st

    Rails7(Hotwire)のSPA体験が快適すぎるので紹介する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Vue,Reactなどでやろうものなら、かなり大変で、コード量はサーバーサイド、フロントエンド共にそれなりに増え + ページネーションまでやるとかなり面倒 / turbo_frame_tagを適切に書くだけで、済むのは本当にすごい" 2022
  • Hotwireを使って正規表現チェッカーを作ろう - Qiita

    @z_ohnamiです。こんにちは。 railsの7から導入されたHotwireを使って、JavaScriptをできる限り書かずに正規表現チェッカーを作ってみました。 正規表現チェッカーといえば、Rublarというサイトが以前から存在していて私は日頃からお世話になっていたのですが、見た目はそちらを参考にして作りました。 名前は「RegExpress」にしました。 https://tools.bigwave.biz/regular_expressions 以下のように、正規表現のパターンとテスト用の文字列を入力した時点で結果が返ってきます。 Hotwireを使わずにrailsで作った場合はformのsubmitをしてもらわないと結果を返すことができません。 また、テキストエリアをポンポンと追加していますが、これもRailsのみで実現しています。 こうした動的かつ部分的な画面の変更自体は特に珍

    Hotwireを使って正規表現チェッカーを作ろう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "JavaScriptをできる限り書かずに正規表現チェッカー / 動的かつ部分的な画面の変更自体は特に珍しいものではりませんが、 これをrailsのみで実現できている / Stimulusのルールに則り、子気味よく書ける" 2022
  • Hotwireで検索機能を作ってみる - Qiita

    Rails7 でデフォルトとなったHotwireを使って、検索機能を作ってみようと思います。 今回の完成形はこんな感じです。jsは使いません! Hotwireとは モダンなWebアプリケーションを構築するための代替アプローチです。 シングルページアプリケーション(以下SPA)を作る時に ReactVue が選択肢に上がると思いますが、それとは別のアプローチを取ります。 以下のような特徴があります。 Hotwire は複数のライブラリから構成されている HotwireHTML OVER THE WIREの略称で、以下の複数のライブラリをまとめた概念になります。 Turbo Hotwire の核となるライブラリ Turbolinks の後継者で3つの技術で構成されている Turbo Drive Turbo Frames Turbo Streams 今回は各々の技術の違いを意識しないで機

    Hotwireで検索機能を作ってみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "HotwireはHTML OVER THE WIREの略 / SPAを作るときには、バックエンドから JSON でデータを渡してフロントエンドで HTML を構築することが多い / Hotwire では JSON ではなく HTML を返します" 2022
  • 【Rails7で遊んでみた】画像つき投稿をSPAっぽく投稿する・ブロードキャストを使ってリアルタイム通信する - Qiita

    はじめに この記事は簡単なCRUDアプリをSPA(Single Page Application)っぽくしたり、ブロードキャストを使ってリアルタイム通信したりと、ちょっとRails7に触ってみての感想になります。 Railsの5系・6系を使ったことはあるけれど、7系はまだ触れていない人向けに、この記事を読んでRails7系に興味をもってもらえると嬉しいです。 ■ 開発環境 ・Ruby:3.1.2 ・Rails:7.0.4 イメージの共有 今回試したことをパッと見で分かりやすく伝わるようにと動画を用意しました。試してみた中で今日は以下の2つについて書いていきます。 画像つき投稿をSPAっぽく投稿する ブロードキャストを使ってリアルタイム通信する 【 画像つき投稿をSPAっぽく投稿する動画 】 【 ブロードキャストを使ってリアルタイム通信する動画 】 画像つき投稿をSPAっぽく投稿する これを

    【Rails7で遊んでみた】画像つき投稿をSPAっぽく投稿する・ブロードキャストを使ってリアルタイム通信する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "SPAっぽく1つのページ上で投稿が完結して尚且それを確認できるようにしたかった / JavaScriptを書き加えたり、複雑なコードを書いたりすることもなく、Rails7が用意してくれているレールの上に乗ってコードを書くだけ" 2022
  • Hotwireを理解するために選曲アプリを作ってみた - Qiita

    はじめに Ateam Finergy Inc.× Ateam CommerceTech Inc.× Ateam Wellness Inc. Advent Calendar 2022の21日目の記事です。 日はエイチームコマーステックの@hibiheionが担当します。 HotwireJavaScriptを使わずにSPA(Single Page Application)を作成することができる仕組みです。Rails 7では標準機能になっています。業務でRailsを使っている身としては無視できない技術だったので作ろうと考えていた個人開発のWebアプリに導入してみました。 選曲アプリの概要 カタログ情報を見ながら選曲するためのWebアプリです。ジャズをよく聴くのですが、その目線で見るとSpotify(に限らず私が知っている音楽ストリーミングサービス)が持っている情報が物足りないと感じていたこと

    Hotwireを理解するために選曲アプリを作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Hotwire: JavaScriptを使わずにSPA(Single Page Application)を作成することができる仕組み / Turbo Frames: ページ内の特定の範囲のみを書き換える + HTMLにおけるiframeと似た仕組み" 2022
  • Rails7 のフロントエンド関連の Gem を分類 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rails7 のフロントエンド関連の Gem を分類 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "最近の Rails にはフロントエンドに関係する ooooo-rails といった Gem がたくさんあり + たくさんありすぎてよくわからなかった / importmap-rails と cssbundling-rails は組み合わせて使うものではない" 2023
  • data-turbo-confirm の確認ダイアログをカスタマイズする方法 - Qiita

    完成イメージ はじめに Turbo では、フォームやリンクに data-turbo-confirm 属性をつけると確認ダイアログを表示できます。 通常はブラウザ標準の確認ダイアログ window.confirm() が使われます。 実は、Turbo.setConfirmMethod() で window.confirm() ではなく別の処理を実行するように設定できます。 適当な関数を Turbo.setConfirmMethod() の引数にすることで、window.confirm() の代わりに独自の確認ダイアログを表示できるようになります。 引数にする関数が Promise<boolean> を返すのであれば、dialog タグを使うことも、Bootstrap のような CSSフレームワークのモーダルを使うことも、Micromodal.js のようなライブラリを使うこともできます。

    data-turbo-confirm の確認ダイアログをカスタマイズする方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Turbo では、フォームやリンクに data-turbo-confirm 属性をつけると確認ダイアログを表示でき / 適当な関数を Turbo.setConfirmMethod() の引数にすることで、window.confirm() の代わりに独自の確認ダイアログを表示できる" 2023
  • Devise 4.9をインストールしてRails 7.0 (Hotwire/Turbo)に対応する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Devise 4.9をインストールしてRails 7.0 (Hotwire/Turbo)に対応する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rails 7.0が2021年の暮れにリリースされて以降、Deviseは長らくRails 7.0(というか、Hotwire/Turbo)に完全対応していない状態が続いていました / 最新版のDeviseとRespondersをインストール" 2023
  • Stimulus スコープの概念 - Qiita

    Stimulusにはあまり知られてませんがスコープの概念があります。 ドキュメントにも少し記述があります。 しかしこの辺はドキュメントで語り切れてない挙動もあってちょくちょく家にissueがたつのでその辺の解説をしようと思います。 スコープの範囲 コントローラを適応した要素以下子孫全体になります。 しかし、同名のコントローラをネストした場合、その子孫側のコントローラのスコープは親側のコントローラのスコープの範囲外になります。 ゆえに子側のコントローラのスコープにあるTargetは親側のコントローラでは参照できません。 試しにその条件でtargetの数を計算するコードを用意してみました。 See the Pen Qiita_stimulus_scope_1 by nazomikan (@nazomikan) on CodePen. 親側のtestコントローラからみるとitemターゲットは一

    Stimulus スコープの概念 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ドキュメントで語り切れてない挙動もあってちょくちょく本家にissueがたつ / 同名のコントローラがネストされてる場合、子側で発生したイベントは親側のdata-actionとしては処理されません" 2023
  • Stimulus 公式ハンドブックの次に読むものは? - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? (この記事はあくまで私の主観です。) Stimulusの公式ドキュメントはそれなりに充実しています。 しかし今のところStimulusの起源(origin)や挙動(reference)に関する記述がありますが設計についての実践的なところはあまり記述されていません。 あなたが次に読む最適なものは何でしょう? 信頼できるのは作者だけ いろんなリソースにたどり着くかもしれません。 Better StimulusJS? Hotwire Discussion? Qiita? しかし私が当におすすめしたいのは、作者である37signals(旧Ba

    Stimulus 公式ハンドブックの次に読むものは? - Qiita
    sh19910711
    sh19910711 2024/06/16
    "おすすめしたいのは、作者である37signals(旧Basecamp社)がどのようにこのStimulusを使ってるかを観察すること / heyのコードから読み解けるコントローラの単位はUIではなく"振る舞い"です" 2023
  • 我々はRailsのTurboと向き合わなければならない - Qiita

    Turboとは Railsアプリの開発で直面する問題として、著名ないくつかのGemがインストールできないというものの他に、以下のようなものがあります。 ・画面遷移が行われない ・Javascriptのloadイベント等が発火されない 等など その他トラブルに関しては以下の記事で詳しくまとめてくださっています。 これは、デフォルトでインストールされるTurboによって引き起こされている問題です。 Turboには以下のような機能があります。 ・Ajaxで良さげに部分更新してくれる ・SPAっぽいものを手軽に書ける ・delete等のmethodでリクエストを投げられる ・確認ダイアログを手軽に出してくれる しかし、自動で入って自動で動作するため、余計なおせっかいとなることも多く、とりわけ画面遷移が行われない問題とJavascriptのloadが発火されない問題に直面する人も多いと思います。 と

    我々はRailsのTurboと向き合わなければならない - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Turbo: Ajaxで良さげに部分更新 + SPAっぽいものを手軽に書ける / 自動で入って自動で動作するため、余計なおせっかいとなることも多く / 画面遷移が行われない問題とJavascriptのloadが発火されない問題に直面する人も多い" 2023
  • Stimulus v3.2.2で追加された機能・変更された振る舞い - Qiita

    執筆時点で昨夕Stimulus v3.2.2がリリースされました。 パッチバージョンではありますが、内容がパッチバージョンとは言えないものが多いので一応拾っておこうと思います。 機能の追加・変更 keyboard event filterにPageUp/PageDownが追加された Stimulusにはもともとキーボードイベントのフィルタリング機構があります。 下記のようにアクション記述のイベント名を書くところのキーボードイベント(keydown,keyup,keypress)にドットで続けてキー名を書けば、対象のキーが押された時だけ実行されるアクションとして定義することができる機能です。 そこにPageUp、PageDownのキーをデフォルトで指定できるようになりました 構文中ではpage_up, page_downという名前で指定するようです。 キーボード操作を実現する際、PageUp

    Stimulus v3.2.2で追加された機能・変更された振る舞い - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Stimulusにはもともとキーボードイベントのフィルタリング機構があり / キーボードイベントにドットで続けてキー名を書けば、対象のキーが押された時だけ実行されるアクションとして定義することができる" 2023
  • Turbo Stream の flash メッセージを layout で共通化する - Qiita

    結論 views/layouts/application.turbo_stream.erb と views/layouts/turbo_rails/frame.turbo_stream.erb に書くのがよさそう。 解説 Rails では layouts/application.html.erb に flash メッセージの表示処理を書いておくのが一般的で、turbo_stream でも layouts/application.turbo_stream.erb を用いてメッセージの表示処理を共通化することができます。しかし、turbo_frame 内からリクエストされた場合は、この layout が適用されず、flash メッセージを出力するには別の工夫が必要でした。 これは turbo_frame リクエストのときは layout: false となるようになっていたためですが、turb

    Turbo Stream の flash メッセージを layout で共通化する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rails では layouts/application.html.erb に flash メッセージの表示処理を書いておくのが一般的 / メソッドを用意してturbo_streamの分岐をいれて〜と処理を足すより、これくらいのコード量であればファイルを2つ用意した方がよい" 2023
  • Turbo✖️Stimulusを使用したモーダルでのレビュー機能を実装してみた - Qiita

    初めに 初めまして。Jintaと申します。 今回は、Turbo✖️Stimulusを使用して、モーダルでのレビュー機能を実装したので、学習の記録として残します。TurboまたはStimulusを使用して開発をされる方のお役に立てますと幸いです。 完成形 開発環境 Ruby: 3.2.2 Rails: 7.0.6 stimulus css: tailwind css Turboとは Turboは、JavaScriptのライブラリで以下の3つの技術で構成されています。 Turbo Drive Turbo Frames Turbo Streams 今回は、非同期で部分的なページの更新を実現するTurbo Framesの一部である、turbo_frame_tag を使用して実装します。turbo_frame_tagで囲った箇所だけ非同期に更新することができます。 Stimulusとは Stimul

    Turbo✖️Stimulusを使用したモーダルでのレビュー機能を実装してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Turbo Framesの一部である、turbo_frame_tag を使用 + 囲った箇所だけ非同期に更新することができます / Stimulus: 複雑なJavaScriptのライブラリやフレームワークを必要とせず + シンプルに対話的な動作の機能を実装" 2023
  • stimulus-rails gemを読み解く - Qiita

    はじめに 私は、RailsでWebアプリを開発しているプログラマーです。 Webアプリで、インタラクティブな使用感を出したい時は、Hotwireを使っています。 Hotwireとは、レスポンスのHTMLでインタラクティブな使用感を実現するアプローチです。 このアプローチの実現は、TurboとStimulusによりできます。 Turboは、HTTPリクエストを自然に呼ぶだけで画面をインタラクティブに変更できるように設計されたライブラリです。 Stimulusは、HTMLを拡張するように設計されたJavaScriptフレームワークです。 どちらも違和感なく使えています。 これは開発者の設計が良いからでしょう。 このような使い勝手が良いものは、どのように作られているのだろうか? 気になったので、コードを1から読み解いていくことにしました。 RailsでStimulusを使いやすいようにするgem

    stimulus-rails gemを読み解く - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Hotwire: レスポンスのHTMLでインタラクティブな使用感を実現 / Turbo: HTTPリクエストを自然に呼ぶだけで画面をインタラクティブに変更できる / Stimulus: HTMLを拡張するように設計されたJavaScriptフレームワーク" 2023
  • Import mapsでJavaScriptを管理しているときのstimulus controller登録の仕組み - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Import mapsでJavaScriptを管理しているときのstimulus controller登録の仕組み - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Stimulus controllerを登録するメソッドは、eagerLoadControllersFrom、lazyLoadControllersFromがあり / 1つの画面でほぼ全てのcontrollerを使う場合はeagerLoadControllersFrom、そうでない場合はlazyLoadControllersFromを使うのが良いかも" 2023
  • Hotwire 以後の accepts_nested_attributes_for - Qiita

    Hotwire(Rails 7)で、複数の子レコードの保存が簡単になる cocoon などの gem を使わなくてよい。JavaScript も jQuery も使わない ほぼ erb のレンダリング(サーバーサイド)だけでなんとかなります。 has_many、has_one、belogs_to などいわゆる Rails の関連付け(アソシエーション)の概要は把握していることを前提としてます。 検証は、ruby 3.2、Rails 7.1 の環境です accepsts_nested_attributes_for は嫌われ者? そもそも accepsts_nested_attributes_for は、関連付けられているモデルをネストさせることで、一度にまとめてレコードの更新ができるようにするメソッドです。1対N(has_many)のデータを html の form で一度にまとめてサーバー

    Hotwire 以後の accepts_nested_attributes_for - Qiita
    sh19910711
    sh19910711 2024/06/16
    "accepsts_nested_attributes_for: 関連付けられているモデルをネストさせることで、一度にまとめてレコードの更新ができる / データを html の form で一度にまとめてサーバーに送り、受け取った Rails がよしなに処理" 2023
  • RailsのTurbo Framesを利用してシンプルな遅延読み込みを実現 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    RailsのTurbo Framesを利用してシンプルな遅延読み込みを実現 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "データベースのクエリーが返ってくるまでに時間がかかる場合に、結果が返ってくる前の段階でスケルトンを表示したい / Turbo Framesの遅延読み込みを導入して、ページ表示の挙動を制御する" 2023
  • JS書けないけど非同期処理はTurbo Framesで作れる - Qiita

    そもそもTurboって? TurboはJSのバンドラー(ex: webpack,esbuildなど)を使わなくても非同期で画面が変わるような処理をしたいときに便利なRails標準機能のこと。HotwireはTurbo, Stimulus, Stradaの3つの相性のことで、詳しく知りたい方はわかりやすい記事もあるのでぜひ。 stimulus-rails gemを読み解く - Qiita でもわかるHotwire入門 Turbo編 Turbo Framesとは 通常の画面遷移でHTMLが丸ごと置き換わるのに対して、Turbo Framesでは<turbo-frame>…</turbo-frame>というHTMLタグのようなもので囲った要素が非同期で置き換わります。 何が便利? ちょっと前まで画面の一部だけ非同期(画面遷移なし)で変更したい、みたいなことがあると思った時は「JSを書きましょう

    JS書けないけど非同期処理はTurbo Framesで作れる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Turbo: バンドラー(ex: webpack,esbuildなど)を使わなくても非同期で画面が変わるような処理をしたいときに便利 / Turbo Framesでは<turbo-frame>…</turbo-frame>というHTMLタグのようなもので囲った要素が非同期で置き換わります" 2023
  • rails、importmapの初めの一歩はstimulus - Qiita

    railsのimportmapについて理解し始めたころ、javasprict/controllersはなんだろうという疑問がでてきました。 これまで、controllersというフォルダは使ってこなかったため、使い方もわからず、色々調べた結果stimulusに行きつきました。 これが、controllersを理解するキーでした。 stimulusとは stimulusとはjavascriptのフレームワークです。 以下公式参考 Stimulus は、控えめな目標を掲げた JavaScript フレームワークです。他のフロントエンド フレームワークとは異なり、Stimulus は、単純な注釈を使用して JavaScript オブジェクトをページ上の要素に接続することで、静的またはサーバーでレンダリングされたHTML (「既存の HTML」) を強化するように設計されています。 これらの Ja

    rails、importmapの初めの一歩はstimulus - Qiita
    sh19910711
    sh19910711 2024/06/16
    "importmapについて理解し始めた + javasprict/controllersはなんだろうという疑問 / 色々調べた結果stimulusに行きつき + これがcontrollersを理解するキーでした / stimulus: html属性を使用 + ビューとロジックの分離を促進"
  • go mockについての悩み - Qiita

    class A(object): def my_method(self): return "this is original" if __name__ == '__main__': a = A() print a.my_method() # "this is original" def dummy_method(): return "this is dummy" setattr(a, 'my_method', dummy_method) # method is replaced here. print a.my_method() # "this is dummy" この原理を使って、unittest時にAPI Clientを無理やりdummy methodに置き換えて、実際にリクエストが送出されるのを防止する・・・なんてこともその気になれば可能だし、場合によってはモックが難しい関数を無理や

    go mockについての悩み - Qiita
    sh19910711
    sh19910711 2024/06/16
    "PHPのrunkitみたいな強力な関数置換方法がない / gomock: モジュールをモックしたい場合に自由度が低いように見える / returnされる値の期待値を書きたくても、テストの実行時刻によってそれが変わってしまう" 2018
  • phpメソッドをすげ替える掟破りの技、runkit - Qiita

    概要 phpのrunkitを使うと掟破りのアレコレができる strtotime()を叩いた時に-9h分勝手にやるとか 使いどころ 弊社ブラウザゲームでは開発環境で未来日のデバッグをする時などに。 参考ドキュメント PHP:runkit PHP5でrunkit 実行例 // 時間調整 //date()をオーバーライドしてsimulationTimeを返す runkit_function_copy('date', 'date2'); runkit_function_redefine('date', '$a, $b=null', 'return date2($a, $b ? $b : strtotime("' . $simulationTime . '"));'); //strtotime()をオーバーライドしてsimulationTimeを返す runkit_function_copy('st

    phpメソッドをすげ替える掟破りの技、runkit - Qiita
    sh19910711
    sh19910711 2024/06/16
    "phpのrunkitを使うと掟破りのアレコレができる / strtotime()を叩いた時に-9h分勝手にやるとか + 開発環境で未来日のデバッグをする時など / 非常に強力なので知らない人には意識させない(FWの上位で利用するetc)のが大事" 2019
  • ユニットテストをslow test とそれ以外に分けたりする話 - Qiita

    アドベンドカレンダー、12/9です。PSTだとまだギリギリ日付変わってないからセーフセーフと思ってたらそれも過ぎてた>< はじめに さて、こんな記事を見られてるからには皆さんユニットテストをされていますね? ユニットテストの良いところは単機能をシンプルかつ高速にテストできる事です。つまり結合テストの範囲を減らすことができる。 これは素晴らしいメリットですよね? でもちょっと待ってください。当に適切な「ユニットテスト」になっていますか? JavaEEなあたなArquillianとか使ってませんか? DBUnitとかでデータベースのテストしてませんか? あるいはheadless+cucumberでE2Eテストをしていませんか? もちろんこれらは素晴らしい機能です。どんどん使っていくべき機能です。ですが、この手のテストは単純に重いです。こういったFunctional TestとUnit Tes

    ユニットテストをslow test とそれ以外に分けたりする話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "本当に適切な「ユニットテスト」になっていますか / DBUnitとかでデータベースのテストしてませんか / 「然るべきタイミングのみで実行されるSlow Test」と「常にビルド時に走るQucik Test」で分けておく" 2018
  • Dynamo DB ベースのアプリケーションをmotoとfactory_boyを用いてユニットテストする - Qiita

    boto3 は AWS SDK の Python パッケージで、Dynamo DB などの AWS のサービスを呼び出すのに使います。 この boto3 には moto という mock パッケージがあります。 moto を使うと、テストを実行するとき Dynamo DB のスタブにテスト用のデータ(fixtures)を 返させることができるので、テーブルが存在していなくてもテストケースを通すことができます。 稿では、moto を使って Dynamo DB に依存せずにアプリケーションをテストする方法を紹介します。 さらに、factory_boy を使って fixtures の組み立てを共通化する方法も紹介します。 factory_boy は fixtures の組み立てを担う Factory クラスを備えたパッケージです。 なお、稿ではアプリケーションとして Flaskベースの AP

    Dynamo DB ベースのアプリケーションをmotoとfactory_boyを用いてユニットテストする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DynamoDB に依存せずにアプリケーションをテストする / moto を使うと、テストを実行するとき Dynamo DB のスタブにテスト用のデータ(fixtures)を 返させることができる" 2018
  • mysql の CHECKSUM TABLE が 自動テストのDBロールバックする時に便利だった - Qiita

    はじめに 去年は、言語バージョンアップにおけるE2Eテストの考え方とアプローチ方法についてを書きました。 今回は、「DBの差分とロールバック」 に関して書きたいと思います。 DB Diff を実際に使ってみた結果 前回の記事では、「DB Diff」というツールを使うことで、比較とロールバックを自動で行うことができると書いていました。 ★E2Eで検証するデータ種類によって比較方法 新規登録で同じデータが登録される。 → 「どのテーブルに変更が加わったのか?」は DBデータファイルの更新日時等から自動取得させる。 → 登録されたDBデータの差分の比較。( DB Diff ) → 比較後にテスト実行前の状態に戻す( DB Diff ) とある問題が発生し、格的な導入を断念することにしました。 レコードが多いテーブルの比較を行う場合に時間がかかり、テスト実行後のデータロールバックに時間がかかりす

    mysql の CHECKSUM TABLE が 自動テストのDBロールバックする時に便利だった - Qiita
    sh19910711
    sh19910711 2024/06/16
    "CHECKSUM の値に差異のあるテーブルが、そのテスト実行で変更のあったテーブル / そのテーブルのDUMPファイルを個別にリストアすることで、テスト実行前のデータに戻す / 短時間でロールバックできる" 2018
  • moto によって requests が意図せずモック化されてしまう問題を回避する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    moto によって requests が意図せずモック化されてしまう問題を回避する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "moto でスタブをアクティブにすると その後の requests パッケージによるリクエストがすべてモック化されてしまう / moto の responses_mock にパススルーする URL を登録 + スタブ化させたくない URL を事前に登録" 2018
  • Pythonのunittestでハマったところと、もっと早くに知りたかったこと - Qiita

    注意 Python3のunittestの記事です。 テストコードなんて書かないよ! という人へ ちょっと前まで私も、「テストコードは書かない」「一瞬一瞬で勝負する」「過去は決して振り返らない――」という男前なプログラマーでした。しかし幾多ものレガシープログラムに苦しみ、その後でKent Beckの『テスト駆動開発』を読んでからは心を入れ替えてテストを書くようになりました。網羅的に記述する単体テストとはまた違った、開発の補助としてのテストコードは、とてもよいものです。まだテストコードを自発的に書いたことがないという人は、テスト駆動な技術書を読んで、騙されたと思って書いてみてください。 開発の補助としてのテストコードにはこんなメリットがあります。 開発速度と品質が上がる どうクラスを使ったら良いかを示すドキュメントになる リファクタリングがしやすくなる この記事について この記事では「Pyth

    Pythonのunittestでハマったところと、もっと早くに知りたかったこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "幾多ものレガシープログラムに苦しみ、その後でKent Beckの『テスト駆動開発』を読んでからは心を入れ替えてテストを書くようになりました / 非同期処理のテストにはaiounittestが使える" 2019
  • 気持ちよくUnitTestを書くために(jest) - Qiita

    UnitTest を書くモチベーションがなかなか上がらない。それはなぜかを日々悶々と考えていました。 なぜこうもUnitTestをめんどくさく感じるのだろう。。。 Testが重要なことは十分理解しているし、品質を保つために必然であることもわかっているのに。 そして、今回のPostはこの日々の悶々とした感情に終止符を打つための私からのひとつの提案です。 テストフレームワークは jest、言語は node.js、 AWSlambdaAPIGatewayがベースとなるコードを使っていますが、「考えかた」の提案なので、他の言語にも応用できると思います。 なぜモチベーションが上がらないのか? 以下のコードを見てください。 describe('some component', () => { beforeEach(() => { ModoleA.func = mock.fn().mockImple

    気持ちよくUnitTestを書くために(jest) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Testが重要なことは十分理解しているし、品質を保つために必然であることもわかっている / テストしたいことは、最後の2行 + あとは全て外堀を埋める作業 / もっと、「確認したいこと」 に集中できるコードが必要" 2019
  • JuliaでUnitTestするときのディレクトリ構成 - Qiita

    概要 プロジェクトのディレクトリ構成で悩むことが多くて、UnitTestをするときどういう構成にすればいいのか悩んで、一応現在のベストプラクティスが自分の中で固まったので共有したい。 自分で考えたふうに行ってるがどこかのライブラリのパクリです。しかもパクリ元を忘れてます。 こっちのほうがいいとかあったら教えてほしい。 自分の中での課題である以下を解決します。 テストの中身ををruntests.jlに書くとruntests.jlが長大になるため辛い。 提案 ディレクトリ構成 test runtests.jl # hoge_test.jlをインクルードする hoge_test.jl # テストの中身を書く runtests.jlの中身 runtests.jlは各テストファイルをincludeするだけ。 その際testsetとして扱う。 ついでにベンチも出しとく。

    JuliaでUnitTestするときのディレクトリ構成 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "自分で考えたふうに行ってるがどこかのライブラリのパクリです。しかもパクリ元を忘れてます / runtests.jlは各テストファイルをincludeするだけ + その際testsetとして扱う + ついでにベンチも出しとく" 2019
  • Mockeryのパーシャルモックが便利 - Qiita

    概要 モックを使わなくてもテストができればそれに越したことはありません。 最近のMVCフレームワークはユニットテストを考慮された作りになっていることが多いので、あまり苦労することはないかもしれませんが、筆者の環境ではフレームワークのコアの処理や、コアの処理に誰かが加えた変更がユニットテストの実行を阻害するケースがあったので、Mockeryというモッキングフレームワークが役に立ちました。 今回はパーシャルモックという機能について、共有と備忘録の目的で投稿します。 環境 PHP 5.3 Zend Framework 1.11 PHPUnit 3.7 mockery 0.9.8 インストール

    Mockeryのパーシャルモックが便利 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "モックを使わなくてもテストができればそれに越したことはありません / 最近のMVCフレームワークはユニットテストを考慮された作りになっていることが多い / 一部のメソッドだけ、テスト時には実行したくない" 2019
  • 単体テストを簡単にするためのDI - Qiita

    ##はじめに まだエンジニアに成りたての頃、3年ほど継続で改修している案件で単体テストを書いたことがあります。 創業から継ぎ足し続けているタレのような案件(?)だったため、かなりつらみのある単体テストになり一時期はテスト嫌いになりました。 昔の私に限らず、テストに対して嫌なイメージを持っている方は多いような気がします。 しかし、何年かエンジニアをやっていて、実際には単体テストが悪いのではなく、Testableでないコードが悪いのだと思うようになりました。 ##単体テストの何がつらいって? それはモックアップとかテストデータの用意とかです。それですよ。 JMockitとか使ってモックを用意する。単純なメソッドなら簡単でもstaticとかprivateとかmember変数とか...そういった面倒なモックに心を削られるんです。 あとは、工夫を凝らしたテストデータをDBに流し込んで...、まだ完成

    単体テストを簡単にするためのDI - Qiita
    sh19910711
    sh19910711 2024/06/16
    "何年かエンジニアをやっていて、実際には単体テストが悪いのではなく、Testableでないコードが悪いのだと思うようになりました / モックしないといけない依存関係があっちこっちに散らばっていることがまず問題" 2019
  • xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita

    エントリは、xUnit Test Patterns: Refactoring Test Codeという書籍の「Chapter5 Principles of Test Automation」の内容をベースに、12個のユニットテスト原則についてまとめていきます。この書籍は、2007年に販売されたものですが、今でも十分役に立つユニットテストに関する原則を伝えています。 ウェブでは、次のURLでも内容を見ることができます。 自動ユニットテストの原則 ここで紹介されるものは、ユニットテストで確認したい quality のリストです。ですので、直接適用する「パターン」ではありません。 「何をやるか」よりも「なぜやるのか」という観点においてまとめられています。 エントリでは、xUnit Test Patterns: Refactoring Test Codeで紹介されている12個の原則をベースに、ほ

    xUnit Test Patternsから学ぶ12個のユニットテストの原則 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "xUnit Test Patterns: Refactoring Test Codeという書籍の「Chapter5 Principles of Test Automation」の内容をベース / 2007年に販売されたものですが、今でも十分役に立つユニットテストに関する原則を伝えています" 2019
  • go-sqlmockを使ってGORMで書いたコードをテストする - Qiita

    package user import ( "github.com/jinzhu/gorm" ) type User struct { ID string `gorm:"primary_key"` Name string } type Repository struct { *gorm.DB } func (p *Repository) Create(id string, name string) error { person := &User{ ID: id, Name: name, } return p.DB.Create(person).Error } func (p *Repository) Get(id string) (*User, error) { var person User err := p.DB.Where("id = ?", id).Find(&person).Er

    go-sqlmockを使ってGORMで書いたコードをテストする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "gormを使ったコードのテスト / go-sqlmock: 実際のDBの代わりにモックを使ってテストする / mock.ExpectQueryのところで、期待するSQLとパラメータと、実行結果のレコードを設定" 2019
  • Rustでテストするならspeculate.rsを使うといいかもしれない - Qiita

    TL; DR JUnitライクなコードが書ける気がします。 speculate - Cargo: packages for Rust https://crates.io/crates/speculate utkarshkukreti/speculate.rs: An RSpec inspired minimal testing framework for Rust. https://github.com/utkarshkukreti/speculate.rs $ cargo test -- --nocapture --test-threads=1 Compiling speculate-sample v0.1.0 (/home/hoge/workspace/speculate-sample) Finished dev [unoptimized + debuginfo] target(s)

    Rustでテストするならspeculate.rsを使うといいかもしれない - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rustに標準で存在するコードでは、beforeやafterという概念はありません / Rustはそもそも所有権を1つしか持つことができないため、テストメソッドごとにオブジェクトを生成するという方法は理にかなっています" 2019
  • PySparkでspark-testing-baseを使ってみる - Qiita

    概要 spark用のテストライブラリのspark-testing-baseをPySparkでどのように使うかを軽く調べてみた。 調べたこと unittest2のTestCaseを継承しており、unittest2.main()でテスト実行できる クラス内部でspark contextを立ち上げており、テストでわざわざ自力で立ち上げる必要がない 自分でspark contextを立ち上げていると、テスト実行時にエラーになる DataFrameの場合、スキーマと件数と各レコードの並びが一致するかを確認しているみたい from sparktestingbase.sqltestcase import SQLTestCase import unittest2 class DataFrameTest(SQLTestCase): def test_expected_equal(self): data =

    PySparkでspark-testing-baseを使ってみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "spark用のテストライブラリのspark-testing-baseをPySparkでどのように使うか / unittest2のTestCaseを継承しており、unittest2.main()でテスト実行できる / クラス内部でspark contextを立ち上げ" 2019
  • phpunitのモックの挙動まとめ - Qiita

    ユニットテストを書く上でphpunitのモック、スタブ化についての挙動をまとめます。 環境 php 7.1 phpunit 7.0 phake 3.1.6 それぞれスタブ化したメソッドを直接・間接的に呼んだ場合の表です。 ○:想定どおりスタブ化されている ☓:スタブ化されない privateメソッドを間接的に呼んでいるメソッドのテストを書きたい場合は、 クラス設計の見直しか、protectedに変更する方法があります。 public private protected 別クラスのpublic

    phpunitのモックの挙動まとめ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Phake::partialMockで簡単にpartialモックを作成することができます / 作成したpartialモックをPhake::whenで振る舞いを定義し、スタブ化することもできます / スタブ化していない関数はすべて実際のソースと同じ挙動" 2019
  • テストとは何か.いろいろなテストの定義と分類. - Qiita

    テストとは何か テストって何ですか? これが意外と難しい.「自動テストでユニットテストをやったり,リリース前にQAをやったりするよ.」とかいう人も多いと思います. じゃあ,**「ユニットテストと結合テストの区別は何?」「計算結果をファイルに保存する機能だけどこれってユニットテスト?結合テスト?」**みたいなことが往々にしてあります.このあたりをチームで話をしてても,全然かみ合わず,「俺のテストの定義」「今までチームでやってきたテストの定義」みたいなものがあり,じゃあ,それが当にプロダクトの品質を上げるテストなんだっけ?というところも懐疑的です. ということで,いろいろな「テストの定義・分類」を複数の書籍・リンクから引用し,「どんなテストの定義・分類があるのか?」を一覧にしてみようという試みです. それにより,**自分のチームやプロダクトで行っている"テスト"がどれに近いか,抜けているもの

    テストとは何か.いろいろなテストの定義と分類. - Qiita
    sh19910711
    sh19910711 2024/06/16
    "品質に対するテストの役割と分類を追う / 出版年が2000年と古いため,かなりウォーターフォール型を意識した内容になっています.しかし,このテストの定義自体はそれほど違和感のあるものとはなっていません" 2019
  • Python の mock.patch のハマりやすい挙動についてまとめる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Python の mock.patch のハマりやすい挙動についてまとめる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "mock.patch を使ってモジュールをモックに差し替える時に、 patch によってどこがモックに変わるのか / from hoge import fuga と import されている fuga を patch するには <import 文を書いている方のモジュール名>.fuga を指定" 2019
  • ユニットテストの定義と価値とリスク - Qiita

    特にインテグレーションテストとユニットテストの境界が秀逸であり,「インテグレーションテストは,私たちが変更できないコードに対して,書いたコードが機能するか?」ということが明言されています.実例として想像しやすいのが,データを保存する機能を持つクラスだと思います.いわゆるRepository Patternを用いたクラスであったり,ActiveRecordのようなDBと密結合しているようなクラスにあたります.このようなクラスはユニットテストはできず,インテグレーションテストを行うほうがベターです.逆にユニットテストは「私たちが変更できるコードに対して,書いたコードが機能するか?」をテストすることになります. 角の立つ言い方かもしれませんが, 関数の引数にフレームワーク固有の型を使った時点で一切ユニットテストができないと思ったほうが良いです.また,そのようなフレームワーク固有の型を使った関数を

    ユニットテストの定義と価値とリスク - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ユニットテスト: ソフトウェアが仕様変更に強くテストが容易な状態を保つ / テストの境界は人や企業によって異なって / 「私たちが変更できるコードに対して,書いたコードが機能するか?」をテストする" 2019
  • Python+pytestでテスト駆動開発しようとしたらテストの実行で躓いたので解決法をメモ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Python+pytestでテスト駆動開発しようとしたらテストの実行で躓いたので解決法をメモ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ディレクトリ構造が正しく認識されないとModuleNotFoundErrorに阻まれて実装が進まなくなってしまう / 最も簡単な方法はソースファイルとテストソースを同じディレクトリ内に格納する方法" 2019
  • Cpputestの導入 - Qiita

    背景 Pythonでの単体テストのやり方が書いてあるテスト駆動Pythonを読んで、実際の業務で実践していました。 その効果を話していたところ、組み込み開発チームでも導入していきたいということだったので、組み込み開発でテスト駆動開発を行うテスト駆動開発による組み込みプログラミングを参考にしながら、Cpputestを導入しました。 その際の導入手順をここにまとめます。 目的 実機がなくても開発したコードの動作が検証可能な環境を構築する ホスト(PC)での単体テスト実行環境を構築 ターゲット(組み込みLinux基板)での単体テスト実行は未実施 環境 OS: Debian GNU/Linux 9 on WSL テストフレームワーク: Cpputest 3.8 インストール手順 Cpputestをダウンロード 後にCPPUTEST_HOMEという環境変数にCpputestをビルドしたディレクトリに

    Cpputestの導入 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "組み込み開発でテスト駆動開発を行うテスト駆動開発による組み込みプログラミングを参考にしながら、Cpputestを導入 / 実機がなくても開発したコードの動作が検証可能な環境を構築する" 2019
  • はじめてのユニットテストを書く前にモック実装で手が止まってしまわないために - Qiita

    この記事は Angular Advent Calendar 2019 の 4 日目の記事です。 はじめに ユニットテスト (UT) の重要性はずいぶん浸透してきました。 Angular を使って開発をする場合には、Angular CLI によって *.spec.ts の形でテストファイルが自動生成されているので、より身近なものとして感じられます。 ただ、重要性を理解はしていても、いざ UT を書き始めようと思い立ったところからテストコードを書くまでには意外と遠く感じられていないでしょうか。 そう思っている間に、ずっと自動生成されたままの *.spec.ts になってしまっていたり… UT が遠のいてしまう理由 わたし自身は、テストコードを書くまでが遠く感じてしまう理由のひとつとして、モックの書き方を調べて理解するところで止まってしまうことでした。 コンポーネントでもサービスでも、それ単体で

    はじめてのユニットテストを書く前にモック実装で手が止まってしまわないために - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Angular を使って開発をする場合には、Angular CLI によって *.spec.ts の形でテストファイルが自動生成されている / モックの書き方を調べて理解するところで止まってしまう / なかなか expect() を書くところまで至らず" 2019
  • Pythonで時刻周りのテストをコード化する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Pythonで時刻周りのテストをコード化する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "時刻に関するテストは手動で実施しているとsysdateを変更したりと何かと面倒臭いうえに、バグが混入しやすい / freezegun: Pythonの標準ライブラリのdatetimeから得られる現在時刻を指定したものに差し替え" 2019
  • Pythonのunittestでの、assertLogs()の使い方 - Qiita

    Pythonのプログラムにおいて、「特定の処理が正しくログを出力していることを確認したい」というときはありませんか?unittestのメソッドassertLogs()はその疑問を解消するためのメソッドです。 unittest --- ユニットテストフレームワーク — Python 3.8.1 ドキュメント ただ、日語の利用例がなく、公式リファレンスももうちょっと分かりやすく書いて?な感じだったので、実動例を作ってみました。 assertLogs()とは with文を利用するメソッドの一つで、with文内で発生した、ログの出力を、指定のコンテキストマネージャオブジェクトに格納する というメソッドです。よって単体でアサート処理を行うわけではなく、別のassertXXXメソッドと組み合わせて利用します。 import unittest import logging class Test_Pro

    Pythonのunittestでの、assertLogs()の使い方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "特定の処理が正しくログを出力していることを確認したい / with文内で発生した、ログの出力を、指定のコンテキストマネージャオブジェクトに格納する / 別のassertXXXメソッドと組み合わせて利用" 2019
  • ユニットテストを書く上で守りたいこと - Qiita

    背景 普段、業務でユニットテストを書いたり、レビューをしたりしています。 ユニットテストがあることは良いことなのですが、困ったことがあります。 それは、ユニットテストのルールが明確じゃない点です。 そのため、人によって、ユニットテストの書き方がマチマチで、なんとかしたいなと困っています。 1つのテストケースに、Assertが複数あり、散在している。 似たようなテストデータの構築が、いろいろなテストケースにある。 テストする関数名が、パット見よくわからない。 記事では、ユニットテストを書く上で守ってほしいことをピックアップしました。 守って欲しいこと 1. 可読性のあるテストコード 1.1. テストメソッド名の統一 テストメソッドの命名規則は、あったほうがよいです。 テストランナーツールの実行結果では、関数名を表示されることがあります。 そこから『どういうテストをしていたのか』が読んで分か

    ユニットテストを書く上で守りたいこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "1つのテストケースで複数の検証をしない / 複数の検証を行ってしまうと、何のテストケースなのかわかりにくく + 検証するのは1つに絞る / 意味のない値を設定するのではなく、本物に近いデータを設定" 2020
  • [golang] 言語仕様から見るunittestとClean Architectue - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    [golang] 言語仕様から見るunittestとClean Architectue - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Java: どんなClassもそれを継承したClassを(無理やり)作る事ができる + コードの中の依存オブジェクトをモックに差し替える事ができる / 構造体ではなくインターフェースを通した参照にしなければならない" 2020
  • pytestでflaskの単体テストのパラメータをきれいに与える - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pytestでflaskの単体テストのパラメータをきれいに与える - Qiita
    sh19910711
    sh19910711 2024/06/16
    "一つのテスト関数の中でflaskのクライアント作成とテストを行っているのでとても見にくい / 前処理と後処理の関数を作成して、その関数を@pytest.fixture + この関数のyieldにテスト関数が埋め込まれるイメージ" 2020
  • 「単体テストが面倒くさい」に立ち向かう ―5つの弾丸 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? やらなきゃいけない。 でもやる気が起きない。 そんなときがありますね。 特に単体テストは、プロダクションコードの進捗に直接は寄与しませんし、技術的にもチャレンジングなところはありませんから、モチベーションを上げるのに苦労するのも無理はありません。 そこで対処方法を挙げてみました。 リファクタリングする AAA (Arrange, Act, Assert) の Arrange が面倒で、立ち尽くすことがあります。 チャンスです。 面倒なのはメソッドが複雑な証、リファクタリングしましょう。 具体的には、メソッドの抽出、クラスの抽出を検討しま

    「単体テストが面倒くさい」に立ち向かう ―5つの弾丸 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "迷う余地のないことから始める / Act を先に書いちゃう: プログラマはエラーが嫌いです。問題を放置できません。本能的に反応します / 形式的で意味の薄いケースが氾濫してしまうのは避けたい" 2020
  • pytest でも datetime.datetime.now() を mock したい! - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pytest でも datetime.datetime.now() を mock したい! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "datetime.datetime の他の関数はそのまま使う / 単純に monkeypatch.setattrでモックしようとしても、datetime.datetime.now() は built-in のため、モックすることができません" 2020
  • S3などのデータストアへのアクセス機能をモックとすることでデータストアなしでユニットテストする手法( Java, Mockito ) - Qiita

    概要 データストアにアクセスすることなくテストを可能とするポイントを紹介します。 データストア( 今回はS3 )にアクセスするオブジェクトを、外部からテスト対象クラスに注入可能としておく テスト時は、データストアにアクセスしないモックを注入する 動作確認可能なソースコードは loftkun/spring-boot-s3-mock-example にあります。 テスト対象クラス テスト対象のクラスです。S3にアクセスするclientを外部から注入できるようにしています。 ( この例ではコンストラクタで受け取っています。 ) このようにデータストアにアクセスするオブジェクトを、外部からテスト対象クラスに注入できるように実装しておきます。これがいわゆる依存性注入 ( DI : Dependency Injection ) です。 のちほど紹介するテストでは、データストアにアクセスしないモックを注

    S3などのデータストアへのアクセス機能をモックとすることでデータストアなしでユニットテストする手法( Java, Mockito ) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "データストア( 今回はS3 )にアクセスするオブジェクトを、外部からテスト対象クラスに注入可能としておく / テスト時にはモックをDI + テスト用データストアの準備が不要となり" 2020
  • multiprocessを使ったコードをpython setup.py testする - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    multiprocessを使ったコードをpython setup.py testする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "setup.pyでmultiprocessモジュールを含むunittestを実行すると無限ループになる / 回避策として「__main__」を一時的に書き換える / 実行中の"__main__"を書き換え + こうすることで、setup.pyからのunittestも実行可能" 2020
  • unittest の addModuleCleanup/doModuleCleanups 関数の紹介 - Qiita

    pythonunittest,pytest周りをお勉強中に公式日語訳のunittestのドキュメントをみてたら、 python3.8から追加されたaddModuleCleanup、doModuleCleanups関数があったので紹介しときます。 unittestって何?って方は、この記事を読むより、別の記事でunittestの概要を掴んだほうがいいかもしれません。 TL;DR setUpModule関数でエラー落ちしたときに呼ぶ関数指定できますよ関数 unittest復習 例えば以下のコードを実行してみます。 足し算と引き算を確認するテストです。 どのタイミングで関数が実行されているかを確認するため、 print(sys._getframe().f_code.co_name)にて関数名を出力しています。 import sys import unittest # TODO(hatsumi

    unittest の addModuleCleanup/doModuleCleanups 関数の紹介 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "python3.8から追加されたaddModuleCleanup、doModuleCleanups関数 / setUpModule関数で、exceptionが発生してしまった場合、tearDownModule関数は呼び出されません" 2020
  • 『ゼロからFlaskがよくわかる本』読書メモ - Qiita

    概要 以下の書籍を読み進めた際の読書メモです。 所要時間は約15時間。(うち環境構築周りの作業や調査が3時間程度) 触れ込み通り、非常に軽量でサクサク開発でき、拡張も容易なフレームワークという印象でした。 書籍概要 書籍名:ゼロからFlaskがよくわかる 著者 :田崇智 発刊日:不明(2018年7月頃?) 頁数 :214ページ 備考 :Kindle版のみ 環境構築 Python環境構築 brewでインストールしていたPythonのアンインストール $ brew uninstall python $ brew uninstall python3 公式インストーラでインストールしていたPythonのアンインストール Macにインストールした公式Pythonをアンインストールする方法 pyenvのセットアップ pyenvを使ってMacPythonの環境を構築する - Qiita pyenv

    『ゼロからFlaskがよくわかる本』読書メモ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "大きくなってきたアプリの機能を分割する場合はBlueprintを使う / ブログであれば記事関連の機能とコメント関連の機能をそれぞれ独立したアプリとして構成 / Templateやstaticファイルは各アプリで共通で、Viewだけ分ける" 2020
  • nuxt-typed-vuexを使ったページコンポーネントを(苦しまずに)単体テストするためのTips - Qiita

    はじめに これは以下の全てに当てはまる人向けの記事です。 Nuxtでも型推論の恩恵を得るためにnuxt-typed-vuexを導入している nuxt-typed-vuexを利用したページコンポーネントの単体テストを書こうとしている 元々はページコンポーネントが肥大化しそうだったため、リファクタリングを通じて処理の責任分割をしようと思ったのが発端です。 ただページコンポーネントが状態に応じて細かく表現を変える実装になってしまっており、「まずはページコンポーネントが意図通りに動くこと」を担保するため、ページコンポーネントの単体テストに手を出した次第です。 その際に幾つかの問題が発生したので、その内訳と対処法を残しておきます。 ※ リファクタリングの話、Vueのテスト方法、nuxt-typed-vuexが何ぞやという話はしませんのでご注意下さい 前提 環境 パッケージ バージョン

    nuxt-typed-vuexを使ったページコンポーネントを(苦しまずに)単体テストするためのTips - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ページコンポーネントが肥大化しそうだったため、リファクタリングを通じて処理の責任分割をしようと思った / 「まずはページコンポーネントが意図通りに動くこと」を担保する" 2020
  • KotlinのJUnitTestにおけるアサーションライブラリはKluentがとても良い感じ - Qiita

    JUnitのアサーションを快適に書きたい KotlinUnitTestを書いていて、今までさして調べずメジャーだからと言う理由でHamcrestを使ってたんですが、もともとJavaのライブラリなのでKotlinだと微妙に使いにくい部分がありました。 例えば型判定のアサーションを記述したいときは↓のように書きますが Kotlinではisが予約語に指定されているため`で括る必要もあるのと、isとinstanceOfがネストしているのも微妙に書きにくい&読みにくく、クラス指定も::class.javaまで記述する必要があって、当たり前ですがKClassで記述できないのでJavaの世界観に引きづられている印象を受けます。 また細かいところだと、isメソッド一つとってもHamcrest内だけでも3つimoport候補が出てきて、どれをimoportするんだっけ?と一瞬手が止まるのも書きにくいなぁと

    KotlinのJUnitTestにおけるアサーションライブラリはKluentがとても良い感じ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "さして調べずメジャーだからと言う理由でHamcrestを使ってたんですが、もともとJavaのライブラリなのでKotlinだと微妙に使いにくい / Kotlinではisが予約語に指定されているため`で括る必要もある" 2020
  • Pythonのunittestで指定ケースを除外する - Qiita

    まとめ unittest で discover する対象クラスを限定する手段を書きます。 前半で、どのようなときに必要になるか、も書きます。 後半で、コードを書きます。 load_tests() のコード例があります。 はじめに 現実世界で目的地にたどり着く交通手段が徒歩、車、公共交通機関と複数あっても到達点は目的地の1つでありながら、それぞれの手段に料金、時間、事故による影響をどれだけ受けうるか、などメリットやデメリットがあります。 コードを書く際も同様に、同じゴールを達成するために複数の手段があることがあります。 たとえば、ツリーの探索において、深さ優先・幅優先など複数の探索手段があり、メリット・デメリットがあります。ソートのアルゴリズムも同様です。ちょっと言いすぎですが、デザインパターンの Strategy のようなケースにおいては類似のケースが発生しえます。 場合によっては深さ優先

    Pythonのunittestで指定ケースを除外する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "TestCaseHelper を使うことで、各テストケースのクラスはどのクラスのオブジェクトを使うか、だけ実装すればよくなり / load_tests() により TestCaseHelper をテストケースとみなさないようにしています" 2020
  • Rustでテスト(UnitTest)を書く - Qiita

    1. はじめに RustのUnit Testについてクイックスタート的に学んでみようと思います。Rustのドキュメント、Learn Rust/Unit testingを参考にしながらの実践です。Learn Rustにはほかにも、Documentation testingやIntegration testingがありますが、この記事のスコープ外です。 環境情報 この記事は以下の環境で試しています。 Windows ver.1903 Visual Studio Code 1.49.1 拡張機能①:Rust for Visual Studio Code(0.7.8) 拡張機能②:CodeLLDB(1.5.3) Rust 1.46.0 環境の準備はこちらの記事に書きました。 Visual Studio CodeでRust開発環境を整える 2. Unit Test ではさっそくUnit Testを書

    Rustでテスト(UnitTest)を書く - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rustのドキュメント、Learn Rust/Unit testingを参考 / ほかにも、Documentation testingやIntegration testingがあります / テストを実行するファンクションには#[test]アトリビュートを付与" 2020
  • Laravel、CakePHPを使わないテストコードの実装方法 - Qiita

    はじめに プロダクトの品質を判断する基準にもなるテストコード。 ここではLaravelやCakePHPを使わないケースで、テストコードを実装する方法を紹介します。 UIを持たないスクリプトにもテストコードを実装して、より皆が安心できる開発を実践していこう☺️ この記事の対象者 PHPを学習中の方 フレームワークを使用せずにテストコードを実装したい方 DockerPHP環境を構築したい方(フレームワークはなし) 手順 DockerでのPHP環境構築 ComposerでのPHPUnitを実装 名前空間(namespace)の指定 テストコードの実装 テストの実施 DockerでのPHP環境構築 Dockerfileを使用して、PHPの動作環境を構築します。 Dockerfileの記述 FROM amazonlinux:2 RUN yum -y update && \ yum clean al

    Laravel、CakePHPを使わないテストコードの実装方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "フレームワークを使用せずにテストコードを実装したい / テスト: 自動化にフォーカスされがち / テストしやすいコードを意識することで、プログダクトの複雑化を防止することにも繋がります" 2020
  • サービステストをLambda+unittest用ライブラリで実装してみる - Qiita

    AWS LambdaとServerless Advent Calendar 2020 3日目の記事です。 あるサービスのテスト(外部サービスとの結合テスト)を、Lambda(python)+unittestで実装してみます。 やること 「特定の条件を満たすメールを受信した場合はBacklogに課題を起票する」というサービスをテストするエンジンをLambda+unittestで構築します。 unittestライブラリをunittestよりも上のレイヤーの試験に使います。案外使い心地がいいです。 テスト対象サービス 以下の条件を満たすメールを受信した場合に、Backlogに課題を起票します メールタイトルに特定の文字列を含む 送信元が許可された特定のメールアドレス テストエンジン Lambda(python)にunittestライブラリでテストシナリオを記述し実行 各テストケースは、概ね以下の

    サービステストをLambda+unittest用ライブラリで実装してみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "unittestライブラリをunittestよりも上のレイヤーの試験に使います / Lambda(python)にunittestライブラリでテストシナリオを記述 / すべてのテストが完了したら結果をSNSで通知" 2020
  • CMakeプロジェクトにgoogletestを導入した話 - Qiita

    はじめに CMakeで構成されたC++プロジェクトに、googletestによるユニットテストを組み込む方法です。 公式で説明されている方法の一つ("Incorporating Into An Existing CMake Project")を改めて解説し直すだけですが、C++もCMakeも知らないエンジニアが、なぜかマネージャーとしてC++プロジェクトをレビューせざるを得なくなった場合に、せめてテスト環境だけでも整えるため、最小限の手順でユニットテストに対応するための覚書として残しておきます。 この方法のメリット OSが持つgoogletestライブラリに依存しないので、 (yumやaptのための)管理者権限が不要です。 誰が、どこで(どのOSで)実行しても、安定した結果が得られます。 ビルドの実行ごとにgoogletestのソースコードをcloneするので、 最新のgooglete

    CMakeプロジェクトにgoogletestを導入した話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "CMakeで構成されたC++のプロジェクトに、googletestによるユニットテストを組み込む / enable_testing: ctestでテストを実行する場合にはadd_test()と合わせて宣言 / Makefileにtestというルールを追加する機能もある" 2020
  • UnitTestを書く上で注意すべきこと - Qiita

    ※ 時折こぼけを挟んでおります。 UnitTestを書く上で注意すべきこと 誰に向けた記事か プログラミングは基的に行える(2~3年程の経験) まだアーキテクチャについては良く分かってない つまり私 モチベーション クリーンアーキテクチャ 238p から引用 テスト容易性のための設計 システムと強く結合したテストは、システムに合わせて変化する必要がある。システムコンポーネントに対する小さな変更であっても、結合した多くのシステムが壊れたり、変更が必要になったりする。中略。共通のシステムコンポーネントを変更すると、何百や何千というテストが壊れる可能性がある。これは、脆弱なテストの問題(Fragile Tests Problem)と呼ばれている。 脆弱なテストは、システムを硬直化させるという悪影響を及ぼす。システムを少し変更しただけで大量のテストが失敗するとなると、開発者は変更するのをためらう

    UnitTestを書く上で注意すべきこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Fragile Tests Problem: この問題に対して テストAPI を作成するのが良い解決策だとクリーンアーキテクチャでは述べられ / プロダクトコードとテストコードの価値はイコールであること" 2021
  • フロントエンド( Vue )の単体テストのテストケース作成とテストコード作成 - Qiita

    単体テストは奥が深い テストコード書いてみたいな、ということで以下の作ったものを対象に、テストケースとテストコードを作成したため、そのプロセスを記事にする。単体テストは難しいし、奥が深い... github https://github.com/doz13189/rui-vue3 URL https://rui-vue3.web.app/ 環境 Vue.js https://github.com/vuejs/vue-next Jest https://github.com/facebook/jest vue-test-utils https://github.com/vuejs/vue-test-utils-next 単体テスト対象 単体テストは、Search.vue を対象に実施する。Search.vue に実装されているイベントを確認する。 初期表示 入力ボックスに検索キーワードを入力

    フロントエンド( Vue )の単体テストのテストケース作成とテストコード作成 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "C1(分岐網羅)でテストケースを作成する、としたくなるが、vue-test-utils にそれはしないほうがいいよ、ということが書かれている / コンポーネントに提供された入力をテストケースとし、期待される出力を ~ " 2021
  • [Python] 関数テストと手法の概要比較(doctest, unittest, pytest) - Qiita

    テストフレームワーク テストフレームワークとは、テストを行うフレームワーク(モジュール)のこと。 サポートのためのフレームワークはフェーズごと、用途ごと言語ごとなどにより数多く存在する。 ユニットテスト・フレームワーク一覧 @wiki では70種以上紹介されている。 ソフトウェアフレームワークとは、プログラミングにおいて、アプリケーションプログラム等に必要な一般的な機能が、あらかじめ別に実装されたものである。 @wiki doctest doctestとは、ドキュメント(docstring)として書かれたテストを実行するための標準モジュール。 docstringに入出力を書くだけでテストコードになるため、説明のためのdocstringとテストを同時に運用できる。 ただし、テストに際しての他モジュールの利用が制限されていたり、ソースコード自体の肥大化などがデメリットとなる。 doctest

    [Python] 関数テストと手法の概要比較(doctest, unittest, pytest) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "doctest: ドキュメント(docstring)として書かれたテストを実行するための標準モジュール / docstringに入出力を書くだけでテストコードになるため、説明のためのdocstringとテストを同時に運用できる" 2021
  • Android開発でのMockitoを使ったUnit Testの書き方 - Qiita

    この記事では、Android開発のUnit Testで非常によく使われるモックライブラリ、Mockito (Mokito-Kotlin)の導入方法と簡単な使い方を解説します Mockito MockitoJavaのモックライブラリとして現在デファクトスタンダードなライブラリです。 シンプルかつ高機能で、容易にテストダブルを作成することができます。 テストダブル テストダブルとは、テスト対象が依存しているコンポーネントを置き換える代用品のことです。 (ダブルとはスタントダブル( = スタントマン)のこと) テストダブルには、スタブ、モック、スパイ、フェイク、ダミーの5つの役割が定義されており、特にスタブ、モック、スパイの3つはよく使われます。 テストダブル 説明

    Android開発でのMockitoを使ったUnit Testの書き方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Mockito: Javaのモックライブラリとして現在デファクトスタンダードなライブラリ + シンプルかつ高機能で、容易にテストダブルを作成 / Java向けに作られたライブラリで、一部の機能がKotlinと相性がよくありません" 2021
  • GolangでDBアクセスがあるユニットテストのやり方を考える - Qiita

    今回テストを考えたいのはこのように「関数を実行し」「その関数を実行したことによってDBのデータが正しく変わったこと」を確認したいケースです。なので、関数に対してテストコード内から参照できるDBインスタンスを渡してあげる必要があります。 このため、この記事では次の3つの事柄について考えていきます。 DBインスタンスをどう用意するか テストデータをどう用意するか 上記例のようにテストを実行するために前提として特定のテストデータが多々あるでしょう。これをどう用意すると良さそうかを考えます テストデータのクリーンナップをどうやって行うか ユニットテストで前提条件やテスト対象の関数内でINSERTされたデータは他のテストに影響を与えないよう消しておきたいです これをどのように行うかを考えます DBインスタンスをどう用意するか 大方針としては mock を用意するかテスト用にDBを立てるかのどっちかに

    GolangでDBアクセスがあるユニットテストのやり方を考える - Qiita
    sh19910711
    sh19910711 2024/06/16
    "「関数を実行し」「その関数を実行したことによってDBのデータが正しく変わったこと」を確認したい / mock: 「期待するSQLが来たこと」は確認できますが「想定した値がDBから返ってくること」は担保できません" 2019
  • unittestとpytestでそれぞれC1カバレッジ出力のコマンドを最小限に抑えてみました。 - Qiita

    Pythonでテストしてカバレッジを取得する時にあれこれコマンドが長くなるなぁと思いつつ特に気にせず作業していたんですけど、やっぱり長いのを打つのってけっこうめんどくさい。。ということで、テストコマンドを最小限に抑えるための設定ファイルの作り方を探った時のメモ的なものです。 2021年3月時点で最新のunittestとpytestに対応しています。今回はテストのコマンドを短くすることに目的をおいているので、テストコードの例は省いています。 環境 Windows10 Python3.9インストール済 今回のディレクトリ構成 proj_unittest/ ├ src/ │ ├ app/ │ │ ├ __init__.py │ │ └ main.py │ ├ tests/ │ │ ├ __init__.py │ │ └ test_app_main.py │ └ __init__.py └ .co

    unittestとpytestでそれぞれC1カバレッジ出力のコマンドを最小限に抑えてみました。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストコマンドを最小限に抑えるための設定ファイルの作り方を探った / C1カバレッジ(判定条件網羅)を出力するためにbranch = true + カバーできてない行をコマンド出力するためにshow_missing = trueも追加" 2021
  • Pythonのunittestモジュールでモックに返り値を設定する(return_value, side_effect) - Qiita

    Pythonunittestモジュールでモックに返り値を設定する(return_value, side_effect)PythonunittestMock返り値 環境 macOS Python 3.9.4 ※IMO=In my opinion(コメントがあればぜひお願いします) IMO: ざっくり整理 モックを呼び出したときに(毎回同じ)返り値を返してほしい場合はreturn_value属性を設定する モックを呼び出すたびに異なる返り値を返してほしい場合はside_effect属性にイテラブルを渡す 実行例 >>> from unittest.mock import Mock >>> m1 = Mock() >>> m1.return_value = 108 >>> m1() 108 >>> m1() 108 >>> m2 = Mock() >>> m2.side_effect = [1

    Pythonのunittestモジュールでモックに返り値を設定する(return_value, side_effect) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "モックを呼び出すたびに異なる返り値を返してほしい場合はside_effect属性 / 例えばfor文で繰り返す処理の中のモックのside_effectを使って、for文が回ったあとの値を設定できます / side_effectは関数や例外も設定できる" 2021
  • pythonでS3をモック化できるStubberを使って単体テスト - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pythonでS3をモック化できるStubberを使って単体テスト - Qiita
    sh19910711
    sh19910711 2024/06/16
    "S3をモック化する際に、以前はpython標準のMockを使っていたけど、boto3に標準のStubberという便利なモジュールが用意されている / 複数回の呼び出しのレスポンスを定義 + ファーストインファーストアウトで定義できる" 2021
  • unittestで動的にmock responseを帰る - Qiita

    はじめに unittest.mockのpatchメソッドではmockのresponseを送信することはみなん知っていると思いますが、しかし、請求URLなどより動的にmock responseを作ることはどう実現できるでしょうか?この記事ではそれを実現するための方法を紹介します。 return_valueとside_effect 簡単にまとめる、こんな感じ: モックを呼び出したときに(毎回同じ)返り値を返してほしい場合はreturn_value属性を設定する。 モックを呼び出すたびに異なる返り値を返してほしい場合はside_effect属性に渡す。 今回は可変な返り値を返してほしいのでside_effect属性を利用します。 コード例 import json from unittest.mock import patch from requests import Response def m

    unittestで動的にmock responseを帰る - Qiita
    sh19910711
    sh19910711 2024/06/16
    "モックを呼び出したときに(毎回同じ)返り値を返してほしい場合はreturn_value属性を設定 / モックを呼び出すたびに異なる返り値を返してほしい場合はside_effect属性に渡す" 2021
  • python -m unittestでテストファイルが検出されない - Qiita

    つまづいたこと python -m unittestをコマンドで実行すると自動でunittestが書いてあるファイルを検出してテストを実行してくれるはずだったが、テストファイルが全く検出されなかった。 参考記事:python.org - unittest 解消した方法 テストが書いてあるフォルダに__init__.pyを追加 バグ解消前の階層

    python -m unittestでテストファイルが検出されない - Qiita
    sh19910711
    sh19910711 2024/06/16
    "検出されなかった理由は、testファイルが書かれているファイルのディレクトリがモジュール化されていなかったから / ディレクトリに__init__.pyを追加することで、そのディレクトリがモジュール化される" 2021
  • Docker Compose + libfaketimeでテスト用コンテナの日時を固定する - Qiita

    ユニットテストにおける時間の問題についてのTipsです。 ユニットテストを行う際に手間のかかる作業として、テスト用環境の構築があります。 今はDockerがあるのでかなり手間が減りました。 ユニットテストは何度やっても同じテストができて、同じ結果になることが重要ですが、その際に問題となるのはシステム日時です。 「今日」とか「今月」などの日付・時刻によって返す結果が変わる処理があった場合にどうやって環境を設定しておけばよいか。 Docker Composeとlibfaketimeを使ってシステム日時を固定することができます。 以下、PythonのWebフレームワークであるDjangoをサンプルとして方法を紹介します。 他の言語、フレームワークでも基は同じになります。 1. Dockerfileでlibfaketimeをインストール FROM python:3 ENV PYTHONUNBUF

    Docker Compose + libfaketimeでテスト用コンテナの日時を固定する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ユニットテストは何度やっても同じテストができて、同じ結果になることが重要 / 「今日」とか「今月」などの日付・時刻によって返す結果が変わる処理があった場合にどうやって環境を設定しておけばよいか" 2021
  • Vue3 で単体テストを記述する - Qiita

    はじめに 記事では Vue3 で構築したコンポーネントに単体テストを実装する方法について解説します。 課題 従来、ウェブサービスのページ内容はサーバーサイドで動的生成されたHTMLにjQuery等でクライアントサイドでインタラクティブ性を付加する実装が一般的で、ブラウザに表示された内容の単体テストの実装はほぼ不可能でした。 Seleniumで出来るじゃないか、という人もいるかもしれませんが、あれは基的にプログラムで普通のブラウザを自動制御する技術であり、サービス全体のページ遷移テストには使えるかもしれませんが、各ページごとの表示内容のチェック用として実装に手間がかかりすぎ、なおかつ実行速度も極めて遅く、しかもシステムの改変に極めて弱いためおよそ実用とは言えない代物でした。 現在の環境 現在ではVue.js、ReactAngular.jsなど、アプリ構築が構造化され自動化された高度なフ

    Vue3 で単体テストを記述する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "現在ではVue.js、React、Angular.jsなど、アプリ構築が構造化され自動化された高度なフレームワークがいくつもあり、いずれもブラウザを用意しない環境でnode.jsのみでの単体テストの記述が可能" 2021
  • あなたはユニットテストが書きたくなる - Qiita

    前書き ユニットテスト(特に自動的に行ってくれるテスト)は、継続的にコーディングを行っていく上では欠かせないものです。各言語でユニットテストを書くためのツールやライブラリがあり、大抵ワンコマンドを叩くだけで結果が得られるように出来ていると思います(そうでないものもあるかも?)。ユニットテストがあると無いとでは、開発体験が大きく変わってくるはずです。 ユニットテストが無いと ユニットテストが無いと、プログラムを起動させ、手動で動作確認を行うことになります。開発が初期の頃はプログラムが行えることは限られており、パターンも把握できるほど少なく、実際の動作を確認できている安心感もあってそれで満足するでしょう。しかし開発を進めていくとパターンが増え、テストするための前提条件が増え、確認を見落とすレアケースも現れ、手動でテストすることが億劫になってくるはずです。そうなってくると、ステージング環境にアッ

    あなたはユニットテストが書きたくなる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "「実装は疎結合に」や「責務を明確に」という指針 / ユニットテストを書くためにこういったことが意識されるようになったとも思える / 「今の挙動がこうだから」という理由で期待値を決めてはいけません" 2021
  • React Testing Libraryで要素を取得する方法 - Qiita

    はじめに ReactTestingLibrary(RTL)を利用する際に、要素を取得する方法をまとめました。記事では単純にレンダリングのテストを行っているだけに留まりますが、RTLを使ってテストを始める取っ掛かりとして参考になればと思います。 対象読者 Reactで開発してて、これからテストを導入したい人 サンプルリポジトリはこちらです(参考程度に) ① テストファイルの中でコンポーネントをレンダリングする。 RTLは、Render結果であるDOM構造をテストするので実際のユーザー行動に近いテストをし易いのが特徴です。 コンポーネントのユニットテストをするには、まずはテストファイル内にコンポーネントをimportしてレンダリングしてあげる必要があります。そのためには、render関数を使用します。 render 任意のJSXを受け取ってレンダリングする関数です。 render関数実行後、

    React Testing Libraryで要素を取得する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ReactTestingLibrary: Render結果であるDOM構造をテストするので実際のユーザー行動に近いテストをし易い / render関数実行後、Reactコンポーネントにアクセスできる / debug関数によってコンポーネントのHTML構造を確認" 2021
  • 単体テスト自動化について独り言 - Qiita

    技術的なことはなく、単体テストただの独り言ですのでブラウザバックしていただいてOKです。 CD/CIが気になるお年頃で、単体テストを自動化について考える機会が増えたので備忘録的に残したいと思います。 手動・自動どちらで単体テストを実施するにしても、下記は一般的なことだと思いますが、しかし私は納期に追われて蔑ろにすることが多かったです・・・。 単体テスト設計 データ設計 単体テスト実装 単体テスト実施 改めて過去のソースコードを見直して、そのコードたちに単体テストテストコードを施してやろうとしたときに、いくつかの壁にぶち当たりました。 一言でいうと、煩雑。 具体的にいうと・・・。 データをイジイジするところは、エンジニアごとにバラバラ 似たような関数もチラホラ 共通化や部品化してないので1関数が超大作 など 結果からいうと、既存のソースに対してテストコードを書くのは断念しました。 単体テスト

    単体テスト自動化について独り言 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "CD/CIが気になるお年頃で、単体テストを自動化について考える機会が増えた / 既存のソースに対してテストコードを書くのは断念 + 適用するにしても、課題が割と足を引っ張るので、作業コストがかかりすぎて" 2021
  • simulatorを使ったCloudFunctionsのunit testを安定化・爆速化させる - Qiita

    こんにちは。virapture株式会社のもぐめっとです。 みんなで集合写真をとったのですが、何故か僕だけぶれてました。何歳になっても落ち着かないみたいです。 今日もfirebase大好きっ子が、firebase大好きっ子向けにfirebaseの情報を提供していこうと思います。 これはFirebase Advent Calendar 202123日目の記事です。 概要 日はcloud functionsでunit testを書く際の方法として、Cloud Functionsのemulatorを使わないという選択肢とその利点と留意点について紹介します。 目標 cloud functionsのunit testを爆速にして荒ぶるCIを安定させます。 ただし、あくまで今回紹介するのは方法の一つです。 後述するデメリットはあるので必要に応じて取捨選択をしてください。 なぜCloud Functio

    simulatorを使ったCloudFunctionsのunit testを安定化・爆速化させる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "cloud functionsでunit testを書く際の方法としてCloud Functionsのemulatorを使わないという選択肢 / cloud functionsのエミュレータ: 実際の挙動に近い形でfirestoreにデータを書き込んでCFが動いて・・・みたいなことをチェックできる" 2021
  • Batsを使ってbashのUnitTestを行う - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Batsを使ってbashのUnitTestを行う - Qiita
    sh19910711
    sh19910711 2024/06/16
    "shellScriptコードで最低限の自動テストをやりたい / Batsとbats-coreが存在するが、現在は bats-core/bats-coreがメンテされている / ファイル名は{name}.bats" 2022
  • unittestのmockでハマった3つのこと - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    unittestのmockでハマった3つのこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "デコレータは内部から引数に入っている + 引数はデコレータを書いた順と逆 / Celeryというタスクキュー + AsyncResultはタスクの状態を監視 / 実際にタスクを走らせずに実行されているかどうかのみをテストしたい" 2022
  • Pythonの関数をGUIで管理、テスト可能なOSSライブラリ「Logicbook」を開発した話 - Qiita

    Logicbookとは LogicbookはPythonの関数を独立してGUI上で管理・テストするためのオープンソースライブラリです。 Reactのコンポーネント管理ライブラリ「Storybook」のPython関数版のようなイメージです。 Reference 詳しいドキュメントはこちらにあるので興味がある方は一度使ってみてください。 Githubはこちら https://github.com/RuiHirano/logicbook 開発しようと思ったきっかけ 現在。私は3年ほど大学発ベンチャー会社のソフトウェア開発に関っており、Webアプリを5人ほどのチームで開発しています。Webアプリは基的にfrontendはreactを用いてbackendのAPIにはpythonを使用してます。 初めの方はfrontend,backendともにどちらも最小限のテストコードしか書いておらず、それでも

    Pythonの関数をGUIで管理、テスト可能なOSSライブラリ「Logicbook」を開発した話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Reactのコンポーネント管理ライブラリ「Storybook」のPython関数版のようなイメージ / READMEやソースコードの確認、関数の実行、テストの自動実行など / 関数に対して任意の入力を行いどのような出力がされるかを確認" 2022
  • Pythonのテスト実行を並列化する - Qiita

    テストと並列化 ソフトウェアエンジニアリングを行う上で開発者テストは欠かせないものとなっています。テストはコードに対する素早いフィードバックを開発者に与え、高いアジリティを持った開発を支援します。また、CIによりテストを実行することで、コードのチェックインのたびにリグレッションがないかを検査することが容易になります。 ところが開発を続けていくとやがてテストの数は増え、実行にかかる時間も増えていきます。テストの実行にあまりに時間がかかると、開発者へのフィードバックは遅くなり、テストから得られる恩恵も減ってしまいます。 この記事では並列化によるテスト実行の高速化を、Pythonのコードを例に紹介したいと思います。 並列化の実装 ここでは2段階の並列化を行います。1つ目は単一の計算インスタンス内におけるマルチプロセッシングによる並列化、2つ目は複数の計算インスタンスを使うことによる並列化です。

    Pythonのテスト実行を並列化する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストはコードに対する素早いフィードバックを開発者に与え / やがてテストの数は増え ~ 時間がかかると、開発者へのフィードバックは遅くなり、テストから得られる恩恵も減ってしまいます" 2022
  • yaml でテストが書ける Tavernというテストツールがすごい - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    yaml でテストが書ける Tavernというテストツールがすごい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Tavern: RESTfulなAPIのテストコードを yaml で書けるテストツール / 毎回似たようなテストコードを書く必要が無くなり + 気軽にテストコードの修正が可能 / ステータスコードやBodyのチェック + JWT認証にも対応" 2018
  • YAMLとpytestで動くAPIテストフレームワーク「Tavern」でWebAPIの自動テストが簡単に書けた - Qiita

    前置き データ連携のお仕事にも携わることになりまして、契約した企業へと自社データを提供するAPIを作りました。 画面で動く既存サービスもAPI構成にはなっており、そっちのWebAPIのテストはFrisby.jsで書いてみたりしたのですが、新たにWebAPI対応をするにあたり そもそも自分はそんなNode.jsっ子ではないな... 社内でPythonが浸透してきているのでPythonで書けないか と思いました。 pytestをある程度調べたあたりで、TavernというAPI testing frameworkの存在を知り、これが良さそうだったので使ってみました。 前置き2:テスト対象とするAPI こんなAPIをテストしていきます。 契約すると発行されるAPIキーをHTTPヘッダに埋め込む形で認証を行う RESTではない リクエストヘッダをContent-Type:application/js

    YAMLとpytestで動くAPIテストフレームワーク「Tavern」でWebAPIの自動テストが簡単に書けた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytestをある程度調べたあたりで、TavernというAPI testing frameworkの存在を知り / YAML形式で記述するだけでWebAPIのテストが出来る / YAMLで書いたハッシュと配列がそのままJSONリクエストのbodyとして飛ばせる" 2019
  • mock_openを使用したファイル処理のユニットテスト - Qiita

    mock_openについて mock_openはファイル処理のユニットテスト用にopen()を置き換えるヘルパー関数です。 open()にパッチを適用してmock_openと置き換えることで、ユニットテスト実行環境のファイルシステムを意識せずに、ファイル処理のユニットテストが作成できます。 mock_openの使用方法 mock_openが使用可能なユニットテストの実行環境 mock_openはpythonの標準ライブラリ(unittest.mockモジュール)に含まれていますので、pythonが動作する環境であればmock_openが使用できます。 記事では、pytestパッケージ、およびpytest-mockパッケージをインストールした環境向けにユニットテストの例を記載していますので、必要に応じて両パッケージをインストールしてください。 # pytestパッケージのインストール pi

    mock_openを使用したファイル処理のユニットテスト - Qiita
    sh19910711
    sh19910711 2024/06/16
    "mock_open: ファイル処理のユニットテスト用にopen()を置き換えるヘルパー関数 / 実行環境のファイルシステムを意識せずに、ファイル処理のユニットテスト / 標準ライブラリ(unittest.mockモジュール)に含まれ" 2022
  • Rust 初心者の AtCoder 用開発環境設定と、解く流れの例 - Qiita

    AtCoder 緑になったのでパズル好きな人に競プロを紹介してみる に続く色変記事です。 想定読者 RustAtCoder に参加しようとしている Rust の経験がある、または Rust 以外の何かのプログラミング言語を使える (Windows + Visual Studio Code を使っている) 違う OS や違うエディターの方は読み替えてください ちなみに RustAtCoder 参加に向いている言語かどうかというのは人によって意見が分かれそうです。 AtCoderコンテストにRustで参加するためのガイドブック 最初にメリット・デメリットがまとまっています。 この記事を書いている人は Rust 歴 3か月弱の初心者です。Rust を学んでから競技プログラミングに参加したいというより、競技プログラミングを通じてそこで使う Rust の機能を学ぼうという方が強いです。コ

    Rust 初心者の AtCoder 用開発環境設定と、解く流れの例 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "競技プログラミングを通じてそこで使う Rust の機能を学ぼう / rust-analyzer が強力です。 mut 可変値が下線付きになる、index の型が自動分析で表示されるなどで分かりやすい" 2022
  • Go でやる mutation testing ~テストの品質を評価しよう~ - Qiita

    Mutation testing とは テストの品質を評価する手法の一つ テスト対象のプログラムの一部を機械的に書き換えたときに、テストが失敗させられるかを確認する手法 大まかな流れは以下の通りです。 プログラムを一部改変 改変されたプログラムのことを "mutant" と呼びます 1.で改変した状態でテストを実施 テストが失敗するかどうかをチェック いずれかのテストが失敗するなら、 テストが十分であるとし、OKとします 全てのテストが成功するなら、テストが不十分であるとし、NGとします このプロセスをたくさん実行し、いろいろなプログラムの改変("mutant")を試してその結果のOKの割合が高いほうが質の高いテストであると判断します。1 テストが失敗する場合に、mutation testingとしてはOKとなります。ややこしいので、この記事では以下のように表現することとします。 テストが

    Go でやる mutation testing ~テストの品質を評価しよう~ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Mutation testing: テストの品質を評価する手法の一つ + テスト対象のプログラムの一部を機械的に書き換えたときに、テストが失敗させられるかを確認する / go-mutesting: Go の mutation testing が実施できます" 2022
  • Elasticsearchへのアクセスレイヤーの単体テストをmockせず実装する - Qiita

    記事でやること Elasticsearchへのアクセスレイヤーに対する単体テストを書く際にmockせず物のElasticsearchを利用する実装方法の紹介 今回実装したコードはこちらのレポジトリで公開しております。 対象読者 Elasticsearchを使ったアプリケーションを実装したことがある方 Elasticsearch周りの単体テストの書き方に悩んでいる方 使用言語とライブラリー Go言語 1.18 olivere/elastic (非公式 Elasticsearch clientライブラリー) 背景 以下、t_wadaさんのツイートを拝見し、DBとしてElasticsearchを使っている場合はどのような実装になるのかなとふと疑問に思ったのが、記事を執筆した背景になります。 テスト時にmockせず物のElasticsearchを利用するとなると、ローカルのDockerコン

    Elasticsearchへのアクセスレイヤーの単体テストをmockせず実装する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Elasticsearchへのアクセスレイヤーに対する単体テスト / コンテナ上にElasticsearchを立てる + インデックスの作成やドキュメントの追加などセットアップ時の手順がMySQLやSQLServerなどのDBよりも煩雑になるイメージ" 2022
  • Google Colaboratoryでテストメソッドを指定してunittestを実行する方法 - Qiita

    import unittest def add(x, y): return x + y class AddTest(unittest.TestCase): def test_add(self): self.assertEqual(add(1, 2), 3) class TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello

    Google Colaboratoryでテストメソッドを指定してunittestを実行する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Colaboratory でテストメソッドを指定して unittest を実行 / テストクラスを指定して実行するには、 unittest.main の argv の2番目以降にクラス名を書きます / argv の1番目の値は使われないようです" 2023
  • 最近ハマっているGo言語で単体テストを書くまでを整理してみた - Qiita

    はじめに 単体テストを書くときにパターン化されて作るようになってきたのでここらでちょいと言語化してみようと思い記事にしてみました。(ほぼ自分用のメモです。) ライブラリ golang/mock (uber/mock) モック用ライブラリです。2023年6月28日をもって Public archive となってしまいました。 Update, June 2023: This repo and tool are no longer maintained. Please see go.uber.org/mock for a maintained fork instead. This project originates from Google's golang/mock repo. Unfortunately Google no longer maintains this project, and

    最近ハマっているGo言語で単体テストを書くまでを整理してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "google/go-cmp: 値比較用ライブラリ + reflect.DeepEqual()でいいじゃんと思っていましたが、テストに失敗したときの差分出力やある値だけ比較から除外したいというのが便利" 2023
  • 良い単体テストの作り方 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 単体テストは実装の詳細を知らないように意識すると良い 最初に一番伝えたいことを記載します。 単体テストは実装の詳細を知らないように作ると良いです。 内部実装と紐づくほどリファクタした時にテストが壊れやすくなるためです。 しかし、これはテスト対象がそれが実現できる設計になってないとできません。 実際の現場では設計の見直しから始めないとできない状況があり得ます。 なので、無理に単体テストは実装の詳細を知ってはいけないとルール化して運用するのではなく、 可能な限り目指しましょうという運用が良いでしょう。 ※この記事は書籍である「単体テストの考

    良い単体テストの作り方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "単体テストは実装の詳細を知らないように作る / 内部実装と紐づくほどリファクタした時にテストが壊れやすくなる / サンプルコードのような設計に持っていくことが難しいケースが存在する" 2023
  • Go言語のテストケースの一覧性を高める - Qiita

    func TestSplitN_A(t *testing.T) { type args struct { s string sep string n int } tests := []struct { name string args args want []string }{ { name: "-1", args: args{ "A,B,C,D", ",", -1, }, want: []string{"A", "B", "C", "D"}, }, { name: "0", args: args{ "A,B,C,D", ",", 0, }, want: nil, }, { name: "1", args: args{ "A,B,C,D", ",", 1, }, want: []string{"A,B,C,D"}, }, { name: "2", args: args{ "A,B,C,D"

    Go言語のテストケースの一覧性を高める - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Goのテーブル駆動テストは、記述を工夫することで一覧性を高める / テストコードは分量が多くなるので読む量も増えますが、こういったちょっとした工夫で読みやすくなり、間違いや漏れなどにも気づきやすくなる" 2023
  • Vitest のモック関数 fn、spyOn、mock の使い分け - Qiita

    はじめに この記事では、Vitest というテストフレームワークのモックに利用される vi.fn、vi.spyOn、vi.mock の概要とそれらの使い分けをサンプルつきで記載していきます。 fn、spyOn、mock の使い分け モック対象によって使い分けます。 fn:関数 spyOn:オブジェクトのメソッド mock:モジュール全体 fn fn は、関数をモックします。 以下のサンプルでは、getApples というモック関数を作成し、その関数が呼び出されることをテストしています。 test("spy function no arguments and no returns", () => { // Define mock function const getApples = vi.fn(); // call mock function getApples(); // check if

    Vitest のモック関数 fn、spyOn、mock の使い分け - Qiita
    sh19910711
    sh19910711 2024/06/16
    "fn: API を利用して、モック関数のふるまいを操作 / spyOn: オブジェクトのメソッドをモック / mock: インポートするモジュールを全てモック / mockImplementation を利用してメソッドを上書き" 2023
  • Apache Spark 3.5で導入されたTesting APIを試す - Qiita

    久しぶりのLLM以外の記事ですが、どちらかといえばこちらが業です。 導入 Apache Spark 3.5がリリースされました。 下記のDatabricks公式blogでも取り上げられています。 これを読んでいていると、PysparkのTesting APIというものに目が引かれました。 類似のモジュールは既にあったと思うのですが、公式が出してくれると地味に捗ります。 というわけで、下のドキュメントを基に、ウォークスルーしてみました。 環境はいつものようにDatabricksを使います。DBRは14.0です。 Step1. ビルトイン関数を試す ドキュメントの内容ほぼそのままを実行してきます。 最初はデータフレーム同士の比較を行う関数assertDataFrameEqualでテストします。 import pyspark.testing from pyspark.testing.utils

    Apache Spark 3.5で導入されたTesting APIを試す - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Spark 3.5: PysparkのTesting APIというものに目が引かれました。類似のモジュールは既にあったと思うのですが、公式が出してくれると地味に捗ります / assertDataFrameEqual: データフレーム同士の比較を行う関数" 2023
  • Vitest で localStorage の単体テストを実装する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Vitest で localStorage の単体テストを実装する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Vitest というテストフレームワークで localStorage がどのように動作をするか確認 / 仮想DOMとして jsdom を利用する場合、localStorage を spy on する際は、localStorage ではなく、Storage.prototype を第一引数に渡す" 2023
  • Pythonのunittest.mock.patchパターン集(+おまけ) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Pythonのunittest.mock.patchパターン集(+おまけ) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "考えるべきは名前空間 / datetime.nowをモック化して常に同じ時刻を返したい、みたいな場面 / クラス全体をモック化してしまい、以下のようにnow以外も使っている場面ではdatetime()の呼び出しもモック化されてしまい" 2023
  • unittest の基本的な使い方 ~ 自動テストのメリット・デメリットを添えて ~ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 皆さん、ユニットテストは手動でやられてますか? 自分は今まで手動でやってきてました。 ですが、手動で行うと不便に思う部分が出てきており、回帰テストなんかを行う際は データの準備や実施が面倒になります。 そこで業務効率化を図れないかと思い、ユニットテストのフレームワークについて調べてみました。 その中で今回は、Pythonunittestについて調べてみて、 ユニットテストフレームワークのメリット・デメリットやunittestの使い方も少し調べてみたのでそのまとめになります。 ユニットテストの概念 ユニットテストを使用して

    unittest の基本的な使い方 ~ 自動テストのメリット・デメリットを添えて ~ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "コードの仕様理解を助けてくれる / フレームワークの知識を身に着けてテストコードを書かなくてはなりません / フレームワークを導入してテストしてもプロダクトの品質が手動テストより必ず良くなるとも限りません"
  • 【C++】Clangでテストコードがないコードも対象に含めテストカバレッジを計測する方法 - Qiita

    カバレッジ計測 まずは対象のテストプロジェクトをCMakeでビルドします。ビルド後に以下コマンドを実行し、カバレッジの計測結果をHTMLで生成します。 この際、初めにすべての対象コードに対する空のカバレッジ計測情報を生成してから、実際のテスト結果に対する計測情報を生成し、それら二つを結合するという手順を取ります34。 これにより、テストが存在しないコードも含めすべてのコードに対するカバレッジ計測結果がlcovHtmlディレクトリに出力されます。 # 全てのgcnoファイルに対してカバレッジ0のベースとなる計測結果を生成する。テストコードがないファイルも計測結果に含めるために必要 lcov -c -d ./ -o app_base.info --gcov-tool `pwd`/llvm-gcov.sh --include "{対象とするコードディレクトリ}/*" --rc "lcov_bra

    【C++】Clangでテストコードがないコードも対象に含めテストカバレッジを計測する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Clangを使用している際に、テストコードがないコードも対象に含めテストカバレッジを算出する / clangのコンパイルおよびリンカーオプションに--coverageを追加 / lcov: gcovによるカバレッジの計測結果を視覚的に表示"
  • その単体テストは 振る舞い を検証できていますか? - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 記事は単体テストにおける偽陰性に焦点をあてています。偽陽性は別記事にします。 目次 振る舞いを検証できていない場合ただの負債になりかねない そもそも単体テストの目的って? 単体テストで検証したいものって? 振る舞い と 内部実装(実装の詳細) 観察可能な振る舞い とは 内部実装(実装の詳細) とは 注意:振る舞いと内部実装は視点によって変化する 検証したいものは外部から観察可能な1単位の振る舞い 現実世界で 振る舞い と 内部実装 を考える テストケースに内部実装が漏れ出ている例 このテストケースの問題点 テストケースで内部

    その単体テストは 振る舞い を検証できていますか? - Qiita
    sh19910711
    sh19910711 2024/06/16
    "コードは書いた時点で負債になる + 価値を生まないテストケースの作成は、本当に負債を積んでいるだけ / 単体テストを用意することで、コードの変更によるバグを検出するセーフティネットがプロジェクトに備わる"
  • Go+Gin+GORM開発環境で食品管理APIを作る~単体テスト編~ - Qiita

    はじめに こちらの記事でクリーンアーキテクチャを意識した構成に変更した品管理APIで単体試験(Unit Test)を実装するための手法をまとめました。 単体試験とは コードの最小機能ユニットをテストするプロセスのことです。 前回記事の最後にも書きましたが、このシステムでいえばfunc単位で行う試験ということになりますね。 ただし、クリーンアーキテクチャに対応する前のソースコードに対して単体試験を行おうとした場合、試験対象とする処理の中で呼び出される処理まで実行されてしまうため、イマイチという話でした。

    Go+Gin+GORM開発環境で食品管理APIを作る~単体テスト編~ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "依存性の注入を行ったことでテストがよりシンプルに、疎で行える / mockの実装にはgomockのmockgenコマンドを利用 / -sourceに指定したファイルのmockを-destinationに作成 / gomock.NewController(t)でmockの利用を宣言"
  • pytestの並行実行で理解するスレッドセーフと排他制御 - Qiita

    はじめに pytestで複数のテストケースを、並行して実行させたい場合があります。 テストを高速化したい、一気に負荷をかけたい、などの目的のほか、 並行処理で下記のような衝突が起きないかチェックしたい場合もあります。 処理順序が期待とおり制御できず、同期が取れていない 同じリソースへの操作が競合し、データ不整合がおきる TL;DR pytest-parallelプラグインを利用して、複数テストケースを並列・並行実行できる 複数テストケースを並行実行させ、スレッドセーフ(thread-safe)かをチェックできる スレッドアンセーフ(thread-unsafe)なプログラムを、排他制御を用いてスレッドセーフにできる 関連用語のおさらい プロセス?スレッド? プロセスとは(process) 実行中のプログラムインスタンスを指す 複数プロセスは同じメモリ領域を共有しない(プロセス間通信の共有メモ

    pytestの並行実行で理解するスレッドセーフと排他制御 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytest-parallelプラグインを利用して、複数テストケースを並列・並行実行 / 複数テストケースを並行実行させ、スレッドセーフかをチェック / テストケース作成時は、並列実行・並行実行も考慮したほうがよさそう" 2022
  • RSpecでのテクニックをpytestで実行するための逆引きメモ - Qiita

    背景 副業のプロダクト開発で、pytestを使ってユニットテストを書いています。 それまでRubyのRSpecでしか書いたことがなく、他の言語・フレームワークでのテストの書き方について戸惑った箇所があったので、今回は僕と同じようにRSpecを書いていた人がpytestを書くときに役立つような話を書きたいと思います。 知っておいてよかったこと 普段はRSpecでの書き方に慣れているため、pytestでのテストの書き方に最初は戸惑っていましたが、いくつかpytestでもRSpecでよく使う機能と同じことができることがわかりましたので、よくつかうものを紹介します。 pytestでは-kオプションをつけることで、実行するテストを指定できる まずはテストの実行時です。 RSpecでは、実行ファイルを指定した後に:を続けて実行する行数も指定することできます。

    RSpecでのテクニックをpytestで実行するための逆引きメモ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "RSpecを書いていた人がpytestを書くときに役立つような話 / pytestでは-kオプションをつけることで、実行するテストを指定できる / 文字列と完全一致ではなくて部分一致するテストが実行される" 2022
  • テンプレートライブラリを用いてpytestのコードを生成する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    テンプレートライブラリを用いてpytestのコードを生成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "モデルベースドテストやキーワード駆動テストなど「説明可能性の高いテスト」に関する技術について調査 / makoというテンプレートライブラリを使用 + pytest-bddのgeneration.pyにならって実装" 2023
  • pytestでテスト毎に共通の前処理、後処理に引数を渡す - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pytestでテスト毎に共通の前処理、後処理に引数を渡す - Qiita
    sh19910711
    sh19910711 2024/06/16
    "引数を渡して、テストケース名も出力 + 今何のテストを実行しているかわかる / 後処理もするのに関数名がsetupっていけてない / 困ったら(いや最初から)公式ドキュメントを読んでください" 2023
  • Pythonデータ加工での自動テスト: pandas & pytest - Qiita

    Pythonデータ加工での自動テスト: pandas & pytest やること pandasによるデータ加工をpytestで自動テストする 対象読者 Python, pandasでのデータ加工を普段やってる人 データ加工処理の品質を向上させたい人 背景 データ分析の現場ではテストがほとんどなくて、処理がちゃんと正しく動いているのか自信を持てなかった。 SIerの現場でテストをした際、「これ、人間がやる必要ある…?」と感じた。 を読むと、世のプログラマーは「テストコード」なるものを書き、「自動テスト」をしているそうではないか。 Pythonではどのように自動テストをするのか...?pytestだ!! お断り とりあえずpytestを導入するということをテーマとした記事です。あんまりスマートなコードではないです。 そもそも筆者は探り探りでやっているので、ベストプラクティスはわかっていないで

    Pythonデータ加工での自動テスト: pandas & pytest - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストがほとんどなくて、処理がちゃんと正しく動いているのか自信を持てなかった / テストしやすさを基準にコードを書く / 数ヶ月後に自分のコードを読むと絶望するのが常だが、テストコードがあるとだいぶマシ" 2023
  • 【Python】なぜpytestを使うのか?Assertion編 - Qiita

    はじめに 稿はPythonのユニットテストで、「なぜpytestを使うのか?」のシリーズ第一弾になります。 稿の目的 Python利用者のユニットテストに対する解像度を上げること なぜpytestを使うのか、理由を知ること 動作環境 Python: 3.10.6 pytest: 7.1.3 1. Assertionとは? テストコードを書く際に、頻出と言っても良いものがこのAssertionです。 AssertionとはIT用語辞典を引用すると、 アサーションとは、表明、断言、主張などの意味を持つ英単語。プログラミングにおいて、あるコードが実行される時に満たされるべき条件を記述して実行時にチェックする仕組みをアサーションという。 ということであり、条件の結果を表明する仕組みになります。 以降、Python文法に合わせてassertと呼称します。 2. builtin の assert

    【Python】なぜpytestを使うのか?Assertion編 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytestではbuiltinのassert文そのものを書き換え / assertionパッケージを覗いてみると下記のようなフックスクリプトがあり / 直感的な文を継承しつつリッチなスタックトレースが表示される" 2023
  • GitHub Actionsでpytestしてカバレッジを出す - Qiita

    個人的備忘録。 やること Github Actionsでpytestを動かして単体テストする。 動作タイミングはpull requestのopen時と、pull requestがopenされたブランチへのpush時 外部APIを叩くテストケースはスキップすることにした 理想的にはAPIを叩くロジックを分離してDependency Injectionすることで、テスト時にはモックAPIが動作するようにするべきとされています 参考: PythonでDependency Injection (DI)をやるには? pytest-covでカバレッジを出して、pull requestのコメントとして投稿する。 Github Actionsの設定 name: Pytest on: pull_request: types: [opened, reopened, synchronize] jobs: tes

    GitHub Actionsでpytestしてカバレッジを出す - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Github Actionsでpytestを動かして単体テスト + pytest-covでカバレッジを出して、pull requestのコメントとして投稿 / パイプを使う場合、pipefailの設定をしないとパイプ後半の戻り値で成功・失敗を判断することになる" 2023
  • GitHub Actionsと仲良くなったよ | IIJ Engineers Blog

    ぬるぽよりにるぽ、ヘビや宝石やイルカよりホリネズミやカニやアザラシが好きです。クジラに乗っていたらとある船の航海長に出会い意気投合しました。その後、帆船と衝突し大変な目にあいました。ペンギンとは未だにわかりあえません。 はじめまして はじめまして、うちやまです。バックエンドのアプリケーション開発を主にしています。 今回はCI/CDでGitHub Actionsに移行したことについてざっくばらんにお話しようと思います。私を含めチームメンバーはGitHub Actionsを知ってるけどそこまで使ってないし知らない状態です。GitHub Actionsに怒られイライラし、最終的に仲良くなっていった流れを書いていこうと思います。GitHub Actionsの深い技術要素というより、とりあえず移行してみて動くようになったよということを書いていくので、難しい話はしない予定です (というより、できません

    GitHub Actionsと仲良くなったよ | IIJ Engineers Blog
    sh19910711
    sh19910711 2024/06/16
    "DBはサービスコンテナで立ち上げ、CIごとにDockerコンテナを立ち上げ / GitHub Actions: 「container」という設定があり、コンテナ内でジョブを実行することができます + サービスコンテナとの通信も簡単" 2023
  • factory_boyを使ってテストコードを作成しよう! - Qiita

    import uuid from django.contrib.auth.models import AbstractUser from django.contrib.auth.validators import UnicodeUsernameValidator from django.core.validators import RegexValidator from django.db import models # カスタムユーザクラスを定義 class User(AbstractUser): username_validator = UnicodeUsernameValidator() class Role(models.IntegerChoices): """システムユーザのロール Args: MANAGEMENT(0): 管理者 GENERAL(1): 一般 PART_TIME

    factory_boyを使ってテストコードを作成しよう! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "factory_boy: テスト用のデータの作成と管理を簡単にすることができます / Djangoでfactory_boyを使用する際はDjangoModelFactoryクラスを継承させてテストデータ用のクラスを定義 / Fakerを使うとランダムなテストデータを生成" 2023
  • pytest-bddを使ってBDD開発をしよう!(初期設定から簡単なテストコードの作成まで) - Qiita

    概要 Pytestにはpytest-bddというBDDを実装するためのプラグインがあります 今回はpytest-bddを使ったテストの書き方について説明していきます そもそもBDDって何? BDDは振る舞い駆動開発(Behavior-Driven Development)という開発手法の略です 名前に振る舞いという文字がある通り、コード自体の振る舞いやアプリケーションの振る舞いを焦点にテストコードを書いていく開発手法です ちなみにBDDとともによく挙げられるTDD(テスト駆動開発、Test-Driven Development)は テストコードを書いてから実装用のコードを書く開発手法です 前提 WebフレームワークはDjangoを使用 来であればテストコードを書いてから実装しますが説明の都合上、実装したコードをお見せしてからテストコードを記載していきます テストコードだけみたい方はBDD

    pytest-bddを使ってBDD開発をしよう!(初期設定から簡単なテストコードの作成まで) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Pytestにはpytest-bddというBDDを実装するためのプラグインがあり / ヘルスチェックのテストをpytest-bddを使って実装 / デコレータの引数にfeatureファイルに記載したステップの内容と別のステップで使う際にtarget_fixtureを定義" 2023
  • GitHub Actions内でPytestを実行して失敗したテストの詳細をPR内で直接表示させよう! - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    GitHub Actions内でPytestを実行して失敗したテストの詳細をPR内で直接表示させよう! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "PR内で書いたテストコードに失敗したテストの実行内容が表示されたら便利 / GitHub Actionsを実行すると下記のように変更してないテストコードに対しても失敗していたらPR内で詳細に記載されます" 2023
  • TestClientを用いてFastAPIのテストをする - Qiita

    FastAPIPythonで高速なAPIサーバーを立てられるので人気ですね。 今回はFastAPIでテストをする方法を試してみました。 FastAPIとは FastAPIとはPythonAPIサーバーを構築できるフレームワークで、以下の特徴があります。 軽量 Pythonとしては高速 Pythonに型定義を実装できる 非同期通信を簡単に実装できる FastAPI標準のテストツール: TestClient FastAPIで標準で用意されているテストツールにTestClientというものがあります。 これはテスト内でFastAPIで作ったAPIサーバーのクライアントとして振る舞うことができるものです。 例として以下のmain.pyがあるとします。

    TestClientを用いてFastAPIのテストをする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "FastAPI: Pythonとしては高速 + 型定義を実装 + 非同期通信を簡単に実装できる / TestClient: FastAPIで標準で用意されているテストツール + テスト内でFastAPIで作ったAPIサーバーのクライアントとして振る舞う" 2023
  • 【FastAPI】APIキーを利用したPOSTリクエストのpytestテスト方法 - Qiita

    from fastapi.testclient import TestClient from .main import app client = TestClient(app) def test_get_success(): response = client.get("/api") assert response.status_code == 200 # ステータスコードが200 OKであることを確認 main.pyとtest_main.pyが同ディレクトリにある前提です。 そうでない場合は、import文のfrom .main import appを変えてください。 これにより、main.pyモジュールのappオブジェクトをインポートしています。 client = TestClient(app)は、FastAPIアプリケーションをテストするためのTestClientオブジェクトを作成し

    【FastAPI】APIキーを利用したPOSTリクエストのpytestテスト方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "特定のエンドポイントの動作を検証する / 通常のprint文を使っても、pytestの実行時にはターミナルに出力されません / pytest -sコマンドを実行することで、標準出力を有効にする" 2023
  • GitHub Actions で pytest の失敗箇所をコード中にインライン表示する - Qiita

    GitHub Actions にはテストなどの実行結果を、Pull Requestのコード上にアノテーションされた形で表示する機能があります。Node.js などではこれが自動で行われることがあるためご存知の方も多いかもしれませんが、Pythonでも上手く活用できます。 pytest の結果をコード上に表示する 実は Pytest が公式にそのためのプラグインを提供しています。これをインストールした状態で GitHub Actions で pytest を実行するだけで機能します。 具体的には、以下のようにインストールしておけばいいでしょう。 # pip でインストールする場合 pip install pytest-github-actions-annotate-failures # Poetry に含めておく場合 poetry add -G dev pytest-github-actio

    GitHub Actions で pytest の失敗箇所をコード中にインライン表示する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "GitHub Actions にはテストなどの実行結果を、コード上にアノテーションされた形で表示する機能があり / Node.js などではこれが自動で行われることがある + Pythonでも上手く活用できます" 2023
  • mocker.spyの使い方、使い所 - Qiita

    mockとは mockとは依存する関数やクラスが正しく使われているかどうかをテストする時に使われるオブジェクト mockerを用いると指定した対象を偽の実装にすり替えて、引数や呼び出し回数を保存できるオブジェクト(すなわちモック)にすることができる。 moker.spyとは 指定した対象の物のメソッドを呼びつつ呼び出し回数を確認や引数、返り値を確認できる。 使い所 テスト実行時に コントローラからjobのテストをしたい時 外部システムへアクセスする際 使い方 指定した対象をmock化し後続でtestしたいものをcallする Spyより methodをテストする場合 def test_spy_method(mocker): class Foo(object): def bar(self, v): return v * 2 foo = Foo() spy = mocker.spy(foo,

    mocker.spyの使い方、使い所 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "mocker: 対象を偽の実装にすり替えて、引数や呼び出し回数を保存できるオブジェクト(すなわちモック)にすることができる / moker.spy: 本物のメソッドを呼びつつ呼び出し回数を確認や引数、返り値を確認" 2023
  • 【pytest】前処理・後処理を定義する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    【pytest】前処理・後処理を定義する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytest.fixture: 関数単位ではなく、クラス単位やモジュール単位で事前処理を行いたい場合は scope を設定 / fixture を conftest.py で定義することで、同じディレクトリにある複数のテストモジュールで fixture が使用できる" 2023
  • pytestのmockerについて - Qiita

    この記事は レコチョク Advent Calendar 2023 の7日目の記事となります。 はじめに 株式会社レコチョクの齋藤拓海です。 最近は登山にハマってます。スノボもこれから楽しみです。 最近ハマっているアーティストはpeople 1、キタニタツヤです。 さて、皆さんは普段テストを書いているでしょうか。 自分は現在pythonで開発をしていて、単体テストはpytest を使用しています。 単体テストを記載していて困るのが、外部APIを使用している部分やDBなどだと思います。 そこでmockが便利なので、今回は紹介したいと思います。 mockの種類 pythonのmockはpytestのmockとunittestのmockとで2種類あります。 それぞれ特徴を簡単にまとめてみました。 特性/フレームワーク pytest-mock (mocker) unittest.mock (Mock

    pytestのmockerについて - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytestのmockとunittestのmock / pytest-mockはunittestのmockをラップしたものなので、ほとんど同じ感覚 / mocker: スタブ、パッチといったテストダブルを生成 + メソッドや関数の挙動を模倣または制御することが可能" 2023
  • 【pytest入門】 pytestをさわってみる - Qiita

    概要 記事はアイレット株式会社Advent Calendar2023 " 9日目の記事です! 案件の中で単体テストを行う際にpytestを使用する機会があり、その際に学んだことや使用した機能についてまとめたいと思いこのテーマで作成しました。 pytestとは何か、どのような機能があるか知るきっかけにしていただけたら嬉しいです。 技術ブログの投稿は初めてのため、温かい目で見ていただけますと幸いです! pytestとは pytestとは、Pythonで書かれたテストフレームワークの一つです。 Pythonのテストフレームワークは、他にも標準フレームワークであるunittestや外部フレームワークのnoseなどもあります。 pytestの特徴としては、以下のような点が挙げられます。 シンプルなテストの作成 assertステートメントを使用してテストコードを比較的簡単に記述できる。 詳細なアサー

    【pytest入門】 pytestをさわってみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pytest.mark.parametrize: デコレータを使用して、同じテストを異なるパラメータで繰り返し実行することができる / fixtureを使用することで、テストのための前準備や後処理をテスト関数から分離" 2023
  • Snowflake x Terraformに自動テストを導入した話 - Qiita

    はじめに こんにちは。ARISEでデータ基盤構築業務を主に行う「データアーキテクト」というキャリアトラックに所属しているエンジニアの田畑です。先日当社のテックブログの記事でも触れましたが、現在私はSnowflakeでの大規模データ基盤構築に携わっています。 そのプロジェクトにおいて、データ基盤のインフラ面における品質担保の負担軽減を図るべく、自動テストを導入しました。今回はその経緯や実装概要、今後の展望を共有したいと思います。 前提 SnowflakeはPRD, STG, DEVの3面構成(アカウントレベルで分離) Snowflakeのオブジェクトは基Terraformで管理 TerraformコードのリポジトリはGitHubで管理 リポジトリはGit-flowで開発 各環境に対応するブランチに対してPR作成をするとterraform plan, マージをするとterraform app

    Snowflake x Terraformに自動テストを導入した話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "fixture: pytestの機能の1つ + 事前処理/事後処理を定義できる / どの単位で実施するかは先述したスコープという形で設定が可能 / テスト対象としているのは主にアクセス制御周り" 2023
  • Node.jsで書いたSeleniumのコードをマルチデバイス対応させる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 普段はとある企業でフロントエンドを担当しています。 たまにバックエンドやインフラもやりますが、今回はテストシステムの構築から始めたのでフロント&インフラが絡むお話です。 背景 社内開発で、リリース前テストは要望の上がったユーザー部門で行ってもらっていましたが、いろいろ対応しなければいけないパターンが出てきたことからテストの自動化を進めていきました。 課題 テストがそもそも負担大 私のいる会社では社内の担当部署で動作チェックを行ってもらい、問題なければリリース・・・というプロセスを踏んでいます(もっと良いフローはあると思う) も

    Node.jsで書いたSeleniumのコードをマルチデバイス対応させる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DeviceFarm: 情報が古い or 少ない / DeviceFarmではテストの実施結果を動画として保存 + 差分はReg-CLIに任せ、異常があったら動画をチェックしどこでおかしくなっているのかを後から見返せます"
  • Pythonのデータ検証ライブラリCerberusを使ってみよう - Qiita

    はじめに この資料はデータ検証用ライブラリ Cerberus のドキュメントを抄訳したものです。 コミュニティーで Hands-On を行うときの資料として作成したため、 Cerberus の変更履歴などについては触れていません。 また、ソースコードの例示と実行には、IPython を使っています。 $ ipython Python 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:23:19) Type 'copyright', 'credits' or 'license' for more information IPython 7.28.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: IPython の %load コマンドでソースコー

    Pythonのデータ検証ライブラリCerberusを使ってみよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Cerberus: 検証したいデータをValidatorクラスのvalidate()メソッドに渡す / 他の検証ツールとは異なり、Cerberusは検証を行って問題があるときに停止したり、例外を発生させたりはしません" 2021
  • DataFlowのパイプラインでCerberusの機能を使って、csvをチェックしてみた。 - Qiita

    はじめに 現在業務でGCPDataFlowを使ってデータパイプラインを構築しており、CSVファイルがアプリケーションから来るのですが、たまにユーザが手で直したりなんてことがあるので、バリデーションして、不適当な行があれば省いて、後続のデータパイプラインに流したいと思っています。(上流の運用なおしたいのはやまやまですが。。。) そこでCerberusというバリデーションライブラリがあったので、いっちょやってみようと思った次第です。 Cerberusとは Pythonのデータ検証用のライブラリで 「Cerberusは、強力でありながらシンプルで軽量なデータ検証機能をすぐに提供し、簡単に拡張できるように設計されているため、カスタム検証が可能です。依存関係はなく、Python 2.7から3.8、PyPyおよびPyPy3まで徹底的にテストされています。」とのこと (引用元https://docs.

    DataFlowのパイプラインでCerberusの機能を使って、csvをチェックしてみた。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Cerberus: Pythonのデータ検証用のライブラリ + シンプルで軽量なデータ検証機能をすぐに提供し、簡単に拡張できるように設計 / regixだったり桁数だったりかなり柔軟にチェックができる" 2022
  • motoのmock_dynamodbを使ってみました - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    motoのmock_dynamodbを使ってみました - Qiita
    sh19910711
    sh19910711 2024/06/16
    "単体テストをやるため、DynamoDB関連の処理をモック化したい / 便宜上pipenv内でtoxでテストをやる / テストの前準備として、motoでmock化したDynamoDBテーブルを作りDummyのデータをputする関数を用意" 2023
  • motoのバージョン5.x以降のimportエラーについて - Qiita

    motoとは? motoは、AWSの各種サービスをモックするためのPythonライブラリです。 DynamoDBやS3などのマネージドサービスをモックにすることで、実際のAWS環境を用意せずともローカル環境でpytestなどができます。 moto v5系でのDecoratorの変更 そして、いつの間にかmotoのバージョンが5.xに上がりました。 https://docs.getmoto.org/en/5.0.0/docs/releases.html 今回のメジャーアップデートでの注意すべき点は以下です。 All decorators have been replaced with mock_aws 今までは、@mock_s3や@mock_dynamodbのようにAWSサービス名でDecoratorを記載していましたが、今後は全て@mock_awsに統一されるとのことです。 これにより今ま

    motoのバージョン5.x以降のimportエラーについて - Qiita
    sh19910711
    sh19910711 2024/06/16
    "moto: AWSの各種サービスをモックするためのPythonライブラリ / いつの間にかmotoのバージョンが5.xに上がり + AWSサービス名でDecoratorを記載していましたが、今後は全て@mock_awsに統一"
  • Pytestを用いたAPIテストを初めて実装した時の話 - Qiita

    はじめに 業務で自身が作成したAPIらへの単体テストを実施する際に、pytestを初めて利用しテストコードを作成したので、技術共有と自身の備忘録もかねて書いてみようと思います。 pytestってなに pytestはPython言語を用いてテストコードを作成できるオープンソースのフレームワークの1つです。pytestを用いてテストコードを書いていきます。 pytest公式サイト 素直な使ってみた感想ですが、0からの利用でもわかりやすかったです。今回はAPIを呼び出すテストを実施しましたが、pythonで書かれたコード自体へのテストコードの実装も同じように実装可能です。 テスト実施の構成図 今回はAWS環境で作成したAPIGatewayを通した単体テスト実施となります。APIGatewayにつながるLamdba関数内から他のAWSサービス、または外部サービスへつながっています。 テストコードで

    Pytestを用いたAPIテストを初めて実装した時の話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "指定したメソッドのテストコードを実行: pytest tests/test_01.py::test01 / fixture: 前処理後処理を記載した関数前に@\pytest.fixtureと宣言 + フィクスチャの中にはyield + 前処理→yield→後処理の順で記載"
  • Pytest 実行時にテストケースを記述している同名のファイルがある場合のエラーへの対応方法 - Qiita

    概要 Pytest 実行時にテストケースを記述しているファイルが同名の場合に、次のようなエラーが発生する際の対応方法を紹介します。基的な対応方法としては、同時に実行する必要があるテストケースのファイル名が被らないようにすることです。 collecting ... collected 2 items / 1 error ==================================== ERRORS ==================================== _ ERROR collecting pytest_test/tests/test_cases/folder_2/test_cases__utilities.py _ import file mismatch: imported module 'test_cases__utilities' has this __f

    Pytest 実行時にテストケースを記述している同名のファイルがある場合のエラーへの対応方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "同時に実行する必要があるテストケースのファイル名が被らないようにする / folder_1とfolder_2の配下に、test_cases__utilities.pyという同名のファイル / このような構成の場合には、Pytest ではエラーとなって"
  • Jinja2 テンプレートエンジンにおける nan/None の空白化や数値カンマ区切りといった編集方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Jinja2 テンプレートエンジンにおける nan/None の空白化や数値カンマ区切りといった編集方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pandas のデータフレームのほうで欠損値を持っていることって結構ある / 事前に data.fillna(0) などで欠損値を埋めればいいのですが、今回はテンプレートエンジン側での回避" 2018
  • CTF的 Flaskに対する攻撃まとめ - Qiita

    この記事は m1z0r3 Advent Calendar 2018 の1日目です。 m1z0r3 では年に一度、チーム内で問題を出し合って解くチーム内 CTF を開催しています。 奇しくも今年のチーム内 CTF は明日に開催のため、実際に作った問題の解説はできないので、今日はボツになった作問案から書きたいと思います。 はじめに CTF(Capture The Flag)では、問題を解く際に Python でスクリプトを書くことが多いです。 Python には Flask という軽量Webフレームワークがあり、 CTFd という CTF のスコアサーバが簡単に構築できるフレームワークなどにも使われています。 Flask は手軽に Web アプリケーションを構築できる一方で、(他の言語・フレームワーク同様に)正しく使わないとセキュリティ上問題があります。そのため、CTF の Web 問題でもし

    CTF的 Flaskに対する攻撃まとめ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Jinja テンプレート内では {% %} で囲まれた部分が Jinja の構文と見なされ、 {{ }} で囲まれた部分は評価した結果を表示する / 手軽に Web アプリケーションを構築できる一方で、正しく使わないとセキュリティ上問題" 2018
  • ポート管理表+パラメータ表+Jinja2テンプレートから、L2SWのConfigを自動生成してみた - Qiita

    はじめに NW機器のConfig作成、手動でちまちまやるのって面倒くさいですよね? 特にL2SWは、まとめて大量に導入することが多く、コピペで作成すると、固有の設定をうっかり修正し忘れたりしがちです。 ポート管理表を個別に作成するケースも多く、何となく二度手間だと思っているのは自分だけではないはずです。 そこで今回は、ポート管理表と、その他のパラメータ表を元データとし、これにConfigのテンプレート(Jinja2テンプレート)をレンダリングすることで、L2SWの設定Configを自動生成してみました。 Jinja2とは Python用のテンプレートエンジンの一つです。 詳しくは、下記のテンプレートファイルを見て頂くと分かると思いますが、テキストデータの中に、例えば{{ var }}と記載すると、そこに別で定義した変数varの値を埋め込むことができます。 他にも、‘{% for a in

    ポート管理表+パラメータ表+Jinja2テンプレートから、L2SWのConfigを自動生成してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "L2SWは、まとめて大量に導入することが多く、コピペで作成すると、固有の設定をうっかり修正し忘れたりしがち / ポート管理表と、その他のパラメータ表を元データとし、これにConfigのテンプレートをレンダリング" 2019
  • FlaskでWebアプリ開発中にCSSが反映されない問題を解決する - Qiita

    FlaskでWebアプリを開発している。その際、WebブラウザにCSSがキャッシュされてしまう問題に、どう対処するか考えてみた。 HTML内でCSSをリンクする際、style.css?v=12などのように手動で、更新日時やバージョンを付け加えている場合がある。しかし、せっかくPythonを使っているので、これを自動で解決してもらいたい。 模範解答 検索してみると模範解答は、以下のように、url_forを書き換えると良いという回答だ。 @app.context_processor def override_url_for(): return dict(url_for=dated_url_for) def dated_url_for(endpoint, **values): if endpoint == 'static': filename = values.get('filename', N

    FlaskでWebアプリ開発中にCSSが反映されない問題を解決する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "WebブラウザにCSSがキャッシュされてしまう問題 / エンドポイントにstaticが指定された時に、ファイル更新日を付け加える / リンクを書くだけなのに、url_forを使うのは長い / template_filter" 2020
  • FlaskでContext Processorsを使用する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    FlaskでContext Processorsを使用する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テンプレートで共通で使いたい変数や関数を定義するのためには、Context Processorsが便利 / 日付をテンプレートで表示したい場合は、以下のようなContext Processorを定義しておくと、毎回テンプレートに渡す必要がなくなる" 2020
  • Python responder 入門のために… 下調べ - Qiita

    responder,名前は聞くけど,日語の情報が少ない&サンプルが少ないと感じたので実際に responder を使って開発をする前に色々と調べ,まとめたいと思います. Updates 2019.04.25 v1.3.0 のリリースに伴い,取り急ぎ追加された機能についてまとめました. 2019.08.18 v1.3.2 のリリースに伴い,追加された機能についてまとめました. より詳細は Python responder v1.3.1 -> v1.3.2 変更・追加まとめ を確認していただけたら幸いです。 2020.02.10 v2 (v2.0.5) のリリースに伴い,追加された機能について別の記事にまとめました. Python responder v2 入門 - Qiita responder とは? responder とは Python の Web フレームワークです. reques

    Python responder 入門のために… 下調べ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "responder: Python の Web フレームワーク + requests や pipenv の開発者である Kenneth Reitz 氏によって開発 / Flask と Falcon の良さを 1 つにまとめ,そこにいくつかのアイディアを加え,まとめたもの" 2019
  • FastAPI + uvicorn + NginxでWebページを表示(Jinja2によるTemplates機能 ) - Qiita

    [tool.poetry] name = "test_fastapi_app" version = "0.1.0" description = "just for test" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.8" uvicorn = "*" fastapi = "*" jinja2 = "*" aiofiles = "*" [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api" $ tree . ├── app │   ├── Dockerfile │   ├── app │   │   ├── __init__.py │   │   ├── main.py

    FastAPI + uvicorn + NginxでWebページを表示(Jinja2によるTemplates機能 ) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Template機能などを使ったWeb機能作る上ではFlaskの方が挙動が簡単だし、文献も多いので楽だと感じた / 非同期処理などを使いこなせればパフォーマンス面でのポテンシャルはあるかも" 2020
  • FastAPIを使ってCRUD APIを作成する - Qiita

    FastAPIは、pythonのWEB APIを作成するための非同期のframeworkで容易に高性能なAPIを作成できるということです。 Web Framework Benchmarks Tutorialなどを参考に試してみます。 0.前提条件 Windows10(WSL2)にUbuntu 20.04がインストールされているものとします。 Python, pipはインストール済であるものとします。 環境は以下のとおり category value

    FastAPIを使ってCRUD APIを作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "sqlalchemyは、modelの定義とクエリの生成で使い、databaseへのアクセスはDatabases / select, insert, update, deleteのいずれも、10行足らずで実装 / asyncpgには、テーブルやクエリをCSVに出力する機能" 2020
  • AWS Lambda 上で Jinja2 を使う場合の実行時間を削減する方法 - Qiita

    はじめに DMMグループ Advent Calendar 2020 3日目の記事です。 AWS Lambda 上で HTML を生成するアプリケーションを動かす場合に、 Python ランタイムを選択し Jinja2 を利用することが考えられます。 AWS Lambda では コードの実行時間に対して課金される ため、Jinja2 による HTML 生成にかかる時間が小さい方がコスト的に嬉しいです。 そこでこの記事では、AWS Lambda 上で Jinja2 により HTML を生成する際に実行時間を小さくするための方法を検討します。 前提 下記の環境を前提とします。 AWS Lambda ランタイム: Python 3.8 AWS Lambda メモリ割り当て: 128MB Jinja2: 2.11.2 結論 Jinja2 での HTML 生成にかかる時間を小さくするには、下記の方法が

    AWS Lambda 上で Jinja2 を使う場合の実行時間を削減する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Lambda では コードの実行時間に対して課金される ため、Jinja2 による HTML 生成にかかる時間が小さい方がコスト的に嬉しい / Jinja2 の Environment のインスタンスを使い回す + テンプレートを事前にコンパイルしておく" 2020
  • Nornir3によるネットワーク自動化 ②設定変更編 - Qiita

    from nornir import InitNornir from nornir.core.task import Task, Result from nornir_utils.plugins.functions import print_result from nornir_netmiko.tasks import netmiko_send_config # 初期化 nr = InitNornir(config_file="config.yaml") # タスクを実行し、result変数に格納 result = nr.run( # 実行結果に任意で名前を付けられる。指定しない場合はタスク名が使用される name="configure ntp server", # nornir_netmikoプラグイン内の関数を指定 task=netmiko_send_config, # 設定ファイル(

    Nornir3によるネットワーク自動化 ②設定変更編 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Cisco IOS/NX-OS機器に対して設定変更、設定保存、事後のConfig反映確認 / Ansibleでは、冪等性が担保されていたり、独自のJinja2フィルターがあったりする / ネットワーク作業で冪等性を気にする必要が無ければNornirも有効" 2021
  • pyhive + jinjasqlで、prestoに対してprepared statementを実行 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    pyhive + jinjasqlで、prestoに対してprepared statementを実行 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "PEP 249: DBアクセスするpythonモジュールを作る際、同じような使い方できるように定義されたAPI / どのようなメソッドが定義されているかをおさえていれば、PEP 249を守って実装されたモジュールを同じように使えて便利" 2021
  • Jinjaテンプレートの書き方をがっつり調べてまとめてみた。 - Qiita

    記事はQiitaの「データに関する記事を書こう!」イベント用の記事となります。 最近聞くことが多くなってきたJinjaの書き方について整理&まとめてみました。 Jinjaって何?(どんなところで使われているのか) Djangoとかを普段使っている方はお馴染みの{% for i in range(10) %}とか{{ any_variable }}みたいな書き方を任意のテキストファイルに対して反映できるテンプレートエンジンのライブラリです。初版リリースはこの記事を執筆している時点で3年弱くらい前なので比較的新しいライブラリになります。 以下に書かれているようにDjangoのテンプレートの機能がベースとなっており、Djangoに慣れている方であればほぼ学習コスト0で書けるような書き方になっています。 Djangoのテンプレートエンジンにインスパイアされているので、パッと見はDjangoのデフ

    Jinjaテンプレートの書き方をがっつり調べてまとめてみた。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Jinja: 名前はどうやらTemplateライブラリということで日本語の神社(Jinja)の英語のtempleに由来しているそうです / withを使った変数宣言の場合、終了箇所を指定するための{% endwith %}の記述が必要" 2022
  • Airflowの日時関連概念おさらい - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? このところAirflowについて公式資料を読んできた中で、重要概念としてしばしば登場した各種の日付概念をおさらいしておきます。 データ区間(data interval) ワークフロー(DAG)の実行中に処理対象となるデータの区間(期間)。 バッチ処理の対象となるデータを特定するための情報。 開始日時(data_interval_start)と終了日時(data_interval_end)で示される。 例えば一日ごとに起動するワークフローならば、 「今回」2022-07-23 00:00:00に起動した回のデータ区間は 2022-07-2

    Airflowの日時関連概念おさらい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "タスクやオペレーターのPythonコードではcontextオブジェクトを使ってこれらの日時情報を取得 / ビジネスロジックでは、例えばSQLのフィルタに開始日時と終了日時の条件を加えるなどして、処理対象のデータを制御" 2022
  • Airflow資料抄訳(18):クロス・コミュニケーション(XComs) - Qiita

    恥ずかしながら最近になって知ったワークフローエンジン Apache Airflow。日語の紹介記事もちらほら出てきていますが、公式ドキュメントをちょっとずつ抄訳しながら読んでいこうと思います。 18目の今回はクロス・コミュニケーション(XComs)。 バージョン2.3.3時点のものです。 クロス・コミュニケーション(XComs) XComs("cross-communications" の短縮形)はタスク同士が互いに情報のやり取りをするための仕組みです。デフォルトでは、タスク同士は完全に分離されており、まったく異なるサーバー上で実行される可能性もあります。 XComsでやり取りされる個々の情報はkey(実質的にそれ自身の名前です)と、データソースとなるtask_idおよびdag_idにより指し示されます。(シリアライズ可能なものなら)どんなものでもやり取りできますが、仕組みとしてはあくま

    Airflow資料抄訳(18):クロス・コミュニケーション(XComs) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "XComs: タスク同士が互いに情報のやり取りをするための仕組み / 多くのオペレーターはdo_xcom_push引数にTrue(デフォルト)が指定された場合、実行結果を return_valueというキーで自動的にプッシュ" 2022
  • PythonでEmbulkを動的に実行する - Qiita

    はじめに ETLツールの一種であるEmbulkでは、データ転送の処理をyamlで設定して実行します。 動的に処理内容を変更したい場合、yamlの一部を環境変数に置き換えることができます。 しかし、処理内容を実行ごとに変化させたい場合、環境変数で設定をするのは面倒です。例えば、出力するファイル名に実行時間を加えたい場合などには、環境変数を逐一変更することになります。 この記事では、Python用のテンプレートエンジンであるjinja2を使って、簡単にyamlの設定ファイルを動的生成する方法について紹介します。より作り込んだシステムが必要な場合には、Digdagなどのワークフローエンジンを使うことが良いです。 そもそもEmbulkとは EmbulkとはOSSのバッチ型のデータ転送ツールです。ストリーミングデータを対象にしたfluentdと対になるようなツールです。コンパクトながら、たくさんの入

    PythonでEmbulkを動的に実行する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Embulk: 処理内容を実行ごとに変化させたい場合、環境変数で設定をするのは面倒 + ファイル名に実行時間を加えたい場合など + jinja2でyamlを動的に生成 / Embulkに限らず、設定ファイルの管理などにも使えそう" 2022
  • Ansible(panosモジュール)×Jinja2でPaloaltoのログ採取を自動化してみた - Qiita

    1. 概要 幣チームでは、月に1~4個のPalo Altoを構築しており、作業後にコンフィグとコマンドに加えスクリーンショットでログ採取していた。しかし、ログはほとんど見返されておらず、取得にも時間がかかっていて、退屈でバリューの低い作業が数年続いていた。 そもそも論としてやめればよい話なのだが、自動化実践の良い機会と思い活用することにした。 今回はPalo Alto機器へのコマンド実行・設定変更操作が可能なpanosモジュールとJinjaテンプレートを組み合わせ、これまでのログ採取作業を完全に自動化し、40~50分程度の作業を20秒以下に収めることができた。 2. 想定対象読者 記事の想定読者は次の通り。 ネットワーク自動化の事例を知りたい方 Python、Ansibleについてある程度知識がある方 逆にAnsibleの基礎的な解説はないので気を付けてほしい。 3. 構成 CentOS

    Ansible(panosモジュール)×Jinja2でPaloaltoのログ採取を自動化してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "機器へのコマンド実行・設定変更操作が可能なpanosモジュールとJinjaテンプレートを組み合わせ + ログ採取作業を完全に自動化 / これまでコマンド、スクリーンショットで時間をかけて取得していた内容が網羅" 2023
  • Jinjaテンプレートから自作関数を呼び出す - Qiita

    解決したい問題 例えば、Flaskで動的に画面に値を表示したい時、Jinjaにはそのような関数は用意されていないため、一般的にはテンプレート呼び出し時に結果を引き渡す必要があります コード例 from flask import Flask, render_template app = Flask(__name__) def get_host_name(): return "Qiitan" @app.route("/") def root(): return render_template("root.html", host_name = get_host_name())

    Jinjaテンプレートから自作関数を呼び出す - Qiita
    sh19910711
    sh19910711 2024/06/16
    "JinjaテンプレートでFlask側で定義した自作関数を呼び出したい / Flaskインスタンス生成時にjinja_envというパラメータが設定される / 多数のViewで使う処理を共有できる" 2023
  • DTL vs Jinja2 :Djangoテンプレートエンジンの選択 - Qiita

    DTL(Django Template Language)とJinja2は、PythonのウェブフレームワークであるDjangoで使用される2つの異なるテンプレートエンジンです。 それぞれに独自の特徴と利点があります。 DTL(Django Template Language) DTLはDjangoのデフォルトのテンプレートエンジンであり、プレゼンテーションとロジックを分離することを目的として設計されています。これにより、テンプレートはよりシンプルで読みやすく、保守が容易になります。複雑なロジックは、独自のテンプレートタグやコンテキストプロセッサなどで作成する必要があります。これにより、テンプレートの変更が必要な場合、ロジックを変更せずにテンプレートだけを修正することができます。 Jinja2 Jinja2は、DTLにインスパイアされたテンプレートエンジンであり、より複雑なロジックをテンプ

    DTL vs Jinja2 :Djangoテンプレートエンジンの選択 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "DTL: Djangoのデフォルトのテンプレートエンジン + プレゼンテーションとロジックを分離することを目的として設計 / Jinja2: DTLにインスパイアされたテンプレートエンジン + スパゲッティコードになりやすい" 2023
  • Ansible Tips: データ構造変換にはjinja2 for loopとfrom_yamlフィルターの組み合わせが使いやすい - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Ansible Tips: データ構造変換にはjinja2 for loopとfrom_yamlフィルターの組み合わせが使いやすい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Ansibleはプログラミング言語ではないので、loopなどを伴うデータ変換は苦手 / jinja2 loopを利用してYAMLとしてデータを構成し、データに変換し直すとうまくいくことがある"
  • Karateを利用したUIテスト(もしくはE2Eテスト) - Qiita

    はじめに UIテストにおける潮流 UIテストの自動化の代表格といえば、言わずとしれた Selenium でしょう。 最近では、Selenium をラップして、より使いやすくした Selenide も利用されているケースが増えているように思います。 自分自身も、Selenium のHTMLでテストシナリオを作成できる点や、Selenium IDE との組み合わせの良さに感激し、以前は積極的に利用していたものです。 ただ、上記の ノンプログラミングモデル だと、自由度が低く、ある程度の制限も出てくることから、最近では、WebDriverを利用した プログライミングモデル が主流になっているかと思います。 このモデルは、様々な言語に対応しており、多くの開発プロジェクトで利用できることは良いことなのですが、 プログラミングモデル の場合、個人的には、対応できるテストエンジニアに限りがあったり、メン

    Karateを利用したUIテスト(もしくはE2Eテスト) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Selenium をラップして、より使いやすくした Selenide も利用されているケースが増えて / Karate: WebDriverを使ったUIテスト + シナリオの中で、JavaScriptの関数を定義して実行したり、Javaのクラスを呼び出したりすることも可能" 2019
  • AWS Amplify Consoleを連携させてテスト結果ページを自動生成・管理する - Qiita

    記事は、Qiita Advent Calendar 2019 - AWS Amplifyの10日目の記事です。 タイトルでは表現しづらい内容ですが、やりたいことは下図の通りです。 Amplify Consoleを利用してテスト/ビルドできるようにしていたら、テスト結果も自動的に蓄積されて参照可能な形にできないか、、、と思い始めて手を動かした結果です。 やりたいことの流れ 以前開発したCognito管理Web画面のビルドをAmplify Consoleで行う。 https://github.com/kojiisd/cognito-user-manager/tree/master そのAmplify Consoleのビルドの中でKarateやunittestによるE2Eテスト、単体テストが実施される。 E2Eテスト、単体テストの結果を別の試験結果保存用WebサイトのGithubリポジトリにP

    AWS Amplify Consoleを連携させてテスト結果ページを自動生成・管理する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テスト結果も自動的に蓄積されて参照可能な形にできないか / 結果を別の試験結果保存用WebサイトのGithubリポジトリにPush / Hugoでページのベースを作ることで、Markdownのテキストを追加するだけでページの追加が可能" 2019
  • Karate-Gatlingによる負荷テストをsbt経由でお手軽に利用しよう - Qiita

    初めに: Karate-GatlingによるE2E/負荷テストをお手軽に実行する。 KarateはE2Eテストフレームワーク、Gatlingは負荷テストフレームワークであり、 両者を組み合わせたものがKarate-Gatlingである。 来KarateはMaven/Gradleのサポートとなっているが、 今回は、Karate-Gatlingをsbtでも使用可能にする。 【Karateについて】 【Gatlingについて】 通常のKarate(maven)と比較した場合のメリット Mavenでは全部設定しなければならない依存関係が自動計算されるため、シンプルになる Gatlingのためにscala用依存関係を別途追加していたが、それらは不要になる 単体のGatlingと比較した場合のメリット Karateによるfeatureファイルが使えることにより、Scalaに詳しくなくてもGatlin

    Karate-Gatlingによる負荷テストをsbt経由でお手軽に利用しよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Karate-Gatling: KarateはE2Eテストフレームワーク、Gatlingは負荷テストフレームワークであり、両者を組み合わせたもの / featureファイルが使えることにより、Scalaに詳しくなくてもGatlingが使える" 2021
  • Karateを始めるので、Gherkin記法を理解する - Qiita

    この記事は Gherkin Referenceを抜粋して日語訳したもの+個人的に追加したサンプル。 Karateをやってみようと思うので、まずはGherkinに慣れる必要あるかなと思った次第。 多分日語のドキュメントもどっかにあると思うんだけど、備忘録的とか勉強的な意味合いなので自分で翻訳してみることにする。 また、Gherkin ReferenceはCucumber向けのドキュメントであるため、記事を読む際はそこだけちょっと気を付ける必要がある。 知りたいことはいろいろあるが、現在はデモ用の.featureファイルを読めない程度の理解度であるから、これを理解できるようにすることを第一目標とする: Feature: sample karate test script for help, see: https://github.com/intuit/karate/wiki/IDE-Su

    Karateを始めるので、Gherkin記法を理解する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "使用する言語は、あなたのユーザーやdomain expertsがドメインについて会話するときに用いる言語であるべき / language:ヘッダがCucumberに使用する言語を伝え + 記述しなかった場合はCucumberはデフォルト設定の英語を使用" 2021
  • karateでREST APIのテストをする。REST-Assuredとのソース比較も - Qiita

    はじめに Web UIとREST APIのテストフレームワークを探しているときにkarateという、とても興味のそそられるフレームワークを見つけたので使い方や便利なところをまとめます。 環境 IntelliJ:2020.1.3 Java:11 Gradle:7.0 環境作成 IntelliJのインストール 公式のホームページからインストーラーをダウンロードしてインストールしてください。 プロジェクトの作成 ファイルタブ > 新規 > プロジェクト を選択してプロジェクト作成ウィンドウを開いてください。 Gradle > Java を選択してJavaプロジェクトの作成 これでプロジェクトの作成が完了しました。 必要なライブラリの追加 build.gradleにコンパイル時のkarateの追加とJUnit platform を使う設定をします。

    karateでREST APIのテストをする。REST-Assuredとのソース比較も - Qiita
    sh19910711
    sh19910711 2024/06/16
    "REST-Assured: REST APIのテストライブラリで有名なもの / REST-Assuredは9行、karateは8行と書く量としてはそれほど変わりませんでした / Javaになれている人はREST-Assuredの方が見やすい" 2021
  • karateでWebUIのテストをする。seleniumとのソース比較も - Qiita

    はじめに 前回はkarateを使用してREST APIのテストを書きました。次はWebUIのテストの書き方をまとめます。REST APIの書き方とほとんど同じなので、前回と今回の2つを合わせるとkarateの魅力を感じられると思います。 環境 IntelliJ:2020.1.3 Java:11 Gradle:7.0 環境作成 前回の環境作成と同じなので、そちらを確認してください。 テストソースの作成 前回と同様karateを使用するので、必要なものはJavaファイルとfeatureファイルの2つで変わりません。 Javaファイルの作成 Javaファイルは前回とほとんど同じです。ただ、今回はテスト前に環境変数をリセットするようにしていますが、あまり関係ないです。(最終的には設定ファイルで設定するはずです) package com.karate.ui; import com.intuit.ka

    karateでWebUIのテストをする。seleniumとのソース比較も - Qiita
    sh19910711
    sh19910711 2024/06/16
    "seleniumは53行、karateは10行と行数は圧倒的にkarateの方が少なく書けました。また、ソースの見やすさもkarateの方が上なのかなと思います / 一方でseleniumは昔からあるライブラリなので情報が豊富" 2021
  • KarateのテストでDBUnitを使ってDBにテストデータを入れる - Qiita

    はじめに Javaのテストフレームワークの中にKarateというものがあります。 E2Eのテスト自動化ツールで、レポートなども生成してくれて、非常に便利なのですが、テストデータの作成が中々にめんどくさい。 Javaのコードをテスト内で実行できるので、それでORMみたいなものを作ってデータの作成もできるんですが、クラスを作ったらいちいちそっちも作ったり、修正したらメンテしたりとめんどくさいです。 そこで便利なのが、DBUnitです。 XML形式でデータを定義し、あとは流すだけでデータを作ってくれます。 また、XMLの内部で識別用の文字列をセットしておいて、後で任意の値に置換することで変数の入れ込みも行えます。 コード 以下が該当のテストコードです。 Feature: テスト Background: * def dbunit = Java.type('integration.util.DBUn

    KarateのテストでDBUnitを使ってDBにテストデータを入れる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Karate: Javaのコードをテスト内で実行できるので、それでORMみたいなものを作ってデータの作成もできる + 修正したらメンテしたりとめんどくさい / DBUnit: XML形式でデータを定義し、あとは流すだけ" 2021
  • CodeBuildでREST APIの自動テストを実行する - Qiita

    この記事は AWS Advent Calendar 2021 14日目の記事です。 概要 AWSでCI/CDパイプラインを構築する場合、マネージドサービスであるCodeシリーズを利用することが多々あります。 その中でも、ビルドを実行するCodeBuildでは自動テストのツールを組み込むことが可能です。 この記事では、CodeBuildでREST APIの自動テストを実行する方法を紹介します。記事の開発言語はPythonですが、REST APIのテストは言語に依存しないメリットがあるので、他の言語やフレームワークを使っている方にも参考になればと思います。 REST APIの自動テストツールとしてはKarateを利用します。 前提知識のある方は「CodeBuildの設定」だけ読んでいただければ、大まかな内容は掴めると思います。 2021/12/15 追記 利用したソースコードはgithubに上

    CodeBuildでREST APIの自動テストを実行する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "CodeBuildでREST APIの自動テストを実行する / Karate: APIに対して、任意のリクエストを送ったり想定されるレスポンス内容を検証 + 言語自体はわかりやすく、複雑なシナリオはJavaScriptの関数を定義して実行することも可能" 2021
  • Web UIとWeb APIとCLIをまとめてKarateでテストする - Qiita

    Karate とは? Gherkin記法で記載するテストフレームワークです。 元々はWeb APIのテストフレームワークでしたが、いつのまにかブラウザ操作や画像データを利用したGUIのテスト、さらにコマンドラインも実行できるようになっていました。 そこで、Karateを使ってブラウザやAPI、CLIツールを使ったRedmineのテストをしてみます。 以下をKarateで操作します。 Chromeで、Redmine にログイン Chromeで、設定ページから「RESTによるWebサービス」を有効化 Chromeで、個人設定のページを開きAPIアクセスキーを取得 REST APIで、取得したAPIアクセスキーをつかって、チケットを作成 Redmineのコマンドラインツールで、作成したissueを確認 実際のテストコードは以下になります。シンプルに可読性よくかけます。 雰囲気で何をやっているか読

    Web UIとWeb APIとCLIをまとめてKarateでテストする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Karate: 元々はWeb APIのテストフレームワークでしたが、いつのまにかブラウザ操作や画像データを利用したGUIのテスト、さらにコマンドラインも実行できるように / Assert関連も便利な機能が揃っています" 2021
  • Kotlin/ktor バックエンドでの個人ブログ開発と技術スタック - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 自分のブログのバックエンドを Kotlin/ktor で作成した。 備忘と誰かの参考になればということで概要をまとめる。 リポジトリはこちら。 これは REST API サーバーであり、フロントエンドは別にある。 利用技術 アプリケーション Kotlin ktor/server Logback Koin Exposed Flyway Kotlin Poet OpenAPI Generator テスト、CI/CD JUnit5 Kotest Mockk karate GitHub Actions インフラ AWS ALB ECS terr

    Kotlin/ktor バックエンドでの個人ブログ開発と技術スタック - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ブログのバックエンドを Kotlin/ktor で作成 / karate: Java や JS が入り混じったかなり発達した独自構文に慣れる必要はある + しかし、読むのは容易で意図をシンプルに反映したテストを書くことができる" 2021
  • ChatGPTでKareteのテストスクリプトを作成してみる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    ChatGPTでKareteのテストスクリプトを作成してみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Karate: Cucumberと同様のBDDを行うためのテストフレームワーク / スクリプトの内容が構造化されておりシンプルな内容で記述できる / プロンプトでは記載していないURLやJSONリクエストの内容なども補完してくれて" 2023
  • テスト自動化ツール「Karate」を導入する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに REST APIをテストするため「Karate」を使ってみようと思い、VSCode拡張機能の「Karate Runner」を導入してみた記録です. 導入した環境&インストールしたもの Windows 11(Windows 10でも問題ないです) Visual Studio Code JDK 11以降 Karate Runner (VSCode拡張機能) karate.jar インストール JDK 下記 karate.jar の実行に使用します. Java 11 以降を必要とするので、今回は Adoptium からJDK 17を

    テスト自動化ツール「Karate」を導入する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "REST APIをテストするため「Karate」を使ってみよう / Karate Runner: VSCode拡張 / エディタから直接シナリオを実行できるという点が良かった / 書き方に慣れていなくても試しながら書いていくことができて便利" 2023
  • ルーター設定をPythonで自動化してみた - Qiita

    この記事はフリューAdvent Calendar 2023の18日目の記事となります。 はじめに ルーター設定なんて普段何度も繰り返しすることもあまりなく、そもそも自動化するほどではないのでは?と思うところではありますが、今回それが一度にたくさんしないといけない状況に陥ったため、手動でするなんて馬鹿げてる!!ってなったので、python使って自動化してみたという話です。 まじめな背景 海外にある機械と通信する必要があり、その通信をよりセキュアな通信にしなければいけないということで、WireGuardを用いたVPN接続するという方針に決まりました。 ただし、WireGuard機能をサーバに構築し、そのまま設定するのではなく、Virtual SIMを用いてWireGuard接続に対応してくれている通信事業者の回線を使用する事になりました。 WIreGuardを、とある機器のPCにインストールす

    ルーター設定をPythonで自動化してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ルーターにVirtual SIM設定をして現地で設置する必要があったわけですが、このルーターを国内から持っていくにも輸出制限に引っかかる / 現地で調達+設定する必要が出た" 2023
  • EventBridgeScheduler+ECS+Docker+SeleniumでWebサイトのスクリーンショットを定期的に撮影する - Qiita

    EventBridgeScheduler, ECS, Docker, Seleniumを使い1時間ごとに阿部寛のHPのスクリーンショットを撮影しS3に保存する方法についてまとめました。 スクレイピング用のDockerイメージを作成 以下の記事を参考にしながらスクレイピング用のDockerイメージを作成します。 環境変数からスクレイピング先のURLと保存先のバケットを読み取ります。 参考: Selenium×dockerでテスト自動化してみた FROM --platform=linux/x86_64 python:3.12.1-alpine3.19 ENV PYTHONIOENCODING utf-8 WORKDIR /app RUN apk add --update \ wget \ # Add chromium and dependences udev \ ttf-freefont \

    EventBridgeScheduler+ECS+Docker+SeleniumでWebサイトのスクリーンショットを定期的に撮影する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "1時間ごとに阿部寛のHPのスクリーンショットを撮影しS3に保存する / 上手く動かない場合、CloudTrailを使用してデバッグする + イベント履歴から RunTask などを確認 / オーバーライドオプションで環境変数の上書き"
  • E2Eテストの自動化観点でのブラウザ操作のけるSelenium周りの言葉の定義と関連事項の整理 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 概要 似たような言葉があって混乱したので、整理することを目的としたメモ。 あくまでも私が理解し易い視点、であることに注意。 Webアプリケーションの画面に対するE2Eテストの実行を自動化する実装場面が検討の対象。テストコードとノーコードツールで分岐することを検討したうえで、テストコードでの実装を選択する。その実装に用いるライブラリを比較検討する中で、Selenium周辺の言葉の定義の整理を目的とする。 ツールの比較そのものではなく、言葉の整理が目的であることに注意。 整理の起点 次の通り。 E2Eテストとして、WebアプリケーションのU

    E2Eテストの自動化観点でのブラウザ操作のけるSelenium周りの言葉の定義と関連事項の整理 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Selenium WebDriverの特徴の1つとして、そのプロトコルがW3C勧告であり / Selenium 4.11以降のSelenium Managerで提供される機能を用いて、「Browser Driverを自動取得する」事が可能"
  • Selenium3をAWS lambda python3.8以上で動かす[AWS SAM] - Qiita

    AWS LambdaでSelenium webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。 ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。 とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。 私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう) python3.8廃止は2024年10月14日、うん、

    Selenium3をAWS lambda python3.8以上で動かす[AWS SAM] - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Lambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要 / バージョンによってはうまく(ほとんど)動かなかったりします / seleniumはversionが4になっていて、ブラウザとドライバの管理も刷新"
  • Playwrightで楽にアクセシビリティのチェックをする - Qiita

    はじめに Playwrightの公式を読み漁っていた際にAccessibility testingの項目を見つけまして、実際にプロジェクトに導入してみたのと、調べたことをアウトプットします。 @axe-core/playwright Playwightの公式では@axe-core/playwrightを推奨しています。 Axe Accessibility Testing ToolsをPlaywrightテストの一部として使用できるライブラリとのことです。 便利ですね。 Axe、axe-coreとは Axe、axe-coreとは何なのかGoogle先生に聞いてみました。 HTML向けのアクセシビリティテストツール。 プラガブルな作りで、Lighthouseのアクセシビリティテストをする時にも使われている。 Axeのコアとなる機能はaxe-coreとしてOSS化されている。 なるほど、初めて知

    Playwrightで楽にアクセシビリティのチェックをする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Playwrightの公式を読み漁っていた際にAccessibility testingの項目を見つけ / axe-coreとしてOSS化されていて、それをplaywrightで使用できるようにしたもの + Lighthouseのアクセシビリティテストに使われている" 2023
  • テスト自動化の8原則について - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 個人で細々と書いていたブログ記事をQiitaに移行しております。 もしかしたら、既に読んだことがある人がいるかも知れないですね ここに書くのはあくまでも私自身の解釈であり、所属する組織などとは一切関係ございません。 *むしろ違っていたりしたら教えてほしいです。 詳しくは、テスト自動化研究会の記載されているページでご確認ください。 テスト自動化の8原則 - テスト自動化研究会 テスト自動化の8原則 1. 手動テストはなくならない 自動化が優れていても、人間でしか出来ないテストはもちろんある。 例えば、ユーザビリティテスト。 自動テストで不

    テスト自動化の8原則について - Qiita
    sh19910711
    sh19910711 2024/06/16
    "手動テストはなくならない / 自動にしても、メンテしてないとかだと意味ない気がします + テストシステムの開発は継続的におこなう / テスト結果分析という新たなタスク" 2020
  • BDDとユニットテストの流派 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 1. BDDとは BDD(ビヘイビアー駆動開発) はTDDを拡張した手法です。 1つのシナリオを書き、そのシナリオを満たすように実装を進めていきます。つまり、ユニットテストの範囲は単一クラスではなく、複数の依存関係にあるクラスも含みます。 基的にビジネスマン(非エンジニア)から見たとしても理解ができるテストであり、受け入れテストとも言われます。 詳細に言うと、受け入れテスト(ATDD)はユーザー寄りで、振る舞い駆動開発(BDD)は開発者寄りと見る人もいます。 どちらかというとUIテストに使われる傾向があり、「Given-When-Th

    BDDとユニットテストの流派 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "BDD: シナリオを満たすように実装 + ユニットテストの範囲は単一クラスではなく、複数の依存関係にあるクラスも含みます / ロンドンスタイルでは、実装と結合するテストを作成する傾向" 2021
  • 半自動テスト状態にならないためのコツ - Qiita

    この記事はAutify Advent Calendar 2021の22日目の記事です。 自己紹介 株式会社レコチョクでQAを担当している清崎(きよさき)と申します。 社内では独立したQAチームが組織横断として存在しており、自社サービス、toB向け、toC向けと展開しているサービスに対して、ビジネスチーム/開発チームとQAチームが協力しながらテストを実施しております。 株式会社レコチョクの紹介 当社は2001年に国内の主要レコード会社の共同出資で設立され、おかげさまで2021年で20周年を迎えました。 2002年に着うた(R)のサービスを開始し、現在はPCAndroid/iOS、ゲーム機などの多様なデバイス向けにダウンロード配信やストリーミング配信を展開しております。 他にもtoB向けの事業に対しても積極的に行っており、タワーレコード社との協業提供にて定額音楽配信サービス「TOWER RE

    半自動テスト状態にならないためのコツ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "「自動テストは書いたことしかテストしない」にある通り / 書かれていないことを暗黙的に自動テストで発見するという事ではありません / 繰り返し実施するものやパターン化できるものなどシンプルなことを意識" 2021
  • TestCafeを触ってみる - Qiita

    テストを書く テスト対象はテスト自動化練習サイトのHOTEL PLANISPHEREを利用します。 ここでは、宿泊プランの予約画面でプラン名が正しく表示されているかを確認するテストを作ります。 「お得な特典付きプラン」の「このプランを予約」ボタンを押して遷移した画面で「お得な特典付きプラン」の表記が存在を確認するテストです。これをTestCafeのテストスクリプトにすると下記のようになります。 import {Selector} from 'testcafe'; fixture `宿泊プラン` .page`https://hotel.testplanisphere.dev/ja/plans.html`; test('お得な特典付きプランを選択後、遷移先を確認', async t => { const selectButton = await Selector('body > div > d

    TestCafeを触ってみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "TestCafe: E2Eテストを行うためのフレームワーク / 導入も簡単で、Seleniumの様なDriverを用意する必要はありません / 各種ブラウザに対応していて、testcafeコマンドの後にブラウザ名を指定" 2022
  • 【Python】pytest-freezegunでテスト実行時に日時を固定する方法 - Qiita

    この記事を書いた経緯 pytestで「明日の日時を取得して特定のフォーマットに整形する。」という関数(関数hogeとします)のテストを書く場面がありました。 しかし、関数の実行結果が現在日時に依存するため実行結果を検証できない問題が発生しました。(hogeの実行日時が08/01の場合⇒08/02, 08/10の場合⇒08/11が返る) この問題を解決するためにpytest-freezegunというパッケージを利用します。 pytest-freezegunはテスト実行時に日時を指定することができるpytest用のパッケージです。 実行環境 Ubuntu20.04 Python3.8.10 pytest6.2.5 pytest-freezegun0.4.2 利用方法 インストール手順 ※ Pythonとpytestはインストール済みとします。

    【Python】pytest-freezegunでテスト実行時に日時を固定する方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "環境への依存をいかに減らすかということがテストコードにおいては重要 / pytest-freezegun: テスト実行時に日時を指定することができるpytest用のパッケージ / freezerフィクスチャを用いてテストメソッド内で日時を固定" 2022
  • 自動テストを書くとき、書かないとき。テスト駆動開発をバズワードとして受け取らないために - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 今更テスト駆動開発がバズワードと言われるのも、結構時間が経ってるから違う気もするけど。 バズワードとして受け取られるテスト駆動開発 自動テストって大事なんだけど、バズワードと感じてしまうのは、大事さが独り歩きして、踏み絵やチキンレースみたいになっている感じがするとき。 「えwwwwwww テスト書いてないの? 開発者として終わってんじゃん。うちのシステムはめっちゃCI動いてるけどね」 「最近テスト駆動開発はじめたけど、マジで良いわ。単体テストからめっちゃテスト書いてるから、ちゃんとしてる俺マジエンジニア」 こういうこと感じのニュアンスで

    自動テストを書くとき、書かないとき。テスト駆動開発をバズワードとして受け取らないために - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストはユーザのためになる / テストを書くということは、その仕様を守っていきたい、という開発チーム、ひいては事業部、会社の意思表示 / 大事な部分をコストをかけてまで守るという営み" 2022
  • E2Eテストはなぜ壊れるか - Qiita

    テスト自動化失敗談を共有しよう! by T-DASH カレンダー、2日目の記事になります。 はじめに E2Eテストを書きましょう!とチームで決意し、実際に書いてみたものの、気づけばいつのまにか通らなくなっており、誰も直さないうちにそのまま忘れ去られる……というのは、E2Eテスト自動化のあるあるだと思います。 この記事では、メンテナブルなE2Eテスト実装について、一般的に言われることと、自身の失敗経験とを照らし合わせてみたいと思います。 E2Eテストについて ここでE2Eテスト(End to Endテスト)と呼んでいるものは、なんらかのUI操作自動化ライブラリ(UI Automation, Puppeteer, Cypressなど)を使い、コードとしてユーザー操作シナリオをエミュレートするテストのことを言っています。 特に、ノーコードのシナリオ自動生成ツール利用を検討する場合は別のソリューシ

    E2Eテストはなぜ壊れるか - Qiita
    sh19910711
    sh19910711 2024/06/16
    "いつのまにか通らなくなっており、誰も直さないうちにそのまま忘れ去られる / これまでdiv要素につけていた class を削除したらセレクタが機能しなくなった + 通っていたはずのテストが通らなくなるトリガー" 2022
  • Flaky Testとの戦い - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。Necoチームの池添です。 最近にわかにFlaky Test界隈が盛り上がりを見せているようです1,2,3。 この流れに乗じてNecoプロジェクトにおけるFlaky Testとの戦いについて紹介したいと思います。 Necoプロジェクトにおけるテスト Necoプロジェクトでは、自社データセンター上のインフラ構築と運用を自動化する仕組みを開発しており、サーバのプロビジョニングから、Kubernetesクラスタの構築、Kubernetesクラスタ上で動くさまざまなアプリケーションのデプロイ、各種ソフトウェアやOSのアップグレードなどを自動化しています。 プロジェクトでは「Test Everything」を設計原則のひとつとしており、VMを利用した仮想データセンターの仕組みを用いて、開発した自動化の仕組みを毎日テストしています。 詳しく知りたい方は下記の記事もご覧ください。 blog

    Flaky Testとの戦い - Cybozu Inside Out | サイボウズエンジニアのブログ
    sh19910711
    sh19910711 2024/06/16
    "Flaky Test界隈が盛り上がりを見せている / Flaky Test: 実行結果が不安定なテストのことです。 コードを変更していないにもかかわらず、実行するたびにテストが成功したり失敗したり結果が変化する" 2020
  • Playwrightで始めるE2E自動テスト入門 - Qiita

    この記事はDeNA23新卒Advent Calendar 2022の13日目の記事です。 はじめに 皆さんはE2Eテストをどのように行っていますか? 中には手動で行っている人もいるかもしれませんが、playwrightを使うと手軽に自動でE2Eテストを行うことができます。 先日、インターン先の会社の開発で現在手動で行っているE2Eテストをplaywrightを用いて自動化させるといったタスクを行ったため、一通りplaywrightを触ることができました。 この記事では個人的な備忘録を兼ねて、Playwrightでできることを紹介し、実装する際の手順とコツについて考えていきたいと思います。 この記事の対象者 E2Eテストの自動化を考えている方 Playwrightとは?? Playwrightとは一言で言うと、Githubには、 Playwright は、Chromium、Firefox、W

    Playwrightで始めるE2E自動テスト入門 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "playwright: 手軽に自動でE2Eテストを行うことができ + Visual testが簡単に実装できる / 普通に操作をするとその通りのコードを自動で生成してくれるという機能 / toMatchSnapshot: 表示されているテキストデータなども比較" 2022
  • テスト自動化で開発速度が爆下がりした話 - Qiita

    はじめに 自分が体験したテスト自動化による失敗をこの記事を通して共有します。これは同じような体験をしてほしくないという気持ちがあります。 また、あまり普及していないテストの考え方を体験談を通して伝えることが出来たらこれ以上ない嬉しさです。 結論 テスト自動化は毒にも薬にもなり得ます エピソード シードを使ったテストコード テストコードのテストデータとしてシードを使ってしまったパターンになります。無意識のうちに意外とやってしまっているのではないでしょうか? シード(Seeder)を使ったテストコードは保守しやすさが一気に落ちます。 データの構造が変わった時(特にリレーション関係が複雑なもの)や様々なパターンを網羅的にテストをしたい場合にシードがあると非常にコードが読みにくくなります。 また、必ずシーダーをメンテしなければいけない手間と「他の誰かがデータ構造をアップデートしたけれど、シーダーを

    テスト自動化で開発速度が爆下がりした話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "共通化の悪魔: 共通化が施されたテストコードは読みにくい + 保守性もさほど高くはありません / メンテされなくなる悲しいテストコードを生み出さない / テスト名でテストの内容を判別できないテストは価値が半減" 2022
  • Postmanでテストの自動化をした話 - Qiita

    概要 Postmanを利用してテストの自動化を実現した話。 実行ボタン一度を押すだけで、ユーザーシナリオに準じた一連のテストを実行するというもの。 導入前は1回約45分かかっていたテストが、導入後は1回約20秒近くまでに削減成功。 テスト項目の具体例 テストの主な対象項目は以下の通り 特定のボタンを押下した際の画面遷移 ステータスコードに基づくリダイレクトの挙動 特定の操作によるメール受信 メールに記載された確認コードを用いたログイン 特定項目の文字数の確認 古いメールアドレス/パスワードによるログイン失敗 新しいメールアドレス/パスワードによるログイン成功 既登録のメールアドレスによるログイン情報の更新失敗 退会済みのメールアドレスによるログイン失敗 退会済みのメールアドレスによる新規登録の可否 などなど。。 背景 テストの時間負荷 弊チームでは2週間に1回番リリースがあり、その度にs

    Postmanでテストの自動化をした話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Postman: 事前処理を「Pre-request script」、テスト部分を「Tests」で行い、プロダクトのエンドポイントを網羅的に検証 / Cookieを操作したログアウトの再現やCSRFトークンを用いて画面遷移を再現" 2023
  • テストにとってFIRSTの原則よりも大事なこと - Qiita

    FIRSTの原則というものがあります。 Fast(テストは早いほうがいい) Isolated(プロダクトコードと疎な関係のほうがよい) Repeatable(何度も繰り返し実行できる=状態をもたない) Self-validating(結果検証がコードで出来ている) Timely(適切なタイミングで行われる) これが良いテストの原則として、「Clean Code アジャイルソフトウェア達人の技」(Robert C. Martin , アスキー・メディアワークス, 2009)などど語られています。 これは正しいです。圧倒的に正しい。 だが、テストはこれだけ守ってればいいわけではありません。それよりももっと大事なことがあります。 それは「意味のあるテストをすること」です。 これは当たり前すぎて書籍では語られないのかもしれません。しかし、私の経験では多くの現場で意味のないテストが書かれていることが

    テストにとってFIRSTの原則よりも大事なこと - Qiita
    sh19910711
    sh19910711 2024/06/16
    "テストは早いほうがいい + 何度も繰り返し実行できる=状態をもたない / 自動テストは大事だし、その実装方法も大事なのだけれど、それ以前の問題としてテスト自体の目的を見失わないようにしないといけません" 2023
  • テストの責任範囲考えてる?【Ruby/Rails Minitest】 - Qiita

    Userモデルにユーザーの平均年齢を計算してもらい、分析テーブルに現在時点のデータを保存するサービスを想定してみました。(実際には平均年齢以外に男女比とか平均課金額とか、そういうデータも一緒に集計すると思いますが、ここでは説明のため省略しています。) このサービスのテストコードを書けと言われて、ぱっと思い浮かびますか? 初心者でも思いつくのは、 Userテーブルのテストフィクスチャを用意して、実際に平均年齢を計算させる Analysisテーブルに保存されたレコードを検索して、実際のレコードの値をアサートする こんな方法でしょう。でも、ちょっと待ってください。Railsのテストでも操作しやすいリレーショナルデータベースに値を保存しているから「簡単じゃん」と思うかもしれませんが、、、 例えば保存する先がリレーショナルデータベースでなくredisなら...? 例えば保存するのではなくチャットサー

    テストの責任範囲考えてる?【Ruby/Rails Minitest】 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "クラスの責任範囲を明確にし、サービスにビジネスルールや手続きを持ち込まない / モックオブジェクトを注入して例外を吐いてない=想定通りの動きをしているということになるため、アサートが必要ない" 2023
  • Postmanで使えるAIテスト生成機能「Postbot」がリリース - Qiita

    はじめに みなさん、API呼び出しのチェックに Postman 使ってますよね? 特定のパラメータを指定してAPIを呼び出して、期待したレスポンスが返ってくるかどうかをテストしたい時、Postmanのリクエスト画面でJavaScriptのテストスクリプトを書いて、繰り返し呼び出せることもご存知ですか? 例えば、レスポンスがJson配列として返ってくるAPIで、配列の長さが10より大きいことを確認したい時、Postmanのリクエストの「Tests」欄に次のようなスクリプトを書くと・・・ こんな感じで、スクリプトで書いた条件を満たしていればレスポンスの「Test Results」欄に「PASS」、そうでなければ「FAIL」というように表示されます。 もっと複雑なチェックを行うには、Postmanが利用しているテストフレームワーク Mocha とアサーションライブラリ Chai の作法でテストス

    Postmanで使えるAIテスト生成機能「Postbot」がリリース - Qiita
    sh19910711
    sh19910711 2024/06/16
    "特定のパラメータを指定してAPIを呼び出して、期待したレスポンスが返ってくるかどうかをテストしたい / Postman: リクエスト画面でJavaScriptのテストスクリプトを書いて、繰り返し呼び出せる" 2023
  • GitHub ActionsのみでVRTを実現したい人へ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 著者の自己紹介 著者はイナバくん。 株式会社ニジボックスのフロントエンドエンジニア。 登山家でもあり、禁煙家でもあります。 某アパレル企業に2年ほど常駐していて、自社プロダクトを開発しております。 この記事で話すこと GitHub Actionsを使ってVRTを実現する方法をお話しします。 この記事で話さないこと VRTとは何か? について GitHub Actionsの基的な使い方や文法について storycap・reg-suitなどの基的な使い方について また、VRTの構成として有名な下記のサービスたちは使っていません。 Chr

    GitHub ActionsのみでVRTを実現したい人へ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Chromatic: Storybookのデプロイに対して従量課金 / Playwright: Storycap × reg-suitと比べると、テスト実行時間が長い + あくまでE2Eテストツール / reg-suitが生成したVRTレポートをホスティング"
  • pauseメソッド、乱用していませんか? - Qiita

    sh19910711
    sh19910711 2024/06/16
    "Laravel Duskのpause: デバッグや待機のために便利 / 特定の要素が読み込まれるのを待つために使ったり / 乱用するとテストスクリプトの可読性が低下し、実行時間が長くなる" 2023
  • CodeceptJSにトライしてみた。 - Qiita

    最初に 記事はGitHub: GOAMI-Takaaki/codeceptjs-hotel-planisphereの転記になります。 概要 自動化練習サイト「HOTEL PLANISPHERE」を対象に、Gherkin記法のテストを、CodeceptJS で実装したサンプルコードを紹介します。 対象 サービス HOTEL PLANISPHERE - 自動化練習サイト シナリオ testplanisphere/hotel-example-webdriverio-ja 構成 自動化フレームワーク CodeceptJS + Playwright プログラミング言語 TypeScript テスト記法 Gherkin 環境 ライブラリ Node.js OS WSLg + Ubuntu 22.04.2 LTS 基 CodeceptJS とは E2Eテストフレームワークである。 Node.jsプロジ

    CodeceptJSにトライしてみた。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "CodeceptJS: E2Eテストフレームワーク + Gherkin記法をサポート / コードが直感的で分かりやすい + 対応しているテストツールが多い + プラグインが豊富 / Gherkin: 自然言語で記述するシナリオ・フォーマットの1つ" 2023
  • APIモックサーバーのWireMockを動かしてみる。 - Qiita

    概要 システムアイ Advent Calendar 2023の9日目の記事になります。 この概要を書いているときに、去年も同じ9日目に記事を書いていたことに気づきました。 去年のアドベントカレンダー以降、何も書いていなかった自分に反省しつつ、今回も現場で使用していたツールWireMockの紹介をしようと思います。 WireMockって何? WireMockはHttpベースのサービスやAPIのテストやシミュレーションを行うためのツールです。 ユニットテストのモックフレームワークや、CI実行時のスタブサーバーとしても利用できます。 java、nodejsなどにも言語の対応しており、dockerで別プロセスとして起動し、実行することもできます。 特徴 WireMockは他のAPIモックツールと比べて、以下のような特徴があります。 スタブファイルの分離 JSONファイルとしてリクエストとそれに対す

    APIモックサーバーのWireMockを動かしてみる。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "WireMock: サービスやAPIのテストやシミュレーションを行うためのツール / ユニットテストのモックフレームワークや、CI実行時のスタブサーバーとしても利用できます / CIのシナリオテストにも使うことができる" 2023
  • PlaywrightでVisual Regression Test実装する+便利そうなオプションの紹介 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    PlaywrightでVisual Regression Test実装する+便利そうなオプションの紹介 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Playwright: WebアプリのE2Eテストに用いられるNode.js上で動作するライブラリ + 複数のブラウザをサポートするWebアプリ開発でのテストに最適 / toHaveScreenshot: 以前撮影したスクリーンショットとの差分を比較" 2023
  • Playwrightで秒数指定wait処理を避けてスマートにする - Qiita

    はじめに 自己紹介 こんにちは。 ミツモアのQAエンジニアの山です。 1人目のQAエンジニアとしてチームを立ち上げ、現在はミツモア, MeetsOneの2つのプロダクトのQA全体のリーダーとして日々プロダクトに向き合いつつ、楽しく働いています。 ミツモアは「テクノロジーでシンプルに」をバリューとしており、継続的インテグレーションとリグレッションテストの効率化の観点からE2E自動テストを重視しています。 QAチームでは全員が手動テストも自動E2Eテストも行っており、今年は安定性向上や自動テスト実行スピードアップ, 安定性向上などを狙ってAutifyからPlaywrightへ移行しました。 今回はPlaywrightで秒数指定wait処理のハードコードを避けてスマートにする方法をご紹介します。 よくあるwait処理の悪い例 await page.locator('input[name="em

    Playwrightで秒数指定wait処理を避けてスマートにする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "E2Eテストが失敗するのは避けて通れない / 明示的なwaitと暗黙的なwait(auto-wait)の2つがあり / 秒数指定ではなく特定の何かが終わるまで待ってくれるので、タイムロスやflakyなテストになりづらくなります" 2023
  • serverspecをコンテナに格納してお手軽インフラテスト自動化 #STIG #PCI-DSS #CISベンチマーク - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    serverspecをコンテナに格納してお手軽インフラテスト自動化 #STIG #PCI-DSS #CISベンチマーク - Qiita
    sh19910711
    sh19910711 2024/06/16
    "InSpec: RSpecやServerspecライクなコードを元にセキュリティテスト・スキャン / ゼロベースから必要なテストコードを自分で書くこともでき / InSpecを開発/メンテナンスしているProgress社が無料公開しているテストコードを活用"
  • テスト自動化ジャーニー:成功への5つのステップ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事は テスト自動化の成功事例を語ろう by T-DASH Advent Calendar 2023 のエントリー記事です。が、内容は成功事例というより私自身のテスト自動化の成功事例を通した「失敗しないためのTips」の話です。 そもそもテスト自動化をやるぜぇ〜という経緯や背景は企業によって様々で、他社の成功事例がそのまま流用できる保証は一切ありません。しかし、失敗談はどの会社も「あるある」とうなずくものばかりです。 ということは、失敗してきたことを意識しながらテスト自動化プロセスを進めることである程度成功に近づけることができるので

    テスト自動化ジャーニー:成功への5つのステップ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "経緯や背景は企業によって様々 + しかし、失敗談はどの会社も「あるある」とうなずくものばかり / 品質の共通認識は、テスト自動化の取り組みを組織全体で支える基盤" 2023
  • テスト自動化ツールのPlaywrightについて学んだ結果 - Qiita

    はじめに 社会人10年目になり、ソフトウエア開発系の会社に転職したはいいものの、「コーディングまるでわからん(´・ω・`)」状態に陥ってしまった中の人です。 前職の会社もソフトウエア開発系ではあったものの、社会人4年目くらいから転職するまで、ずっと開発もしなけりゃ設計もしない、そんな別の会社に出向していたので、VSCode すら触ったことがありませんでした。 CSS とか JavaScript とか HTML とか学んではみましたが、やはりちんぷんかんぷん。一から作り上げることの難しさを痛感したものです。 見かねた上長が、助け舟を出してくれて、とあるテスト自動化ツール使ってみてほしいと言ってくれました。 ツール何使ったの Playwrightをとりあえず使ってみました。 社内の勉強会で紹介されていたというのと、上述した上長からの勧めでとりあえずこれからはじめてみました。 Playwrigh

    テスト自動化ツールのPlaywrightについて学んだ結果 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ブラウザのパフォーマンスや負荷に関するテスト / 多少の手直しが必要なケースは発生しますが、一からコーディングしなくて済むのはコーディングあまり出来ない勢からしたらとてもありがたい" 2023
  • shellspecで実現するスナップショットテスト: 実践ガイドとベストプラクティス - Qiita

    1. 前提 shellspec 0.28.1 2. 概要 スナップショットテストとはテスト実行時の出力をスナップショットとして記録し、 そのスナップショットを次回以降のテストの期待値として使用するというテストの方法です。予期せぬ変更確認を行うテストとして JavaScriptUI レンダリングのテストに広く使われています。Jest の例が有名です。 私はスナップショットテストの考え方はシェルの出力結果のテストにも応用できると考えています。記事で shellspec によるスナップショットテストの実装例を紹介します。 私は既に shellspec でスナップショットテストを実践していますが、この記事を書くにあたって改めてコードを整理し直しました。より洗練したものになっていると思いますが、逆に動作実績が少なく間違っている部分があるかもしれません。発見した場合は遠慮なく報告してください。

    shellspecで実現するスナップショットテスト: 実践ガイドとベストプラクティス - Qiita
    sh19910711
    sh19910711 2024/06/16
    "スナップショットテストの考え方はシェルの出力結果のテストにも応用できる / テストコードとスナップショットはセットです。後は普通のテストと同じようにテストが通るまでプログラムを直していきます"
  • Storybook + CodeBuild + PlaywrightでVisual Regression Testをやってみた - Qiita

    概要 フロントエンド開発をしていると、「コンポーネントのUIに意図しない変更が反映されていないか」と気になることが何度かあります。 しかし数多くあるコンポーネントを一つずつ目視で確認するのは骨が折れますね... そこでGitHubにpushするたび、自動的にUIの差分の有無を確認できるテスト(Visual Regression Test)をできるように設定します! 使用技術 Storybook Playwright reg-suit Slack Webhook AWS CodeBuild S3 CloudFront

    Storybook + CodeBuild + PlaywrightでVisual Regression Testをやってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "UIに意図しない変更が反映されていないか + 数多くあるコンポーネントを一つずつ目視で確認するのは骨が折れ / playwright: Storybookに登録されているコンポーネントのスクリーンショットを撮る設定を作成"
  • Sorbetを使った静的型付けRuby - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Sorbetを使った静的型付けRuby - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Scala, dartなどの静的型付けをやってきて、久しぶりにRubyを触ってみると動的型付けが辛い / Sorbet: Ruby2系でも使える静的型チェックをやってくれるgem + 段階的に既存プロジェクトに導入していけるのが強み" 2020
  • SorbetでRubyに型を付けてみた - Qiita

    SorbetでRubyに型を付けてみた sorbetというGemと遊んでみた。 Rubyに漸進的に型を付けるライブラリーだ。 自己紹介 アメリカ人で、日は3年目。 1年強、東京のユニークビジョンで働いている。 きっかけ 実は、RubyRailsも苦手!全部魔法的に見える。型で探検したい。 そしてsorbetでRailsにも型が定義されている。 「漸進的型付け」とは? プログラミング言語の中で、「強い型付け」と「弱い型付け」言語が存在する。 「強い型付け」は例えば、型が合わないとコンパイルできない言語。 それに引き換え、「弱い型付け」言語は型が使えるが、別に頑張って合わせる必要がない。 また、その方が実行時(dynamic)、コンパイル時(static)にチェックされると言う軸もある。 ![1_BddwVWW6hFU0miT9DCbUWQ.png](https://qiita-image

    SorbetでRubyに型を付けてみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "「強い型付け」と「弱い型付け」言語が存在 / 「弱い型付け」言語は型が使えるが、別に頑張って合わせる必要がない / 漸進的型付け: プロジェクトを部分的に「static」と「strong」の右上の隅に引っ張っていく" 2020
  • Sorbetを使ってRubyでAbstract Classを使う - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Sorbetを使ってRubyでAbstract Classを使う - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Abstract Class: インスタンスを作成しようとすると、型エラーを発生 / 継承やinclude, extendしたclass等で greet methodを定義しなかった場合、これも気づくことができます / SteepやSorbetを使うことでプログラムの実行前に気づく" 2023
  • Sorbetのruntimeチェックを試してみた - Qiita

    SorbetはRubyのシンタックスで書かれているため、型アノテーションの情報を実行時にも保持できます。 (Steepはコメントアウトで型アノテーションを記述するため、実行時には型の情報が捨てられてしまっているようです) これを用いて、実行時に型アノテーションの検査ができるというので、手元で試してみました。 Sorbet Runtimeについて Sorbetは部分的に型チェックを有効化、無効化することが可能です。そのため、型アノテーションを記述しても異なる型の値が渡される可能性があります。 Sorbet Runtimeは実行時に型情報を用いて、アノテーションをチェックすることができます。 これにより、型アノテーションの誤りに気づくことができます。 試してみる まずは型チェックを無効化してプログラムを実行してみます。

    Sorbetのruntimeチェックを試してみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "SorbetはRubyのシンタックスで書かれているため、型アノテーションの情報を実行時にも保持できます / Steep: コメントアウトで型アノテーションを記述するため、実行時には型の情報が捨てられてしまっている" 2023
  • Tapioca の DSL compiler のしくみ - Qiita

    最近、Ruby の型チェッカーである Sorbet とその周辺ツールの Tapioca を色々試してみています。 Tapioca は型定義 (RBI) に関することを色々やってくれるツールで、RBI 版 DefinitelyTyped から RBI を取得してくれる他、 Rails や他の DSL に対応した RBI を生成してくれたり、 gem から RBI を生成してくれるなど、 RBI に関することを当に色々やってくれます。(他にも色々機能があります) …ここで気になるのが、 Tapioca が DSL から RBI を生成する部分です。この記事では、 Tapioca のコードなどに目を通しながら、どのようにして RBI を生成しているのかを整理してみました。 Tapioca の DSL compiler のしくみ Tapioca が DSL から 型定義を生成する機構は、 DSL

    Tapioca の DSL compiler のしくみ - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Tapioca: 型定義 (RBI) に関することを色々やってくれるツール + RBI 版 DefinitelyTyped から RBI を取得してくれる他、 Rails や他の DSL に対応した RBI を生成してくれたり、 gem から RBI を生成"
  • Sorbet で `typed: false` で起きうるエラーを調べる方法 - Qiita

    Sorbet を既存のコードに導入する際、気にするのが strictness level (# typed: XXX の XXX の部分) の選択だと思います。最初はほとんどのファイルを typed: false で始めると思いますが、結局これはどういうエラーを検知するのか (検知してしまうのか) 気になると思います。 公式のリファレンス (https://sorbet.org/docs/static) に解説はありますが、どういうエラーが起きうるのかについて抽象的な説明です。また、実際に Sorbet を実行したとき、「あれ、これ typed: false でも怒られるの?」みたいに、結構想像とギャップが出ると思います。 この記事では具体的にどの strictness level でどのようなエラーが起きうるかの調べ方を紹介します。 1. ソースコードからエラーを探す 早速ですが、悲しい

    Sorbet で `typed: false` で起きうるエラーを調べる方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Sorbet: 既存のコードに導入する際、気にするのが strictness level (# typed: XXX の XXX の部分) の選択 / 「あれ、これ typed: false でも怒られるの?」みたいに、結構想像とギャップが出る" 2023
  • Sorbet の型の置き場所を整理した - Qiita

    Sorbet の型定義どこで書くのかとか、 Tapioca の作ってくれる型定義ファイル何なのかとかよく混乱しがちなので、整理しました。 Sorbet の型を書く方法 1. Ruby コード (.rb) 内に Sorbet の記法を使って書く 自分のコードに対して、型を書きたい場合は、基的に以下のように、コード中に Sorbet の記法 (sig や T.let など) を使って書きます。 # typed: true require 'sorbet-runtime' class Doubler extend T::Sig sig { returns(Integer) } attr_reader :value sig { params(value: Integer).void } def initialize(value) @value = T.let(value, Integer) en

    Sorbet の型の置き場所を整理した - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Sorbet: 型定義どこで書くのかとか、 Tapioca の作ってくれる型定義ファイル何なのかとかよく混乱しがち / Ruby コード (.rb) 内に Sorbet の記法を使って書く + sig や T.let など" 2023
  • Rubyの型チェッカー「Sorbet」を導入した話 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rubyの型チェッカー「Sorbet」を導入した話 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "「Ruby」は動的型付け言語と言われていて、型宣言しなくても良い言語 / 想定していない型が入りインシデントになる / Sorbet: メソッドの引数と戻り値の型(sigで定義したもの)を元に、型の整合性を検査" 2023
  • 個人開発しているRails製のマイクロブログ「Mewst」の少し独特な実装方針 (バックエンド編) - Qiita

    最近個人でコツコツ作っていたMewst (ミュースト) というマイクロブログサービスを公開しました。 マイクロブログ「Mewst (ミュースト)」のベータ版をリリースしました | shimba.co Railsを使って実装していて、ソースコードも公開しています。 個人的な好みにより一般的なRailsアプリとは異なる方針で実装しているところがいくつかあるので、この記事ではそれらについてご紹介したいと思います。 個人開発でやっているものなので好き勝手やっています。 この記事を書き始めたときはバックエンドとフロントエンドどちらの方針も書こうかと思っていましたが、思っていたよりも長くなったため2つに分けることとしました。 フロントエンド編はあとで書くかもしれません。 ルーティング定義には基的に match だけを使用する github.com/mewstcom/mewst/config/rout

    個人開発しているRails製のマイクロブログ「Mewst」の少し独特な実装方針 (バックエンド編) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "個人でコツコツ作っていたMewst (ミュースト) というマイクロブログサービスを公開しました / match だけを使用: どんなルーティングが定義されているのかパッと見でわかるようにする + rails routes を実行する必要がない"
  • 【Rails】foreign_key: true を記述するかしないか - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    【Rails】foreign_key: true を記述するかしないか - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Userモデルと紐づいたProfileモデルを作成しよう / foreign_key: Railsの命名規則から外れているケース + foreign_keyを指定しなければ、Active Recodeはuserテーブルから外部キーを推測する事ができない"
  • Elasticsearch Rails 7とnet-http-persistentを同時に使うときにはFaradayアダプターを指定する - Qiita

    Railsアプリケーションのgemのバージョンを上げたときエラーが起きた Railsアプリケーションのgemのバージョンをbundle updateコマンドで上げていました。 bin/rails sコマンドでRailsアプリケーションを起動するときに次のようなエラーがでるようになりました。 ledsun@MSI:~/pubdictionaries►bin/rails s => Booting WEBrick => Rails 7.0.8 application starting in development http://localhost:3000 => Run `bin/rails server --help` for more startup options Exiting /home/ledsun/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/

    Elasticsearch Rails 7とnet-http-persistentを同時に使うときにはFaradayアダプターを指定する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Elasticsearch Rails 7 と net-http-persistent を同時に使うときにはFaradayアダプターを明示的に指定 / elasticsearch-transport が要求する faraday のバージョンが変わって / faraday-net_http_persistent gemがインストールされなくなった"
  • テーブル結合したほうが良い理由(Active Record) - Qiita

    学習環境 Ruby on Rails 6.0.3 PostgreSQL 16.1 課題内容と要件 Ruby on RailsでActiveRecordを使ったテーブル結合の勉強をしている時のこと… 以下のような要件があったと想定した問題がありました。 【要件】注文されていないすべての料理を返すこと ※left_outer_joinsを使うこと ER図は以下のようなイメージ 答えとして考えたこと Railsガイドをパラパラと見ながら、 なるほど、”注文されていない”だから、注文されたデータ(order_foodテーブルのorder_id)を見て、where.notを使うのかなと思ったのでした。 ただし、要件にはleft_outer_joinsを使うこととある。 答えとそれぞれの処理 left_outer_joinsを使った答え [12] pry(main)> @foods = Food.le

    テーブル結合したほうが良い理由(Active Record) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "注文されていないすべての料理を返す / 注文されたデータ(order_foodテーブルのorder_id)を見て、where.notを使うのかなと思った / どちらも正解だが、処理の時間、SQLも2回動かしている点でleft_outer_joinsを使うのが正解"
  • Rails+Devise+Pundit 多対多実装の備忘録 - Qiita

    class ApplicationController < ActionController::Base include Pundit end これで app/policies/application_policy.rbができます。ほぼ準備完了です。 概要 Punditとはご存知の通り、リソースベースで認可の仕組みを提供します。 私は多対多の関係をうまく動作させるのに利用させていただきました。 以下、拙いですが勘弁してください。 ユーザは複数のプロジェクトに参加し、プロジェクトは複数のユーザに参加されるというのを中間テーブルを利用し実現します。 ユーザ 1-* プロジェクト参加ユーザ *-1 プロジェクト のようなイメージです。 例えば、「プロジェクトの詳細ページはプロジェクトに参加しているユーザしか閲覧することができない」という要件があったとします。 きっとProjectコントローラのs

    Rails+Devise+Pundit 多対多実装の備忘録 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Pundit: 多対多の関係をうまく動作させるのに利用 / 「プロジェクトの詳細ページはプロジェクトに参加しているユーザしか閲覧することができない」という要件 / Punditではこれをコントローラとポリシーファイルで制御" 2018
  • Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った - Qiita
    sh19910711
    sh19910711 2024/06/16
    "フォーム送ると、①非同期のジョブ、②モーダルの表示、③ジョブ結果を描画するテーブルの表示、の3つの動作を同時に行う / turbo_streamによってパーシャルに書き出したものと置き換えることでモーダル画面を描画"
  • なぜ、Strong Parameters がいいのか - Qiita

    はじめに Railsを学習していて、 なぜ、Strong Parametersが重要なのか、マスアサインメントではなぜダメなのかを 整理したくて記事にしてます。 この記事を読むと分かること Strong Parametersがどういうものか分かる なぜ、マスアサインメントがダメなのかが分かる Strong Parametersとは? Strong Parametersは、Action ControllerのパラメータをActive Modelに 「マスアサインメント」で渡すことを良しとしない。 開発者側はアップデートしたいパラメータを、 Active Controllerで明示的に指定する必要がある。 要は、Active Controllerのアクションで当に使用したいパラメータだけを 厳密に指定してモデルに渡してあげる事でより安全だよねというお話。 マスアサインメントではなぜ、ダメか?

    なぜ、Strong Parameters がいいのか - Qiita
    sh19910711
    sh19910711 2024/06/16
    "本当に使用したいパラメータだけを厳密に指定してモデルに渡してあげる / パラメータを自動的にモデルに渡せるのは開発者側としては楽 / パラメータチェックされていない部分を攻撃者に悪用される"
  • 【翻訳】Railsで権限管理を出来るgem, "Pundit"(前編) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    【翻訳】Railsで権限管理を出来るgem, "Pundit"(前編) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "cancancanはユーザーに対して権限を実装するのに対して、punditはmodelに対して権限を実装 / 通常のRubyクラスとオブジェクト指向のデザインパターンを活用して、シンプルで堅牢かつ拡張性のある認証システムを構築" 2019
  • Punditをなるべくやさしく解説する - Qiita

    Punditについて、なるべくやさしく解説します。 ドキュメントを翻訳したものに近い内容となっております。 ドキュメントを読めるほど実力に自身がない人 ライブラリを調べる際にいろんな記事を見て時間を消耗する人 上記の方々の助けとなれば幸いです。 ※Railsで利用することを前提に話します。 Punditとは Rubyのgem(ライブラリ) 認可の仕組みを提供してくれる 「認可(Authorization)」と「認証(Authentication)」は意味が異なります。 詳しくは「よくわかる認証と認可」をご参照ください。 簡単に言うと「ユーザーによってページ表示の許可・拒否をしたり、表示情報の範囲を変えたりすることができるgem」です。 似たようなgemとしてcancancanがよく比較されますが、その違いはこちらの記事から引用させていただきます。 cancancanはユーザに対して、どんな

    Punditをなるべくやさしく解説する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Pundit: 認可の仕組みを提供 / ユーザーによってページ表示の許可・拒否をしたり、表示情報の範囲を変えたりすることができるgem / 似たようなgemとしてcancancanがよく比較され" 2019
  • Rails でトークン認証 API を 15 分で実装する - Qiita

    scaffold で User Model と Controller を作ります。 lock_version というカラムを追加すると Rails で楽観ロックを実装してくれます。便利ですね。 $ cd yourappname $ rails g scaffold User name:string \ email:string \ role:integer \ password_digest:string \ register_user:integer \ update_user:integer \ lock_version:integer \ activated_at:datetime \ deleted_at:datetime User.create!([ { name: 'admin', email: 'admin@example.com', role: 'admin', passw

    Rails でトークン認証 API を 15 分で実装する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "lock_version というカラムを追加すると Rails で楽観ロックを実装してくれます / Pundit の NotAuthorizedError を拾えるように rescue_from を追加 / エラー処理は増えてきたら concerns に切り出すと良い" 2020
  • Pundit + Railsで認可の仕組みをシンプルに作る - Qiita

    Punditというgemを使ってRailsに認可の仕組みを作ってみます。認可というとcancancanが有名です。 cancancanはユーザに対して、どんなアクションが許可するかを定義するのに対して、Punditではリソースに対して誰が許可されるのかを定義します。反対からの目線ですね。cancancanがコントローラ寄りならば、Punditはモデル寄りの責務です。また、cancancanがDSLなのに対し、PunditはピュアRubyな書き方になっています。 個人的には複雑で大量の認可設定を書いていくと、ユーザ目線かつDSLで記述していくのは大変だなぁ&Abilityクラスが肥大化しがちで見通しが悪いと感じたので、Punditに移行しました。Punditのソースコード自体も読みやすく、どのように動いているのかが把握しやすいのもメリットです。ここらへんはDeviseよりもAuthLogic

    Pundit + Railsで認可の仕組みをシンプルに作る - Qiita
    sh19910711
    sh19910711 2024/06/16
    "cancancanがコントローラ寄りならば、Punditはモデル寄りの責務 / cancancan: ユーザに対して、どんなアクションが許可するかを定義 / Pundit: リソースに対して誰が許可されるのかを定義" 2017
  • RailsにおけるRate Limitの実装ガイド - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Rate Limitの概要 Rate Limitは、APIへのリクエスト数を制御するためのシステムです。 これは、APIを過剰に使用したり、悪意のある攻撃を防ぐために使用されます。 Rate Limitによって、一定期間内に許可されるリクエストの数が限定されることで、サーバーの過負荷を防ぎ、サービス品質を維持することができます。 Rate Limitの利点 サービスの過負荷防止 APIへの過剰なリクエストがサーバーのリソースを圧迫し、サービスが遅くなったり、最悪の場合はダウンしたりすることを防ぎます。 Rate Limitによって、予期

    RailsにおけるRate Limitの実装ガイド - Qiita
    sh19910711
    sh19910711 2024/06/16
    "APIへのリクエスト数を制御するためのシステム / Rack::Attack: 不正なリクエストをフィルタリングし、セキュリティを向上させるためのツール + 特定の期間内に許可されるリクエストの数を制限し、サービスの乱用を防ぐ"
  • Rails6.1でRubyを3.2にしたらスコープでキーワード引数が使えなくなった - Qiita

    背景 ruby on railsで開発しているのですが、rubyのバージョンを上げようと思ったら躓いてしまいました。日語だとあまり情報がなかったので記事にしてみました。 railsrubyのバージョンは下記の通り。 rails: 6.1.7.7 ruby: 3.0.6 -> 3.2.3 そもそもスコープってなに?というかたは、こちらのリンクとかが参考になるかもしれません。 私が開発しているアプリでは、モデルの中でよく使う条件式をわかりやすい名前のスコープとして定義したりしてます。 何が起きたのか? 例えば下記のようなスコープがあったとします。 (実際はキーワード引数を使う必要はないと思いますが、あくまで例なので悪しからず)

    Rails6.1でRubyを3.2にしたらスコープでキーワード引数が使えなくなった - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ruby 3.2からキーワード引数と扱い方が変わったらしく、それが影響してスコープでキーワード引数が使えなくなる / ハッシュが位置引数として渡ってしまっている / rails 6.1はセキュリティ対応のみ更新していく状態"
  • Railsのscopeの良くない書き方 - Qiita

    はじめに Railsのモデルでよくscopeを使用した記述をします。 scopeの使い方が悪く、予期せぬクエリが呼ばれていたので備忘録として残します。 良くなかった書き方 モデル名やscope名は仮で入れています。 class Model scope :prev_staff_id, ->(customer_id) { where(customer_id: customer_id) .order(updated_at: :desc) .limit(1) .pick(:staff_id) } end Model.prev_staff_idとすれば、以前のスタッフIDを返すことを期待しています。 limit(1)を指定して、staff_idを指定しているので一見クエリに問題はなさそうです。 問題点 ①メソッドチェーンできるようにしておく メソッドチェーンは今回のprev_staff_idに加えて

    Railsのscopeの良くない書き方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "scopeの使い方が悪く、予期せぬクエリが呼ばれていた / 以前のスタッフIDを返すことを期待 + limit(1)を指定して、staff_idを指定しているので一見クエリに問題はなさそう / limitされずに全件取得のクエリが走っていた"
  • Parallel gemで実装した処理をRspecでは同じスレッド上で動かす - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Parallel gemで実装した処理をRspecでは同じスレッド上で動かす - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rspecではletやsubjectが変数に対してロックを獲得するため、複数スレッドで変数の参照待ちになりデッドロックが発生し、テストが永遠に終わらなくなってしまう / allow(Parallel).to receive(:map) { |procs| procs.map(&:call)"
  • Ruby on Railsのモジュラーモノリス化を推し進めるpacks-railsというgemがすごいという話📦 - Qiita

    こんにちは、akitoshigaです。 現在Ruby on Railsのモジュラーモノリス化を行っており、その際に利用したpacks-railsというgemが大変便利だったのですが情報が少なかったので紹介します。 1. packs-railsとは? 一定の規則に従って、単一のRails on Railsアプリケーションをモジュール分割するgemです。 このgem単体でも利用できますが主にpackwerkと組み合わせて使われることが多いと思います。 packwerkとはRuby on Railsの静的解析を行うgemでモジュールごとの依存関係の管理ができます。 2.一体何がすごいのか? 2.1 (ほぼ)設定不要 packs-railsは内部でzeitwerkというgemを利用しています。 packs-railsの指定のディレクトリ構成に従えば、zeitwerkのおかげで面倒な設定をせずにディ

    Ruby on Railsのモジュラーモノリス化を推し進めるpacks-railsというgemがすごいという話📦 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "packs-rails: 一定の規則に従って、単一のRails on Railsアプリケーションをモジュール分割 / 単体でも利用できますが主にpackwerkと組み合わせて使われることが多い / packwerk: Railsの静的解析を行うgem + 依存関係の管理"
  • viteとimportmapの競合による期待しないHTTPメソッドの挙動の解消について - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    viteとimportmapの競合による期待しないHTTPメソッドの挙動の解消について - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Viteを使用しつつ、hotwired/turbo-rails と Stimulus を適切にインポート / ログアウト処理: Rails 7 からは data: { turbo_method: :delete } を使用する必要 / おそらくimportmapの後でviteでVueアプリケーションを初期化されているからと思われ"
  • 【ruby】 nil を渡さない 返さない - Qiita

    はじめに 最近、コードレビューで「なるほど~⭐️」と思うことがあったので備忘録としてまとめようと思いました。 それは、プリミティブな nil を返却するとそれ自体が意味を持ち始め、コードの意図が伝わりにくくなるというものでした。 nilを返したくない理由 ロジックの至る所でnilを意識した設計になり、コードを読む時や機能追加する時に nilが返却されるかどうかの丁寧な確認が必要 になるのでだるい nil が返されることで条件分岐が発生し、可読性の低いコードを書いてしまいがち。 「nilが返却される」 というのが一種の暗黙的な仕様になる。 nil を返すことで引き起こされる悲劇 では悲劇が起こる前... タスクと1週間のタスクを管理するようなクラスがあるとします。 # # タスククラス # 何曜日に実行されないといけないか知っている # class Task TODO = 'todo' DO

    【ruby】 nil を渡さない 返さない - Qiita
    sh19910711
    sh19910711 2024/06/16
    "プリミティブな nil を返却するとそれ自体が意味を持ち始め、コードの意図が伝わりにくくなる / nil が返されることで条件分岐が発生 + 「nilが返却される」 というのが一種の暗黙的な仕様になる"
  • Ridgepoleの導入手順と使い方 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 自己紹介 未経験からWEB系エンジニアへの転職を目指している者です。現在はRuby on Railsを学習中です。 この記事を書いたきっかけ 現在、ポートフォリオとしてRailsアプリを開発している中でRidgepoleを導入したので、導入手順と使い方、自身が詰まったところなどを備忘録として残すため記事にしました。 動作環境 mac OS Sonoma 14.4 ruby 3.2.2 rails 7.0.7 mysql:8.0.34 目次 1. Ridgepoleとは 2. 導入手順 3. Ridgepoleの使い方 4. R

    Ridgepoleの導入手順と使い方 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Schemafileに記述されたスキーマ定義と実際のDBスキーマを比較し、差分がある場合にのみ変更を適用 / スキーマが変更されるたびにマイグレーションファイルが増えることなく、1つのSchemafileでバージョン管理できて便利"
  • Action Mailer + letter_opener_web を使って開発環境のメール送信機能を実装する

    送信されたメールが、以下のようにブラウザで確認することができること そもそもなぜ letter_opener_web が必要なのか 実際にメールを送信するには外部のメールサーバーを(SMTPサーバー)が必要になります。 主に使用されるサービスとして以下が挙げられます。 Gmail SendGrid Amazon SES Mailgun ただ、開発している時にいちいちメールサーバーを立てて、メールが実際に送信されるかみたいなことをやるのは非常に面倒です。 そこで、letter_opener_web gem を使うことで、以下のことができるようになります。 メールの送信を実際に行ったように見せかける ブラウザ上で送信したメール内容を確認する letter_opener_web の導入 必要な gem のインストール Gemfile の development のグループに以下を追記して bun

    Action Mailer + letter_opener_web を使って開発環境のメール送信機能を実装する
    sh19910711
    sh19910711 2024/06/16
    "ActionMailer と、letter_opener_web gem を使って、開発環境でメール送信を確認 / letter_opener_web: メールの送信を実際に行ったように見せかけ + ブラウザ上で送信したメール内容を確認 + localhost:3000/letter_opener"
  • PHPerがRuby(Ruby on Rails)を約3年経験した結果 - Qiita

    はじめに Hubbleでバックエンドエンジニアをしている @power3812 です。オブジェクト指向大好きマンで、神クラスを作れないかと模索の日々です 今回はHubbleに転職して約3年経つので、振り返りの意味も込めてPHPerで一切Rubyを触ったことがなかった僕が、約3年Rubyを使った所感を書こうと思います! 筆者のサマリ 大学は電子情報で大学院は技術経営を学んでしました。大学院は21卒なので21卒で就活をして、サマーインターンでWeb開発を知り、PHPと出会い、Web開発の沼にハマりました。 しかし、大学院にいるよりも早く実践を積みたいと、大学院を中退し、20卒としてソーシャルゲーム会社に就職しました。 ソーシャルゲームということで、PHPをそのまま経験、その後受託系の会社に転職し、そこにはPHPerKaigiの運営にも携わっている方にPHPの真髄を叩き込まれました。 その後、自

    PHPerがRuby(Ruby on Rails)を約3年経験した結果 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Laravel: Railsインスパイアなのでかなり似ています + 方言違う程度の差 / LaravelにはFormRequestというRequestがコントローラーに渡される前に、本当にそのRequestが正常かバリデーションするミドルウェアが存在"
  • ECS Scheduled Tasksで複数のRakeタスクの定期実行を管理 - Qiita

    はじめに EC2インスタンス上でRailsアプリを稼働していた副業先のいくつかの会社で、Rakeタスクやrails runnerコマンドを定期実行するためにwheneverなどを利用していました。 Railsアプリをコンテナ化してECSで稼働する際、タスクの定期実行をどう管理するか改めて考える必要があったので、その一例を紹介します。 ※実際に対応したのは2年前なので、今はもう少し良い方法もあるかもしれませんが、参考までに。 前提条件 共通する条件としては、以下のようなものがありました。 定期実行したいタスクだけが数個ある。 タスク間の依存関係はなく、複雑なワークフローを組む必要はない。 アプリがRuby on Railsで構成されており、ECS Serviceで稼働している。そこで利用されているDockerイメージを使い、Rakeタスクやrails runnerコマンドを実行したい。 タス

    ECS Scheduled Tasksで複数のRakeタスクの定期実行を管理 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rakeタスクやrails runnerコマンドを定期実行するためにwheneverなどを利用 / ECS Scheduled Tasks + EventBridgeのルールベース / 実行に15分以上かかり、サービスで利用しているDockerイメージを利用したいので、LambdaではなくECS Taskを選定"
  • sorceryで認証機能を追加してみる - Qiita

    #Userモデルを作成 bundle exec rails g sorcery:installを実行し、Userモデルとデータベースのmigrationを生成します。 今回usersテーブルにはfull_nameカラムを追加そしてstring型と必須項目を追加。 #User登録機能を実装 Userモデルをベースに実装していきます。 モデルの実装 はじめに、Userモデルのフィールドである、 ・email ・password ・password_confirmation ・full_name に対するバリデーションを実装します。 class User < ActiveRecord::Base authenticates_with_sorcery! validates :password, length: { minimum: 3 }, if: -> { new_record? || chan

    sorceryで認証機能を追加してみる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Userモデルとデータベースのmigrationを生成 / Sorceryが提供するrequire_loginメソッドをbefore_actionに指定 + 認証されていない場合の処理も合わせて実装する / デフォルトでは、Sorceryは、not_authenticatedというメソッドを実行" 2021
  • SorceryとDeviseの違いについて - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 皆さん、初めましてマッチョ💪 現在、プログラミングスクールにて学習をしている “のぞみ” と言います。 私は現在、未経験からのエンジニア転職に向けて今年の4月から格的に学習をスタートし、現在6ヶ月目に突入しております。 今回、学習中に気になった点があり深掘りする機会がありましたので、初めて技術記事を書かせていただきました。 概要 現在、《Ruby on Rails》を用いたポートフォリオについてアイデアを考えている段階なのですが、 その際 ”認証機能” の実装について調べている時に、ふとこう思いました。 「認証機能実装のG

    SorceryとDeviseの違いについて - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Sorceryは必要最低限の機能のみを提供している為、シンプルかつ軽量 + 認証関連の機能がいくつかの独立したモジュールに分割 / Deviseは、デフォルトで多くのモジュールを提供 + 設定やカスタマイズが複雑になる" 2023
  • 【Ruby】<< をそのままメソッドの戻り値にするより、[*array, element] を使おう - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    【Ruby】<< をそのままメソッドの戻り値にするより、[*array, element] を使おう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "<< は元の配列に要素を追加するのに対し、 [*array, element] は元の配列を利用して新しい配列のインスタンスを作成 / <<の戻り値: configなどで設定値を複数件追加したいときとかはちょっと便利"
  • 【Rails版】半年で学んだより良いコードを書くためのTips10選 - Qiita

    はじめに 半年で学んだシリーズになります。 前回は汎用的なことについて書いたつもりなので、こちらはよりRailsに寄せました。 前回の記事はこちら↓ また気になる点はぜひコメントいただけますと嬉しいです。 それでは、いきましょう! Ruby on RailsのコードをよくするTips10選 boolean型を返す関数の末尾に?をつける boolean型が入っている変数はis_で始める 基関連付けを使ってデータを取得する バリデーションのテストは書かない ActiveRecordはデフォルトでID同士を比較する mapメソッドに置き換えよう 展開してスッキリ書く メソッド名に関するその他慣習 FatControllerを解消する FatModelを解消する 1. boolean型を返す関数の末尾に?をつける タイトル通りで、boolean型を返す関数の末尾には?をつけた方がわかりやすいです

    【Rails版】半年で学んだより良いコードを書くためのTips10選 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "モデルのオブジェクトはデフォルトでID同士を比較してくれます / _infoや_dataなどは使わない + もっと具体的な命名をした方がコードがわかりやすい / コントローラーは他の処理の基点やHTTPレスポンスを決めるところ"
  • rails consoleのsandboxオプション、使ってる? - Qiita

    sandboxオプションの嬉しい点 sandboxオプションのメリットは、コンソール終了時に自動でデータベースへの変更をロールバックできる点です。 「手元で更新とか色々試したいけどデータベース変更したくないよ〜」という場合に便利。 そうでなくても誤って操作する可能性もあるので、とりあえずこのオプションで触っておけば ローカル環境のデータに影響が出ることはないので嬉しいですね。 使用方法 いつものコンソールを起動するコマンドに--sandboxでオプションをつけるだけ。

    rails consoleのsandboxオプション、使ってる? - Qiita
    sh19910711
    sh19910711 2024/06/16
    "コンソール終了時に自動でデータベースへの変更をロールバックできる / 誤って操作する可能性もあるので、とりあえずこのオプションで触っておけばローカル環境のデータに影響が出ることはないので嬉しい"
  • RailsでCanCanCanを使った権限管理: スタッフは自分のデータのみ編集可能 - Qiita

    # app/models/ability.rb class Ability include CanCan::Ability def initialize(user) user ||= User.new # ゲストユーザーの場合は新しいユーザーインスタンス case user when Staff can :manage, Staff, id: user.id # スタッフは自身のデータのみ操作可能 can :read, Company, id: user.company_id # スタッフは自身が所属する企業を閲覧可能 when Company can :manage, Company, id: user.id # 企業は自身のデータのみ操作可能 can :manage, Staff, company_id: user.id # 企業は所属するスタッフのデータを管理可能 when Cust

    RailsでCanCanCanを使った権限管理: スタッフは自分のデータのみ編集可能 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ユーザーによって操作できるデータを制限する場合、CanCanCan は非常に有力なツール / Ability クラスを使用して、誰が何をできるかを定義 / Controller に load_and_authorize_resource メソッドを追加"
  • AWS FargateでRakeタスクを定期実行する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 実現したいこと 従来はWheneverでcron定義を自動生成し、EC2上で定期バッチを実行させていた EC2からFargateへのインフラ移行に際して、定期バッチもFargateで実行できる形にしたい 定義の反映はアプリケーションのCI/CDに載せて自動化したい (「手作業でECS Schesuled Tasksを編集する」のような形は避けたい) 定義は設定ファイルで構成管理したい (「スケジュール追加スクリプトを実行する」ような形は避けたい) 選択肢 CloudFormation でEventBridgeルールの定義を行い、Circ

    AWS FargateでRakeタスクを定期実行する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "従来はWheneverでcron定義を自動生成し、EC2上で定期バッチを実行させていた / Fargateへのインフラ移行に際して、定期バッチもFargateで実行できる形にしたい / できるだけライブラリには依存しない形にする"
  • 【Ruby on Rails】namespace と scope の違いって何? - Qiita

    はじめに こんにちは、エンジニア3年目の嶋田です。 まずは、この記事を開いていただきありがとうございます! Railsアプリケーションを開発していると、ルーティングの設計がとても大切だと感じることが増えてきました。 同時に自分の理解が浅いことも実感しています… そこで今回はこの記事でアウトプットをして理解を深めていきたいです。 よろしくお願いします! 目次 namespaceとscopeの違い namespaceの特徴 scopeの特徴 namespaceの使い方 基的な使い方 ネストしたリソース scopeの使い方 基的な使い方 パスとパラメータのカスタマイズ 使い分けのポイント カスタムルートの利用 scope moduleの利用 shallowオプションの利用 最後に 参考文献 namespaceとscopeの違い Railsのルーティングでは、namespace と scope

    【Ruby on Rails】namespace と scope の違いって何? - Qiita
    sh19910711
    sh19910711 2024/06/16
    "namespace はコントローラーのモジュールをグループ化するために使用され / scopeを使うと、URLパスだけを変更することができ、コントローラーの名前空間を変更しません / scope module や shallow オプション"
  • Sidekiqのretry設定は忘れずに!! - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Sidekiqのretry設定は忘れずに!! - Qiita
    sh19910711
    sh19910711 2024/06/16
    "SidekiqでJobを実行して、エラーが発生すれば、リトライをしてくれます / 明示的に設定を行っていないと、25回もリトライされてしまう / まとめて設定したいときは、config/sidekiq.yml + 各Jobごとは、Jobファイルごと"
  • ゼロから始めるstimulus入門4(状態の管理) - Qiita

    はじめに 今回はstimulusの状態管理についてドキュメントを見ながら学んでいきます。 過去回↓ 第1回:ゼロから始めるstimulus入門1(ファーストコンタクト) 第2回:ゼロから始めるstimulus入門2(現実的なものを作る) 第3回:ゼロから始めるstimulus入門3(古いブラウザを考慮した設計) 状態の管理 最近のフレームワークのほとんどは、常に JavaScript で状態を維持することを推奨されていますが、stimulusではDOM内の属性として状態が存在します。 この方法によって、最初のHTMLドキュメント、Ajaxリクエスト、Turboのページ遷移、さらには他のJavaScriptライブラリなど、どこからでも HTML を操作でき、明示的な初期化手順なしで、関連付けられたコントローラーが自動的に起動するようです。 スライドショーの作成 スライドショーの実装を例に、学

    ゼロから始めるstimulus入門4(状態の管理) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "stimulusではDOM内の属性として状態が存在 / htmlのdata-slideshow-index-value属性に対応するthis.indexValueというコントローラーのプロパティを作成し、数値への変換も自動的に処理"
  • ゼロから始めるstimulus入門5(外部リソースとの連携) - Qiita

    はじめに 今回はstimulusで外部リソースとの連携についてドキュメントを見ながら学んでいきます。 過去回↓ 第1回:ゼロから始めるstimulus入門1(ファーストコンタクト) 第2回:ゼロから始めるstimulus入門2(現実的なものを作る) 第3回:ゼロから始めるstimulus入門3(古いブラウザを考慮した設計) 第4回:ゼロから始めるstimulus入門4(状態の管理) 外部リソースとの連携 コントローラーが外部リソースの状態を追跡しないといけない場合があります。 (「外部」とは、DOMやStimulusの一部ではないものを指す) 例えば、HTTPリクエストを発行し、そのリクエストの状態が変わるごとに応答する必要がある場合があります。また、タイマーを開始し、コントローラーが接続されなくなった時に停止する必要がある場合もあります。 そのような場合のstimulusでの実装をやって

    ゼロから始めるstimulus入門5(外部リソースとの連携) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "外部リソースとの連携について / stimulusを学んでみて、今までjsのアプローチとは違い戸惑うところもありましたが、全体的に整然とした形なので慣れたら使いやすい"
  • RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した - Qiita

    # アーカイブ化 # Lamdbanにファイルを取り込む場合、ZIPファイルで取り込む必要がある為、このリソースでZIPファイルを作成する data "archive_file" "db_failover" { # zipで固定 type = "zip" # 下記に指定したディレクトリ内のファイルは全てアーカイブ(zip化)される # source_dir = "${path.module}/任意のディレクトリー名" source_dir = "${path.module}/lambda_function" # アーカイブしたファイル(zipファイル)がこのパスに出力される # output_path = "${path.module}/任意のディレクトリー名/任意の名前が付与されたzipファイル" output_path = "${path.module}/archive/db_fail

    RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した - Qiita
    sh19910711
    sh19910711 2024/06/16
    "フェイルオーバーが行われたら、RDSのイベントサブスクリプション、SNS、Lambdaを使用して、ECSで起動しているRailsのpumaを再起動する / 早く実装が出来る利点を取り、RDSから提供しているイベントサブスクリプションを使用"
  • Rubyで書く遅延セグ木 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 自分用にRubyで非再帰版の遅延セグメント木を書いたので、そのメモと使用時の注意点です。 遅延評価セグ木や非再帰実装についての参考 AtCoder LibraryのLazy Segtreeの使い方 非再帰版の遅延評価セグメント木の実装メモ 遅延評価セグメント木をソラで書きたいあなたに 方針 ACLの lazy_segtree に必要な構造/関数 S, F, mapping, composition, op を一つのクラスにまとめ、破壊的変更メソッドとして、実装することでオブジェクト生成を抑えるというのが方針です。 ACLの遅延セグ木をも

    Rubyで書く遅延セグ木 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ACLの遅延セグ木をもとに実装を行うとどうしてもオブジェクト生成数が多くなってRubyだとキツかった / 結構うまく書けてもとTLEする問題が多いし、ぎりぎりなら別の言語で書くほうがよい"
  • Rails ERD触ってみた - Qiita

    はじめに みなさまこんにちは。 今回、railsのgemであるRails ERDを使用してみたのでまとめました。 Rails ERDとは RailsのモデルからER図を自動生成することができるgem 以下の画像のようにER図を自動生成してくれます。 出典 セットアップ Graphvizをインストール (オープンソースのグラフ可視化ソフトウェア) Graphvizとはグラフ作成用のツールで、DOT言語というものを用いてテキストファイルを画像として出力することが できる便利なやつです。

    Rails ERD触ってみた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ActiveRecord::Base.descendantsメソッドで、アプリケーション内の全てのActiveRecordモデルクラスを返している / reflect_on_all_associationsメソッドから得られるAssociationReflection オブジェクト から関連付けに関する情報を得ている"
  • form_withがlocal: trueなのにviewが再描画されずにはまった件 - Qiita

    viewでform_withメソッドを利用してログインフォームを作ったが、local: trueにしているにも拘らず、render 'new'でログインフォームを再描画できずにはまったのでメモ。 TL;DR Rails 7では、form_withに対してlocal: trueの代わりにオプションでdata: { turbo: false }と指定する。 環境 $ ruby -v ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux] $ rails -v Rails 7.0.3

    form_withがlocal: trueなのにviewが再描画されずにはまった件 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "form_withメソッドを利用してログインフォームを作ったが、local: trueにしているにも拘らず、render 'new'でログインフォームを再描画できず / form_withに対してlocal: trueの代わりにオプションでdata: { turbo: false }と指定" 2022
  • Railsにおけるモデルのscopeメソッド - Qiita

    はじめに 先日、業務でscopeメソッドでの実装したので、備忘録として記事にしたいと思います。 この記事では、scopeメソッドの基的な使い方をまとめてみました。 モデルのscopeメソッドとは? scopeメソッドは、よく使用されるクエリをメソッドとして定義することができる機能です。 これにより、複雑なクエリを簡単に再利用できるようになります。 Scopeメソッドの基構文 scopeメソッドの基的な構文は以下のようになります。

    Railsにおけるモデルのscopeメソッド - Qiita
    sh19910711
    sh19910711 2024/06/16
    "よく使用されるクエリをメソッドとして定義 / scopeを使うことで、複数のコントローラーで同じクエリを再利用できます / ActiveRecord::Relationオブジェクトを返すことで、意図しないNoMethodErrorなどのエラーを防ぐ"
  • good_jobを導入して定時実行のジョブ(cron)を実装する手順、全体像 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    good_jobを導入して定時実行のジョブ(cron)を実装する手順、全体像 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Railsアプリケーションでバックグラウンドジョブを実行するためのGem / Active_jobについてさらっと目を通すと理解が深まります / Applicationで使用しているデータベースでキューを管理"
  • RubyがいかにJITと向き合ってきたか

    TLDR Ruby under the Microscopeと言うの輪読会をやっていて、JITまわりで気になった部分があったので、解説します。 今、有志でRuby under the Microscopeというを輪読しています。 このRubyのしくみという邦題で訳されてもいて、Rubyが内部でどうやって動いているのか、とても丁寧に解説されています。 2014年にすでには出ていて、その頃に購入はしていたのですが、今まで積読していました。 JITとは何か JITとは「Just in Time」の頭文字で、その名の通り「必要な分を、必要な時に」コンパイルするコンパイラのことです。 なぜ今読むのか 今週、Ruby edgeブランチにでYJITというRailsパフォーマンス向上が期待できる新しい種類のJITがマージされました。PRはこちら。たまたま、その開発者・チームと同じ会社(Shopi

    RubyがいかにJITと向き合ってきたか
    sh19910711
    sh19910711 2024/06/16
    "JVMは、JVM用のバイトコードを解釈する際に、「場合によって」それを機械語まで訳してから、実行するという選択肢をとることができます / Ruby2.6で登場した「MJIT」というものが上記で解説したJVMのJITに相当する動き" 2021
  • RubyKaigi 2024 にヘルパー参加してきた - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? こんにちは、 Qiita株式会社の @tomoasleep です。 今年も RubyKaigi に参加してきました。今年はヘルパー (当日に運営の手伝いをするスタッフ) として参加してみました。どうして参加したか、参加してどうだったかを書いていこうと思います。 なんでヘルパーやろうと思ったか これはもうズバリ RubyKaigi, Ruby コミュニティ, Ruby を更に楽しみたい、と思ったからです。 RubyKaigi への参加は過去3回 (仙台、三重、松) 参加しているのですが、とにかく最高 (Ruby 言語自体の話、処理系の話

    RubyKaigi 2024 にヘルパー参加してきた - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ヘルパー業の関係で聞くのが難しかったセッション (一部 Keynote 等) はあったのですが、同じ担当箇所のヘルパーの方々と内々で調整させていただいて、聞きたいと思っていたセッションは概ね聞くことが出来ました"
  • ActiveRecord のパフォーマンス関連 Tips - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに これは ActiveRecord のメモリ節約や処理速度向上等のパフォーマンスに関していくつか調べたり知り得たことを書き留めたメモです。どちらかというと API よりバッチ処理に主眼をおいた Tips になります。 またパフォーマンスを重視する場合、コードの読みづらさだったり、バグを仕込んでしまったりとのデメリットとのトレードオフになることも多いのでその点はご留意ください。 インスタンス化を避ける ActiveRecord のインスタンス化はかなり時間の掛かる処理です。 例えば CSV を元に何千何万件の登録を行うような処理で

    ActiveRecord のパフォーマンス関連 Tips - Qiita
    sh19910711
    sh19910711 2024/06/16
    "ActiveRecord のインスタンス化はかなり時間の掛かる処理 / あるテーブルの条件を使って関連テーブルの値の一覧を取得したい場合、eager_load や preload と map を組み合わせるより pluck を使える形に直したほうが早く"
  • credencialsに保存した数値とは違う数値が返ってくる問題 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    credencialsに保存した数値とは違う数値が返ってくる問題 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Railsのcredentialsファイルに"0"や"0x"から始まる数字を設定すると、その値が取り出す際に異なる数字に変わってしまう / YAMLでは、"0"から始まる数字を8進数として解釈"
  • 【Rails/RSpec】Everyday Rails - RSpecによるRailsテスト入門の要約/感想 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 今回はRSpecの技術書であるEveryday Rails - RSpecによるRailsテスト入門を読了したので、その要約と感想について書いていければと思います。 RSpecとは? ruby用に開発された、テスト用の フレームワーク のことです。 RSpecを用いることで、少ない記述で、可読性に優れたコードを簡単に記述することができます。 記事の対象者 railsのチュートリアルレベルを一通り学び終え、テストコードの学習を始めようと思っている方 これから Everyday Rails - RSpecによるRailsテスト入

    【Rails/RSpec】Everyday Rails - RSpecによるRailsテスト入門の要約/感想 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "RSpecを 抜け漏れなく体系的 に学ぶ / RSpec 1つに絞り、200ページ以上に渡って解説されている技術書は本書以外にない / フレームワークを覚えることで手一杯になってしましい、テストまで手が回らない人が多い"
  • 業務的な部分もRuboCopに警告させる - Qiita

    Ruby による開発で、静的にコードをチェックして書き方を強制させる RuboCop はみんな使ってると思う。 RuboCop がデフォルトで提供しているコップ(RuboCopの世界観では各リンターをこう呼ぶ)は割と簡単に作ることが出来るので、プロジェクトごとの決まりごとや業務的な部分をチェックするコップを作ってチェックさせることができる。 たとえば すべてのコントローラで、あるヘッダをつけたりつけなかったりしたい。ヘッダをつけるかつけないかはそれぞれの箇所で開発者による判断が必要。 あるヘッダを X-foo としたとき、こんなモジュールを用意して

    業務的な部分もRuboCopに警告させる - Qiita
    sh19910711
    sh19910711 2024/06/16
    "決まりごとや業務的な部分をチェックするコップを作ってチェックさせる / RuboCop がデフォルトで提供しているコップ(RuboCopの世界観では各リンターをこう呼ぶ)は割と簡単に作ることが出来る"
  • Rails 7.2をちょこっと試す(query and cached ログ編) - Qiita

    はじめに rails 7.2beta2 がリリースされたので、ちょっと試してみました。 rails 7.2 では、Rails のログに、実行されたSQLの数が表示されるようになりました。 ログの確認 Rails 7.1 では、以下のようなログが出力されます。 Rails 7.2 で変るのは、最後の Completed の行の ActiveRecord: 2.2ms の部分です。 Started GET "/books" for 172.25.0.1 at 2024-06-09 08:27:47 +0900 Cannot render console from 172.25.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schem

    Rails 7.2をちょこっと試す(query and cached ログ編) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "rails 7.2 では、Rails のログに、実行されたSQLの数が表示されるようになりました / パフォーマンスチューニングの際に、実行されたSQLの数を確認するのに使えそう"
  • OptionParser のオプショナルで non-space な指定の可否 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Ruby の OptionParser の挙動の考察を書き残します。 OptionParser のあまり知られていなさそうなこととして、オプショナルなパラメーターをとるスイッチの定義の仕方が 2種類あり、指定時(パース時)の挙動が違うということです。 まず、ショートオプション、ロングオプションなどと呼ばれているものは、来は「スイッチ」と呼ぶべきだと思います。 OptionParser::Switch クラスですから。 そして、ハイフン1つから始まるものはショートスイッチ、ハイフン2つから始まるものはロングスイッチです。また、スイッチに

    OptionParser のオプショナルで non-space な指定の可否 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "オプショナルなパラメーターをとるスイッチの定義 / 任意のパラメーターをとる non-space タイプのスイッチは、non-space な指定のみできます。スペースをあけて指定するとスイッチへの引数として解釈されません"
  • SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Rails 7.0ではActive RecordのデフォルトのハッシュダイジェストアルゴリズムがSHA-1からSHA-256に変更 / Rails 6.1以前に生成したsigned_idはRails 7.0以降で利用できなくなります / SHA-1の使用は現在では推奨されない"
  • 【Ruby】文字列演算子 << - Qiita

    概要 この記事では、<< 演算子を使用した文字列の連結方法について詳しく見ていきます。 文字列連結方法 Rubyでは文字列の連結にいくつかの方法があります、一般的なのが + 演算子、 次に今回の記事のお題にもなっている << 演算子。 + 演算子: 「str1 + str2」 という形式で使用される。 str1 と str2 を連結した新しい文字列を作成します。 この操作では、元の文字列は変更されず、新しい文字列オブジェクトが毎回生成されます。 << 演算子: 「str1 << str2」 という形式で使用される。 str2 の内容を str1 に直接追加します。 この操作は str1 を破壊的に変更し、新しいオブジェクトの生成を伴わないため、メモリ効率が良く、処理速度も速いです。 << 演算子の利点 大量の文字列データを扱う際に特に有効で、大きなファイルの内容を読み込んで処理を行いたい場

    【Ruby】文字列演算子 << - Qiita
    sh19910711
    sh19910711 2024/06/16
    "大量の文字列データを扱う際に特に有効で、大きなファイルの内容を読み込んで処理を行いたい場合、 + よりも << 演算子を使う方がパフォーマンスが良い / 途中に不要な文字列のオブジェクトが生成されない"
  • Web API 混在の Rails アプリケーションで500エラーを適切に処理したい - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Web API 混在の Rails アプリケーションで500エラーを適切に処理したい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "rescue_from で、 StandardError をキャッチするのは推奨されない / Development 環境では、config.consider_all_requests_local が true になっていて、エラーが発生したときに、ErrorController が呼ばれない"