ソニー ゲーミングイヤホン INZONE Buds:WF-G700N Fnatic監修 / 完全ワイヤレス / 低遅延2.4GHzワイヤレス接続 USBType-Cトランシーバー同梱 / LE Audio対応 / アクティブノイズキャンセリング / 立体音響 / 最大約24時間バッテリー / 急速充電 / マイク付き / PS5 スマホ PC Switch ホワイト
¥27,000 (2025年5月3日 13:14 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)タブレット スタンド アルミ ホルダー 角度調整可能 Lomicall stand : 卓上 縦置き スタンド タブレット 置き台 デスク台 立てる 設置 aluminium テレワーク 在宅 ワーク Zoom 会議 タブレット対応(4~13'') ミニ エア プロ ipad 10 第十世代 ipad9 第九世代 ipad Air mini Pro第六世代 S7 S8 Note 対応 - シルバー
¥1,759 (2025年5月3日 13:07 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【2025革新型・高速USB3.0対応】 CD DVDドライブ 外付け 静音 DVDプレーヤー 外付けDVDドライブ USB3.0&Type-C両接続 読取/書込可 CDプレーヤー バスパワー駆動 外付けCDドライブ 軽量 薄型 光学ドライブ 外付け CDドライブ Mac PC パソコン Windows11対応 Windows10/8/7XP 外付け CD DVD ドライブ (ホワイト)
¥1,999 (2025年5月3日 13:07 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
はじめに
Step CIのpluginを実装した際の覚書です。
Step CIでリグレッションテストを実装した際に、テストケース内で直接DBを操作する必要がありました。
しかし、Step CIではDB操作がサポートされていなかったためDB操作用のpluginを自作することにしました。
フォルダ構成(抜粋)
.
├── db-handler/
│ ├── index.js
│ └── package.json
├── stepci.js ・・・Step CIの実行ファイル
├── package.json
└── workflow.yaml
実装例
処理内容は公式ドキュメントにあるボイラープレートをベースに、要件に応じて必要なロジックを実装します。
db-handler/index.js
import * as mysql from 'mysql2/promise';
const { checkResult } = require('@stepci/runner/dist/matcher');
module.exports.default = async (input) => {
const connection = await mysql.createConnection({
host: HOST,
database: DATABASE,
user: USER,
password: PASSWORD,
});
let stepResult = {}; // Step CIが当該stepの実行結果として受け取るオブジェクト
stepResult.request = input.query;
try {
const [result] = await connection.execute(input.query);
stepResult.response = result;
// 実行結果のアサーション
if (input.check) {
stepResult.checks = {};
if (input.check.status) {
const is_success = result[input.action == 'update' ? 'changedRows' : 'affectedRows'] >= 1;
const given = is_success ? 'success' : 'failure';
stepResult.checks.status = checkResult(given, input.check.status);
}
}
return stepResult;
} catch (error) {
stepResult.response = error;
stepResult.checks = {
status: {
expected: input?.check?.status ?? null,
given: 'ERROR',
passed: false,
},
};
return stepResult;
}
};
テストケース内での使用
workflow.yaml
- name: テストデータ作成
plugin:
id: db-hundler
action: insert
query:
INSERT INTO users (name, email) VALUES ('test_user', 'test@example.com')
check:
status: inserted
ハマったポイント
実装時にハマった点としては以下の箇所です。
CommonJSで実装する
Step CI側の実装がCommonJSであり、自作したpluginをrequireで読み込んでいるのでそれに合わせてCommonJSで実装しmodule.exportsする必要があります。
db-handler/package.json
{
"name": "db-hundler",
"type": "commonjs",
"version": "1.0.0",
"main": "index.js"
}
dependencyへの追加
実装したpluginをyaml内で使用するには、ローカルパッケージとしてdb-handler
ディレクトリをプロジェクトの package.json に依存として追加しnpm install
を実行してnode_modules
に取り込む必要があります。
package.json
{
"dependencies": {
"db-hundler": "file:./db-hundler"
}
}
yamlのplugin.id
にはdependencies
に記載したキーを指定します。
おわりに
Step CIでDB操作を可能にする自作プラグインの実装方法のメモでした。
公式でサポートされていない機能でも、プラグインを活用すれば柔軟に拡張ができるので便利です。
自動テストでは、システム固有の前処理や検証が必要になる場面も少なくありません。
プラグインを積極的に活用し、より良いCI/CDの実現を目指していきたいです。
Views: 0