Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++Delphiニュース

WebStencils: RAD Studio 13.0 Florence の新機能

webstencils-13-2

これは、Delphi 6 以来、WebBroker で最もエキサイティングな Web アップデートと言えるでしょう。RAD Studio 13.0 Florence の WebStencils 機能強化は非常に大きく、バージョン 2.0 と呼んでも過言ではありません。

RAD Studio の WebStencils テンプレートエンジンを使用して Web アプリケーションを構築してきた方なら、今回のリリースに盛り込まれた機能にきっとご満足いただけるでしょう。コミュニティからのフィードバックに基づき、Delphi と C++Builder を使った Web 開発をこれまで以上に生産的で楽しいものにする機能を追加しました。

WebStencils とは?

ご存知ない方のためにご説明しますと、WebStencils は エンバカデロのテンプレートエンジンで、WebBroker と RAD Server の両方で動作します。使い慣れた Delphi または C++ の構文と HTML テンプレートを使用して、動的な Web アプリケーションを構築できます。そのシンプルさが魅力です。全く新しいフレームワークを習得することなく、サーバーサイドレンダリングのパワーを活用できます。

主な新機能

完全なセッション管理と認証

前回のプレビューブログ投稿で説明したように、これはコミュニティから最も要望の多かった機能でした。 RAD Studio 13.0 では、わずか 3 つのコンポーネントですぐに使用できる完全なセッションおよび認証システムが導入されています。

新しいコンポーネント:

  • TWebSessionManager – 設定可能なオプションを使用してセッションライフサイクルを管理します
  • TWebFormsAuthenticator – 自動リダイレクト機能を備えた HTML フォームベースの認証
  • TWebAuthorizer – 認可ゾーンを使用したロールベースのアクセス制御

非常にシンプルなセットアップ

これらの3つのコンポーネントをWebモジュールに配置するだけで、ほぼコードなしでウェブサイトのセキュリティをすべて管理できます。認証フローは簡単です。

  1. 認証されていないリクエスト ➜ ログインURLにリダイレクト
  2. ユーザーが認証情報をPOST ➜ OnAuthenticateイベントで認証
  3. 成功 ➜ 元のURLまたはHomeURLにリダイレクト
  4. 失敗 ➜ 失敗したURLにリダイレクト

セッションデータは、@session オブジェクトを通じてテンプレート内で自動的に利用できるようになります。

@if session.Authenticated {
  <div>Welcome back, @session.UserName!</div>
}

@if session.UserHasRole('admin') {
  <a href="/admin">Admin Panel</a>
}

TWebSessionManager を使用すると、以下の制御を完全に行うことができます。

  • セッション ID の保存: Cookie(デフォルト)、ヘッダー、またはクエリパラメータ
  • セッションのスコープ: リクエストごと、ユーザーごと、またはユーザーと IP ごと
  • セキュリティ: ユーザースコープのセッション用の組み込み共有シークレット
  • タイムアウト: 有効期限を設定可能 (デフォルト: 1 時間)

ロールベースの認可ゾーンも同様にシンプルです:

// 管理領域を保護します - 'admin' ロールを持つユーザーのみが /admin/* にアクセスできます
Zone.PathInfo := '/admin*';
Zone.Kind := zkProtected;
Zone.Roles := 'admin';

データベース駆動型のUI生成

この機能は、Webフォームの構築方法を根本的に変えるものです。WebStencilsでは、データセットのプロパティとフィールドのメタデータにアクセスできるようになり、データベーススキーマからUIを生成できるようになります。

<!-- Dynamic forms that adapt to any dataset -->
@foreach field in customers.fields {
  <div class="form-group">
    <label>@field.DisplayLabel</label>
    @switch(field.dataType) {
      @case "ftString" {
        <input type="text" name="@field.FieldName" 
               maxlength="@field.Size" class="form-control">
      }
      @case "ftInteger" {
        <input type="number" name="@field.FieldName" class="form-control">
      }
      @case "ftDate" {
        <input type="date" name="@field.FieldName" class="form-control">
      }
    }
  </div>
}

FireDAC フィールドエディタでフィールドの Visible プロパティを変更すると、HTML を 1 行も変更することなく、そのフィールドが Web フォームに自動的に表示されるようになることを想像してみてください。

組み込みセキュリティ

新しいセキュリティホワイトリストシステムにより、機密データの偶発的な漏洩を防止します。デフォルトでは、クラス TStringsTDataset の一般的な安全なプロパティのリストがホワイトリストに登録されていますが、プロジェクトの要件に応じて簡単にカスタマイズできます。

// Add custom properties to the whitelist
TWebStencilsProcessor.Whitelist.Configure(TMyClass,['SafeProperty'], nil, False);

// Block specific properties  
TWebStencilsProcessor.Whitelist.Configure(TDataSet, nil, ['ConnectionString'], False);

@switch 演算子

新しい @switch 演算子は、条件付きレンダリングをより簡潔にし、複雑にネストされた @if 文を回避します。

@switch(user.role) {
  @case "admin" {
    <div class="admin-panel">
      <h2>Admin Dashboard</h2>
    </div>
  } 
  @case "moderator" {
    <div class="mod-tools">
      <h2>Moderator Tools</h2>
    </div>
  } 
  @default {
    <div class="user-content">
      <h2>Welcome, User!</h2>
    </div>
  }
}

カスタムデータアクセス

適応性を高めるために、匿名メソッドを使用してカスタム変数を追加します。

// Add custom variables using a simple dictionary
type
  TMap = TDictionary<string, string>;
...
LDict := TMap.Create;
LDict.Add('APP_VERSION', '1.0.0');
LDict.Add('DEBUG_MODE', 'True');

WebStencilsEngine.AddVar('env', LDict, True,
  function(AVar: TWebStencilsDataVar; const APropName: string;
    var AValue: string): Boolean
  begin
    Result := TMap(AVar.TheObject).TryGetValue(APropName.ToUpper, AValue);
  end);

テンプレートでは次のようになります:

<h1>@env.APP_NAME - @env.APP_VERSION</h1>
@if env.DEBUG_MODE {
  <div class="alert-warning">Debug mode is active</div>
}

その他の機能強化

  • レイアウトシステムの強化: ネストされた @ExtraHeader のサポートにより、複雑なレイアウト階層に対応
  • @page オブジェクトの強化: request_path と request_segment へのアクセスが可能になり、URL 処理が向上
  • Docker サポート: 自動データベースによるすぐに使用可能なコンテナ化初期化

動作確認はこちら

更新された WebStencilsDemos リポジトリ をご覧ください。以下の機能が含まれています:

  • ロールベースのナビゲーションを備えた完全な認証システム
  • データベースメタデータからの動的なフォーム生成
  • セッションベースのフラッシュメッセージング
  • FireDAC を使用した高度な検索とページネーション
  • Delphi と C++Builder の両方のサンプル

デモでは SQLite とインメモリデータソースを扱い、WebStencils が様々なストレージ戦略でどのように汎用的に機能するかを示します。

試してみませんか?

学習曲線は緩やかで、既存のWebStencilsテンプレートは変更なく動作します。新機能は追加されるので、自分のペースで導入でき、自動セッション統合やセキュリティ強化のメリットをすぐに享受できます。

RAD Studio 13.0 Florence (Delphi または C++Builder) を使い始め、WebStencilsDemos リポジトリをクローンして、サンプルを試してみてください。これらの新機能を使って皆さんがどんなものを作るのか、楽しみにしています。


ご質問やご意見がございましたら、GitHub Issues セクションまでご連絡ください。リポジトリにスターを付けて、ご意見をお聞かせください。

 

 

Kai for RAD Studio is Now Available! Special Live Webinar: Introducing Kai - A New Chapter for RAD Studio RAD Studio 13.1 Florence Now Available

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES