Markaby
表示
概要
[編集]Markaby(Markup as Ruby)は、HTMLをRubyのDSLとして記述できる革新的なテンプレートエンジンです。HTMLタグをRubyのメソッドとして扱うことで、マークアップの生成をプログラマティックに行うことができます。
インストールと設定
[編集]gemのインストール
[編集]gem install markaby
基本設定
[編集]require 'markaby' # 基本的な設定 Markaby::Builder.set(:indent, 2) Markaby::Builder.set(:auto_validation, true)
基本構文
[編集]HTML生成の基本
[編集]mab = Markaby::Builder.new do html do head do title "Markabyの例" end body do h1 "Hello, World!" p "これはMarkabyで生成されたページです。" end end end puts mab.to_s
属性の指定
[編集]div class: 'container', id: 'main' do img src: '/images/logo.png', alt: 'ロゴ' a href: '/home', class: 'link' do text 'ホームへ戻る' end end
クラスとIDの指定
[編集]ドット記法とシャープ記法
[編集]# クラスの指定 div.container.main do p.text.bold "太字テキスト" end # IDの指定 div#header do h1#site-title "サイトタイトル" end # 組み合わせ div.container#main.wrapper do # 内容 end
制御構文
[編集]条件分岐
[編集]div.user-profile do if @user.admin? span.badge "管理者" end unless @user.bio.empty? p.bio @user.bio end end
ループ処理
[編集]ul.items do @items.each do |item| li.item do span.name item.name span.price "$#{item.price}" end end end
ヘルパーメソッド
[編集]カスタムヘルパーの定義
[編集]module MarkabyHelpers def user_card(user) div.user_card do img src: user.avatar_url h3 user.name p user.bio end end def format_date(date) time datetime: date.iso8601 do date.strftime('%Y年%m月%d日') end end end Markaby::Builder.include MarkabyHelpers
レイアウトとパーシャル
[編集]レイアウトの作成
[編集]- layout.rb
def layout(&block) Markaby::Builder.new do html do head do title @page_title link rel: 'stylesheet', href: '/css/main.css' end body do div.container do render partial: 'header' div.content &block render partial: 'footer' end end end end end
パーシャルの使用
[編集]def header Markaby::Builder.new do header.main-header do nav do ul do li { a 'Home', href: '/' } li { a 'About', href: '/about' } end end end end end
フォーム作成
[編集]基本的なフォーム
[編集]form action: '/users', method: 'post' do div.form-group do label for: 'name' do text '名前' end input type: 'text', id: 'name', name: 'user[name]' end div.form-group do label for: 'email' do text 'メールアドレス' end input type: 'email', id: 'email', name: 'user[email]' end button type: 'submit' do text '送信' end end
セキュリティ
[編集]XSS対策
[編集]- text メソッドによる自動エスケープ
- raw メソッドでエスケープ解除
- 信頼できるデータの扱い方
パフォーマンス最適化
[編集]キャッシュ戦略
[編集]- ビューのキャッシュ
- フラグメントキャッシュ
- 部分的な更新
デバッグとトラブルシューティング
[編集]デバッグテクニック
[編集]- puts mab.to_s での出力確認
- HTML検証
- エラートレース
Rails統合
[編集]Railsでの使用
[編集]- config/initializers/markaby.rb
Rails.application.config.generators.template_engine = :markaby # app/views/users/index.mab collection @users do |user| div.user do h2 user.name p user.email end end
テスト
[編集]ビューのテスト
[編集]require 'test_helper' class UserViewTest < ActionView::TestCase test "renders user profile" do mab = Markaby::Builder.new do render partial: 'users/profile', locals: { user: @user } end assert_select mab.to_s, 'div.user-profile' assert_select 'h1', @user.name end end
ベストプラクティス
[編集]コード整理
[編集]- 適切なモジュール分割
- ヘルパーの活用
- DRYな構造化
命名規則
[編集]- クラス名の規則
- ID名の規則
- メソッド名の規則
APIリファレンス
[編集]主要なメソッド
[編集]- text
- raw
- render
- capture
- to_s
コミュニティリソース
[編集]ドキュメント
[編集]- 公式ドキュメント
- チュートリアル
- サンプルプロジェクト
サポート
[編集]- GitHubイシュー
- Stack Overflow
- コミュニティフォーラム