シンプル・高速・便利なPHP Extension スケルトンプロジェクト
Pskelは、PHP拡張機能の開発を迅速かつ効率的に行うためのスケルトンプロジェクトです。
開発環境のセットアップから継続的インテグレーションまで、包括的なツールセットを提供します。
- Development ContainersとVisual Studio Codeの活用
- 必要な拡張機能の自動インストール
- C/C++開発環境の簡易構成
- Valgrind と LLVM Sanitizer のサポート
- docker compose による外部サービスの統合
- 多様なPHPビルド (NTS, ZTS, DEBUG 等) でのテスト
pskel
コマンドによる簡単なタスク実行
- 通常テスト (NTS, ZTS)
- メモリリークチェック
- LLVM Sanitizer による検査
- コードカバレッジ分析
- Windows 環境でのテスト
- GitHub Codespacesのサポート
- ブラウザのみで開発可能
- Visual Studio Code をインストール
- Docker / Docker Compose 互換ランタイムをインストール
zeriyoshi/pskel
をテンプレートとしてリポジトリを作成- ローカルにクローンして VSCode で開き、開発コンテナーで起動
zeriyoshi/pskel
をテンプレートとしてリポジトリを作成- WebUI 上の
<> Code
->Codespaces
から新規 Codespace を作成
開発環境起動後、ターミナルで以下のコマンドを実行します。
$ pskel init <YOUR_EXTENSION_NAME>
これにより、 /ext
ディレクトリに拡張機能の雛形が作成されます。
ext_skel.php
で利用可能な追加オプションもサポートしています。
pskel
コマンドを使用した便利なテスト環境を提供しています:
$ pskel test # 通常のPHPによるテスト
$ pskel test debug # デバッグビルドPHPでのテスト
$ pskel test gcov # GCC Gcovによるコードカバレッジ生成
$ pskel test valgrind # Valgrindによるメモリチェック
$ pskel test msan # LLVM MemorySanitizerによるチェック
$ pskel test asan # LLVM AddressSanitizerによるチェック
$ pskel test ubsan # LLVM UndefinedBehaviorSanitizerによるチェック
compose.yaml
を編集することで、開発環境に外部サービスを統合できます。
MySQL のサンプル設定が compose.yaml
にコメントアウトされた状態で含まれています。
Windows上でのテストも、 GitHub Actions を通じて実行可能です。
.github/workflows/ci.yaml
に Windows CI 用のサンプル設定がコメントアウトされています。
pskel
コマンドで lcov を利用したカバレッジの確認を行うことができます。
$ pskel coverage
~~~
Reading tracefile /workspaces/pskel/ext/lcov.info
|Lines |Functions |Branches
Filename |Rate Num|Rate Num|Rate Num
==================================================
[/workspaces/pskel/ext/]
bongo.c |75.0% 20|80.0% 5| - 0
==================================================
Total:|75.0% 20|80.0% 5| - 0
octocov を用いて GitHub Actions でカバレッジ情報を確認することができます。
Pull Request を作成すると自動的に octocov によるカバレッジがコメントされます。
A: はい。すべての開発ツールがプリインストールされています。例えば gdb を使用する場合:
$ gdb --args <php_binary> -dextension=./modules/your_extension_name.so example.php
A: 推奨はしませんが、 Development Containers 対応のエディタであれば使用可能です。
A: GitHub 上または X (旧Twitter) でお気軽にお問い合わせください。
PHP License 3.01