- Selenium は、W3C WebDriver 標準に基づいて構築された成熟したブラウザ自動化ライブラリです。
- Playwright は、自動待機、トレース、テスト ランナーを備えた新しいフレームワークです。
- 新しい Web プロジェクトの場合、通常、Playwright を使用すると生産性が向上します。
- Selenium は、大規模な既存のスイート、より広範な言語ニーズ、および実際のベンダーのブラウザでのテストにとって、依然として適切な選択肢です。
テスト自動化プロジェクトを始めようとしている場合、Selenium 対 Playwrightという疑問がすぐに浮かぶでしょう。検索結果を見ると解決済みのように聞こえるかもしれませんが、正しい答えはチーム、既存のテスト、サポートする必要があるブラウザーによって異なります。
このガイドでは、日々の業務の中で実際に感じることを比較していきます。コード サンプルは各ツールの典型的なスタイルを示しており、この記事ではそれらを実行しませんでした。また、公開されているベンチマークはさまざまであり、多くの場合ベンダーから提供されているため、速度パーセンテージの引用も避けます。速度が問題を決めるかどうかは、独自のアプリケーションで測定してください。
短い答え
ほとんどの新しい Web テスト プロジェクト、特にチームが JavaScript、TypeScript、Python、Java、または .NET で作業できる場合は、Playwright を選択してください。すぐに使える機能が増え、インフラストラクチャや不安定な待ち時間が短縮されます。
すでに大規模な作業用スイートがある場合、Playwright が公式にサポートしていない言語 (Ruby など) が必要な場合、または Selenium グリッドまたはデバイス クラウドを通じて利用可能な実際のブラウザ ビルドとプラットフォームでテストする必要がある場合は、Selenium を選択してください。
セレンと劇作家が並んで
| アスペクト | セレン | 劇作家 |
|---|---|---|
| 最初にリリースされた | 2004 | 2020年、マイクロソフト社 |
| それは何ですか | ブラウザ自動化ライブラリ | Node.js のランナーを備えたフレームワーク |
| 言語 | Java、Python、C#、Ruby、JavaScript | TypeScript、JavaScript、Python、Java、.NET |
| ブラウザ | Chrome、Firefox、Edge、Safari | クロム、Firefox、WebKit |
| 待っています | あなたが書く明示的な待機 | 自動待機機能搭載 |
| テストランナー | pytest や JUnit など、独自のものを持参してください | Node.js、Python 用の pytest プラグインに含まれています |
| 並列実行 | Selenium Grid またはテスト フレームワーク | ランナーに組み込まれています |
| デバッグ | フレームワークのログ、追加したスクリーンショット | トレース ビューア、UI モード、コード生成 |
| ネットワークモッキング | 限られた、多くの場合追加のツール | 内蔵 |
| コミュニティ | とても大きくて老舗の | 大きくて成長が早い |
アーキテクチャ: それぞれがブラウザと通信する方法
Selenium は、正式な標準である W3C WebDriver プロトコルを使用してコマンドを送信します。コードはブラウザを制御する ChromeDriver などのドライバーと通信し、通常は各コマンドが個別の HTTP リクエストになります。ブラウザ ベンダーがこの標準をサポートしているため、幅広い互換性があります。新しいプロトコルである WebDriver BiDi は、双方向通信とイベント ストリーミングを標準に追加しています。
Playwright はブラウザへの永続的な接続を維持し、パッチが適用された Chromium、Firefox、WebKit の独自のビルドを使用します。接続は直接双方向であるため、ブラウザ イベントに反応でき、各テストは独自の軽量 ブラウザ コンテキストで実行できます。これが、実際の差はアプリケーションとテストによって異なりますが、ほとんどの比較で Playwright が速いと評価される理由です。
両方のツールで 1 つのテストを実行
これは、公開練習サイトに対する同じログイン テストを Python で作成したものです。
セレン
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_login(driver):
driver.get("https://the-internet.herokuapp.com/login")
driver.find_element(By.ID, "username").send_keys("tomsmith")
driver.find_element(By.ID, "password").send_keys("SuperSecretPassword!")
driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()
message = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "flash"))
)
assert "You logged into a secure area" in message.text
Selenium Python チュートリアルで示すように、ドライバーを作成して閉じるためのフィクスチャも必要です。
劇作家
from playwright.sync_api import Page, expect
def test_login(page: Page):
page.goto("https://the-internet.herokuapp.com/login")
page.get_by_label("Username").fill("tomsmith")
page.get_by_label("Password").fill("SuperSecretPassword!")
page.get_by_role("button", name="Login").click()
expect(page.locator("#flash")).to_contain_text("You logged into a secure area")
これは、page フィクスチャを提供する pytest-playwright プラグインに依存します。これは主に expect に待機が組み込まれているためと、get_by_role のようなロケーターがユーザーが見る方法でページを説明するため、短くなります。 Selenium を使用すると、ヘルパーと ページ オブジェクト モデル を使用してこの定型文を大幅に削減できます。これらはどちらのツールでも推奨されます。
待機中の不安定なテスト
ブラウザ テストが不安定になる主な原因はタイミングであり、日常使用において 2 つのツールが最も異なるのはタイミングです。
Selenium では、同期を担当します。明示的な待機はうまく機能しますが、どこでも誰かがそれを覚えておく必要があり、忘れたチームは time.sleep に頼ることがよくあります。 Selenium の待機に関するガイドでは、これを正しく行う方法について説明しています。
Playwright では、アクションは、要素が表示されているか、安定しているか、有効であるか、イベントを受信できるかを動作前に自動的にチェックします。 Web ファースト アサーションは、タイムアウトになるまで再試行を続けます。貧弱なテスト データなど、不安定なテストを作成することもできますが、問題の主な原因はデフォルトで処理されます。
ブラウザと言語
ここが Selenium の本当の利点です。 Playwright の WebKit ビルドは Safari のエンジンに似ていますが、Mac や iPhone の Safari とは異なります。実際の Safari の動作が重要な場合は、Selenium と SafariDriver、または実際のデバイス クラウドを使用すると、ユーザーが実際に実行している動作に近づけることができます。
同様に、Playwright はバンドルされているブラウザのバージョンをテストしていますが、インストールされている Chrome および Edge チャネルを駆動することもできます。 Selenium はインストールするブラウザを駆動します。これは、特定のバージョンをサポートする必要がある場合に役立ちます。ネイティブ モバイル アプリの場合、どちらも完全な答えではありません。WebDriver の概念に基づいて構築された Appium が通常のツールです。
言語に関しては、Selenium は Ruby を正式にサポートしており、Java チームでは非常に長い歴史があります。 Playwright の Node.js バージョンには、完全なテスト ランナーが含まれているため、最も完全なツールも含まれています。他の言語はコア ライブラリを取得し、独自のテスト フレームワークと統合します。
デバッグ
ここでは劇作家が明らかにリードしている。その トレース ビューア は、DOM スナップショット、ネットワーク呼び出し、コンソール ログとともに各アクションを記録するため、失敗した CI 実行の完了後にステップ実行できます。その UI モード と codegen は、テストをより速く書くのにも役立ちます。使用方法については、初心者向け Playwright チュートリアルをご覧ください。
Selenium を使用すると、失敗時のスクリーンショット、ブラウザのログ、グリッド プロバイダーからのビデオ、テスト フレームワークからのレポートから、これを自分で組み立てます。それはうまく機能し、多くのチームが優れたセットアップを備えていますが、構築するには労力がかかります。
ネットワークとAPIの機能
Playwright は、数行のコードでネットワーク リクエストをインターセプトして模擬することができます。これは、エラー状態をテストするのに役立ちます。
page.route("**/api/orders", lambda route: route.fulfill(status=500))
API リクエスト クライアントも含まれているため、ブラウザを駆動する前に API を介してテスト データを作成できます。 Selenium 4 では、Chrome DevTools プロトコルと BiDi を通じていくつかのネットワーク機能が追加されていますが、サポートと利便性はブラウザーと言語によって異なります。多くの Selenium ユーザーは、API テスト ツールのように、プロキシまたは別の HTTP ライブラリを追加します。
ヒント: どのツールを選択する場合でも、ブラウザ テストは重要な作業に重点を置き、詳細は下位レベルに落とし込んでください。より小さなスイートは、より高速なツールよりも重要です。 エンドツーエンド テストのベスト プラクティスをご覧ください。
並列実行とスケール
Playwright のランナーは、シンプルなオプションで並列ワーカーと CI マシン間のシャーディングを処理します。ブラウザ コンテキストは安価なので、テストごとに分離するためにまったく新しいブラウザを必要としません。
Selenium は Selenium Grid を使用してマシンやブラウザのバージョン間でテストを分散し、テスト フレームワークが並列処理を処理します。グリッドは実行する必要がありますが、非常に大規模で実証されており、多くの商用デバイス クラウドがグリッドを直接サポートしています。
Selenium から Playwright に移行する必要がありますか?
自動的ではありません。作業スイートは貴重ですが、書き直すと製品のテストにかかる時間が奪われます。まず次の質問をしてください。
- 測定可能な問題はありますか?不安定なテストやデバッグの遅さは十分な理由です。 「新しい」ではありません。
- スイートのサイズはどれくらいですか? 100 個のテストを移動できます。 1万は大きなプロジェクトです。
- ページ オブジェクトはきれいですか? 優れた抽象化により、移行がはるかに安くなります。
- Selenium 固有の機能に依存していますか? まず、グリッドとデバイスのニーズを確認してください。
移動する場合は徐々に移動してください。 Playwright で新しいテストを作成し、最も不安定な古いテストを最初に移行し、古いスイートが廃止できるほど小さくなるまで両方を並行して実行します。テストを 1 行ずつ変換しないでください。これにより、スリープと古いロケーターが引き継がれます。 テスト自動化の間違いで説明されている間違いも避けてください。
選び方
| あなたの状況 | 合理的な選択 |
|---|---|
| 新しい Web アプリ、最新のチーム | 劇作家 |
| 大規模で安定した Selenium スイート | Selenium を使い続けて改善してください |
| チームが Ruby を書く | セレン |
| 実際のSafariをカバーすることが重要です | Selenium、またはデバイス クラウド |
| 不安定なテストと難しい CI デバッグ | Playwright をパイロットで試してみる |
| ネイティブモバイルアプリ | アピウム |
何よりも良いのは、短いパイロットを実行することです。独自のアプリケーション、独自の CI に対して各ツールで最も厄介な 3 つの作業を自動化し、コード、速度、障害のデバッグの容易さを比較します。 1 週間の証拠は、この記事を含め、どの比較記事よりも優れています。サイプレスも最終候補リストに載っている場合は、劇作家 vs サイプレスを読んでください。
まとめ
通常、Playwright から始めるのが簡単ですが、Selenium は依然として広範囲に適用される信頼できる標準です。どちらも、設計が不十分なテスト スイートを保存することはできません。実際の制約に基づいて選択し、安定したロケーターと優れたテスト データに投資し、ユーザーにとって最も重要なことにスイートを集中させ続けます。
よくある質問
Playwright は Selenium よりも優れていますか?
多くの新しい Web プロジェクトでは、自動待機と組み込みツールのおかげでそうです。 Selenium は、既存のスイート、より広範な言語ニーズ、または特定の実際のブラウザーにより適している可能性があります。
Playwright は Selenium より速いですか?
一般に、永続的なブラウザ接続と軽量のコンテキストにより、高速であると報告されています。実際の違いはアプリによって異なるため、独自のテストで測定してください。
Seleniumは古いですか?
いいえ、Selenium は積極的に保守され、W3C 標準に基づいて構築されており、今でも広く使用されています。 Selenium 4 と WebDriver BiDi により、引き続き最新化が行われます。
Playwright は本物の Safari をテストできますか?
Playwright は独自の WebKit ビルドを使用してテストします。これは Safari のエンジンに似ていますが、同一ではありません。実際の Safari または iOS の動作については、実際のデバイスまたは SafariDriver を使用してください。
初心者は Selenium または Playwright を学ぶべきですか?
多くの初心者は、Playwright を始めるのが簡単だと感じています。 Selenium は今でも多くの求人情報に掲載されているため、地元の市場を確認してください。核となるコンセプトはそれらの間で引き継がれます。
学び続ける
テスト、WordPress、または SEO についてサポートが必要ですか?
私たちは、チームがより優れたソフトウェアを出荷し、サイトを成長させるのを支援します。あなたが取り組んでいることを教えてください。明確な次のステップを提案します。
詳しいガイドはこちら テスト、AI、最新の開発
この記事は気に入りましたか?トピックを選択して、最新のチュートリアルに直接アクセスしてください。
AI 幻覚の説明: 言語モデルが物事をでっち上げる理由とそれを軽減する方法
AI 幻覚について説明しました。幻覚とは何か、言語モデルが幻覚を生成する理由、一般的な種類、グラウンディングとプロンプトで幻覚を軽減する方法、そして私たちが実行した簡単なチェックです。
記事を読む →DevOps環境変数の説明: .env ファイル、シークレット、および設定が正しく行われている
実行した Python の例を使用して環境変数について説明します。環境変数の読み取りと設定、すべての値が文字列である理由、.env ファイル、プロセスの継承、シークレット、検証について説明します。
記事を読む →ソフトウェア開発API レート制限の説明: アルゴリズム、ヘッダー、および 429 エラーの処理
API レート制限については、実行したシミュレーションで説明します。トークン バケット、固定ウィンドウ、スライディング ウィンドウ、429 応答、レート制限ヘッダー、バックオフによる再試行、およびテスト制限です。
記事を読む →テスト自動化Python でのモッキング:unittest.mock、patch、およびテストを嘘にする間違い
Python でのunittest.mockによるモック、テスト済み: モックとreturn_value、side_effect、名前が使用されている場所のパッチ、仕様と自動仕様、日付のモック、およびよくある間違い。
記事を読む →ソフトウェアテストコードカバレッジの説明: 回線カバレッジとブランチカバレッジ、および 100% の実際の意味
実際のcoverage.pyの実行でコードカバレッジを説明: 行、分岐、条件のカバレッジ、レポートの読み取り、100%のカバレッジでもバグを見逃す可能性がある理由、および賢明なターゲット。
記事を読む →データベースとSQLSQL における DELETE、TRUNCATE、DROP: 違い、ロールバック、およびそれぞれをいつ使用するか
DELETE、TRUNCATE、DROP について、テスト済み SQL を使用して説明します。それぞれの削除内容、ロールバック、トリガー、ID リセット、速度、PostgreSQL、MySQL、SQL Server、SQLite の違いについて説明します。
記事を読む →データベースとSQLSQL ビューの説明: 作成、使用、落とし穴の回避、例を示します
SQL ビューについて、実行したクエリとともに説明しました。ビューの作成、ライブ結果、列の非表示、パフォーマンス、更新可能なビューと具体化されたビュー、壊れた依存関係、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発TypeScript インターフェイスと型: 実際の違い、コンパイラでテスト
TypeScript インターフェイスと型、実際のコンパイラでチェック: 両方でできること、片方だけでできること、宣言のマージ、拡張と交差、および従うべき簡単なルール。
記事を読む →ソフトウェア開発Python *args と **kwargs の説明: 柔軟な関数と明確な例
Python の *args と **kwargs について、実行したコードで説明しました。パッキングとアンパッキング、パラメーターの順序、キーワードのみの引数と位置のみの引数、デコレーター、一般的なエラーです。
記事を読む →ソフトウェア開発Python Lambda 関数: 構文、実際の用途、および使用すべきでない場合
Python のラムダ関数について、実行したコードとともに説明します。構文、キーによるソート、マップとフィルター、クロージャー、遅延バインディング トラップ、通常の def がより適切な選択である場合。
記事を読む →人工知能AIエージェントとは何ですか?シンプルなエージェント ループを実行できる仕組み
AIエージェントとは何ですか?エージェント ループ、ツール、メモリ、ガードレール、実行した小さな Python ループ、実際のリスク、およびシンプルなチャットボットがより良い選択である場合についてのわかりやすいガイドです。
記事を読む →DevOpsモニタリングと可観測性: ログ、メトリクス、トレースによる本当の違い
モニタリングと可観測性について説明: 既知および未知の障害、ログ、メトリクスとトレース、チェックアウト インシデントのウォークスルー、ゴールデン シグナル、OpenTelemetry、および便利なアラート。
記事を読む →DevOpsDocker ボリュームとバインド マウント: コンテナ データを正しい方法で保持する
Docker ボリュームとバインド マウントについて説明します。コンテナ データが消える理由、名前付きボリューム、バインド マウント、tmpfs、Compose の例、バックアップ、アクセス許可、およびそれぞれをいつ使用するかについて説明します。
記事を読む →テスト自動化TDD と BDD: 主な違い、1 つの機能が両方の方法で構築され、それぞれをいつ使用するか
TDD と BDD は、両方の方法で構築された 1 つの割引機能で説明されています。実行したコードによるレッド-グリーン-リファクタリング、Given-When-Then シナリオ、ツール、トレードオフ、およびそれぞれをいつ使用するかです。
記事を読む →ソフトウェアテストユーザー受け入れテスト (UAT): プロセス、チェックリスト、および実際の例
ユーザー受け入れテストの説明: 誰が実行するか、QA との違い、7 段階のプロセス、UAT テスト ケース テンプレート、チェックリスト、サインオフ基準、およびよくある間違い。
記事を読む →データベースとSQLSQL NULL 値の説明: IS NULL、COALESCE、NULLIF、および回避すべきトラップ
SQL の NULL 値について、実行したクエリで説明しました。3 つの値のロジック、IS NULL、COALESCE、NULLIF、集計、結合、並べ替えでの NULL の扱い方、およびそれが密かに引き起こすバグです。
記事を読む →データベースとSQLSQL CASE WHEN ステートメント: 構文、実際の例、およびよくある間違い
SQL CASE WHEN では、単純な検索フォーム、条件順序、SUM を使用したピボット、COUNT トリック、カスタム並べ替え、更新、回避すべき NULL トラップなど、実行したクエリを使用して説明しました。
記事を読む →ソフトウェア開発JWTとは何ですか? JSON Web トークンを実際の例で説明する
JWTとは何ですか? JSON Web トークンについて説明しました。3 つの部分、実行したコード内で構築および改ざんされたトークン、JWT とセッション、ストレージ、リフレッシュ トークン、およびセキュリティ上の間違いです。
記事を読む →ソフトウェア開発JavaScript イベントループの説明: コールスタック、マイクロタスク、タイマーと例
JavaScript イベント ループについて、実行したコードで説明しました。コール スタック、タスク キュー、マイクロタスク キュー、setTimeout 0 が即時ではない理由、ブロッキング、スターベーション、およびインタビュー クイズです。
記事を読む →ソフトウェア開発Python ジェネレーターと収量の説明: 実際の例でメモリを節約する
Python ジェネレーターと Yield について、実行したコードを使用して説明します。一時停止と再開の方法、メモリ節約の測定、パイプライン、無限シーケンス、Yield from、send、および一般的なトラップについて説明します。
記事を読む →人工知能埋め込みとは何ですか?ベクトルとコサインの類似度を簡単に説明
埋め込みとは何ですか?ベクトル、コサイン類似度、セマンティック検索に関する平易なガイド。私たちが実行した小さな例、一般的な使用法、モデルの選択、既知の制限が含まれています。
記事を読む →DevOpsBlue-Green デプロイメントと Canary デプロイメント: 違い、トレードオフ、および選択方法
ブルー グリーン デプロイメントとカナリア デプロイメントについて説明: それぞれの仕組み、コスト、リスクとロールバック、テストした安定したユーザー バケット化、データベース移行、ローリング アップデート、および選択方法。
記事を読む →テスト自動化不安定なテスト: 問題の原因とそれを永久に修正する方法
不安定なテストについては、私たちが実行したデモを使用して説明しました。主な原因、確認および診断する方法、タイミングの適切な修正、共有された状態と日付、隔離プロセスなどです。
記事を読む →ソフトウェアテスト負荷テストとストレス テスト: 違い、メトリクス、および k6 の例
ロード テストとストレス テストについて説明します。それぞれが何を証明するか、スパイク テストとソーク テスト、重要な指標、平均値が誤解を招く理由、K6 の例、テストの計画方法について説明します。
記事を読む →ソフトウェアテストテスト ケースとテスト シナリオ: 主な違い、例、およびそれぞれをいつ使用するか
テスト ケースとテスト シナリオの説明: 明確な定義、並べて表、シナリオからケースへの 1 つのパスワード リセット機能、テンプレート、およびそれぞれをいつ使用するか。
記事を読む →データベースとSQLSQL クエリの最適化: 実行プランを読み取り、タイミングを考慮して遅いクエリを修正
SQL クエリの最適化は 100 万行でテストされています。実行プランの読み取り、適切なインデックスの追加、検索対象外のフィルターの修正、複合インデックスとキーセットのページネーションの使用。
記事を読む →データベースとSQLSQL UNION と UNION ALL: 違い、例、テストされたパフォーマンス
SQL UNION と UNION ALL について、実行したクエリで説明しました。重複、両方に従うルール、実際のデータのバグ、測定されたパフォーマンス、INTERSECT と EXCEPT、およびそれぞれをいつ使用するかについて説明します。
記事を読む →ソフトウェア開発JavaScript Fetch API チュートリアル: GET、POST、エラー処理、タイムアウト
ローカル サーバーに対してテストされた JavaScript Fetch API チュートリアル: GET と POST、404 がスローされない理由、再利用可能なヘルパー、クエリ文字列、タイムアウト、CORS、およびよくある間違い。
記事を読む →ソフトウェア開発Python ファイル処理: 読み取り、書き込み、CSV、JSON、パスライブラリと例
Python のファイル処理について、実行したコードで説明します。オープン モード、大きいファイルの読み取り、CSV、JSON、パスライブラリ、バイナリ ファイル、安全な書き込み、エラー処理、およびよくある間違いについて説明します。
記事を読む →ソフトウェア開発Python のクラスとオブジェクト: 実際の例を含む OOP チュートリアル
Python のクラスとオブジェクトについて、実行したコードとともに説明します: __init__、メソッド、クラスとインスタンスの属性、継承、プロパティ、ダンダー メソッド、データクラス、およびよくある間違い。
記事を読む →人工知能大規模言語モデルとは何ですか? LLM の仕組みを誇大広告なしで説明
大規模言語モデルとは何ですか? LLM は、トークン、エンベディング、アテンション、トレーニング、温度およびコンテキスト ウィンドウ、小さな次の単語のデモ、実際の制限など、平易な言葉で説明されています。
記事を読む →DevOps初心者のための Linux コマンド: 例を含む基本ターミナル ガイド
初心者向けの Linux コマンド。ナビゲーション、ファイル、ログの表示、grep、パイプ、権限、プロセス、アーカイブなどのタスク別にグループ化されており、実用的なログ分析の例も含まれています。
記事を読む →テスト自動化Selenium と Playwright: 主な違い、コードの比較、どちらを選択するか
Selenium と Playwright の比較: アーキテクチャ、待機、ブラウザと言語のサポート、デバッグ、両方のツールでの同じテスト、移行のアドバイスと選択方法。
記事を読む →ソフトウェアテスト等価性分割: テスト設計手法を実際の例で説明
等価性パーティション化について説明しました。有効なパーティションと無効なパーティションを見つける方法、年齢、パスワード、クーポンに関する実際の例、実行したテスト、境界と組み合わせる理由。
記事を読む →ソフトウェアテストソフトウェアテストにおける重大度と優先度: 相違点、マトリックス、および実際の例
ソフトウェア テストにおける重大度と優先度について説明します。明確な定義、例を含む 4 方向のマトリックス、レベル スケール、それぞれの設定者、バグ トリアージの実行方法。
記事を読む →データベースとSQLSQL サブクエリのチュートリアル: 型、相関サブクエリ、および EXISTS と例
実行したクエリを含む SQL サブクエリのチュートリアル: スカラー、IN、FROM、SELECT サブクエリ、相関サブクエリ、EXISTS、NOT IN NULL トラップ、サブクエリ対 JOIN 対 CTE。
記事を読む →データベースとSQLSQL トランザクションと ACID の説明: COMMIT、ROLLBACK、分離レベル
SQL トランザクションと ACID について、実行した銀行振込で説明しました。COMMIT、ROLLBACK、セーブポイント、ロック、分離レベル、ダーティ リード、デッドロック、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発Git mergeとrebaseの違い:例と使い分け
Git mergeとrebaseの違いを、実際のログ出力、比較表、rebaseの黄金律、安全なチームワークフローで解説します。
記事を読む →ソフトウェア開発Pythonのリスト内包表記:構文・例・使うべきでない場面
Pythonのリスト内包表記を解説:構文、フィルタ、if-else、ネストしたループ、実測した処理時間、そして通常のforループの方が良い場面。
記事を読む →データベースとSQLSQL JOINを例で解説(Inner・Left・Right・Full)
サンプルのテーブルとクエリでSQL JOINを順に解説。INNER、LEFT、RIGHT、FULL、CROSS、SELFに加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →