# 自己紹介
● 名前
○ 足立智広
● 所属
○ 株式会社ロックオン
● お仕事
○ EC-CUBE3の開発をしてます
● Facebook
○ https://www.facebook.com/chihiro.adachi.3
● GitHub
○ @chihiro-adachi
# 目次
● EC-CUBE3.0のリリース後の振り返り
● 次期バージョン3.0.9について
● 今後の注目
● 開発・コミュニティに参加するには
# ここ半年のリリースを振り返る
# ここ半年のリリースを振り返る
● 2015-07-01 3.0.0 正式版リリース
○ 2系から内部構造を見直し
○ Silex(WebAppフレームワーク)
○ DoctrineOrm(O/Rマッパー)
○ Symfonyコンポーネント(ライブラリ)
○ PSR(コーディング規約)
○ bootstrap, レスポンシブWebデザイン
○ Travis/Appvayor(CI環境)
○ ...etc モダンPHPなプロダクトに進化
# ここ半年のリリースを振り返る
● 2015-07-08 3.0.1 リリース
○ プラグイン拡張機構改善
○ バグFix
● 2015-07-29 3.0.2 リリース
○ CSV入出力機能追加
■ 受注CSVは明細単位での出力に対応
○ バグFix
● 2015-08-19 3.0.3 リリース
○ プラグインのオーナーズストア接続対応
# ここ半年のリリースを振り返る
● 2015-10-09 3.0.4 リリース
○ セキュリティFix
● 2015-10-28 3.0.5 リリース
○ 複数配送機能
○ 多くのバグFix
● 2015-11-17 3.0.6 リリース
○ お気に入り機能
○ 再注文機能
○ バグFix
# ここ半年のリリースを振り返る
● 2015-12-08 3.0.7 リリース
○ 権限管理
○ マスタデータ管理
○ ログ管理
● 2015-12-22 3.0.8 リリース
○ twigキャッシュ削除機能
# ここ半年のリリースを振り返る
● 3.0.0リリース後、半年で合計8回のバージョンアップ
● 以下の課題に対応するため
○ 品質面の安定化
○ 2系と同等レベルの機能搭載
● 構築事例の申請や、開発コミュニティの投稿も増え、
実際にご利用いただけるようになってきました
# Issue対応数の推移
3.0.5
3.0.5で、100件超のissueを対応。ク
リティカルな不具合は減少傾向。
# テストケース数の推移
ユニットテストのテストケース数は
300→1000弱と大幅に向上。現在も
継続的に作成しています。
# テストカバレッジ
テストカバレッジも、 20%→60%と大
幅に向上しました。
# 品質面の担保について
● Travis-CI, AppVayor
○ Pull Requestごとにテストが自動実行されます
○ テストにパスしないコードは取り込まれません
● テストの実行環境
○ PHP5.3~PHP5.6+PostgreSQL/MySQL
○ 上記のマトリクスで実行されます
○ Windows環境でも実行してます
○ 最近はSQLiteでも動くようになりました
# テスト書いてくれた人(ありがとうございます
# 次期バージョン3.0.9について
# 次期バージョン3.0.9について
● プラグインの拡張性向上
# 現状の課題
● フックポイントの粒度が大きく競合しやすい
● フックポイントの実行順序が直感的でない
● テンプレートへの介入がしづらい
● 例外・ログ出力等のエラーハンドリングが不足
● 以下のIssueにまとめています
○ https://github.com/EC-CUBE/ec-
cube/issues/1381
# 現状のフックポイントの実行タイミング
Responseオブ
ジェクトの生成
# 現状のフックポイントの実行タイミング
html/index.php
$app = new Application()
$app->run()
以降の内部的な動き
Requestオブ
ジェクトの生成
ルーティングの
解決
Controllerオブ
ジェクトの生成
Controllerの実
行
Responseオブ
ジェクトの生成
# 現状のフックポイントの実行タイミング
html/index.php
$app = new Application()
$app->run()
以降の内部的な動き
Requestオブ
ジェクトの生成
ルーティングの
解決
Controllerオブ
ジェクトの生成
Controllerの実
行
Responseオブ
ジェクトの生成
before
after/render
# 共通フックポイント
● Symfony2 eventべースのフックポイントを新設
○ http://symfony.
com/doc/current/components/http_kernel/introd
uction.html
○ 例外発生時やアプリケーション終了時の介入も可
能に
● 既存のフックポイントは維持(互換性維持のため)
● 管理画面/フロント画面/ルーティングの単位で定義
# 共通フックポイントの実行タイミング
index.php
$app = new Application()
$app->run()
以降の内部的な動き
Requestオブ
ジェクトの生成
ルーティングの
解決
Controllerオブ
ジェクトの生成
Controllerの実
行
Responseオブ
ジェクトの生成
Request
Response
Controller
Exception
Terminate
# フックポイント一覧(抜粋
● 全体・フロント・管理画面・ルーティング単位で定義しています
● https://github.com/EC-CUBE/ec-cube/issues/1410
画面種別 フックポイント名 Symfony2 event名 実行タイミング
フロント eccube.event.front.request KernelEvents::REQUEST リクエスト生成時。既存の
Beforeフックポイントに相
当。
フロント eccube.event.front.controller KernelEvents::
CONTROLLER
コントローラ実行前。
フロント eccube.event.front.response KernelEvents::
RESPONSE
レスポンス生成時。既存の
After/Renderフックポイント
に相当。
フロント eccube.event.front.exception KernelEvents::
EXCEPTION
例外発生時。
フロント eccube.event.front.terminate KernelEvents::
TERMINATE
アプリケーション終了時。既
存のFinishフックポイントに
相当。
# 個別フックポイント
● コントローラ内でのフックポイントを新設
○ フォーム初期化後
○ データ登録処理完了後
○ テンプレートのレンダリングタイミング
● フォームのエラー制御や、エンティティのID取得が出
来なかった問題に対応
● 細かい粒度で介入できるため、競合しにくい
● Symfony2-FOSUserBundleの実装や、wordpress
のアクションフック・フィルターフックを参考にしてます
# 個別フックポイントの実行タイミング
index.php
$app = new Application()
$app->run()
以降の内部的な動き
Requestオブ
ジェクトの生成
ルーティングの
解決
Controllerオブ
ジェクトの生成
Controllerの実
行
Responseオブ
ジェクトの生成
Controller内部でのフックポイント
- フォーム初期化後
- 登録処理完了後
- テンプレートのレンダリング
# 1. フォーム初期化後フックポイント
● フォーム初期化後に実行されるフックポイント
● 入力項目の追加を行う
○ 追加した項目は自動で出力される
○ renderイベントでの差し込みは不要になります
# コードイメージ(本体側)
# コードイメージ(プラグイン側)
# 2.登録処理完了後フックポイント
● コントローラの登録処理完了後のイベント
● プラグインで定義したエンティティのデータ登録等を
行う
○ 本体側のエンティティが取得できる
○ 関連したエンティティのデータ登録が可能に
# コードイメージ(本体側)
# コードイメージ(プラグイン側)
# 個別フックポイント
● コントローラ内にフックポイントが定義されている
○ 実行される箇所がわかりやすい
○ どんな引数が渡ってくるかもわかる
● プラグインのコードも完結になる
○ renderフックポイントで差し込みする必要がない
○ バリデーションも定義だけでよい
● フックポイントは全コントローラに追加予定
○ 複雑な画面は、フックポイントが複数されるかも
○ 検索画面は、引数としてqueryBuilderを渡す
# その他の情報
● フックポイント互換性について
○ 既存のものはそのまま動作します
● TwigのID対応
○ BEMベースの規約策定
○ 全テンプレートに埋め込み
○ jQueryやCrowrerでの操作が容易に
# その他の情報
● 開発者向けツール
○ コンソールコマンド
■ プラグインのinstallがコマンドベースで可能に
○ SQLite対応
■ データベースを用意しなくても動かせる
● プラグインの例外・ログ出力を強化
● リリース時期
○ 2016/2中旬を予定しています
# 今後の注目
# 今後の注目
● 結合試験/受入試験の自動化
● API開発スタート
# 結合試験/受入試験の自動化
● Travis-CI/Appvayorの課題
○ プログラムの関数レベルでのテストを自動実行
○ 低いレイヤでの動作を担保
○ 画面上での動作までは確認できない
● codeception + PhantomJS
○ seleniumみなたいなもの
○ webブラウザの動作を再現
○ 高いレイヤでの動作を担保
# 結合試験/受入試験の自動化
● テストコードは書きやすいのでメンテナンスも容易
○ htmlの要素指定が結構ざっくりでかける
# 結合試験/受入試験の自動化
● EC-CUBEの試験項目書のシナリオを自動実行
○ https://github.com/EC-CUBE/eccube3-doc
○ EC-CUBEリリース前に実施してます(人力
○ UTで見つけにくい不具合も検知できる
● レポジトリ
○ https://github.com/EC-CUBE/eccube-
codeception
○ EC-CUBEリリース前に実施していきます(自動化
○ 2人/日→数時間へテスト工数削減
# 案件への活用
● 案件でもテスト自動化を活用できる
○ 試験コード、だいぶ全体をカバーできるようになっ
てきてます
○ 機能カスタマイズしたらテストも修正
○ 開発中
■ Travis-CIでの自動テスト
○ 納品前
■ codecepitonでの自動テスト
● 本来集中すべきミッションに専念できる
# 作ってくれた人(ありがとうございます
# API開発スタート
# API開発スタート
● 機能要件
○ I/F策定
■ ユースケースの洗い出し
■ 概念モデル精査
● 技術検証
○ 認証・認可の技術検証
■ OAuth2, OpenID Connect
○ rest api実装方法の検討
■ Symfony2バンドル調査
■ 実装方法検討
# API開発スタート
● 機能要件
○ I/F策定
■ ユースケースの洗い出し
■ 概念モデル精査
● 技術検証
○ 認証・認可の技術検証
■ OAuth2, OpenID Connect
○ rest api実装方法の検討
■ Symfony2バンドル調査
■ 実装方法検討
# API開発スタート
● ユースケースの洗い出し
○ こんなAPIがほしい
○ このシステム・サービスと連携したい
○ ...etc 業務にマッチするものを作りたいです
○ ぜひご要望をきかせてください(パーティで
# 開発・コミュニティに参加するには
# 開発・コミュニティに参加するには
● GitHubでPull Request
○ https://github.com/EC-CUBE/ec-cube
○ Qiitaにも使い方の記事を書いてます
● ドキュメント
○ 公式ドキュメント
■ http://ec-cube.github.io
○ こちらもGitHubで管理しています
■ https://github.com/EC-CUBE/ec-cube.
github.io
○ まだまだ足りていないのでぜひご協力ください
# 開発・コミュニティに参加するには
● 東京ユーザグループ
○ https://www.facebook.
com/groups/283598911686452/
○ 1/29 勉強会やります
■ ロックオン東京オフィス
■ 満員ですごめんなさい
○ 今後も随時開催します(東京行くときは
■ 開催してくれる方も大募集です
EC-CUBEユーザカンファレンス2016

EC-CUBEユーザカンファレンス2016