SlideShare a Scribd company logo
1 of 58
Webアプリケーションフレームワークとしての
Drupalの可能性
Nov 16th 2018 / Developers Festa Sapporo 2018
ANNAI Inc. CTO Yoshikazu Aoyama
about me
青山 義万(あおやま よしかず)
ANNAI Inc CTO
Drupal Japan User Group
Drupalさっぽろ
Twitter: @blauerberg
3
● Founded in 2007
● Started with Drupal 5
● HQ in Kyoto, Japan
● Team of 6 people working
remotely
is a Drupal development agency
Drupalとは
• PHPで実装されたオープンソースのCMS
• Initial release: May 18 2000 (18 years ago)
• drupal.org 上で開発やコミュニティ活動が行われ
ている
https://en.wikipedia.org/wiki/Drupal
https://www.drupal.org/
drupal.org
• 47,736 people with Git accounts
• 1,780 Git commits this week
• 1,360,212 users on drupal.org
• 1,153,239 sites running Drupal
• 7,473,937 comments and issue followups
https://www.drupal.org/getting-involved
drupal.org
drupal.org
• 非常に大きなコミュニティで開発も活発
• コアだけなくモジュール(プラグイン)も含めた開
発情報が全てdrupal.orgで管理されている
• コアだけではなくモジュールも含め、専属のセ
キュリティチームによりセキュリティ更新を提
供している
drupal.org
Drupalコアだけでなく、全モジュールのバ
グや開発情報が一元管理されている
Drupalの特徴
• 多数のモジュールによる拡張性の高さ?
• 多言語対応?
• セキュリティ?
• エンタープライズ向け?
Drupalの特徴
https://www.drupal.com/product/web-content-management
https://www.drupal.com/product/web-content-management
Drupalの特徴
Flexible Content Architecture
Create the right content architecture using the
Admin Interface or do it programatically.
要するに…
システムで管理するモデルを「コードで定義」す
るだけでなく「管理UIから定義」(自動生成)するこ
ともできる。
Drupalを使ってシンプルなWeb
アプリを実際に作ってみる
• モデルの定義とCRUD機能の実装
• 検索機能付きのモデルの一覧の実装
• REST API
Drupalの始め方
最低限必要なもの
php
composer
SQLite
Drupalで新しいプロジェクトを
作成して立ち上げる
$ composer create-project drupal-composer/drupal-project:8.x-dev
my_drupal_project --stability dev --no-interaction
$ cd my_drupal_project
$ vendor/bin/drupal site:install standard --db-type="sqlite" --no-interaction
$ vendor/bin/drupal server
$ open http://127.0.0.1:8088/
https://github.com/drupal-composer/drupal-project
Hello Drupal!
モデルの定義と
CRUD機能の実装
Entity
Drupalで管理するデータの基本クラス
https://www.drupal.org/docs/8/api/entity-api
Drupal内のほぼ全てのデータは
Entity
https://www.drupal.org/files/classDrupal_Entities.png
Entity
ベースとなる2種類のEntity
• ContentEntity (ContentEntityBase)
モデルのデータを管理するためのEntity
• ConfigurationEntity (ConfigEntityBase)
システムの設定情報を管理するためのEntity
独自のモデルを作成するため
のステップ
1. カスタムモジュールを作成する
2. ContentEntityBaseのサブクラスを作る
3. baseFieldDefinitionsメソッドでモデルのフィー
ルドを定義する
カスタムモジュールを作成する
自動生成 (scaffolding) できます。
$ vendor/bin/drupal generate:module --module="my_custom_module"
https://www.drupal.org/docs/8/creating-custom-modules/let-drupal-8-know-about-your-module-with-an-infoyml-file
ContentEntityBaseの
サブクラスを作る
自動生成 (scaffolding) できます。
$ vendor/bin/drupal generate:entity:content --module="my_custom_module” --
entity-class="BookEntity"
ContentEntityBaseの
サブクラスを作る
Scaffoldingで自動生成されたbook entity
Entityの派生クラスのnamespaceを
Drupal{module_name}Entity にすることで、
独自のEntityがフレームワークに自動検出され、
様々な機能をコードの実装や設定をせずに利用できる
ようになる。
ContentEntityBaseの
サブクラスを作る
baseFieldDefinitionsメソッドで
モデルのフィールドを定義する
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
// (snip)
$fields['isbn'] = BaseFieldDefinition::create('string’)
->setLabel(t('ISBN’))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions
baseFieldDefinitionsメソッドで
モデルのフィールドを定義する
baseFieldDefinitionsメソッドで追加したフィールド
baseFieldDefinitionsメソッドで
モデルのフィールドを定義する
baseFieldDefinitionsメソッドの実装とデータベースの
スキーマを同期する。
$ vendor/bin/drush -y entity:updates --cache-clear
コードを書かずに管理UIから
モデルのフィールドを定義する
コードを書かずに管理UIから
モデルのフィールドを定義する
コードを書かずに管理UIから
モデルのフィールドを定義する
管理UIから追加したフィールド
CRUD機能のコード
https://www.drupal.org/files/classDrupal_Entities.png
save(), load(), delete()
preSave(), postLoad()などの
インターフェース定義
save(), load(), delete()などの実装
必要に応じてpreSave(), postLoad()
などを実装
コード実装 vs 管理UIでの定義
• どちらもできることは変わらない
• 併用できる
• ホットモックやPoCを作る際は管理UIで定義すると
素早く作り込むことができる
• 管理UIで定義した内容はConfigurationEntityとして
ymlフォーマットでコード化することも可能
検索機能付きのモデルの
一覧の実装
よくある実装例
コントローラーのindexメソッドでデータのコレク
ションを取得し、データをテンプレートに渡して
一覧でリスト表示する。
Drupalの場合
「Views」で管理UIから全てを自動生成することが
できる。
Viewsとは
• 管理UIからデータの抽出条件や出力フォーマッ
トを指定し、Drupal内のデータを取得・出力す
るモジュール
Viewsの典型的なユースケース
(ユーザーの一覧)
ユーザー(UserEntity)の一覧と検索フォーム
Viewsを使いモデルの一覧を
自動生成する
Viewsを使いモデルの一覧を
自動生成する
出力フォーマット 出力するデータ
フィルター条件
Viewsを使いモデルの一覧を
自動生成する
独自のモデルで
Viewsの機能を使うには
EntityViewsData のサブクラスを実装する。
モデルのクラスがContentEntityBaseのサブクラ
スの場合は、サブクラス側で特に追加で実装し
なければならないロジックはない。
EntityViewsData
namespace Drupalmy_custom_moduleEntity;
use DrupalviewsEntityViewsData;
class BookEntityViewsData extends EntityViewsData {
public function getViewsData() {
$data = parent::getViewsData();
// Additional information for Views integration,
// such as table joins, can be put here.
return $data;
}
}
Viewsでできること
• 典型的なユースケースとしては「検索機能付き
の一覧」の作成
• コードを書かずに全てを管理UIから自動生成で
きる
• モデルの定義の変更も自動的に認識する
• 複数のモデルを結合して取り出すことも可能
REST API
REST APIを提供する2つの方法
• 1. RESTful Web Service モジュール
• 2. JSON API モジュール
RESTful Web Service
• Drupal 8.0からコアに含まれているモジュール
• APIの定義自体の変更はできない
RESTful Web Service
JSON API
• Drupal 8.7からコアに入る予定
• APIの定義自体を管理UIから変更できる(with
JSON API Extras)
• 今後はこちらが主流になると思われる
JSON APIでできること
• APIの有効化・無効化
• エンドポイントURLの変更
• モデルの各プロパティのフィルタ
• プロパティのキー変換 (Alias)
• プロパティの値の変換 (Enhancer)
• OpenAPI Spec準拠のドキュメント生成
JSON API (管理UI)
JSON API (管理UI)
独自のモデルで
JSON APIを使う
モデルをContentEntityBaseのサブクラスとして
定義すれば、JSON API向けにインターフェース
等を追加で実装する必要はない。
独自のエンティティで
JSON APIを使う
OpenAPI準拠の
APIドキュメントの自動生成が可能
Thank you!

More Related Content

What's hot

Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発dena_study
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~Hiroshi Tokumaru
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDeleteYu Yamada
 
ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術Drecom Co., Ltd.
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてTakuto Wada
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
OCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰するOCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰するKohei Tokunaga
 
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはモダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはTakuya Tejima
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!オラクルエンジニア通信
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜Masakazu Matsushita
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)Shota Shinogi
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) hamaken
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技yoku0825
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことTakao Sumitomo
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例Akihiro Kuwano
 
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!Kazumi IWANAGA
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド崇介 藤井
 

What's hot (20)

Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDelete
 
ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術ログ解析を支えるNoSQLの技術
ログ解析を支えるNoSQLの技術
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
OCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰するOCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰する
 
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはモダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
 
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 

Similar to Webアプリケーションフレームワークとしての Drupalの可能性

新時代のエンタープライズデータマネジメント Drupal expo2017
新時代のエンタープライズデータマネジメント� Drupal expo2017新時代のエンタープライズデータマネジメント� Drupal expo2017
新時代のエンタープライズデータマネジメント Drupal expo2017惠 紀野
 
Together drupal case study 20160622
Together drupal case study 20160622Together drupal case study 20160622
Together drupal case study 20160622Hidekazu Ikeda
 
楽天の中のわたしと勉強会
楽天の中のわたしと勉強会楽天の中のわたしと勉強会
楽天の中のわたしと勉強会Rakuten Group, Inc.
 
CKAN日本語コミュニティミートアップ
CKAN日本語コミュニティミートアップCKAN日本語コミュニティミートアップ
CKAN日本語コミュニティミートアップFumihiro Kato
 
CKAN日本語コミュニティの現状と課題
CKAN日本語コミュニティの現状と課題CKAN日本語コミュニティの現状と課題
CKAN日本語コミュニティの現状と課題Fumihiro Kato
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909Hidekazu Ikeda
 
Drupalを活用した Linked Open Dataの 実践的試行環境の構築
Drupalを活用した Linked Open Dataの実践的試行環境の構築Drupalを活用した Linked Open Dataの実践的試行環境の構築
Drupalを活用した Linked Open Dataの 実践的試行環境の構築Takanori Hayashi
 
Drupal9 update (0214/2020)
Drupal9 update (0214/2020)Drupal9 update (0214/2020)
Drupal9 update (0214/2020)Yasushi Osonoi
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようStudy Group by SciencePark Corp.
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方健一 辰濱
 
dkanのご紹介-150704CMSどうでしょう夏の陣
dkanのご紹介-150704CMSどうでしょう夏の陣dkanのご紹介-150704CMSどうでしょう夏の陣
dkanのご紹介-150704CMSどうでしょう夏の陣Kyoko Ohtagaki
 
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版VirtualTech Japan Inc./Begi.net Inc.
 
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)Hiroshi Tsukamoto
 
初めてのLinux part1 in 2018 #伊勢it交流会
初めてのLinux part1 in 2018 #伊勢it交流会初めてのLinux part1 in 2018 #伊勢it交流会
初めてのLinux part1 in 2018 #伊勢it交流会Netwalker lab kapper
 

Similar to Webアプリケーションフレームワークとしての Drupalの可能性 (20)

新時代のエンタープライズデータマネジメント Drupal expo2017
新時代のエンタープライズデータマネジメント� Drupal expo2017新時代のエンタープライズデータマネジメント� Drupal expo2017
新時代のエンタープライズデータマネジメント Drupal expo2017
 
Osc2010 Slide
Osc2010 SlideOsc2010 Slide
Osc2010 Slide
 
Drupal ISV 20160630
Drupal ISV 20160630Drupal ISV 20160630
Drupal ISV 20160630
 
Together drupal case study 20160622
Together drupal case study 20160622Together drupal case study 20160622
Together drupal case study 20160622
 
Devsumi2013 fumi
Devsumi2013 fumiDevsumi2013 fumi
Devsumi2013 fumi
 
楽天の中のわたしと勉強会
楽天の中のわたしと勉強会楽天の中のわたしと勉強会
楽天の中のわたしと勉強会
 
CKAN日本語コミュニティミートアップ
CKAN日本語コミュニティミートアップCKAN日本語コミュニティミートアップ
CKAN日本語コミュニティミートアップ
 
GitHub Handson
GitHub HandsonGitHub Handson
GitHub Handson
 
CKAN日本語コミュニティの現状と課題
CKAN日本語コミュニティの現状と課題CKAN日本語コミュニティの現状と課題
CKAN日本語コミュニティの現状と課題
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909
 
Drupalを活用した Linked Open Dataの 実践的試行環境の構築
Drupalを活用した Linked Open Dataの実践的試行環境の構築Drupalを活用した Linked Open Dataの実践的試行環境の構築
Drupalを活用した Linked Open Dataの 実践的試行環境の構築
 
Drupal9 update (0214/2020)
Drupal9 update (0214/2020)Drupal9 update (0214/2020)
Drupal9 update (0214/2020)
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
dkanのご紹介-150704CMSどうでしょう夏の陣
dkanのご紹介-150704CMSどうでしょう夏の陣dkanのご紹介-150704CMSどうでしょう夏の陣
dkanのご紹介-150704CMSどうでしょう夏の陣
 
Atlassian Summit US 2017 #augj
Atlassian Summit US 2017 #augjAtlassian Summit US 2017 #augj
Atlassian Summit US 2017 #augj
 
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版
 
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)
Facebook事例&サービス紹介(2010.9.16セミナープレゼン資料)
 
初めてのLinux part1 in 2018 #伊勢it交流会
初めてのLinux part1 in 2018 #伊勢it交流会初めてのLinux part1 in 2018 #伊勢it交流会
初めてのLinux part1 in 2018 #伊勢it交流会
 

More from Yoshikazu Aoyama

大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング
大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング
大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニングYoshikazu Aoyama
 
APIを利用したMauticと他システムとの連携について
APIを利用したMauticと他システムとの連携についてAPIを利用したMauticと他システムとの連携について
APIを利用したMauticと他システムとの連携についてYoshikazu Aoyama
 
Mauticをリバースプロキシの下で使うときに気をつけること
Mauticをリバースプロキシの下で使うときに気をつけることMauticをリバースプロキシの下で使うときに気をつけること
Mauticをリバースプロキシの下で使うときに気をつけることYoshikazu Aoyama
 
日本語ではじめるDrupal Console in Sapporo
日本語ではじめるDrupal Console in Sapporo日本語ではじめるDrupal Console in Sapporo
日本語ではじめるDrupal Console in SapporoYoshikazu Aoyama
 
日本語ではじめるDrupal Console
日本語ではじめるDrupal Console日本語ではじめるDrupal Console
日本語ではじめるDrupal ConsoleYoshikazu Aoyama
 
DrupalCafe Vol.35 - Dockerで始めるDrupal
DrupalCafe Vol.35 - Dockerで始めるDrupalDrupalCafe Vol.35 - Dockerで始めるDrupal
DrupalCafe Vol.35 - Dockerで始めるDrupalYoshikazu Aoyama
 
Drupalサイトをセキュアに運用するには(入門編)
Drupalサイトをセキュアに運用するには(入門編)Drupalサイトをセキュアに運用するには(入門編)
Drupalサイトをセキュアに運用するには(入門編)Yoshikazu Aoyama
 

More from Yoshikazu Aoyama (8)

大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング
大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング
大規模サイトにおけるユーザーレベルのキャッシュ活用によるパフォーマンスチューニング
 
APIを利用したMauticと他システムとの連携について
APIを利用したMauticと他システムとの連携についてAPIを利用したMauticと他システムとの連携について
APIを利用したMauticと他システムとの連携について
 
Mauticをリバースプロキシの下で使うときに気をつけること
Mauticをリバースプロキシの下で使うときに気をつけることMauticをリバースプロキシの下で使うときに気をつけること
Mauticをリバースプロキシの下で使うときに気をつけること
 
日本語ではじめるDrupal Console in Sapporo
日本語ではじめるDrupal Console in Sapporo日本語ではじめるDrupal Console in Sapporo
日本語ではじめるDrupal Console in Sapporo
 
日本語ではじめるDrupal Console
日本語ではじめるDrupal Console日本語ではじめるDrupal Console
日本語ではじめるDrupal Console
 
Drupal ONSEN 2015
Drupal ONSEN 2015Drupal ONSEN 2015
Drupal ONSEN 2015
 
DrupalCafe Vol.35 - Dockerで始めるDrupal
DrupalCafe Vol.35 - Dockerで始めるDrupalDrupalCafe Vol.35 - Dockerで始めるDrupal
DrupalCafe Vol.35 - Dockerで始めるDrupal
 
Drupalサイトをセキュアに運用するには(入門編)
Drupalサイトをセキュアに運用するには(入門編)Drupalサイトをセキュアに運用するには(入門編)
Drupalサイトをセキュアに運用するには(入門編)
 

Webアプリケーションフレームワークとしての Drupalの可能性