アイキャッチ画像: デスクの上でパソコンを使用している

つい先日「 Drupal の 8.0.0 がリリースされたなぁ」と思っていたら、 8 のリリースから早くも 6 ヶ月が経過し次の 8.1 のリリースが近づいてきましたね。 ときが経つのは早いものです。

Drupal 8.1.0 のリリースが近づいてくるとともに Drupal 界隈ではまた新たに「 BigPipe 」や「 AMP 」など気になる単語をちらほら見かけるようになりました。 Drupal 8 に日頃接してらっしゃるみなさまはふだんの Drupal 8 の情報収集や開発などどのようにお進めでしょうか?

本日のブログは、(超局所的な) Drupal 8 熱の高まりを受け、「 Drupal 8 の公式 CHANGELOG 」を日本語に翻訳してご紹介してみたいと思います。

Drupal の CHANGELOG は「 CHANGELOG.txt 」という名前で Drupal コアのルートディレクトリに含まれています。 Drupal をダウンロードすればいつでも確認できるものではありますが、改めて中身をじっくり見たことがある方はあまり多くはないのではないでしょうか。 その中身を覗くと、 Drupal のバージョン 1 の頃からの変更履歴がおよそ 2,000 行を越えるボリュームでつぶさに書かれているので、読むとそれなりにおもしろいです。 「時間が余ってしょうがない、かつ、 Drupal に興味があってしょうがない」という方などは一度目を通されるとよいかもしれません。

今回はその CHANGELOG のうち Drupal 8.0.0 のところだけを抜粋して取り上げてみたいと思います。 以下がその翻訳文です。

日本語としての読みやすさと原文のニュアンスの再現との間のバランスをうまく取るべく、直訳意訳が入り混じっています。 厳密なニュアンスに興味のある方は原文の方にもあたってみてください。

Drupal 8.0.0 CHANGELOG 日本語訳

Drupal 8.0.0. 2015 年 11 月 19 日

  • フロントエンドを大幅に改善:
    • 同梱テーマをすべてレスポンシブ化。
    • レスポンシブイメージのサポートを追加。
    • 同梱のテーブルを 3 段階の列の重要度つきでレスポンシブ化。
    • Twig をデフォルトのテンプレートエンジンとして追加。 .tpl.php ファイルと theme 関数をすべて .html.twig に変換。
    • PHPTemplate エンジンを削除。
    • Drupal が生成するマークアップの大規模な整理。
    • CSS クラスとラッパーをメンテナンスするためのベーステーマ Classy を追加。
    • コアテンプレートと CSS の変更に対して後方互換性を保つために デフォルトベーステーマ Stable を追加。 これによって Stable の外にあるテンプレートと CSS は マイナーリリース( 8.1.0 、 8.2.0 など)で変更することができる。
    • Seven テーマのキーとなる要素を再デザイン。
    • HTML5 要素のサポートを追加。
    • JavaScript フレームワークの Backbone.js と Underscore.js を追加。
    • jQuery を 2.1.4 にアップデート。
    • jQuery UI を 1.11.4 にアップデート。
    • jquery.bbq を削除。
    • Garland テーマをコアから削除。
    • Overlay モジュールをコアから削除。シンプルな動的な「サイトに戻る」リンクに変更。
    • CSS と JavaScript ファイルを依存とあわせて管理するアセットライブラリシステムを改善。 これによって AJAX リクエストのペイロードが削減される。
    • jQuery をすべてのページで読み込むのをやめて、他のアセットが必要とした場合のみに限定。
    • ページ読み込みの高速化のためデフォルトで匿名ユーザに対しては JavaScript を読み込まない形に変更。
    • CSS ファイルに対して SMACSS スタイルのカテゴリ分けを実装。
    • Internet Explorer 8 以下に対するほとんどのサポートを削除。
    • スタイルをブラウザでサポートされる形に変更するため Modernizr を追加。
    • すべてのページテンプレート変数(タイトルやパンくず、ブランディングなど)をブロックに変換。
    • レスポンシブデザインのブレークポイントを管理するために Breakpoint モジュールを追加。
    • ネイティブな Schema.org 出力をページに導入。
    • 可能な場所ではセマンティックな HTML 5 タグを利用する形に変更。 これによって、モバイル端末でのフォーム入力も大幅に簡単になる。
    • 高解像度(レティナ)ディスプレイでもきれいに見えるようにアイコンを再デザイン。
  • サイト管理エクスペリエンスをシンプル化:
    • インストーラを再デザイン。
    • 管理者用テーマ Seven を視覚的にアップデート/拡張。
    • 管理ツールバーをレスポンシブ/タッチフレンドリー化。
    • モジュール一覧に検索機能を追加。ページを読みやすく変更。
    • 文脈にぴったりなヒントを UI 要素に付加できる Tour モジュールを追加。
  • エンティティシステムを改善:
    • エンティティについての完全な CRUD API を追加。
    • フィールド API とエンティティクエリ API を改善。
    • ベースエンティティフィールドに対するウィジェット、フォーマッタ、翻訳のサポートを追加(ラベルなど)。
    • ディスプレイパターンの再利用を可能にするビューモード設定を追加。
    • フォームパターンの再利用を可能にするフォームモードを導入。
    • 最新のものでなくてもよい「デフォルト」リビジョンを管理できる機能を追加。
    • ノードだけでなく、すべてのコンテントエンティティタイプ(カスタムブロック、ターム、コメントなど)にリビジョンサポートを追加。
    • エンティティタイプとフィールド定義に基づいてコンテントエンティティのデータベーススキーマが自動生成される形に。
  • 複雑な型を管理するためのタイプドデータ(型付きデータ)システムを追加。
  • ルーティングシステムを Symfony2 コンポーネントベースにリファクタリング。
  • 宣言系の情報(ライブラリ、パーミッション、ルート)について、定義の部分は PHP ではなく YAML ファイルを使う形に変更。
  • メニューハンドリングシステムを改善:
    • カスタムメニューアイテムの処理を固有のモジュールに移動。
    • メニューリンク、ローカルアクション、ローカルタスクを新しいルーティングシステムに沿って再構築。
  • コア API のいくつかの実装を標準化するプラグインを追加。
  • 新しいコンフィギュレーションマネジメントシステム(設定管理システム)を導入:
    • エクスポート/インポート機能を持った一元化されたコンフィギュレーションシステム。
    • モジュール作成者が YAML ファイルフォーマットで設定を記述可能。
    • 設定をゲット/セット/追加/削除できる機能を実装。
    • 言語パターンやその他の実行時の値によって設定値を上書きできる機能を提供。
    • デプロイやアップデートの間のデータの整合性をメンテナンスするための設定スキーマ/設定の依存管理/設定のバリデーションの追加。
    • グローバルな設定と設定エンティティの両方へのサポートを追加。
  • コンテンツ作成エクスペリエンスを改善:
    • コンテンツ作成/編集フォームの再デザイン。
    • コンテンツプレビューがフロントエンドテーマで表示される形に変更。
    • WYSIWYG エディタの「 CKEditor 」の追加。 フィルタシステムとの強い連携により、クリーンなマークアップが保証される。
    • エディタ内での画像のアップロード/位置調整/キャプション追加が可能に。
    • デフォルトのテキストフォーマットをモダンなものに変更。
    • ドラッグアンドドロップタイプの設定 UI を追加。 これは HTML フィルタ設定を自動的に更新し、通常のユースケースとしてテキストフォーマットの設定が行えるようにしてくれる。
    • あらゆる要素に利用できる位置調整とキャプションフィルタを追加: 画像、ブロッククオート、コードスニペット、動画など。
    • あらゆるエンティティのインプレースでの編集(その場での編集)を可能に: ノード、ブロックなど。
    • 他のエディタをテキストフォーマットに割り当てるための Text Editor モジュールを追加。
  • メディア管理を改善:
    • 使用されていないファイルが削除されたときにそれを残せるオプション設定を追加。メディアライブラリに有用。
    • コンテンツ管理画面の下にシステムにアップロードされたすべてのファイルを一覧にするカスタマイズ可能なビューを追加。
    • ファイルフィールドでファイルを選択した際にアップロードがすぐに行われる形に変更。
    • 複数のファイルを一度にアップロードできる形に変更。
    • ローカル画像インプットフィルタを追加。画像の投稿を安全にする。
  • 以下の Symfony2 コンポーネントを同梱:
    • ClassLoader - PSR-0 互換のオートロードルーチン。
    • DependencyInjection - 柔軟な DI コンテナ。
    • EventDispatcher - オブジェクト指向の軽量なイベントハンドリングシステム。
    • HttpFoundation - HTTP リクエストとレスポンスのための抽象オブジェクト。
    • HttpKernel - やてくる HTTP リクエストとレスポンスを管理するコアシステム。
    • Process - サブプロセスでのコマンド実行ができる。
    • Routing - やってくるリクエストをコントローラ情報にマッピングするフレームワーク。
    • Serialization - 入れ子になった複雑なオブジェクトを JSON/XML などにシリアライズする。
    • Validator - 定義されたバリデーションルールに基づいてオブジェクトが正しい状態にあるのかどうかを確かめる。
    • Yaml - YAML ファイルのパーサー。
  • Symfony CMF 由来のルーティングコンポーネントを追加。
  • Guzzle HTTP ライブラリを追加。
  • Zend Feed コンポーネントを追加。
  • コアからモジュールを削除。
    • 以下のモジュールがコアから削除されたもの。 理由は同等の機能を持ったコントリビュートモジュールが利用できること。
      • Blog
      • Dashboard
      • OpenID
      • Poll
      • Profile
      • Trigger
  • Statistics モジュールのアクセスログ機能とレポートを削除。
  • XML-RPC 機能をコアから削除。
  • ユーザシグネチャサポートをコアから削除。
  • UUID ( Universally Unique IDentifiers )の生成と検証の機能を追加。
  • 言語サポートを全体的に大幅に改善:
    • ユーザのための言語の大きな改善:
      • インストーラで、ブラウザ設定に基づきユーザが望む言語を特定して選択する機能を改善。
      • インストーラがユーザのネイティブ言語で表示される。
      • 基本の言語サポートを Language モジュールに移動。
      • 言語の設定のインタフェースを大幅にシンプル化。
      • ブラウザの言語の判定を大幅に改善。
      • 言語ドメインとパスプレフィックス設定をシンプルにし一元化する形で整理。 パスプレフィックスによる判定がデフォルトになった。
      • HTML 5 言語マークアップを追加。 さらに多くの場所で言語情報がマークアップに追加された。
      • 外部の言語コードをローカル言語に割り当てることが可能に。
      • 管理者には別の言語を設定できる機能を導入。
      • サイトのデフォルト言語を変更することなく言語選択の際のフォールバック言語を独立して設定できるように。
    • インタフェース翻訳のための機能をシンプル化/追加:
      • 言語一覧から直接インタフェース翻訳にアクセス可能に。
      • インタフェース翻訳インポートをひとつのディレクトリに収める形に一元化。
      • 英語への翻訳が可能になり、英語を削除できるようになった。
      • 組み込みの翻訳インタフェースを大きく改善。
      • 単数形/複数形の発見と翻訳のサポートを追加。
      • 翻訳を変更したら記録が残るようになった。 そのおかげで、変更点の特定と翻訳のアップデートによる上書きを防ぐことができるようになった。
      • すべての Gettext ファイルはかたまりでインポートされるようになった。リソースが少ない環境によい。
      • インストール時とインストール後の翻訳のインポート/アップデートを自動化。
    • コンテンツ言語サポートを改善:
      • 言語をタクソノミーターム、ボキャブラリー、メニューアイテム、ファイルに割り当てることが可能に。
      • フィールド翻訳ベースのコンテンツ翻訳モジュールを追加。 これはすべてのコンテンツエンティティに利用可能。
      • ノードコピーベースのコンテンツ翻訳モジュールを削除。
      • エンティティタイプとサブタイプのそれぞれに対する言語のデフォルト設定を導入。
      • 検索モジュールにエンティティの言語パターンのサポートを追加。
      • 検索のインデクシング処理とクエリプリプロセッサが言語情報を持つようになった。
      • コンテンツ翻訳の権限とコンテンツ編集の権限の粒度を統一した。
      • エンティティフォームでの言語セレクタが自由に並び替えられるようになった。
    • 設定言語のサポートのレベルアップ
      • ほとんどの設定オプションに言語セレクタを追加( Views ビュー、メニューなど)。
      • 翻訳可能な値を持つすべての設定で動作する設定の翻訳ユーザインタフェースを追加(ブロック、 Views ビュー、フィールドなど)。
      • ブロックの可視性に言語オプションを追加。
    • 大きく改善された開発者のための言語 API:
      • ユーザエンティティの言語とは別にユーザが好みの言語を持つことが可能になった。
      • t() のテキストフォーマッターが FormattableMarkup として利用可能になった。
      • Drupal.t() 、 Drupal.formatPlural() 他、ルーティング、タブ、アクション、デフォルトのメニューアイテム、コンテクスチュアルリンクなどにインタフェース翻訳コンテキストを追加。
      • ネイティブの設定言語サポートを利用するので、テキストグループサポートをインタフェース翻訳から削除。
      • トランスリテレーション(ローマ字表記置換)の API を追加(コアのマシン名だけに利用される)。
      • インタフェース翻訳 API に言語フォールバック機能を追加。
  • コアに新たに追加されたフィールドタイプ:
    • Email (メールアドレス)
    • Link (リンク)
    • Telephone number (電話番号)
    • Entity reference (エンティティリファレンス)
    • Date (日付)
  • コメントをより柔軟に:
    • コメントタイプの概念を追加(レビュー用のもの、あいさつ用のものなど)。 コメントタイプごとに異なるフィールドセットを設定可能。
    • ノード以外のエンティティタイプに対してコメントスレッドが作れるように。
  • Views と Views UI モジュールをコア化:
    • シンプルなバルクオペレーション機能を Views に追加。
    • コアの各種一覧を Views ビュー化。 /node や /admin/content/node 、 /admin/people 、いくつかのブロックなど。
    • REST API サポートを同梱。
    • パフォーマンスの改善のためにキャッシュインテグレーション部分を書き直し。
    • Views でのレスポンシブテーブルの設定が可能に。
  • ブロック管理を大きく改善:
    • カスタムブロックに、フィールド追加、リビジョン作成、翻訳追加が可能に。
    • カスタムブロックタイプの概念を追加。
    • 同じブロックを複数の場所の配置できる機能を追加。
    • ブロックの分類機能のあるブロックライブラリを導入。
  • jQuery UI チームとのコラボレーションにより行われた改善に基づいたアクセシブルモーダル API を導入。
  • コンタクトフォームにフィールド追加が可能に。 これによりサイト作成者はユーザからのフィードバックを得るカスタムフォームをかんたんに構築できるようになった。
  • Web Service モジュールパッケージを追加。
    • RESTful ウェブサービスプロバイダモジュールを追加。
    • Symfony シリアライゼーションコンポーネントを利用したシリアライゼーションモジュールを追加。
    • HAL ( Hypertext Application Language )シリアライゼーションモジュールを追加。
    • HTTP Basic 認証プロバイダモジュールを追加。
  • パフォーマンス/スケーラビリティを大幅に改善:
    • キャッシュタグを導入。 これにより、コンテンツの期限切れを素早く正確に判定できるようになる。 リバースプロキシや CDN でのキャッシングも含む。
    • キャッシュコンテクストを追加。 これにより、コンテンツが正しくキャッシュされプレースホルダが利用される。 キャッシュヒット率の改善に繋がる。
    • キャッシュアビリティバブリングを実装。 これにより、ページレンダリングをプロセスを通してアセットとキャッシュアビリティの厳密なトラッキングが可能となる。
    • ページキャッシュ機能をモジュール化。さらに、ページキャッシュをデフォルトで有効化。
    • 認証済みユーザのページキャッシュのための Dynamic Page Cache モジュールを追加。 さらにこれをデフォルトで有効化。
    • APCu 、メモリ、 PHP ファイルキャッシュバックエンドをコアに追加。 チェイン化された一貫性のあるキャッシュバックエンドのサポートとあわせて、複数のウェブサーバでの高速なローカルキャッシュの利用をサポートする。
  • MySQL を使用する場合の MyISAM のサポートを廃止。
  • テスト面を改善
    • ユニットテストのために PHPUnit を追加。 結果 IDE からテストが実行可能になった。 https://phpunit.de/manual/4.8/en/index.html を参照のこと。
    • ブラウザテストのための simpletest の代わりとして BrowserTestBase を追加(将来的に JavaScript サポートが追加される予定)。
    • KernelTestBase を追加。 異なるコンポーネントのインテグレーションテストを高速に行う API が提供された。
    • コアブランチのナイトリーテストに PHP 5.5 、 5.6 、 7 と sqlite 、 PostgreSQL が含まれる。
  • 前のバージョンの Drupal からのコンテンツと設定のマイグレーションのサポートを行う migrate モジュール(実験段階)を追加。
  • Composer のサポートを導入。
  • 自動 cron 実行機能をモジュール化。
  • IP アドレスベースのアクセス禁止機能をモジュール化。
  • セキュリティ面での改善:
    • PHP フィルタを削除。ブロックの可視性の設定に PHP が使える機能を含む。
    • 各エンティティタイプのフィールド管理は個別の権限になった。
    • SQL インジェクションを防ぐため、 MySQL 以外の PDO ドライバはひとつの文のみを実行する形に制限された。
    • Drupal が HTML を出力する場所の多くで CSS (クロスサイトスクリプティング)を防ぐため、自動エスケープ API を追加。
    • ユーザセッションとセッション ID のハンドリングを強化。
    • ルート定義における CSRF (クロスサイトリクエストフォージェリ)防衛を自動化。
    • クリックジャッキング保護がデフォルトで有効化された。
    • コアの JavaScript API を CSP (コンテンツセキュリティポリシー)に沿った形に変更。
    • リクエストに対するトラステッドホストパターンが強制された。 これによりキャッシュポイズニングとリンクポイズニングからの保護を強化する。
  • セマンティックバージョニングに切り替え、 8.1 、 8.2 といった大きなアップデートは 6 ヶ月ごとに行う形に変更。
  • その他多くの重要な変更と追加。詳しいリストは https://www.drupal.org/list-changes/drupal を参照のこと。
  • 多くのバグフィックス。
  • 多くの API ドキュメント改善。
  • 追加の自動テストカバレッジ。

翻訳ここまで。

以上です。 いかがだったでしょうか?

今回は Drupal の CHANGELOG のうち、 Drupal 8.0.0 のアップデートに関する部分だけを取り上げて(翻訳して)ご紹介いたしました。 Drupal 7 から 8 への改善点についていろんなところでいろんな説明がなされていますが、ひとつ、網羅的なものとしてこのリストを押さえておけば Drupal 8 の重要なポイントを把握するには間違いがないのではないかと思います。

Drupal 8 への適切な移行タイミングについてはまだまだ議論の余地がありますが、箇条書きにするだけでも 200 行にもなるこのアップデートで得られるものはとても大きいように思います。 Drupal 8 に移行する上では概念や技術の面で学ぶべきことも多いので、個人的にも Drupal 8 の開発に本格移行する時期が今から非常に楽しみです。

・・・

最近はなかなか時間が取れず記事を書けていませんが・・・ Drupal 8 については(もちろん Drupal 7 についても)引き続き調べてこちらで学びをご紹介していきたいと思います。 今後も不定期でちょくちょく更新していきますので、またぜひご覧ください。