これは Drupal Advent Calendar 2018 18 日目の記事です。
こんにちは。スタジオ・ウミの山中です。
去る 2018/11/17 に開催された Drupal Camp DEN のセッションで 「一歩進んだ Views の使い方」と題して Views でできることと作り方の要点をいくつかざっくりとお伝えしました。当日は時間が限られていたこともありいろいろ端折ってしまいましたので、フォローアップとしていくつか記事を投稿します。今回はスライド 12 枚目の 「CSV / JSON への書き出し」を詳しく説明していきます。
ユーザーの動線を解析しマーケティングにつなげていくといったマーケティングオートメーションはここ2年ほどで急激に流行していますね。登録されたユーザーのアクセス情報、ECサイトの購買情報、お問い合わせフォームの送信済の情報などの解析したいデータは Excel 等の表計算ソフトや他のシステムでも扱いやすい CSV で書き出したいところ。 また、DEN の基調講演で Aquia 社の Preston さんがおっしゃっていたように、今後の Drupal は デカップルド(フロントエンドとバックエンドの分離化)が進み、 API ファーストを推進していく方向にあることから今後 JSON の需要も拡大していくことでしょう。
…と、前置きはこのくらいにして、この記事ではそんな需要の高まりを感じる CSV や JSON ファイルの Views を使った Drupal での書き出し方法を詳しくキャプチャ画像も交えてご説明いたします。
今回の開発の前提条件
環境・要件・条件
- 環境:
- Drupal 8.6.x
- Drupal インストール時のプロフィール(プロファイル)に
standard
を選択している - Drupal は日本語化されている状態(インストール時に日本語を選択していればOK)
- 要件: Article コンテンツタイプで登録済のコンテンツの タイトル と 画像URL(フルパス) の情報を JSON や CSVファイルに書き出す
- 条件: Article コンテンツタイプにはすでにいくつかコンテンツが登録されている
使用モジュール
今回利用する寄与モジュールは以下の1つだけです。
パッケージ | 名前 | バージョン |
---|---|---|
ウェブサービス | Serialization (CSV) (csv_serialization) | 8.x-1.4 |
ちなみに、書き出すのが JSON のみであれば Serialization (CSV) モジュールはインストール不要です。 また、下記のコアモジュールもインストールします。
- RESTful Web Services (rest)
- Serialization (serialization)
上記モジュールがそれぞれ有効化された状態からスタートします。このあとの作業工程では CSV ファイルの書き出しを行っていますが、JSON ファイルの書き出しも1つの作業を除いて同じ工程で設定を進めることができます。
Views で CSV ファイルの書き出し
前述の条件の通りコンテンツは作成済の想定ですので早速 Views を作成からとりかかります。
以下のページにアクセスします。
ホーム » Administration » サイト構築 » ビューズ
(パス: /admin/structure/views)
「 ビューを追加 」をクリックします。
下記の情報を入力しします。
- ビューの名前: わかりやすい名前でOKです。今回は 「Article データ」にしています
- システム内部名称:
article_csv_json
としました。 - ビューの設定: 表示 [ Content ] タイプ指定 [ Article ] 並び順 [ 新しい順 ]
- REST 出力を提供する: チェックを入れる
- REST エクスポートパス: CSV をダウンロードするための URL のパスとなります。ここでは
article/data
としました。
ビューの名前 や REST エクスポートパス などはお好みで自由に設定するとよいでしょう。
情報を入力したら「 保存して編集 」をクリックします。
次の画面に移ったら続けて フォーマット: シリアライザー の右にある 設定 をクリックします。
受け付けるリクエスト形式 のうち、 csv にチェックを入れ、 「 Apply 」をクリックします。
ここで json を選択すれば JSON 形式で作成することができます。
続けて 表示: の右にある Entity をクリックして Fields を選択して「 適用 」をクリックします。
すると REST export: 行スタイルのオプション というモーダルウインドウが出てきますが、あとで調整しますので特に何も変更せずに 「 Apply 」 をクリックします。
ここまできたら FIELDS にタイトルフィールドが既にあるはずなので、あとは画像フィールドを用意します。 今回は画像のフルパスを取得したいのですが、単純にフィールドを追加するだけではドメインも含めたURLは取得できません。少し工夫して取得することにします。
Views の設定画面の3つ目のカラム、 高度 の中の リレーションシップ の 追加 をクリックしたら Article のコンテンツタイプで使用されている画像フィールドをクリックし、「 リレーションシップを追加して設定 」 をクリックします。管理用タイトルは任意でわかりやすいものを設定し、 「 Apply 」 をクリックします。
画像のリレーションシップが追加できたら次は FIELDS 右の 「 追加 」 をクリックし、カテゴリが ファイル の URIを選択して 「 フィールドを追加して設定 」をクリックします。
リレーションシップ が 画像 になっていることを確認したら Display the file download URI にチェックを入れ 「 Apply 」 をクリックします。
あとはカラム名を変更したいのであれば 表示: Fields の右にある 設定 をクリックし、それぞれのフィールドのエイリアスに変更したいカラム名を入力して「 Apply 」をクリックします。
最後に「 保存 」をクリックすれば CSV の作成は完了です!
設定したパスにアクセスしてみましょう。 今回の記事で作成したパスなら下記の URL でアクセスできます。
http://ドメイン/article/data
多くのブラウザであればアクセスするとダウンロードを開始しますので、保存してファイルを開いてみてください。弊社 Web サイトのお知らせを5件登録した状態でアクセスすると、下記の内容の CSV ファイルを取得することができました。
article_name,image
"「Drupal Camp DEN Japan Vol.1」に出展します",http://ドメイン/sites/default/files/2018-12/Drupal_camp_Banner.png
2018年度夏季休業のお知らせ,
"第12回 Web&デジタル マーケティング EXPO【春】出展のお知らせ",http://ドメイン/sites/default/files/2018-12/japanitweek2018.png
年末年始休業のお知らせ,
"国内Drupalサイトギャラリー「Drupal Dawn」公開のお知らせ",http://ドメイン/sites/default/files/2018-12/drupaldawn-img.png
ついでに JSON で設定したら下記の様に出力されました。
[
{
article_name: "「Drupal Camp DEN Japan Vol.1」に出展します",
image: "http://ドメイン/sites/default/files/2018-12/Drupal_camp_Banner.png"
},
{
article_name: "2018年度夏季休業のお知らせ",
image: ""
},
{
article_name: "第12回 Web&デジタル マーケティング EXPO【春】出展のお知らせ",
image: "http://ドメイン/sites/default/files/2018-12/japanitweek2018.png"
},
{
article_name: "年末年始休業のお知らせ",
image: ""
},
{
article_name: "国内Drupalサイトギャラリー「Drupal Dawn」公開のお知らせ",
image: "http://ドメイン/sites/default/files/2018-12/drupaldawn-img.png"
}
]
さいごに
キャプチャ画像を多めに説明いたしましたが、いかがでしたでしょうか? こういった CSV や JSON への書き出しは Drupal 7 の Views でも対応できましたが、 Drupal 8 からは Views や REST API がコアに搭載されたことで更に作りやすくなりました。 こういった Views の作り方をおさえていくことで、アイデア次第でできることが増えることでしょう。
それでは、よい Views ライフをお過ごしください ;)
募集しています
スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。