マイクロサイトの書き方

会社の近々のイベントのために、小さなウェブサイトを手早く作る必要があるとしましょう。シンプルで、速く、余計な面倒がないものが求められます。こんな小さなプロジェクトに堅牢なフレームワークは要らない、と思うかもしれません。しかし、Nette Framework を使うことでその作業がむしろ簡単に、そして速くなるとしたらどうでしょうか。

単純なウェブサイトを作るときでも、快適さを手放したくはありません。すでに解決済みのことを作り直したくもありません。遠慮なく怠けて、甘やかされてください。Nette Framework はマイクロフレームワークとしても優れています。

そんなマイクロサイトはどんな形になるでしょうか。たとえば、サイト全体のコードが公開ディレクトリの index.php ファイル 1 本に収まります。

<?php

require __DIR__ . '/../vendor/autoload.php';

$configurator = new Nette\Bootstrap\Configurator;
$configurator->enableTracy(__DIR__ . '/../log');
$configurator->setTempDirectory(__DIR__ . '/../temp');

// config.neon の設定にもとづいて DI コンテナを作ります
$configurator->addConfig(__DIR__ . '/../app/config.neon');
$container = $configurator->createContainer();

// ルーティングを設定します
$router = new Nette\Application\Routers\RouteList;
$container->addService('router', $router);

// URL https://example.com/ のルート
$router->addRoute('', function ($presenter, Nette\Http\Request $httpRequest) {
	// ブラウザの言語を判定して URL /en や /de などにリダイレクトします
	$supportedLangs = ['en', 'de', 'cs'];
	$lang = $httpRequest->detectLanguage($supportedLangs) ?: reset($supportedLangs);
	return $presenter->redirectUrl("/$lang");
});

// URL https://example.com/cs や https://example.com/en のルート
$router->addRoute('<lang cs|en|de>', function ($presenter, string $lang) {
	// 対応するテンプレート、たとえば ../templates/en.latte を表示します
	$template = $presenter->createTemplate()
		->setFile(__DIR__ . '/../templates/' . $lang . '.latte');
	return $template;
});

// アプリケーションを実行します!
$container->getByType(Nette\Application\Application::class)->run();

あとはすべて、親の /templates ディレクトリに置かれたテンプレートです。

index.php の PHP コードは、まず環境を整え、次にルートを定義し、最後にアプリケーションを実行します。利点は、addRoute() 関数の第 2 パラメータに callable を渡せて、対応するページにアクセスされたときにそれが実行されることです。

なぜマイクロサイトに Nette を使うのか

  • Tracyを試したプログラマーは、今日それなしでコードを書くことをほとんど想像できません。
  • 何より Latteのテンプレートシステムの恩恵を受けられます。ページが 2 つしかなくても、レイアウトと内容は分けたくなるからです。
  • そして XSS 脆弱性を防ぐために、自動エスケープに頼りたくなるはずです。
  • Nette は、エラーが起きたときに生の PHP のエラーメッセージが表示されないようにし、代わりに親しみやすいページを出します。
  • お問い合わせフォームなどでユーザーの声を集めたくなったら、フォームデータベースのサポートを簡単に足せます。
  • 記入されたフォームをメールで送るのも簡単です。
  • ときにはキャッシュが役立つこともあります。たとえばフィードを取得して表示する場合です。

速さと効率が決定的な今の時代、無駄な遅れなく結果にたどり着ける道具を持っていることは重要です。Nette Framework はまさにそれを提供します。素早い開発、安全性、そして作業を滑らかにする Tracy や Latte といった幅広い道具です。Nette のパッケージをいくつかインストールするだけで、こうしたマイクロサイトを作るのは驚くほど簡単になります。しかも隠れたセキュリティの穴がないと安心できます。