Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS

16,358 views

Published on

PHPカンファレンス2015の発表資料です。

Published in: Software

Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS

  1. 1. モダンなアーキテクチャのPHPベース OSS CMS デジタルサーカス(株)長谷川智希
  2. 2. #phpcon2015_6
  3. 3. #phpcon2015_6
  4. 4. 長谷川智希 とも き @tomzoh
 とむぞう 趣味 Webサイト開発, iOSアプリ開発 レンタルカートレース, ビール, 電子工作 (mbed), … TOMZOH デジタルサーカス㈱ 副団長CTO Facebook CakePHP iOS
  5. 5. デジタルサーカス(株) ・ Webサイト開発 ・ スマホアプリ開発 ・ 自社サービス ( ) (iOS, Android) (http://appbuilder.jp) Twitter: @tomzoh
  6. 6. Twitter: @tomzoh
  7. 7. Twitter: @tomzoh
  8. 8. モダンなアーキテクチャのPHPベース OSS CMS
  9. 9. オープンソースとは、ソフトウェアの設計図にあたるソースコード を、インターネットなどを通じて無償で公開し、誰でもそのソフト ウェアの改良、再配布が⾏えるようにすること。また、そのような ソフトウェア。 OSS 出展: http://e-words.jp
  10. 10. CMSとは、Webコンテンツを構成するテキストや画像、レイアウ ト情報などを⼀元的に保存・管理し、サイトを構築したり編集 したりするソフトウェアのこと。広義には、(Webサイトに限らず) デジタルコンテンツの管理を⾏うシステムの総称。 CMS 出展: http://e-words.jp
  11. 11. って?
  12. 12. Come for the software, stay for the community Drupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.
  13. 13. ?
  14. 14. today
  15. 15. 増えてた…
  16. 16. の概要
  17. 17. Drupal8の機能 ユーザ管理 コンテンツ管理 検索 テーマ 多⾔語 モバイルファースト ɔ拡張性 コメント フォーム RSS などなど
  18. 18. Drupal8の特徴 https://www.drupal.com/product/web-content-management
  19. 19. Drupal8の特徴 https://www.drupal.com/product/web-content-management
  20. 20. Drupal8の特徴 https://www.drupal.com/product/web-content-management
  21. 21. コンテンツタイプ コンテンツ コメントタイプ コメント ボキャブラリー ターム ビュー
  22. 22. コンテンツタイプ コンテンツのフォーマットを定義できる
  23. 23. コンテンツタイプ コンテンツのフォーマットを定義できる
  24. 24. フィールド
  25. 25. フィールド
  26. 26. コンテンツタイプ
  27. 27. コンテンツ
  28. 28. コンテンツ
  29. 29. コンテンツタイプ コンテンツ コメントタイプ コメント ボキャブラリー ターム ビュー
  30. 30. ボキャブラリー ターム • 一般的なCMSでのカテゴリやタグ • コンテンツタイプのフィールドとして使える。 • 択一 / 複数選択 • 選択UI(テキスト入力 / ドロップダウン) • 択一にすればカテゴリ的に、複数選択にすれば タグ的に使える。
  31. 31. コンテンツタイプ コンテンツ コメントタイプ コメント ボキャブラリー ターム ビュー
  32. 32. コンテンツタイプ コンテンツ コメントタイプ コメント ボキャブラリー ターム ビュー
  33. 33. ビュー コンテンツの出⼒⽅法を定義できる
  34. 34. ビュー コンテンツの出⼒⽅法を定義できる
  35. 35. ビュー コンテンツの出⼒⽅法を定義できる
  36. 36. ビュー コンテンツの出⼒⽅法を定義できる
  37. 37. ビュー コンテンツの出⼒⽅法を定義できる
  38. 38. ビュー コンテンツの出⼒⽅法を定義できる
  39. 39. ビュー
  40. 40. Drupal8の拡張性 • モジュール … Drupalの機能をカスタマイズする • drupal.orgで集中管理されている。 • 17,712 Modules match your search 😍 • テーマ … Drupalの外観をカスタマイズする • drupal.orgで管理されている。 • drupal.org外にも沢山ある。 • ディストリビューション … モジュールとテーマのパッケージ • EC用, SNS用など、モジュールとテーマをパッケージしたもの
  41. 41. EC コーポレートサイト コミュニティサイト ⼈材マッチングサイト グループウェア ネットニュース 政府・公共機関
  42. 42. の アーキテクチャ
  43. 43. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。
  44. 44. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。
  45. 45. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。 なぜ外部のライブラリを 使える様になったのか
  46. 46. PSR-4
  47. 47. PSR-4
  48. 48. PSR-4
  49. 49. PSR-4
  50. 50. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。
  51. 51. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。
  52. 52. PHPフレームワーク • モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。 Symfony1, CakePHP2, Mojavi, Ethna … • フレームワークの一部の機能だけを使う、ということが難しかった。 • マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせ たプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter … • すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。
  53. 53. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  54. 54. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  55. 55. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  56. 56. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  57. 57. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  58. 58. が使う外部ライブラリ { "name": "drupal/core", "description": "Drupal is an open source content management platform powering millions of websites and applications.", "type": "drupal-core", "license": "GPL-2.0+", "require": { "php": ">=5.5.9", "symfony/class-loader": "2.7.*", "symfony/console": "2.7.*", "symfony/css-selector": "2.7.*", "symfony/dependency-injection": "2.7.*", "symfony/event-dispatcher": "2.7.*", "symfony/http-foundation": "2.7.*", "symfony/http-kernel": "2.7.*", "symfony/routing": "2.7.*", "symfony/serializer": "2.7.*", "symfony/translation": "2.7.*", "symfony/validator": "2.7.*", "symfony/process": "2.7.*", "symfony/yaml": “2.7.*", "twig/twig": "1.20.*", "doctrine/common": "~2.4.2", "doctrine/annotations": "1.2.*", "guzzlehttp/guzzle": “dev-master#1879fbe8… "symfony-cmf/routing": "1.3.*", "easyrdf/easyrdf": "0.9.*", "phpunit/phpunit": "4.6.*", "zendframework/zend-feed": "2.4.*", "mikey179/vfsStream": "~1.2", "stack/builder": "1.0.*", "egulias/email-validator": "1.2.*", "behat/mink": "~1.6", "behat/mink-goutte-driver": “dev-master#c… "fabpot/goutte": "~3.1", "masterminds/html5": "~2.1", "symfony/psr-http-message-bridge": "v0.2", "zendframework/zend-diactoros": "1.1.0" },
  59. 59. モダンなアーキテクチャのPHPベース OSS CMS
  60. 60. • Drupal7 • PHP5.2.4 • Drupal8 • PHP5.5.9 Drupalが要求するPHP
  61. 61. • Drupal7 • PHP5.2.4 • Drupal8 • PHP5.5.9 Drupalが要求するPHP PHP 5.3.0 PHP 5.4.0 名前空間クロージャ トレイトarray() → []
  62. 62. モダンなアーキテクチャのPHPベース OSS CMS
  63. 63. ありがとうございました @tomzoh デジタルサーカス(株) Drupalエンジニア 絶賛 募集中!
  64. 64. ありがとうございました @tomzoh デジタルサーカス(株) Drupalエンジニア 絶賛 募集中! 懇親会出ます。声かけてください!
  65. 65. の モジュール開発 おまけ1
  66. 66. のモジュール構成
  67. 67. のモジュール構成 モジュール単位で名前空間を定義。
  68. 68. のモジュール構成 モジュール内でMVC モジュール単位で名前空間を定義。
  69. 69. のモジュール構成 ymlの設定で出来ることも多い。 モジュール内でMVC モジュール単位で名前空間を定義。
  70. 70. のアプリケーション開発 • モジュール開発 • 層の厚いフレームワークを使っているイメージ。 • iOS/Android開発の感覚とも近い。 • 初期の学習コストは高いが習得すると速い。
  71. 71. の コーディング規約 おまけ2

×