Language: Japanese, English (Google Translation)
CHIRIMEN Drivers へのコントリビュート方法です。
コントリビューター行動規範 - Contributor Covenant
行動規範に反するコントリビュートは受け入れません。
質問、バグ、提案、その他 Issue を歓迎します。
ドキュメント追加、モジュール追加、バグ修正、その他改善するための Pull Request を歓迎します。
このリポジトリは npm workspaces と Lerna で管理される monorepo です。複数の CHIRIMEN ドライバパッケージを一つのリポジトリで管理しています。
/
├── LICENSE
├── CONTRIBUTING.md # このドキュメント
├── README.md # プロジェクトのトップページ
├── .github/workflows/ # GitHub Actions ワークフロー
│ ├── ci.yml # CI (npm ci の実行)
│ └── release.yml # リリース自動化
├── examples/ # ドキュメント用のMarkdownファイル
├── raspi-examples/ # CHIRIMEN for Raspberry Pi ブラウザ用サンプルコード
├── microbit-examples/ # CHIRIMEN with micro:bit 用サンプルコード
├── node-examples/ # Node.js 用サンプルコード
│ └── adt7410/ # 各ドライバのサンプル
│ ├── main.js
│ └── package.json
├── lerna.json # Lerna 設定ファイル
├── package.json # ルート package.json (workspaces 設定)
└── packages/ # ドライバモジュールのソースコード
├── hello-world/ # サンプルドライバ
├── adt7410/ # 温度センサー (ADT7410)
│ ├── index.js # ドライバ本体
│ ├── package.json # パッケージ設定
│ └── README.md # ドライバのドキュメント
├── amg8833/ # 赤外線アレイセンサー
└── ... # その他60個以上のドライバ
ステップ 1: GitHub でリポジトリをフォークする
ステップ 2: ローカルにクローンする
# あなたのフォークをクローン
git clone https://github.com/YOUR_USERNAME/chirimen-drivers.git
# ディレクトリに移動
cd chirimen-drivers
ステップ 3: 依存関係をインストールする
# すべてのworkspaceパッケージの依存関係をインストール
npm ci
これで開発環境の準備が完了です!
ステップ 4: オリジナルリポジトリをリモートに追加(オプション)
# 最新の変更を取得するため
git remote add upstream https://github.com/chirimen-oh/chirimen-drivers.git
# 確認
git remote -v
ドキュメントの誤字や文言の変更など軽微な修正は、GitHub 上で直接編集して Pull Request を送ることができます。
詳しくはリポジトリのファイルを編集するを参照してください。
# 新しいブランチを作成
git checkout -b fix-typo-in-readme
# ファイルを編集
# (あなたの好きなエディタで編集)
# 変更をステージング
git add README.md
# コミット
git commit -m "docs: fix typo in README"
# あなたのフォークにプッシュ
git push origin fix-typo-in-readme
# GitHubでPull Requestを作成
新しい I2C デバイスのドライバを追加する完全な手順を説明します。
このガイドでは、架空の「BME280」センサーのドライバを追加する例で説明します。
# masterブランチから最新の状態で新しいブランチを作成
git checkout master
git pull upstream master # upstreamを追加している場合
git checkout -b add-bme280-driver
# packagesディレクトリ内に新しいドライバ用のディレクトリを作成
mkdir packages/bme280
cd packages/bme280
命名規則: デバイスの型番を小文字にしたもの(例: adt7410, bme280, mpu6050)
packages/bme280/package.json を以下の内容で作成します:
{
"name": "@chirimen/bme280",
"description": "CHIRIMEN driver for BME280 temperature, humidity and pressure sensor",
"version": "1.0.0",
"license": "MIT",
"type": "module",
"exports": "./index.js",
"repository": {
"type": "git",
"url": "https://github.com/chirimen-oh/chirimen-drivers.git",
"directory": "packages/bme280"
},
"keywords": [
"CHIRIMEN",
"IoT",
"I2C",
"sensor",
"BME280",
"temperature",
"humidity",
"pressure"
],
"publishConfig": {
"access": "public"
},
"peerDependencies": {
"node-web-i2c": "^1.1.51"
}
}
重要なフィールド:
name: 必ず @chirimen/ で始めるdescription: センサーの機能を簡潔に説明version: 初版は 1.0.0 から開始type: "module" を指定(ES Modules を使用)exports: エントリーポイント(通常は "./index.js")repository.directory: パッケージのパスpeerDependencies: node-web-i2c を指定(I2C 通信に必要)packages/bme280/index.js を作成します。実際の実装例は packages/adt7410/index.js を参考にしてください。
基本的な構造:
// @ts-check
class BME280 {
constructor(i2cPort, slaveAddress = 0x76) {
this.i2cPort = i2cPort;
this.i2cSlave = null;
this.slaveAddress = slaveAddress;
}
async init() {
this.i2cSlave = await this.i2cPort.open(this.slaveAddress);
// センサーの初期化処理をここに記述
}
async read() {
if (this.i2cSlave == null) {
throw new Error("i2cSlave is not initialized. Call init() first.");
}
// データ読み取り処理をここに記述
return { temperature: 0, humidity: 0, pressure: 0 };
}
}
export default BME280;
実装のポイント:
packages/bme280/README.md を作成します。packages/adt7410/README.md を参考に、以下の内容を含めます:
node-examples/bme280/ ディレクトリにサンプルコードを追加します:
mkdir -p node-examples/bme280
node-examples/bme280/package.json:
{
"name": "bme280-example",
"private": true,
"type": "module",
"dependencies": {
"@chirimen/bme280": "*",
"node-web-i2c": "^1.1.51"
}
}
node-examples/bme280/main.js:
import { requestI2CAccess } from "node-web-i2c";
import BME280 from "@chirimen/bme280";
async function main() {
const i2cAccess = await requestI2CAccess();
const port = i2cAccess.ports.get(1);
const bme280 = new BME280(port, 0x76);
await bme280.init();
while (true) {
const data = await bme280.read();
console.log(`Temperature: ${data.temperature.toFixed(2)}℃`);
await sleep(1000);
}
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
main().catch(console.error);
# ルートディレクトリに戻る
cd /path/to/chirimen-drivers
# Prettierでフォーマット
npx prettier --write packages/bme280/
npx prettier --write node-examples/bme280/
実際のハードウェアがある場合は動作確認を行います:(optional)
cd node-examples/bme280
npm install
node main.js
package-lock.jsonを更新します:
# ルートディレクトリに戻る
cd /path/to/chirimen-drivers
# npm installする
npm install
# すべての変更をステージング
git add packages/bme280/
git add node-examples/bme280/
# コミット
git commit -m "feat: add BME280 sensor driver
- Add BME280 I2C driver for temperature, humidity and pressure
- Add comprehensive README with API documentation
- Add Node.js example code
- Support I2C addresses 0x76 and 0x77"
# あなたのフォークにプッシュ
git push origin add-bme280-driver
コミットメッセージの規約:
feat: - 新機能追加fix: - バグ修正docs: - ドキュメントのみの変更refactor: - リファクタリング既存のドライバにバグ修正や機能追加を行う場合の手順です。
ステップ 1: Issue を確認または作成
既存の Issue がない場合は、まず Issue を作成して問題を報告します。
ステップ 2: ブランチを作成
git checkout master
git pull upstream master
git checkout -b fix-adt7410-negative-temperature
ステップ 3: コードを修正
# ファイルを編集
vim packages/adt7410/index.js
ステップ 4: 変更をコミット
git add packages/adt7410/
git commit -m "fix(adt7410): fix negative temperature calculation
Fixes #123"
ステップ 5: バージョンを更新
packages/adt7410/package.json の version を更新:
2.0.0 → 2.0.1)ステップ 6: Push と PR 作成
git push origin fix-adt7410-negative-temperature
GitHub で Pull Request を作成します。
type: "module" を package.json に記述async/await を使用(Promise も可)プロジェクトには Prettier が設定されています:
# 自動フォーマット
npx prettier --write packages/your-driver/
現在、このプロジェクトには自動テストの仕組みはありません。
推奨される動作確認方法:
このプロジェクトは Lerna の independent モードを使用しており、各パッケージが独立したバージョン番号を持ちます。
手動で 各パッケージの package.json の version フィールドを編集します:
{
"name": "@chirimen/your-device-name",
"version": "1.0.1"
}
GitHub Actions のワークフロー (.github/workflows/release.yml) が以下を実行します:
lerna publish from-package の実行npm での確認:
https://www.npmjs.com/package/{パッケージ名}
例: https://www.npmjs.com/package/@chirimen/hello-world
A. 以下を確認してください:
package.json の name が @chirimen/ で始まっているかpublishConfig.access が "public" に設定されているかversion フィールドが正しく設定されているかA. ルートディレクトリで npm ci を実行すれば、すべての workspace パッケージの依存関係が自動的にインストールされます。
A. 通常の開発では不要です。リリースは GitHub Actions が自動的に行います。
A. 以下のドライバが参考になります:
packages/hello-world/ - 最小構成packages/adt7410/ - 温度センサーpackages/amg8833/ - 赤外線アレイセンサーA. はい、可能です。このリポジトリは主に I2C デバイスを扱っていますが、GPIO や SPI を使用するドライバも歓迎します。
A. README は日本語で記述することを推奨します。コード内のコメントやコミットメッセージは英語でも日本語でも構いません。
不明点があれば、お気軽に Issue を作成してください。