検索
ホームページバックエンド開発Python チュートリアルUnittestとPytestを使用したPythonユニットテストのガイド

A Guide to Python Unit Testing with unittest and pytest

この記事では、ソフトウェアテストの重要性と、なぜ注意を払う必要があるのか​​を調査します。ユニットテストの設計方法と、Python単体テストの作成方法を学びます。特に、Pythonで最も一般的に使用される単位テストフレームワークの2つであるUnittestとPytestを探索します。

キーポイント

    単体テストはソフトウェア開発の重要な部分であり、開発者がプロ​​グラムの特定のコンポーネントまたはユニットをテストして、予想どおりに実行できるようにします。 Pythonの一般的な単体テストフレームワークには、UnittestとPytestが含まれます。
  • よく設計されたユニットテストは、高速で、独立していて、繰り返し可能で、信頼性が高く、名前が付いている必要があります。 「準備、実行、アサーション(AAA)」モードは、多くの場合、セットアップ、実行、および検証の分離を整理するために使用されます。
  • 最小限のフレームワークは、Python標準ライブラリの一部であり、JavaのユニットテストフレームワークであるJunitに触発されています。特別なアサーション方法を使用しており、テストをUnittest.testcaseクラスから継承されたクラスの方法として記述する必要があります。
  • Pytest Frameworkにより、コードが少なくなる複雑なテストが可能になり、独立したテストスイートをサポートし、800を超える外部プラグインを提供します。 Unitestとは異なり、Pytestは通常のPythonアサーションメソッドを使用して、よりシンプルで直感的にします。
  • 単体テストには多くの利点がありますが、テストは欠陥の存在だけでなく、欠陥の欠如を証明できることを覚えておく必要があります。すべてのテストが合格しても、ソフトウェアシステムにエラーがないことを証明することはできません。

ソフトウェアテストの紹介

ソフトウェアテストは、ソフトウェア製品の動作をチェックして、仕様に準拠していることを評価および検証するプロセスです。ソフトウェア製品には、数千行のコードと、一緒に機能する数百のコンポーネントが含まれる場合があります。コードの行が正しく機能しない場合、エラーが伝播して他のエラーを引き起こす場合があります。したがって、プログラムが予想どおりに実行されるようにするには、テストする必要があります。

最新のソフトウェアは非常に複雑になる可能性があるため、正確性のさまざまな側面を評価するための複数のレベルのテストがあります。 ISTQB認定テストの基本レベルシラバスによると、ソフトウェアテストには4つのレベルがあります。

単位テスト:コードの特定の行をテスト
  1. 統合テスト:複数のユニット間の統合をテスト
  2. システムテスト:システム全体をテストします
  3. 受け入れテスト:ビジネス目標を満たしているかどうかを確認してください
  4. この記事では単体テストについて説明しますが、それに入る前に、ソフトウェアテストに重要な原則を紹介したいと思います。

テストは、欠陥の存在を証明するだけですが、欠陥の欠如を証明することはできません。

-

ISTQB CTFL SYLLABUS 2018 言い換えれば、実行するすべてのテストに障害が表示されない場合でも、ソフトウェアシステムにエラーがないことを証明しないか、別のテストケースがソフトウェアの動作に欠陥がないことを証明しません。

ユニットテストとは何ですか?

これは、コンポーネントテストとも呼ばれる最初のテストレベルです。このセクションでは、単一のソフトウェアコンポーネントがテストされています。プログラミング言語に応じて、ソフトウェアユニットはクラス、関数、またはメソッドです。たとえば、複数のメソッドと除算方法を含む算術使用と呼ばれるJavaクラスがある場合、Arithmeticoperationsクラスの単体テストは、マルチプリと除算の正しい動作をテストする必要があります。

単位テストは通常​​、ソフトウェアテスターに​​よって実行されます。ユニットテストを実行するには、ソフトウェアテスター(または開発者)がソースコードにアクセスする必要があります。ソースコード自体がテストされているオブジェクトであるためです。したがって、ソースコードを直接テストするこのソフトウェアテスト方法は、ホワイトボックステストと呼ばれます。

ソフトウェアテストを心配する必要があるのか​​、それが価値があるかどうか疑問に思うかもしれません。次のセクションでは、テストソフトウェアシステムの背後にある動機を分析します。

なぜユニットテストを実行する必要があります

ソフトウェアテストの主な利点は、ソフトウェアの品質を向上させることです。特に、ソフトウェアが日常活動であらゆる種類のものを処理する世界では、ソフトウェアの品質が非常に重要です。ソフトウェアの品質を改善することは、依然としてあいまいな目標です。ソフトウェアの品質と呼ばれるものをよりよく説明してみましょう。 ISO/IEC Standard 9126-1 ISO 9126によると、ソフトウェアの品質には次の要因が含まれています。

    信頼性
  • functional
  • 効率
  • 可用性
  • メンテナビリティ
  • 送話性
会社を所有している場合は、ビジネスに影響を与えるため、ソフトウェアテストアクティビティを慎重に検討する必要があります。たとえば、2022年5月、テスラは車両のインフォテインメントシステムの問題により130,000台の車を思い出しました。この問題は、「空中に」分散されたソフトウェアアップデートを介して解決されました。これらの失敗は、会社に時間とお金を引き起こし、顧客にしばらく車を使用することができなかったため、顧客に問題を引き起こしました。テストソフトウェアにはお金がかかりますが、企業は何百万もの技術サポートを節約することもできます。

単位テストでは、ソフトウェアが正しく実行されていることを確認することに焦点を当てています。つまり、入力と出力のマッピングが正しく行われていることを確認します。低レベルのテストアクティビティとして、単体テストはエラーを早期に特定するのに役立ち、ソフトウェアシステムのより高いレベルに伝播しません。

単体テストのその他の利点は次のとおりです

統合された統合:すべてのコンポーネントが独立して動作するようにすることで、統合の問題を解決する方が簡単です。
    コード回帰を最小化する:多数のテストケースでは、将来のソースコードの変更が問題を引き起こす場合、問題を見つける方が簡単です。
  • ドキュメントの提供:入力と出力の間の正しいマッピングをテストすることにより、ユニットテストは、テスト対象のメソッドまたはクラスの使用方法に関するドキュメントを提供します。
  • テスト戦略を設計

テスト戦略の設計方法を見てみましょう。

テストスコープの定義

テスト戦略の計画を開始する前に、答えるべき重要な質問があります。ソフトウェアシステムのどの部分をテストしますか?

これは重要な問題です。これは、徹底的なテストが不可能であるためです。したがって、可能なすべての入力と出力をテストすることはできませんが、関連するリスクに基づいてテストに優先順位を付ける必要があります。

テストの範囲を定義する際には、多くの要因を考慮する必要があります。

    リスク:エラーがこのコンポーネントに影響を与えると、どのようなビジネス結果が発生しますか?
  • 時間:ソフトウェア製品の準備をどのくらいしたいですか?締め切りはありますか?
  • 予算:テスト活動にどのくらいのお金を投資しますか?
テスト範囲を定義した後(テストするものとテストすべきではないものを指定します)、適切な単位テストに必要な機能について説明できます。

単体テストの機能

    速い。ユニットテストはほとんど自動的に実行されます。つまり、速くする必要があります。ゆっくりとしたユニットテストは、インスタントフィードバックを提供しないため、開発者がスキップする可能性が高くなります。
  • 独立。単体テストは、定義により独立しています。個々のコードユニットをテストし、外部要因(ファイルやネットワークリソースなど)に依存しません。
  • 繰り返し可能。ユニットテストは繰り返し実行され、結果は時間の経過とともに一貫している必要があります。
  • 信頼できます。ユニットテストは、テスト中のシステムにエラーがある場合にのみ失敗します。環境またはテストが実行される順序は重要ではありません。
  • 正しく名前が付けられています。テストの名前は、テスト自体に関する関連情報を提供する必要があります。
Pythonでユニットテストを掘り下げる前に、ステップがありません。テストを整理して、清潔で読みやすくするにはどうすればよいですか?準備、実行、およびアサーション(AAA)と呼ばれるパターンを使用します。

aaaモード

準備、実行、およびアサーション(AAA)パターンは、単体テストを作成および整理するための一般的な戦略です。次のように機能します:

    準備フェーズでは、テストに必要なすべてのオブジェクトと変数を設定します。
  • 次に、実行段階で、テストする関数/メソッド/クラスが呼び出されます。
  • 最後に、アサーションフェーズでは、テストの結果を検証します。
この戦略は、テストのすべての主要部分(セットアップ、実行、および検証)を分離することにより、単体テストを整理するクリーンな方法を提供します。さらに、ユニットテストはすべて同じ構造に従うため、読みやすくなります。

Pythonでの単位テスト:無部またはpytest?

Pythonの2つの異なる単体テストフレームワークについて説明します。これらの2つのフレームワークは、最小限であり、pytestです。

未熟なはじめに

Python Standard Libraryには、最も独立したユニットテストフレームワークが含まれています。このフレームワークは、JavaのユニットテストフレームワークであるJunitに触発されています。

公式文書に記載されているように、Unitestestはこの投稿で言及するいくつかの重要な概念をサポートしています。

テストケース、これはテストの単一単位です
  • テストスイート、これは一緒に実行されるテストケースのセットです
  • テストランナー。これは、すべてのテストケースの実行と結果を処理するコンポーネントである
  • Unittestには、テストを作成する独自の方法があります。特に、
が必要です
  1. unittest.testcaseクラスから継承するクラスの方法としてテストを書く
  2. 特別なアサーション方法
  3. を使用します

Unittestはすでにインストールされているため、最初のユニットテストを作成する準備が整いました!

Unittestを使用した単体テストの書き込み

BankAccountクラスがあると仮定します:

import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True
利用可能な預金量を超えるお金を引き出すことはできません。そのため、ソースコードがこの状況を正しく処理しているかどうかをテストしましょう。

同じPythonファイルで、次のコードを追加できます。

Unittest.testcaseのサブクラスであるTestBankoperationsというクラスを作成しています。このようにして、新しいテストケースを作成しています。
class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)
このクラスでは、メソッドがテストから始まる単一のテスト関数を定義します。これは、すべてのテスト方法が単語テストから開始する必要があるため重要です。

このテスト方法はfalseを返すと予想されます。つまり、操作に失敗しました。結果をアサートするために、AssertFalse()と呼ばれる特別なアサーション方法を使用します。

テストを実行する準備ができました。コマンドラインでこのコマンドを実行しましょう:

ここで、example.pyはすべてのソースコードを含むファイルの名前です。出力は次のようになります:

python -m unittest example.py

とても良い!これは、テストが成功したことを意味します。それでは、障害があるときに出力がどのように見えるか見てみましょう。前のクラスに新しいテストを追加します。負の量を預けようとしましょう。これは確かに不可能です。私たちのコードはこの状況を処理しますか?

<code>.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK</code>
これは私たちの新しいテスト方法です:

-Vフラグを使用して、このテストを実行するために、Unitestの詳細なモードを使用できます。

  def test_negative_deposit(self):
    # Arrange
    a = BankAccount(1)
    # Act
    outcome = a.deposit(-100)
    # Assert
    self.assertFalse(outcome)
出力は今では異なります:

python -m unittest -v example.py
この場合、詳細なロゴはより多くの情報を提供します。 test_negative_depositが失敗することはわかっています。特に、AssertionErrorは、予想される結果は偽であるはずですが、Trueは偽ではないことを示しています。つまり、メソッドはtrueを返します。

適切なフレームワークは、私たちのニーズに応じてさまざまなアサーション方法を提供します:
<code>test_insufficient_deposit (example.TestBankOperations) ... ok
test_negative_deposit (example.TestBankOperations) ... FAIL

======================================================================
FAIL: test_negative_deposit (example.TestBankOperations)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "example.py", line 35, in test_negative_deposit
    self.assertFalse(outcome)
AssertionError: True is not false

----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)</code>

Assertequal(x、y)、x == yがtrue

であるかどうかをテストします

assertraises(Exception_type)、特定の例外が提起されたかどうかを確認します
  • assertisnone(x)、xがnone
  • かどうかをテストします
  • assertin(x、y)、xがy
  • であるかどうかをテストします
  • 今度は、Unittest Frameworkを使用して単体テストを作成する方法を基本的に理解しているので、Pytestと呼ばれる別のPythonフレームワークを見てみましょう。
  • pytestの紹介

pytestフレームワークは、いくつかの関連する機能を備えたPythonユニットテストフレームワークです。

コードを少なくする複雑なテストを可能にします

は、最も適したテストスイートをサポートしています

    800を超える外部プラグインを提供しています
  • Pytestはデフォルトではインストールされていないため、最初にインストールする必要があります。 PytestにはPython 3.7が必要であることに注意してください。
  • pytest
  • をインストールします
Pytestのインストールは非常に簡単です。次のコマンドを実行する必要があります:

import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True

次に、すべてが入力して正しくインストールされていることを確認してください:

class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)

出力は次のようになります

python -m unittest example.py
とても良い! Pytestを使用して最初のテストを書きましょう。

pytestを使用した単体テストの書き込み

以前に書いたBankaccountクラスを使用し、以前と同じ方法をテストします。このようにして、これら2つのフレームワークを使用してテストを作成するために必要な努力を比較する方が簡単です。

テストにpytestを使用するには、

が必要です

    ディレクトリを作成し、テストファイルを入力します。
  • test_または_test.pyで終了するという名前のファイルでテストを作成します。 Pytestは、現在のディレクトリとそのサブディレクトリ内のこれらのファイルを探します。
したがって、test_bank.pyという名前のファイルを作成し、フォルダーに入れます。これは私たちの最初のテスト関数がどのように見えるかです:

<code>.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK</code>
ご存知のように、最小限のバージョンと比較して唯一の変更はアサートパーツです。ここでは、通常のPythonアサーション法を使用します。

今、test_bank.pyファイルを見ることができます:

このテストを実行するには、test_bank.pyファイルを含むフォルダーにコマンドプロンプトを開いてみましょう。次に、次のコマンドを実行します
  def test_negative_deposit(self):
    # Arrange
    a = BankAccount(1)
    # Act
    outcome = a.deposit(-100)
    # Assert
    self.assertFalse(outcome)

出力は次のようになります:

python -m unittest -v example.py
この場合、テストを作成して実行するのがどれほど簡単かを確認できます。さらに、UNITSTよりも少ないコードを書くことがわかります。テストの結果も理解しやすいです。

失敗したテストを見てみましょう!
<code>test_insufficient_deposit (example.TestBankOperations) ... ok
test_negative_deposit (example.TestBankOperations) ... FAIL

======================================================================
FAIL: test_negative_deposit (example.TestBankOperations)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "example.py", line 35, in test_negative_deposit
    self.assertFalse(outcome)
AssertionError: True is not false

----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)</code>

以前に書いた2番目の方法を使用します。これはtest_negative_depositと呼ばれます。アサートパーツを参照し、結果は次のとおりです。

以前のようにテストを実行しますが、これは出力です。

出力を解析することにより、収集された2つのアイテムを読み取ることができます。つまり、2つのテストが実行されました。下にスクロールすると、test_negative_depositメソッドのテスト中にエラーが発生したことがわかります。特に、アサーションを評価するときにエラーが発生します。さらに、レポートは、結果変数の値が真であると述べています。つまり、堆積方法にエラーが含まれていることを意味します。

pip install -U pytest
PytestはデフォルトのPythonアサーションキーワードを使用するため、到達する出力を、期待される結果を保存する別の変数と比較できます。これにはすべて、特別なアサーション方法は必要ありません。

pytest --version
結論

この記事では、ソフトウェアテストの基本を紹介します。ソフトウェアテストが重要である理由と、誰もがコードをテストする必要がある理由を発見しました。ユニットテストと、Pythonでの簡単な単位テストを設計および実装する方法について説明します。

UnittestとPytestと呼ばれる2つのPythonフレームワークを使用します。どちらも有用な機能を備えており、Pythonユニットテストで最も一般的に使用されるフレームワークの2つです。

最後に、準備、実行、およびアサーションパターンでテストを作成する方法についてのアイデアを提供する2つの基本的なテストケースが表示されます。

ソフトウェアテストの重要性をあなたに納得させてくれることを願っています。 UnitestやPytestなどのフレームワークを選択し、テストを開始します。追加の努力は価値があるからです。

この記事が気に入っている場合は、次のものも有用であることがあります。

    サイプレステスト:Webアプリケーションの実行ガイド
  • jest
  • で反応成分をテストする方法
  • 操り人形師でエンドツーエンドのテストを学びます
  • ハンズフリーを継続的にテストする3つの方法
  • 再導入ジェンキンス:自動テストにパイプを使用
  • Python単体テストに関するFAQ

Pythonのユニットテストは何ですか? Pythonでのユニットテストは、プログラムの単一のユニットまたはコンポーネントが分離され、各ユニットが期待どおりに機能するように分離されたソフトウェアテスト手法です。 なぜPython開発においてユニットテストが重要なのですか?ユニットテストは、Pythonプログラム内の個々のコンポーネントの正確性を確保するのに役立ちます。エラーを早期に検出し、コードの変更に安全なネットを提供し、コードの保守性をサポートするのに役立ちます。

Pythonでユニットテストを書く方法は? Pythonのユニットテストは、多くの場合、組み込みのUnitestモジュールを使用して記述されます。これらのクラスでunittest.testcaseから継承されたテストクラスを作成し、テスト方法を作成します。テスト方法は通常、「テスト」から始まります。

最新のもの以外に、Pythonユニットテストに他のどのフレームワークを使用できますか?はい、UnitStestに加えて、PytestやNose2などの他の一般的なPythonテストフレームワークがあります。これらのフレームワークは、さまざまな機能と構文を提供するため、開発者はニーズに最適な機能を選択できます。

Pythonユニットテストにおけるフィクスチャの役割は何ですか?フィクスチャは、Pythonで前提条件を設定し、テスト後にクリーンアップする方法です。テストが独立しており、独立して実行できることを確認します。

テストカバレッジとは何ですか?なぜそれが重要なのですか?テストカバレッジは、テストが実行されるコードベースの割合を測定します。テストされていないコードを識別するのに役立ち、テストが包括的であることを保証し、エラーが発見される可能性を減らします。

Pythonで効果的なユニットテストを作成するためのベストプラクティスは何ですか?はい、いくつかのベストプラクティスには、独立した孤立したテストの作成、記述テスト方法名の使用、境界の状況のテストが含まれます。さらに、優れたテストカバレッジを取得し、頻繁にテストを実行してみてください。

以上がUnittestとPytestを使用したPythonユニットテストのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonを使用してテキストファイルのZIPF配布を見つける方法Pythonを使用してテキストファイルのZIPF配布を見つける方法Mar 05, 2025 am 09:58 AM

このチュートリアルでは、Pythonを使用してZIPFの法則の統計的概念を処理する方法を示し、法律の処理時にPythonの読み取りおよび並べ替えの効率性を示します。 ZIPF分布という用語が何を意味するのか疑問に思うかもしれません。この用語を理解するには、まずZIPFの法律を定義する必要があります。心配しないでください、私は指示を簡素化しようとします。 ZIPFの法則 ZIPFの法則は単に意味します。大きな自然言語のコーパスでは、最も頻繁に発生する単語は、2番目の頻繁な単語のほぼ2倍の頻度で表示されます。 例を見てみましょう。アメリカ英語の茶色のコーパスを見ると、最も頻繁な言葉は「thであることに気付くでしょう。

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?HTMLを解析するために美しいスープを使用するにはどうすればよいですか?Mar 10, 2025 pm 06:54 PM

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

Pythonでの画像フィルタリングPythonでの画像フィルタリングMar 03, 2025 am 09:44 AM

ノイズの多い画像を扱うことは、特に携帯電話や低解像度のカメラの写真でよくある問題です。 このチュートリアルでは、OpenCVを使用してPythonの画像フィルタリング手法を調査して、この問題に取り組みます。 画像フィルタリング:強力なツール 画像フィルター

Pythonの並列および同時プログラミングの紹介Pythonの並列および同時プログラミングの紹介Mar 03, 2025 am 10:32 AM

データサイエンスと処理のお気に入りであるPythonは、高性能コンピューティングのための豊富なエコシステムを提供します。ただし、Pythonの並列プログラミングは、独自の課題を提示します。このチュートリアルでは、これらの課題を調査し、グローバルな承認に焦点を当てています

TensorflowまたはPytorchで深い学習を実行する方法は?TensorflowまたはPytorchで深い学習を実行する方法は?Mar 10, 2025 pm 06:52 PM

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

Pythonで独自のデータ構造を実装する方法Pythonで独自のデータ構造を実装する方法Mar 03, 2025 am 09:28 AM

このチュートリアルでは、Python 3にカスタムパイプラインデータ構造を作成し、機能を強化するためにクラスとオペレーターのオーバーロードを活用していることを示しています。 パイプラインの柔軟性は、一連の機能をデータセットに適用する能力にあります。

Pythonオブジェクトのシリアル化と脱介入:パート1Pythonオブジェクトのシリアル化と脱介入:パート1Mar 08, 2025 am 09:39 AM

Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。 ある意味では、シリアル化と脱派化は、世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。 これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムの速度、セキュリティ、メンテナンスの自由、およびその他の側面を決定する場合があります。

Pythonの数学モジュール:統計Pythonの数学モジュール:統計Mar 09, 2025 am 11:40 AM

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン