smithery/sk8metalme

php-dev

PHP開発支援(Slim/PDO/Composer)。 PSR-12、PHPStan、PDOでセキュアPHP開発をガイド。

Installation

$ npx skills add smithery/sk8metalme --skill php-dev

Also in this package

Other skills from smithery/sk8metalme · top by installs.

npx skills add smithery/sk8metalme

Browse all from smithery/sk8metalme

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsRead, Grep, Glob, Bash

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,510 B
  • docs SUMMARY.md 119 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

PHP開発固有設定

このファイルはPHP開発に特化した設定を定義します。

公式ドキュメントリファレンス

最新の安定版バージョンは以下の公式ドキュメントを参照してください:

技術 公式ドキュメント 用途
PHP PHP Downloads バージョン確認・ダウンロード
PHP Supported Versions PHP Supported Versions サポート状況確認
Slim Framework Slim Framework 公式サイト
Slim (Packagist) slim/slim 最新版・リリース履歴
PHPUnit phpunit/phpunit 最新版・リリース履歴
PHPStan phpstan/phpstan 最新版・リリース履歴
Monolog monolog/monolog 最新版・リリース履歴

PHP開発固有のルール

バージョン要件

最新の安定版バージョンは上記の公式ドキュメントリファレンスで確認してください。

- 参考: PHP 8.3以降を推奨(2025年12月時点)

  • strict_types宣言を必須とする
  • 型ヒントと戻り値の型を使用
  • null合体演算子を活用

コーディング標準

  • PSR-12コーディング標準に準拠する
  • 意味のある変数名を使用する
  • 関数は単一責任原則に従う
  • 適切なエラーハンドリングを実装する

フレームワーク・ツール

  • Slim Framework 4.x(軽量API開発)
  • Symfony 6.x(フルフレームワークが必要な場合)
  • 素のPHP + Composerパッケージ
  • PDOでデータベース抽象化(MySQL/Oracle対応)
  • Monologでロギング実装
  • PHPUnit + Phakeでテスト

プロジェクト構成

src/
├── Controllers/      # コントローラー
├── Models/          # データモデル
├── Services/        # ビジネスロジック
├── Helpers/         # ヘルパー関数
└── Config/          # 設定
public/              # 公開ディレクトリ
├── index.php        # エントリーポイント
├── css/
├── js/
└── images/
vendor/              # Composerパッケージ
tests/               # テストコード
composer.json        # 依存関係定義
phpunit.xml          # PHPUnit設定

composer.json例

{
    "name": "company/project",
    "description": "PHP Application",
    "type": "project",
    "require": {
        "php": "^8.3",
        "monolog/monolog": "^3.0",
        "slim/slim": "^4.0",
        "slim/psr7": "^1.0",
        "ext-pdo": "*",
        "ext-pdo_mysql": "*",
        "ext-pdo_oci": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "^11.0",
        "phake/phake": "^4.0",
        "phpstan/phpstan": "^2.0",
        "squizlabs/php_codesniffer": "^3.0",
        "friendsofphp/php-cs-fixer": "^3.0"
    },
    "comment": "最新版は公式ドキュメントリファレンスのPackagistリンクで確認してください(参考値: 2025年12月時点)",
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    }
}

データベース対応

  • MySQL 8.0
  • Oracle Database 19c/21c
  • プリペアドステートメント必須
  • PDOベースの抽象化層

データベース接続例

// config/database.php
return [
    'mysql' => [
        'dsn' => 'mysql:host=localhost;dbname=app;charset=utf8mb4',
        'username' => 'root',
        'password' => 'password',
        'options' => [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false,
        ]
    ],
    'oracle' => [
        'dsn' => 'oci:dbname=//localhost:1521/ORCL;charset=AL32UTF8',
        'username' => 'app_user',
        'password' => 'password',
        'options' => [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]
    ]
];

ロギング(Monolog)

use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;

class LoggerFactory
{
    public static function create(string $name = 'app'): Logger
    {
        $logger = new Logger($name);

        // 日別ローテーション
        $handler = new RotatingFileHandler(
            __DIR__ . '/logs/app.log',
            30,  // 30日間保持
            Logger::INFO
        );

        $formatter = new LineFormatter(
            "[%datetime%] %channel%.%level_name%: %message% %context%\n",
            'Y-m-d H:i:s'
        );
        $handler->setFormatter($formatter);
        $logger->pushHandler($handler);

        return $logger;
    }
}

セキュリティ実装

グローバルセキュリティポリシーを参照してください。

PHP追加セキュリティ設定

  • すべての入力を検証・フィルタリング
  • プリペアドステートメント使用
  • XSS対策の実装
  • CSRFトークンの実装
  • 適切なパスワードハッシュを使用
// セキュリティ例
// 入力検証
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

// CSRFトークン生成
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// パスワードハッシュ化
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

テスト要件

  • PHPUnit + Phake
  • カバレッジ95%以上
  • 統合テストの実装
  • テスト用DBはSQLite(:memory:)を使用
use PHPUnit\Framework\TestCase;
use Phake;

class UserServiceTest extends TestCase
{
    private $userRepository;
    private $logger;
    private $userService;

    protected function setUp(): void
    {
        $this->userRepository = Phake::mock(UserRepository::class);
        $this->logger = Phake::mock(\Monolog\Logger::class);

        $this->userService = new UserService(
            $this->userRepository,
            $this->logger
        );
    }

    public function testCreateUser(): void
    {
        // テスト実装
        Phake::when($this->userRepository)->create($userData)
            ->thenReturn(['id' => 1] + $userData);

        $user = $this->userService->create($userData);

        Phake::verify($this->userRepository)->create($userData);
        Phake::verify($this->logger)->info('User created', Phake::anyParameters());
    }
}

パフォーマンス

  • OPcache有効化
  • ファイルベースキャッシュ実装
  • 大量データ処理時のメモリ管理
  • N+1問題の回避

よく使うコマンド

# Composer
composer install
composer require phake/phake --dev
composer require monolog/monolog

# テスト
./vendor/bin/phpunit
./vendor/bin/phpunit --coverage-html coverage
./vendor/bin/phpstan analyse

# コード整形
./vendor/bin/php-cs-fixer fix
./vendor/bin/phpcs --standard=PSR12 src/