drupal 8 - モダンなアーキテクチャのphpベースoss cms

Post on 14-Jan-2017

15.399 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

デジタルサーカス(株)長谷川智希

#phpcon2015_6

#phpcon2015_6

!

長谷川智希とも き

@tomzohとむぞう

趣味 Webサイト開発, iOSアプリ開発

レンタルカートレース, ビール, 電子工作 (mbed), …

TOMZOH

デジタルサーカス㈱ 副団長CTO

Facebook CakePHP iOS

デジタルサーカス(株)

・Webサイト開発

・スマホアプリ開発

・自社サービス

( )

(iOS, Android)

(http://appbuilder.jp)

Twitter: @tomzoh

Twitter: @tomzoh

Twitter: @tomzoh

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

オープンソースとは、ソフトウェアの設計図にあたるソースコードを、インターネットなどを通じて無償で公開し、誰でもそのソフトウェアの改良、再配布が⾏えるようにすること。また、そのようなソフトウェア。

OSS

出展: http://e-words.jp

CMSとは、Webコンテンツを構成するテキストや画像、レイアウト情報などを⼀元的に保存・管理し、サイトを構築したり編集したりするソフトウェアのこと。広義には、(Webサイトに限らず)デジタルコンテンツの管理を⾏うシステムの総称。

CMS

出展: http://e-words.jp

って?

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.

?

today

増えてた…

の概要

Drupal8の機能

" #ユーザ管理 コンテンツ管理

$ %検索 テーマ

& '多⾔語 モバイルファースト

( )拡張性 コメント

*+ フォーム RSS などなど

Drupal8の特徴

https://www.drupal.com/product/web-content-management

Drupal8の特徴

https://www.drupal.com/product/web-content-management

Drupal8の特徴

https://www.drupal.com/product/web-content-management

コンテンツタイプ コンテンツ

コメントタイプ コメント

ボキャブラリー

ターム

ビュー

コンテンツタイプ

コンテンツのフォーマットを定義できる

コンテンツタイプ

コンテンツのフォーマットを定義できる

フィールド

フィールド

コンテンツタイプ

コンテンツ

コンテンツ

コンテンツタイプ コンテンツ

コメントタイプ コメント

ボキャブラリー

ターム

ビュー

ボキャブラリー

ターム

• 一般的なCMSでのカテゴリやタグ • コンテンツタイプのフィールドとして使える。 • 択一 / 複数選択

• 選択UI(テキスト入力 / ドロップダウン)

• 択一にすればカテゴリ的に、複数選択にすればタグ的に使える。

コンテンツタイプ コンテンツ

コメントタイプ コメント

ボキャブラリー

ターム

ビュー

コンテンツタイプ コンテンツ

コメントタイプ コメント

ボキャブラリー

ターム

ビュー

ビューコンテンツの出⼒⽅法を定義できる

ビューコンテンツの出⼒⽅法を定義できる

ビューコンテンツの出⼒⽅法を定義できる

ビューコンテンツの出⼒⽅法を定義できる

ビューコンテンツの出⼒⽅法を定義できる

ビューコンテンツの出⼒⽅法を定義できる

ビュー

Drupal8の拡張性• モジュール … Drupalの機能をカスタマイズする • drupal.orgで集中管理されている。

• “17,712 Modules match your search”😍

• テーマ … Drupalの外観をカスタマイズする • drupal.orgで管理されている。 • drupal.org外にも沢山ある。

• ディストリビューション … モジュールとテーマのパッケージ • EC用, SNS用など、モジュールとテーマをパッケージしたもの

EC

コーポレートサイト コミュニティサイト

⼈材マッチングサイトグループウェア

ネットニュース

政府・公共機関

のアーキテクチャ

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

なぜ外部のライブラリを使える様になったのか

PSR-4

PSR-4

PSR-4

PSR-4

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

PHPフレームワーク• モノリシックフレームワーク • 昔のPHPフレームワークは巨大な1つのプロダクトだった。

Symfony1, CakePHP2, Mojavi, Ethna …

• フレームワークの一部の機能だけを使う、ということが難しかった。

• マイクロフレームワーク • 最近のPHPフレームワークはプロジェクト内外のライブラリを組み合わせたプロダクトになっている。 Symfony, CakePHP3, Laravel, CodeIgniter …

• すべての機能を自前で用意せず外部のライブラリを積極的に使用。 • フレームワークの一部の機能だけを使うことも可能。

が使う外部ライブラリ{ "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" },

が使う外部ライブラリ{ "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" },

が使う外部ライブラリ{ "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" },

が使う外部ライブラリ{ "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" },

が使う外部ライブラリ{ "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" },

が使う外部ライブラリ{ "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" },

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

• Drupal7 • PHP5.2.4

• Drupal8 • PHP5.5.9

Drupalが要求するPHP

!

!

• Drupal7 • PHP5.2.4

• Drupal8 • PHP5.5.9

Drupalが要求するPHP

!

! PHP 5.3.0PHP 5.4.0

名前空間クロージャ

トレイトarray() → []

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

ありがとうございました

@tomzoh

デジタルサーカス(株)

Drupalエンジニア

絶賛 募集中!

ありがとうございました

@tomzoh

デジタルサーカス(株)

Drupalエンジニア

絶賛 募集中!

懇親会出ます。声かけてください!

のモジュール開発

おまけ1

のモジュール構成

のモジュール構成

モジュール単位で名前空間を定義。

のモジュール構成

モジュール内でMVC

モジュール単位で名前空間を定義。

のモジュール構成

ymlの設定で出来ることも多い。

モジュール内でMVC

モジュール単位で名前空間を定義。

のアプリケーション開発

• モジュール開発 • 層の厚いフレームワークを使っているイメージ。 • iOS/Android開発の感覚とも近い。 • 初期の学習コストは高いが習得すると速い。

のコーディング規約

おまけ2

top related