- promise は、後で利用できる結果を表すオブジェクトです。
- 履行されるか拒否されるまで保留され、一度解決されると変更されることはありません。
- 各
thenは新しい Promise を返します。これにより連鎖が可能になります。 - すべての結果が必要な場合は
Promise.allを使用し、すべての結果が必要な場合はPromise.allSettledを使用します。
ネットワークリクエスト、ファイル読み取り、タイマーはすべて後で終了しますが、JavaScript は単純に停止して待つことはできません。そうしないとページがフリーズします。 JavaScript の約束 は、「これが完了したらあれを実行し、失敗した場合は代わりにこれを実行する」というきちんとした方法を提供します。
主に async と await を記述している場合でも、その下で Promise を使用しているため、それらを理解するとデバッグがはるかに簡単になります。これらの例は Node.js 24 で実行し、示されている出力はその実行からのものです。最新のブラウザでも同様に動作します。
約束とは何ですか?
Promise は将来の値のプレースホルダーです。レストランで注文時に渡されるブザーを思い浮かべてください。あなたはまだ食べ物を持っていませんが、準備ができたこと、または問題があることを知らせてくれる何かを持っており、その間、あなたは自由に他のことをすることができます。
コードでは、非同期関数はすぐに Promise を返し、次に何が起こるかを添付します。
fetch("/api/user")
.then((response) => response.json())
.then((user) => console.log(user.name))
.catch((error) => console.log("Failed:", error.message));
3 つの約束の状態
| 州 | 意味 | 何が動くのか |
|---|---|---|
| 保留中 | 仕事はまだ終わっていない | まだ何もありません |
| 満たされた | 価値のあるもので終わりました | then ハンドラー |
| 拒否されました | 失敗には理由があった | catch ハンドラー |
履行または拒否された約束は、決済と呼ばれます。約束は一度だけ解決できます。その後、その状態と値は固定され、その後の resolve または reject の呼び出しは無視されます。
約束を作成する
通常、fetch のような API から Promise を使用しますが、Promise を作成すると、それがどのように機能するかがわかります。コンストラクターは 2 つの関数 resolve と reject を受け取ります。
function fetchUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: "Asha" });
} else {
reject(new Error("Invalid id"));
}
}, 100);
});
}
console.log(fetchUser(1));
// Promise { <pending> }
Promise をすぐに記録すると、タイマーが起動していないため、Promise がまだ保留中であることがわかります。この値には、ハンドラーまたは await を介してのみ到達できます。 Error にはデバッグに役立つスタック トレースが含まれるため、文字列ではなく常に Error オブジェクトを使用して拒否します。
それから捕まえて、そして最後に
これら 3 つのメソッドはハンドラーを Promise にアタッチします。
fetchUser(1).then((user) => console.log(user.name));
// Asha
fetchUser(-1)
.then((user) => console.log("never runs", user))
.catch((error) => console.log("caught:", error.message))
.finally(() => console.log("finally"));
// caught: Invalid id
// finally
then は成功時に実行され、catch は失敗時に実行され、finally はどちらの場合でも実行されます。そのため、finally はローディング スピナーを非表示にするなど、クリーンアップに適した場所になります。結果を気にすべきではないため、引数は受け取りません。
約束を連鎖させる
重要な考え方は、then が常に 新しい Promise を返すということです。ハンドラーが返すものはすべて、新しい Promise の値になります。
Promise.resolve(2)
.then((n) => n * 10)
.then((n) => n + 1)
.then((n) => console.log("chain:", n));
// chain: 21
ハンドラーが別の Promise を返した場合、チェーンはそれが完了するまで待ってから次に進みます。これは、ネストされたコールバックを一連のフラットなステップに変換するものです。
getUser(id)
.then((user) => getOrders(user.id))
.then((orders) => getInvoice(orders[0].id))
.then((invoice) => console.log(invoice.total))
.catch(handleError);
エラーがチェーンを介して伝わる仕組み
拒否された Promise は、catch に達するまで then ごとにスキップされます。ハンドラー内でのスローも拒否としてカウントされます。そして、catch が返されると、通常はチェーンが軌道に戻ります。
Promise.resolve("start")
.then(() => {
throw new Error("step 2 failed");
})
.then(() => console.log("skipped"))
.catch((error) => {
console.log("caught:", error.message);
return "recovered";
})
.then((value) => console.log("continues:", value));
// caught: step 2 failed
// continues: recovered
これは try と catch の非同期バージョンと考えてください。通常、最後に 1 つの catch がチェーン全体をカバーします。エラーを記録するだけでまだ失敗する場合は、catch 内から再度スローします。
ヒント: fetch はネットワーク障害の場合のみ拒否します。 404 または 500 応答でも満たされるため、response.ok を自分で確認してください。 HTTP ステータス コードのチートシートでは、各コードの意味を説明しています。
Promise.all、allSettled、race および any
これらの静的メソッドは、複数の Promise を一度に調整します。それらはすべて配列を受け取り、1 つの Promise を返します。
| 方法 | いつ満たされるか | 拒否する場合 | 用途: |
|---|---|---|---|
Promise.all |
全て満たす | 誰かが拒否する | すべての結果が必須です |
Promise.allSettled |
全て解決する | 決してしない | あなたはあらゆる結果を望んでいます |
Promise.race |
最初に決済したものが満たす | 拒否を最初に解決する人 | タイムアウト |
Promise.any |
最初のものは満たします | 全員拒否 | 最初に成功したソース |
これらをテストするために、2 つの小さなヘルパーを使用しました。1 つは遅延後に成功し、もう 1 つは遅延後に失敗します。
const wait = (ms, value) =>
new Promise((resolve) => setTimeout(() => resolve(value), ms));
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms));
Promise.all
await Promise.all([wait(300, "a"), wait(100, "b"), wait(200, "c")]);
// [ 'a', 'b', 'c' ] took about 300 ms
注目すべき 2 つの詳細。 b が最初に終了した場合でも、結果は入力順序を維持します。合計時間は約 300 ミリ秒で、3 つすべてがすでに同時に実行されていたため、合計の 600 ミリ秒ではなく、最も遅いタスクの時間でした。そのうちの 1 つが拒否すると、全体が即座に拒否されます。
await Promise.all([wait(100, "a"), fail(50, "b failed")]);
// rejected: b failed
Promise.allSettled
これはすべてを待機し、それぞれの結果を報告するため、1 つの失敗によって残りが失われることはありません。これは、各ウィジェットが個別に読み込まれるダッシュボードに適しています。
const results = await Promise.allSettled([wait(50, "a"), fail(50, "b failed")]);
results.map((r) => r.status);
// [ 'fulfilled', 'rejected' ]
Promise.race と Promise.any
await Promise.race([wait(300, "slow"), wait(100, "fast")]); // fast
await Promise.any([fail(50, "x"), wait(100, "ok")]); // ok
違いは、race は失敗しても最初に解決するのに対し、any は何かが成功する限り失敗を無視することです。 race の古典的な使用法は、遅いリクエストにタイムアウトを追加することですが、遅いタスクはキャンセルしない限りバックグラウンドで実行され続けます。
Promise と async/await
async と await は、同じ Promise を扱うためのより読みやすい方法です。 async 関数は常に Promise を返し、await は Promise が解決するまでその関数を一時停止します。
async function showInvoice(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
console.log(orders.length);
} catch (error) {
console.log("Failed:", error.message);
}
}
拒否はスローエラーになるため、通常の try と catch が機能します。 1 つの呼び出しを待ってから別の呼び出しを順番に実行するため、並列作業には Promise.all が依然として必要です。私たちの JavaScript async/await ガイド では、これについてさらに詳しく説明しています。
Promise とイベント ループ
Promise ハンドラーは、Promise がすでに解決されている場合でも、すぐには呼び出されません。これらは、現在のコードが終了した後、タイマーの前に実行されます。その証拠は次のとおりです。
setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("microtask"));
console.log("sync");
// sync
// microtask
// timeout
同期コードが最初に実行されます。次に、Promise ハンドラーを保持する microtask キュー が続きます。その後初めて、イベント ループはタイマーなどの次のタスクを選択します。これは面接でよくある質問であり、setTimeout がゼロであることが実際には即時ではない理由を説明しています。
Promise とコールバック
| 懸念 | コールバック | 約束 |
|---|---|---|
| シーケンス | 入れ子になっており、各ステップでより深くなります | フラットチェーン |
| エラー | あらゆるレベルでチェック | catch 1 つでチェーンをカバーできます |
| 並行作業 | 手動カウンター | Promise.all |
| 間違えて2回電話かかってきた? | 可能 | 二度決済はできません |
よくある間違い
-
then内に戻るのを忘れています。returnがない場合、次のステップはundefinedを受け取り、内なる約束を待ちません。 - いいえ
catchまったくありません。これにより未処理の拒否が発生し、Node.js ではデフォルトでプロセスが停止します。 - チェーンの代わりにネストする。
thenの中にthenを入れると、コールバック地獄が再現されます。約束を返して連鎖を続けます。 - Promise を
new Promiseでラップします。 関数がすでに Promise を返している場合は、それをそのまま使用します。 - 非同期コールバックで
forEachを使用します。 待機しません。 JavaScript 配列メソッド のガイドに示されているように、for...ofまたはPromise.allとmapを使用します。 - 約束はキャンセルできると考えます。それ自体はキャンセルできません。リクエストの場合は
AbortControllerを使用してください。
まとめ
Promise はいくつかのルールに帰着します。Promise は一度解決され、then は新しい Promise を返し、エラーは何かがキャッチされるまでチェーンを下っていきます。これらのルールが自然だと感じられれば、async と await は魔法ではなくなります。練習するには、Promise を使用して 1 つのコールバックベースの関数を書き直し、Promise.all で 2 つのエンドポイントをフェッチし、失敗を適切に処理します。
よくある質問
JavaScript における Promise とは何ですか?
Promise は、非同期作業の最終的な結果を表すオブジェクトです。保留状態として開始され、値を指定して満たされるか、理由を指定して拒否されます。
then と catch はどう違いますか?
then は、Promise が満たされたときに実行され、catch は拒否されたときに実行されます。 catch は実質的に拒否ハンドラーのみを使用し、前のステップでスローされたエラーもキャッチできます。
Promise.all と Promise.allSettled の違いは何ですか?
Promise.all は、1 つの Promise が拒否されるとすぐに拒否します。 Promise.allSettled は常にそれらすべてを待機し、それぞれのステータス、値、または理由を報告します。
Promise または async/await を使用する必要がありますか?
await は約束に基づいて構築されているため、これらは連携して機能します。ほとんどのコードは async/await を使用すると最適に読み取れますが、Promise.all や同様のメソッドは並列作業に引き続き役立ちます。
Promise は並行して実行されますか?
JavaScript はスレッド上で一度に 1 つのコードを実行しますが、ネットワーク要求がバックグラウンドで発生するように動作します。これらのうちのいくつかが同時に進行する可能性があります。
学び続ける
テスト、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 コマンドのチートシート: 実際に使用するコマンドと例
実際のデモ リポジトリからの出力を含む、タスク別にグループ化された Git コマンド チート シート (セットアップ、ステージング、ブランチ、リモート、スタッシュ、履歴、間違いの取り消し)。
記事を読む →ソフトウェア開発JavaScript Promise の説明: then、catch、Promise.all、およびよくある間違い
JavaScript の Promise を、実行したコードで説明します。ステート、then および catch チェーン、エラー処理、Promise.all、allSettled、race および any、イベント ループ、およびよくある間違いです。
記事を読む →ソフトウェア開発Python 辞書チュートリアル: メソッド、例、一般的なパターン
私たちが実行したコードを含む Python 辞書チュートリアル: 辞書の作成、読み取り、更新、主要なメソッド、マージ、内包表記、パターンのカウントとグループ化、およびよくある間違い。
記事を読む →人工知能RAGとは何ですか?検索拡張生成を実際の例で説明する
RAGとは何ですか?検索拡張生成について、インデックス作成、チャンク化、埋め込み、検索、実際に動作する小さな Python の例、評価、一般的な失敗など、ステップごとに説明します。
記事を読む →DevOps初心者向け Terraform チュートリアル: 最初のファイルからモジュールまでのコードとしてのインフラストラクチャ
初心者向けの Terraform チュートリアル: クラウド アカウントなしで開始し、初期化、計画、適用を学び、次に変数、出力、状態、モジュール、安全なチーム ワークフローを学びます。
記事を読む →DevOpsDocker と Kubernetes: 主な違い、連携方法、どちらが必要か
Docker と Kubernetes について説明しました。それぞれの機能、同じアプリを両方で実行すること、Docker Compose と Swarm の比較、dockershim の変更、必要なものを決定する方法などです。
記事を読む →テスト自動化初心者向けの Pytest チュートリアル: フィクスチャ、パラメータ化、実際の例
pytest 9.2 で実行したテストを含む初心者向けの pytest チュートリアル: アサーション、フィクスチャ、parametrize、conftest、マーカー、tmp_path、monkeypatch、便利なフラグ、CI。
記事を読む →ソフトウェアテストソフトウェア テスト ライフ サイクル (STLC): 6 つのフェーズ、開始基準と終了基準、例
ソフトウェア テストのライフ サイクルについては、開始基準と終了基準を含む 6 つの STLC フェーズ、成果物、実際に動作するログイン機能の例、STLC と SDLC、およびアジャイルにおける STLC について説明しました。
記事を読む →ソフトウェア開発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に加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →