貢献ガイド
Laravel Spectrumへの貢献を歓迎します!このガイドでは、プロジェクトへの貢献方法について説明します。
🤝 貢献の方法
貢献できる分野
- 🐛 バグ修正 - 既知の問題の修正
- ✨ 新機能 - 新しい機能の提案と実装
- 📚 ドキュメント - ドキュメントの改善や翻訳
- 🧪 テスト - テストカバレッジの向上
- 🎨 リファクタリング - コード品質の改善
- 🌐 翻訳 - 多言語対応
🚀 開発環境のセットアップ
1. リポジトリのフォーク
# GitHubでフォークした後
git clone https://github.com/YOUR_USERNAME/laravel-spectrum.git
cd laravel-spectrum
2. 依存関係のインストール
composer install
npm install
3. テスト環境の設定
# テスト用の.envファイルを作成
cp .env.testing.example .env.testing
# テストDBの設定(SQLiteを使用)
touch database/testing.sqlite
4. pre-commitフックの設定
# Huskyのインストール
npm run prepare
# または手動でGitフックを設定
cp .github/hooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
📝 コーディング規約
PHPコーディング規約
Laravel SpectrumはPSR-12に従います。
<?php
namespace LaravelSpectrum\Analyzers;
use Illuminate\Support\Collection;
use LaravelSpectrum\Contracts\Analyzer;
class ExampleAnalyzer implements Analyzer
{
/**
* コンストラクタの依存性注入
*/
public function __construct(
private readonly Collection $config,
private readonly LoggerInterface $logger
) {
}
/**
* 解析を実行
*
* @param mixed $target 解析対象
* @return array 解析結果
* @throws AnalysisException
*/
public function analyze($target): array
{
try {
// 実装
return $this->performAnalysis($target);
} catch (\Exception $e) {
$this->logger->error('Analysis failed', [
'target' => $target,
'error' => $e->getMessage(),
]);
throw new AnalysisException(
'Failed to analyze target',
previous: $e
);
}
}
}
コードスタイルの自動修正
# Laravel Pintを使用
composer format
# または特定のファイルのみ
vendor/bin/pint path/to/file.php
# ドライラン(変更を確認)
vendor/bin/pint --test
静的解析
# PHPStanを実行
composer analyze
# レベルを指定
vendor/bin/phpstan analyze --level=8
🧪 テストの作成
ユニットテスト
namespace LaravelSpectrum\Tests\Unit\Analyzers;
use LaravelSpectrum\Analyzers\ExampleAnalyzer;
use LaravelSpectrum\Tests\TestCase;
class ExampleAnalyzerTest extends TestCase
{
private ExampleAnalyzer $analyzer;
protected function setUp(): void
{
parent::setUp();
$this->analyzer = new ExampleAnalyzer();
}
/** @test */
public function it_analyzes_simple_case(): void
{
// Arrange
$input = ['key' => 'value'];
// Act
$result = $this->analyzer->analyze($input);
// Assert
$this->assertArrayHasKey('processed', $result);
$this->assertEquals('value', $result['processed']['key']);
}
/** @test */
public function it_throws_exception_for_invalid_input(): void
{
$this->expectException(AnalysisException::class);
$this->expectExceptionMessage('Invalid input');
$this->analyzer->analyze(null);
}
}
機能テスト
namespace LaravelSpectrum\Tests\Feature;
use LaravelSpectrum\Tests\TestCase;
class DocumentGenerationTest extends TestCase
{
/** @test */
public function it_generates_documentation_for_simple_api(): void
{
// ルートを定義
Route::get('/api/test', fn() => ['status' => 'ok']);
// コマンドを実行
$this->artisan('spectrum:generate')
->assertExitCode(0)
->assertSee('Documentation generated successfully');
// 生成されたファイルを確認
$this->assertFileExists(storage_path('app/spectrum/openapi.json'));
$openapi = json_decode(
file_get_contents(storage_path('app/spectrum/openapi.json')),
true
);
$this->assertArrayHasKey('/api/test', $openapi['paths']);
}
}
テストの実行
# すべてのテストを実行
composer test
# 特定のテストを実行
composer test -- --filter=ExampleAnalyzerTest
# カバレッジレポート付き
composer test-coverage
🔄 プルリクエストのプロセス
1. ブランチの作成
# 機能追加
git checkout -b feature/amazing-feature
# バグ修正
git checkout -b fix/issue-123
# ドキュメント
git checkout -b docs/improve-readme
2. コミットメッセージ
Conventional Commitsに従います:
# 機能追加
git commit -m "feat: add support for complex validation rule detection"
# バグ修正
git commit -m "fix: correctly detect nested array validation rules"
# ドキュメント
git commit -m "docs: add Japanese translation"
# 破壊的変更
git commit -m "feat!: change default output format to YAML
BREAKING CHANGE: The default output format has been changed from JSON to YAML."
3. プルリクエストのテンプレート
## 概要
このPRで解決する問題や追加する機能の簡潔な説明
## 変更内容
- [ ] 具体的な変更点1
- [ ] 具体的な変更点2
## テスト
- [ ] ユニットテストを追加/更新
- [ ] 機能テストを追加/更新
- [ ] 手動でテスト済み
## 関連Issue
Fixes #123
## スクリーンショット(UIの変更がある場合)
変更前と変更後のスクリーンショット
## チェックリスト
- [ ] コードスタイルガイドラインに従っている
- [ ] セルフレビュー実施済み
- [ ] ドキュメントを更新した
- [ ] 破壊的変更がない(ある場合は明記)
4. レビュープロセス
- 自動チェック - CI/CDが自動的に実行されます
- コードレビュー - メンテナーがコードをレビュー
- フィードバック - 必要に応じて修正
- マージ - 承認後にマージ
📋 コントリビューターライセンス契約(CLA)
最初の貢献時に、CLAへの同意が必要です。これは自動的に処理されます。
🏗️ プロジェクト構造
laravel-spectrum/
├── src/
│ ├── Analyzers/ # コード解析クラス
│ ├── Cache/ # キャッシュ関連
│ ├── Console/ # Artisanコマンド
│ ├── Contracts/ # インターフェース
│ ├── Events/ # イベントクラス
│ ├── Exceptions/ # 例外クラス
│ ├── Exporters/ # エクスポート機能
│ ├── Facades/ # Laravelファサード
│ ├── Formatters/ # フォーマッター
│ ├── Generators/ # ジェネレーター
│ ├── MockServer/ # モックサーバー
│ ├── Services/ # サービスクラス
│ └── Support/ # ヘルパークラス
├── tests/
│ ├── Unit/ # ユニットテスト
│ ├── Feature/ # 機能テスト
│ └── Fixtures/ # テスト用フィクスチャ
├── config/ # 設定ファイル
└── docs/ # ドキュメント
🎯 重点分野
現在、特に以下の分野での貢献を求めています:
1. パフォーマンス改善
- 大規模プロジェクトでの最適化
- メモリ使用量の削減
- 並列処理の改善
2. 新機能
- gRPC対応
- WebSocket API対応
- プラグインシステム開発
3. エコシステム
- IDE拡張機能
- CIツールとの統合
- 他フレームワークへの移植
🌐 翻訳
新しい言語の追加
resources/lang/{locale}
ディレクトリを作成- 既存の言語ファイルをコピーして翻訳
- ドキュメントの翻訳(
docs/{locale}/
)
翻訳のガイドライン
- 技術用語は無理に翻訳しない
- 読みやすさを重視
- 原文の意図を正確に伝える
📞 コミュニケーション
GitHub Issues
- バグ報告
- 機能リクエスト
- 質問
GitHub Discussions
- アイデアの議論
- RFCs(Request for Comments)
- コミュニティサポート
その他
- Twitter: @LaravelSpectrum
- Email: contribute@laravel-spectrum.dev
🏆 コントリビューター
貢献者はプロジェクトのREADME.mdに記載されます。
📄 ライセンス
貢献されたコードは、プロジェクトと同じMITライセンスでリリースされます。
ありがとうございます! あなたの貢献がLaravel Spectrumをより良いものにします。 🎉