Slide 1

Slide 1 text

Applicationとは 何か(哲学) しとりー@ndxbn

Slide 2

Slide 2 text

しとりー@ndxbn Web系フリーランス いまは東銀座の歌舞伎座らへんにいます PHP歴6年くらい 最近は JavaScript が多い(悲しみ) @ndxbn

Slide 3

Slide 3 text

ことの発端 とあるレガシーなオレオレフレームワークにて… ※このコードは、フィクションです。

Slide 4

Slide 4 text

● DB使わないアプリだってあるだろ!!!! ● メンテしないアプリだってあるだろ!!!! ● じゃあコンストラクタで受け取ってるこいつらなんだよ!!!???

Slide 5

Slide 5 text

そして… 俺の中で、アプリケーションの定義がゲシュタルト崩壊した そりゃぁ、哲学したくなりますよね!!!

Slide 6

Slide 6 text

ということで、 「アプリケーションとは何か」を哲学(笑)しました。

Slide 7

Slide 7 text

結論からいうと

Slide 8

Slide 8 text

Applicationとは何か DIコンテナのこと

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

アプリケーションソフトウェア(wikipedia) アプリケーションソフトウェア(英: application software)とは、ユーザーが要求する情報 処理を直接実行するソフトウェアである。

Slide 11

Slide 11 text

アプリケーション(自己解釈) Webアプリなら「リクエスト受けて、レスポンス返す」 コンソールアプリなら「引数受けて、レスポンス返す」 → 「なんか入力を受けて、処理して、レスポンス返すやつ」っていう定義を、良さげな感じ に設計・実装したやつが、「Applicationクラス」

Slide 12

Slide 12 text

最近のPHPの各種フレームワークの Applicationクラス

Slide 13

Slide 13 text

Applicationクラスの例 Laravel の場合 \Illuminate\Fandation\Application Symfony の場合 (Symfony\Component\HttpKernel) CakePHP の場合 \App\Application Phalcon の場合 \Phalcon\Application Slim の場合 Slim\App Silex の場合 Silex\Application Fuel の場合 Fuel\Core\Fuel

Slide 14

Slide 14 text

Applicationクラスの探し方 オートローダの登録した直後くらいに作られてるやつが、だいたいそう。

Slide 15

Slide 15 text

例えば

Slide 16

Slide 16 text

Laravelの場合 ブラウザでアクセスしたときは オートローダ登録して require __DIR__.'/../vendor/autoload.php';

Slide 17

Slide 17 text

Laravelの場合 ブラウザでアクセスしたときは Application作って

Slide 18

Slide 18 text

Laravelの場合 ブラウザでアクセスしたときは Applicationに登録された Web用の処理をする

Slide 19

Slide 19 text

Laravelの場合 コンソール(ターミナル)からの 処理の場合 オートローダ登録して require __DIR__.'/../vendor/autoload.php';

Slide 20

Slide 20 text

Laravelの場合 コンソール(ターミナル)からの 処理の場合 Application作って

Slide 21

Slide 21 text

Laravelの場合 コンソール(ターミナル)からの 処理の場合 Applicationに登録された コンソール用の処理をする

Slide 22

Slide 22 text

CakePHPの場合 オートローダ登録して require __DIR__.'/../vendor/autoload.php';

Slide 23

Slide 23 text

CakePHPの場合 Application作って サーバでの処理として実行

Slide 24

Slide 24 text

Applicationクラスの探し方実装面での定義 オートローダの登録した直後くらいに作られてるやつ

Slide 25

Slide 25 text

で、正体なんなの???

Slide 26

Slide 26 text

Laravelの場合 https://github.com/laravel/framework/blob/master/src/Illuminate/Foundation/Application.php DIコンテナ

Slide 27

Slide 27 text

Symfonyの場合 https://github.com/symfony/symfony-standard/blob/master/web/app.php

Slide 28

Slide 28 text

Symfonyの場合 https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Kernel.php Symfony system ≒ワークフロー群

Slide 29

Slide 29 text

Symfonyの場合 本当は、Symfonyの本質は、Doctrin ORM とか HTTP Fandation とか を まとめ上げ る、「Bundler」としてのシステムだったりする。(と思う) DIコンテナってことでよくね?(雑) (Symfonyわかりません、誰か教えてください)

Slide 30

Slide 30 text

CakePHPの場合 https://github.com/cakephp/app/blob/master/src/Application.php

Slide 31

Slide 31 text

CakePHPの場合 https://github.com/cakephp/cakephp/blob/master/src/Http/BaseApplication.php Applicationを作るには、 設定ファイル(パス)が必要 →Applicationとは、設定

Slide 32

Slide 32 text

Phalconの場合 https://github.com/phalcon/cphalcon/blob/master/ext/phalcon/application.zep.c DIコンテナ

Slide 33

Slide 33 text

Slimの場合 https://github.com/slimphp/Slim/blob/3.x/Slim/App.php DIコンテナ (pimple/pimple)

Slide 34

Slide 34 text

Silexの場合 DIコンテナ (pimple/pimple)

Slide 35

Slide 35 text

Fuel の場合 (ナンモ ナイト)

Slide 36

Slide 36 text

Fuel の場合 オートローダ登録して Fuel::init ↑こいつじゃね

Slide 37

Slide 37 text

Fuel の場合 設定必要 →Applicationとは、設定

Slide 38

Slide 38 text

まとめ 現代において、良く使われるフレームワークでの Applicationクラスとは、 DIコンテナである(多い) ナ ナンダッテー!! Ω ΩΩ

Slide 39

Slide 39 text

ご清聴ありがとうございました!!!