REST UI

ウミメンバーが選ぶ個人的に好きなDrupalモジュール BEST3!

こんにちは、ウミの森山です。

実は先日、ウミで働いているメンバーたちに「個人的に好きなDrupalモジュール BEST3」についてアンケートをとってみました。日々Drupalに親しみDrupalと格闘している(?)ドゥルーパリストたちが選ぶモジュールは一体どんなものなのか興味が湧きませんか?(私だけだったらすみません..)本日はそのアンケート結果をご紹介してみたいと思います。

今回は、各モジュールの簡単なご説明の他、選出理由を書いたコメントも一緒にご紹介しています。「Drupal開発会社のおすすめモジュールを聞いてみたい」という方や「どんなモジュールがあるのかサラッと情報を仕入れておきたい」という方に、メンバーの生の声とともにお楽しみいただければ幸いです。

※今回の記事はあくまでウミメンバーの個人的な感想を紹介している記事となります。一般的に人気のあるモジュールについては、大野が以前にご紹介した「Drupal 8 定番モジュールランキング トップ20【2017年9月更新】」をご参照いただければと思います。

それでは早速いってみましょう!

第1位: Viewsモジュール

堂々の第1位は「Views」です! この結果は薄々予想されていた方も多いのではないでしょうか?

Viewsモジュールは、Webサイトでよく見かける「新着情報」や「ニュース」の表示にも欠かせないDrupalの定番モジュール。データベースからコンテンツを取り出して、リスト表示やテーブル表示、一覧ページやブロックの作成などなど、ここに書ききれないくらい様々なことを、なんとGUI操作だけで行なうことができてしまうスーパーモジュールです。そういえば私が入社して初めて覚えたモジュールもViewsでした。

Drupal7ではコントリビュートモジュールという位置づけでしたが、Drupal8からはコアモジュールに仲間入りを果たしたことからも、そのお役立ち度が伺えますね。

Viewsモジュールを選んだメンバーの声を以下にご紹介しておきます。

  • 「ありとあらゆるコンテンツを管理画面上から、好きなフォーマットで、ダイナミックに表示できるから。」 
  • 「設定のみで、ページや画面の埋め込むブロックを簡単に作成出来る」
  • 「お知らせやブログなど配信するコンテンツに非常に便利なよろず屋って感じです。」
  • 「こんなことまでできるのかといつも驚かされる万能選手。ビューズなしにDrupalは語れない超絶便利なモジュール。」

第2位: Develモジュール

そして注目の第2位は、「Devel」モジュールでした!私自身はあまり触れる機会の少ないモジュールですが、開発者用に様々なデバッグ用の機能を提供してくれるモジュールで、エンジニアの皆さんにとっては必要不可欠な存在のモジュールだそうです。

Develモジュールを選んだメンバーの声はこちら。

  • 「デバッグ用モジュール!これがないとやっていけないと思います。。」 
  • 「カスタムモジュール開発時にデバッグ機能を提供してくれるので、困った時にデバッグして効率的に開発をすすめられるので」 

どのコメントもエンジニアさんのコメントですが、一つめのコメントは特にその依存度が伺えますね!文末の「。。」にはどのような想いが込められているのでしょうか(笑)

第3位

第3位は得票数が割れる結果となりましたので、以下にモジュールについての簡単な説明と選んだメンバーのコメントとともに順にご紹介しておきます。

Webformモジュール

Webformモジュールは、Drupalでフォームとアンケートを作成するためのモジュールです。ユーザーがフォームに入力した結果を任意のメールアドレス宛に通知することができ、Excelまたは他のスプレッドシート等に結果をエクスポートすることも可能です。また、簡単な統計レビューを提供することもでき、機能を拡張するための広範なAPIも備えています。

  • 「完成度が高く、他のCMSでもこれほどの機能を持ったお問い合わせフォームは見たことがない」

Paragraphsモジュール

Paragraphsモジュールはコンテンツ作成のための新しいソリューションを提供するモジュールです。 パラグラフモジュールを利用することで、予め定義した独立した段落タイプを用意・選択いただけるようになるため、WYSIWYGのボディフィールドに画像や動画を含むすべてのコンテンツを突っ込むということはなくなり、更新担当者さんにとってより分かりやすく使いやすい管理画面を提供することができます。段落タイプは、単純なテキストブロックや画像から、複雑なスライドショーまで、様々な要素を扱うことができます。

  • 「フィールドとエンティティを紐付けることができてデータ構造の可能性が特段に高まったから。上手く利用すると、HTMLがわからなくても見栄えを保った素敵な管理画面を作れるから」

REST UIモジュール

REST UIモジュールは、GUIよりREST APIの設定を行うためのモジュールです。 弊社小林が「RESTful Web Services と REST UIで始めるDrupal8 REST API入門」というブログを書いていますので、こちらもよろしければご参照ください。

  • 「管理画面上からRESTの設定ができて便利です。」

Videoモジュール

ビデオモジュールは、任意の形式で動画をアップロードし再生することができるモジュールです。動画のサムネイルを自動作成したり、Amazon S3のようなクラウドファイルシステムからビデオをコピーして配信することもできます。

  • 「動画埋め込みを勝手にやってくれるので、、」

Metatagモジュール

メタタグモジュールは、SEO(検索エンジン最適化)に有効とされる「メタタグ」を管理画面から簡単に設定できるようにするためのモジュールです。ソーシャルネットワーク上で共有するときのコンテンツの表示方法を制御できるメタタグ(FacebookのOpen Graph Protocol、TwitterのTwitter Cards)もサポートしています。

  • 「簡単に各ページにmetaタグを設定でき、SEOを気にされているお客様に喜んでいただけるので」

Blockモジュール

ブロックとは、ウェブページの特定の領域にレンダリングされるコンテンツのボックスのことで、それらブロックを制御するためのモジュールです。Drupalサイトを構築する時には必要不可欠な存在ですのでコアモジュールとしてDrupal本体に組み込まれています。

  • 「配置したいコンテンツや表示先のページを自由に選択でき、非常に使い勝手が良い。」

Taxonomyモジュール

こちらもコアモジュールです。キーワードをカテゴリやタグ、あるいはメタデータとして使用し、コンテンツ同士を関連付けたり、分類することができます。Drupalでは、これらの用語(Terms)は「ボキャブラリー」内に集められており、Taxonomyモジュールでは、それらのボキャブラリーを作成、管理、適用することができます。

  • 「簡単にカテゴリやタグなどが設定できて、検索やお知らせなどの利用に非常に便利。お客様側で簡単に設定いただけるのも良い。」

Multiupload Filefield WidgetモジュールMultiupload Imagefield Widgetモジュール

Drupal7用のモジュールで、画像(またはファイル)をアップロードするときに複数画像を一度にまとめて選択できる複数選択機能を提供するためのモジュールです。ちなみにDrupal8ではこの機能がコアに取り込まれたので標準で複数のファイルがアップロードできるようになっています。

  • 「何気に便利でよく使ってました。地味だけど、Drupal7サイトを更新する際にこのモジュールが入ってないと、不便でがっかりしてしまう。」

Konami Codeモジュール

多くのコナミのゲームに登場するチートコード「コナミコマンド」をDrupalサイトに設定することのできるモジュールです!ユーザーがWebサイト上で特定のコードを入力すると、画面からDrupaliconが降ってきたり(!)Webサイトが崩れ始めたり(笑)などおもしろいアクションを呼び起こすことができる遊び心溢れるモジュールです。残念ながらDrupal8には対応していないようです。

  • 「おもしろい。実際のプロジェクトで使うことは多分一生ないだろうけど、こっそり使ってみたくなります(笑)。(お客様のサイトにこっそり仕込むようなことは決してございませんのでご安心ください。)」

最後に

以上です。コアモジュールもコントリビュートモジュールも含めた様々な回答が上がりましたがいかがでしたでしょうか?約26,000ものモジュールがあるといわれるDrupalだけに、私たちのような小さなチームでも非常にバラエティーに富んだ回答結果となりました。

今回はウミメンバーから見た人気モジュールをご紹介いたしましたが、今後も開発者目線とはまた違った角度からDrupalについてご紹介していければと思います。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。

RESTful Web Services と REST UIで始めるDrupal8 REST API入門2

アイキャッチ画像 Umi->d

RESTful Web Services と REST UIで始めるDrupal8 REST API入門2

前回、RESTful Web Services と REST UIで始めるDrupal8 REST API入門として Drupalコアに含まれているRESTリソースの有効化及びREST APIを叩いた際のレスポンス等の確認を行いました。

今回は、RESTのプラグインとして独自にAPIを実装し動作確認を行いたいと思います。
試しに基本ページコンテンツタイプ(コンテンツタイプID = 'page')の一覧を取得するプラグインを作成します。

モジュール構成

/modules/custom ディレクトリ以下に下記構成でモジュールを作成します。

d8_rest_api_example
├── d8_rest_api_example.info.yml  # Drupalにモジュールを認識させる為のinfo.yml
└── src
    └── Plugin
        └── rest
            └── resource
                └── PageList.php  # RESTプラグイン

モジュール情報ファイル(d8_rest_api_example.info.yml)

モジュール情報ファイルは以下の通りです。

name: Drupal8 REST API example
description: REST API を利用したカスタムモジュール

type: module
core: 8.x

dependencies:
  - rest

RESTプラグインファイル(PageList.php)

RESTプラグインのソースは以下になります。ソースの中で特に重要となる箇所は以下の通り。

  • namespace…このネームスペースを指定することにより、RESTプラグインとしてDrupalが認識します。
  • アノテーション… @RestResource を適切にしていすることにより、RESTプラグインとして機能します。
    • id... RESTプラグインのユニークなIDです。
    • label...REST UIの管理画面に表示される、説明文です。
    • uri_paths... canonical はGETでアクセスする際のURLを定義します。
      create を指定するとPOST(patch/delete)アクセス時のパスを指定可能です。
  • get() 関数... GETでアクセスが来た際の処理を定義します。同様に post() patch() delete() 関数も定義可能です。
<?php

namespace Drupal\d8_rest_api_example\Plugin\rest\resource;

/**
 * @file
 * 基本ページコンテンツタイプのノード一覧を返すRESTプラグイン.
 */

use Drupal\Core\Cache\CacheableMetadata;
use Drupal\node\Entity\NodeType;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;

/**
 * Class Page.
 *
 * @RestResource(
 *   id = "page_resource",
 *   label = "基本ページのノード一覧を返すAPI",
 *   uri_paths = {
 *     "canonical" = "/page"
 *   }
 * )
 */
class PageList extends ResourceBase {

  /**
   * 基本ページのノード一覧を返すGETリクエストの処理.
   *
   * @return \Drupal\rest\ResourceResponse
   *   レスポンス.
   */
  public function get() {
    try {
      // 基本ページ(コンテンツタイプ='page')コンテンツタイプの存在チェック.
      if (empty(NodeType::load('page'))) {
        throw new \Exception('Content Types Not Found.');
      }

      // デフォルトのレスポンスデータ定義.
      $results = [
        'count' => 0,
        'data' => [],
      ];

      // 基本ページ(コンテンツタイプ='page')のノード取得.
      $nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties(['type' => 'page']);
      // 取得件数をレスポンスデータにセット.
      $results['count'] = count($nodes);
      // 取得したノードより必要な情報を取り出す.
      foreach ($nodes as $node) {
        $results['data'][] = [
          'nid' => $node->id(),
          'title' => $node->label(),
        ];
      }

      // レスポンスデータをセット.
      $response = new ResourceResponse($results);

      // キャッシュ無効化.
      $disable_cache = new CacheableMetadata();
      $disable_cache->setCacheMaxAge(0);
      $response->addCacheableDependency($disable_cache);

      return $response;
    }
    catch (\Exception $e) {
      // エラー発生時はエラーレスポンスを返す.
      $response = ['error' => $e->getMessage()];
      return new ResourceResponse($response, 403);
    }
  }

}

REST UI 管理画面

モジュールを有効化すると以下の通り、管理画面( /admin/config/services/rest )上に定義したAPIが表示されます。
REST2_1.png

次に「有効」ボタンをクリックしメソッドや受け付けるフォーマット等を指定します。
REST2_2.png

有効化すると、「有効」に当APIが表示されます。
REST2_3.png

最後にOperationsの「権限」より、当APIへアクセスできる権限を設定します。
(例として匿名ユーザでもアクセス可能としています。実際は運用に合わせ権限を正しく設定してください。)
REST2_4.png

REST API の実行

事前に基本ページのコンテンツを3つ作成した状態で、今回定義したAPIを実行すると
以下の通り、実行結果が取得できます。

# curl '/page?_format=json' | jq .                                                                                                                                                                                                 10:45:20
{
  "count": 3,
  "data": [
    {
      "nid": "1",
      "title": "test"
    },
    {
      "nid": "2",
      "title": "test2"
    },
    {
      "nid": "3",
      "title": "test3"
    }
  ]
}

このように独自APIもRESTプラグインを利用することにより簡単に構築できます。
Drupal8でAPIを実装されたい方はご参考にしてください。

また、弊社ではDrupalは慣れていないが、APIとして利用したい等のご相談も受け付けております。
その他Drupalに関するお問い合わせも随時受け付けておりますので、何かございましたら弊社までお問い合わせください。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。

RESTful Web Services と REST UIで始めるDrupal8 REST API入門

アイキャッチ画像 Umi->d

Drupal8ではheadless Drupalという話題もあるように、簡単にREST APIを定義できる機能があります。
RESTful Web ServicesREST UI の2つのモジュールを利用し、GUIよりREST APIを定義する方法をご説明します。

  1. REST UI モジュールのダウンロード

    REST UI モジュールはコアに組み込まれていない為、ダウンロードする必要があります。

  2. RESTful Web ServicesREST UI モジュールの有効化

    APIを提供する RESTful Web Services モジュールとGUIよりREST APIの設定を行う REST UI モジュールを有効化します。

    RESTUI_1.png

  3. REST API の設定

    モジュールを有効化すると、環境設定のウェブサービスに「REST」という項目が現れます。

    RESTUI_2.png

    REST resources画面では、以下のようにAPIとして利用可能な一覧が表示されます。

    RESTUI_3.png

  4. ユーザ情報取得APIの利用

    今回はユーザー情報を取得するAPIを試してみます。
    まず、APIを有効化し受け付けるメソッドは GET 受け付けるリクエスト形式は json 認証は cookie を選択します。

    RESTUI_4.png

    有効化するとRESTの一覧の 有効 に先ほど設定した内容が表示されます。
    設定は以上で終わりです。GUIで設定可能なので、簡単ですね!

    RESTUI_5.png

    実際にAPIを叩いてみると、以下のようにJSONが取得できます。
    URLは http://example.com/user/1?_format=json という形式になります。(_format=json のGETパラメータを忘れるとエラーになりますので注意しましょう)

    RESTUI_6.png

簡単ですが、以上がDrupal8でのREST API入門になります。
GUIよりクリックするだけでユーザやノード等がJSONで取得可能になるので、非常に便利かと思います。

ただし、上記設定の場合細かいカスタマイズ(特定の項目を非表示にしたり、項目が1つのものは配列化しないようにしたり…)は出来ないため
次回はRESTful Web Servicesを利用したカスタムモジュールを作成し、カスタマイズしたAPIを作成したいと思います。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。