CMS大阪夏祭り 2017 参加レポート

無事に帰札できて大阪と比べて涼しい札幌です。(大阪めちゃめちゃ暑かった。。)
久々の大阪でしたが、明石たこ焼き・揚げたこ焼きやモダン焼き(案件はレガシー焼き?w)など定番どころの大阪飯を堪能できた3日間でした。
そんなところでCMS大阪夏祭り2017の参加レポートをまとめました。

色々なCMSが参加している今回のイベントですが、私自身はCraft cmsを最近いじっているので、
今回はCraft cmsに関して質問・セッションを聞いてきました。

Craft cms

色々な質問に答えていただき勉強になりました。
BUNさん、ありがとうございました。m(_ _)m

セッションの内容とは別に、自分がCraft cmsで良いと思っていることだけを書いておきます。

CMS大阪夏祭り2017

データベースやデバッグモードを複数環境で分けることが可能

BUNさんの記事を読んで、Craft cmsで一番お気に入りの機能になります。

デバッグモードの設定

本番環境では必要ないデバッグモードを開発環境下だけデバッグモードにすることができます。
以下のコードをcraft/config/general.phpのファイルに記述するだけで、開発ドメインだけにデバッグモードを適応することができます。

  • craft/config/general.phpを編集する
  
<?php
return array(
    '*' => array(
        'omitScriptNameInUrls' => true,
    ),
    'craftcms.local' => array(
        'devMode' => true,
    ),
    'craftcms.net' => array(
        'cooldownDuration' => 0,
    )
);
  

複数データベースの設定

本番のデータベース・開発のデータベースを切り替えることができます。
これが一番良いと思う機能なんですが、例えばローカル・開発環境と本番でDBの参照先を変えたいことがよくあると思います。

全部のCMSを知っているわけではないですが、自分が担当したCMSだと設定ファイルはGitの対象にしないで、本番と開発で別ディレクトリに分けていたりしていました。
Craftの場合はcraft/config/db.phpの1ファイルに本番と開発の情報を書くだけで切替が可能です。
また、登録している画像の保存先なども変えることができます。素敵ですね。

1つのファイルで管理することで、Gitの運用もスムーズになります。
masterでは本番のソースコードを運用して、developではローカルまたは開発サーバで運用することができます。

  • craft/config/db.phpを編集する
  
<?php
return array(
    // テーブルの接頭辞(共通)
    '*' => array(
        'tablePrefix' => 'craft',
    ),
    // ローカル環境(開発環境)
    'craftcms.local' => array(
        'server' => 'localhost',
        'user' => 'dev_craftcms_usr',
        'password' => 'dev_craftcms',
        'database' => 'dev_craftcms_db',
    ),
    // 本番環境
    'craftcms.net' => array(
        'server' => 'localhost',
        'user' => 'stg_craftcms_usr',
        'password' => 'stg_craftcms',
        'database' => 'stg_craftcms_db',
    ),
);
  

Element API plugin for Craftを使ってみる

WordPressのREST APIやMovable TypeのData APIのような機能は、残念ながらCraft cmsの標準機能には備わっていないのですが、Element API plugin for Craftというプラグインを使うことで自由にエンドポイントを作ることができます。

使い方

Githubにアクセスするとv1とv2があります。
v1はCraft cmsの現行バージョンのもので、v2はCraft cmsの3系のものになります。
現行バージョンを入れている方は、v1をダウンロードします。

  • elementapiディレクトリをcraft/pluginsへ格納
  • 管理画面のプラグインページへアクセスしElement APIをインストール

エンドポイントの記述

  • 以下のサンプルコードをelementapi.phpで保存
  • elementapi.phpをcraft/config/ディレクトリに格納

以下のコードは、一般的なブログのデータを出力させたコードになります。
詳しい情報は、GithubのREADMEを参照してください。

  • 一覧用のエンドポイント
  • 記事ごとのエンドポイント
  • 記事タイトル
  • 記事URL
  • タグ情報
  • カテゴリ情報

api/log.jsonやapi/log/<entryId:\d+>.jsonいった形で、apiというディレクトリを切ってエンドポイント先を設定することをおすすめします。
Craft cmsにはルートの設定というものがあります。
ルート設定で外側のページURLを自由に作ることができますが、APIとして作成されるURLと被ってしまうとエラーやパースに影響が起きてしまうため、予めデータの出力先は任意のディレクトリなどを作っておくと影響は受けにくいと思います。

  
<?php
namespace Craft;
return [
    'endpoints' => [
        'api/log.json' => [
            'elementType' => ElementType::Entry,
            'criteria' => ['section' => 'log'],
            'transformer' => function(EntryModel $entry) {
                return [
                    'title' => $entry->title,
                    'url' => $entry->url,
                    'jsonUrl' => UrlHelper::getUrl("log/{$entry->id}.json"),
                    'tags' => array_map('strval', $entry->tags->find()),
                    'categories' => array_map('strval', $entry->categories->find())
                ];
            },
        ],
        'api/log/<entryId:\d+>.json' => function($entryId) {
            return [
                'elementType' => ElementType::Entry,
                'criteria' => ['id' => $entryId],
                'first' => true,
                'transformer' => function(EntryModel $entry) {
                    return [
                        'title' => $entry->title,
                        'url' => $entry->url,
                        'tags' => array_map('strval', $entry->tags->find()),
                        'categories' => array_map('strval', $entry->categories->find()),
                        'body' => $entry->body
                    ];
                },
            ];
        },
    ]
];
  

IDのzero_paddingについて

zero_paddingはデフォルトではできないようです。
MTのzero_padモディファイアみたいな機能はCraft cmsのデフォルトには無いようです。
プラグインとか探せば出てきそうですが、URLとかでzero_paddingさせたEntryIDとかで出力が好きだったのですが・・・

このあたりは、実装のときにかならず必要な部分ですので、代替案を考えながらURL設計していきたいと思いました。

IDの順番について

長くMTをいじっていて気になっていたのですが、Craft cmsのIDはカテゴリやエントリーすべて繋がっているということでした。
MTではEntryIDやCategoryIDなどがありますが、それぞれの機能ごとにIDが振られる設計だったりします。
色々触ってみていて、少し馴染めない部分だったりしていました。
把握していないですが、Craft cmsでは機能単位での紐づけが簡単にできることが強みだったりするので、こういったID構造になっているのかなと個人的に思っていたりしています。

参加してみて

Craft cmsのレポートになってしまったCMS大阪夏祭り2017ですが、
今年はしっかりとCraft cmsを触っていき、来年は案件でも導入できるようになりたいですね。

今年はCraft cmsがとにかく色々と聞きたかったので、来年もし参加できたら他のCMSのブースやセッションも聞いて回りたいと感じました。

関連・参考サイト

Author

札幌でフロントエンドエンジニアとして働いています。好きな音楽はSIAM SHADE!
SIAM SHADEの六人目のメンバーとして日々ロックを愛し続けている。
HTML,CSS,JavaScriptをベースにCMS構築が得意です。
HAMWORKS社員 https://ham.works