本文へ移動
STUDIO UMI
DRUPAL BLOGDrupalブログ

Drupal 9対応 Twig1からTwig2への変更点

Koki Kubota

こんにちは。久しぶりのブログ投稿となります、スタジオウミの久保田です。
先日Drupalの認定試験であるアクイア認定プログラム外部リンクのDrupal 8認定トラック全試験に合格し、グランドマスターとなることができました!
弊社では3人目のグランドマスターとなります!

2020年6月3日にDrupal 9のリリースが予定されていますね。
Drupal 8からDrupal 9への変更点の1つとして、Twigが1系から2系にアップデートされます。
今回はTwig2系へのアップデートに伴い、対応が必要となる変更点をご紹介します。

なお本記事の内容はDrupal.orgのPreparing for use of Twig2 in Drupal 9外部リンクを意訳したものになります。

Twigとは

TwigとはSymfonyフレームワークの一部であるPHPのテンプレートエンジンです。
Drupal 8からデフォルトのテンプレートエンジンとして採用されました。

Drupal 7までのPHP Templateと比較して、記述がシンプルであることに加え、
出力値がデフォルトでサニタイズされることや、テンプレートファイルからデータベースへのアクセスが制限されているなど
セキュリティ面でもメリットがあります。

Twigについてのより詳細な情報はこちら外部リンクをご参照ください。

Twig1からTwig2への主な変更点

それではTwig1からTwig2の主な変更点をご紹介します。

テンプレートファイル内の記述に関する変更

テンプレートファイル(*.html.twig)内の記述において、対応が必要となる変更は以下の通りです。

macroの明示的なインポート

Twig1では親テンプレートファイル内でインポートされたmacroは子テンプレートでも使用することができました。
Twig2からは子テンプレートファイルでも明示的にインポートする必要があります。

未定義ブロックの表示エラー

未定義のブロックを表示しようとするとTwig2からは例外を投げるようになります。
そのためブロックを表示する前にif文でブロックが定義されているかどうか確認する必要があります。
※ここでいうblockとはTwigの機能であるblockのことであり、Drupalのブロックとは別物です

{% if block('ブロック名') is defined %}
  {{ block('ブロック名')}} 
{% endif %} 

rawタグの廃止

HTML文字列をエスケープせずに出力する{% raw %}タグは、すでにTwig1系で非推奨となっていました。
Twig2系からはエラーとなるので、{% verbatim %}タグで置き換える必要があります。
rawフィルター(ex. {{ foo|raw }})は引き続き使用可能です。

sameasとdivisiblebyの非推奨化

関数sameasdivisiblebyは非推奨になり、代わりにsame asdivisible byを使用する必要があります。

ちなみにsameasは変数が指定された値と同値かどうかを検証する関数、divisible byは変数が指定された値で割り切れるかどうかを検証する関数です

グローバル変数 _self の出力内容変更

Twig1系以降、グローバル変数の_selfを通して、\Twig\Templateインスタンスにアクセスすることは非推奨となりました。
Twig2では{{ _self }}が現在のテンプレート名を出力するようになるため、{{ _self.templateName }}としていた箇所を{{ _self }}に置き換える必要があります。

モジュール開発者に影響する変更

カスタムフィルターなどのTwigの拡張機能をモジュール等で提供している場合は、以下も対応が必要になります。

拡張機能削除メソッドの廃止

Twig1系以降、拡張機能を削除する機能は非推奨となっていますが、Twig2で\Twig\Environment::removeExtension()メソッドが削除されます。

関数追加に関連するクラス、インタフェースの削除

Twig1系以降、関数を追加するために\Twig\TwigFunctionクラスを使用することとなっています。
関数を追加するために従来使用することができた以下のクラスおよびインタフェースはTwig2で削除されます。

  • Twig_FunctionInterface
  • Twig_FunctionCallableInterface
  • Twig_Function
  • Twig_Function_Function
  • Twig_Function_Method
  • Twig_Function_Node

フィルター追加に関連するクラス、インタフェースの削除

Twig1系以降、フィルターを追加するために\Twig\TwigFilterクラスを使用することとなっています。
フィルターを追加するために従来使用することができた以下のクラスおよびインタフェースはTwig2で削除されます。

  • Twig_FilterInterface
  • Twig_FilterCallableInterface
  • Twig_Filter
  • Twig_Filter_Function
  • Twig_Filter_Method
  • Twig_Filter_Node

まとめ

Twig1からTwig2への変更点についてご紹介しました。

大半が非推奨であった機能の削除ですので、それほど大きな影響を与える変更はない印象です。 今後も非推奨の記述は使用を控え、いずれ来るアップデートに備えておきましょう。

最後に、今回ご紹介した内容はUpgrade Statusモジュール外部リンクを使用してチェックすることができるようなので、こちらも合わせてお試しください。

スタジオ・ウミは15年以上の実績を誇るDrupal専門の開発会社です。豊富な知見とノウハウでDrupalサイトの開発や技術サポートなどDrupal関連サービスをワンストップでご提供します。

RECRUIT

新たなステージを共に歩んでいける
コアメンバーを募集しています

採用情報

CONTACT

お仕事のご相談やお見積依頼など、
お気軽にお問い合わせください。

お問い合わせ