Alpaca+_s+BootstrapでミニマルなWordPressテーマをつくってみる

wordpress-alpaca-underscores-bootstrap

肥えゆくアルパカ

現在、弊社では自社サービスのリリースに向けて開発プロジェクトを進めております。

このサービスのプラットフォームにはナチュラロジーが得意とするWordPressを採用しており、その開発では自社製テーマフレームワーク「Alpaca」の機能が最大限に活かされています。
というのも、そもそもAlpaca自体がこのサービスの設計思想をもとに生まれたものなので「最大限」に活用できるのは当然の話です。

しかし、フレームワークというものはそんなピンポイントに絞られた要件のためではなく、ある程度の多様性を考慮し、汎用的に利用できるものである必要があります。
そのため、ライブラリとしての働きも担うAlpacaには、例えば、

// サムネイルからwidthとheightを取り除く
add_filter('post_thumbnail_html', 'custom_attribute');
function custom_attribute($html)
{
    $html = preg_replace('/(width|height)="\d*"\s/', '', $html);
    return $html;
}

のようなちょっとしたフィルターフックやスニペットであったり、条件次第でget_template_partするファイルであったりと、汎用性を実現するためにストックしてきた「引き出し」がたくさんあります。

この引き出しのおかげで対応できる要件やできることの幅は着実に広がっているのですが、一方で、フレームワーク自体が肥大化していく懸念や、「ここまでの機能が必要なのか」といった疑問も徐々に増してきました。

実際、バージョン2へのメジャーアップデート前後で一気に引き出しの数を増やしたので、今やデフォルトで生成するテーマであっても一般的な企業サイト等をつくるにはややオーバースペックな感も否めません。
そのため、不要な機能を削る作業が開発の起点になることも増えてきました。

一軍を選抜する

そんなこんなで、そろそろフレームワーク自体の無駄な贅肉を落とす時期だと思い、この機会にデフォルト機能の取捨選択とライブラリ内を見直すための検証を行いました。

具体的には、Alpacaが持つ機能の中から汎用的に必要なものだけを選抜・実装することで、まっさらなブランクテーマをミニマル(かつ実用可能)な独自テーマに拡張してみるというものです。
断捨離とは逆のアプローチです(よくわかりませんが)。

せっかくなので、この検証でできたテーマを「Blanko」と名付け、デモサイトを公開しました。

https://blanko.naturalogy.net/

ブランクテーマには公式スターターテーマである_s(Underscores)を使用しましたが、もともとのCSSは不要なので最初にバッサリ削除しています。
そこにAlpacaのpackage.jsonやgulpfile.jsなど一式を置いてyarnするところから始まり、先にプラグインとダミーコンテンツを入れた上で、

予め絞っていた最低限の機能の実装 検証 追加機能の検討・実装(削除) 検証

といった手順を通しました。
検討・検証を除外して開発自体に費やした時間は正味で3時間程度です。

※時間の都合で見た目はややBootstrap感むき出しですが、今回はデザイン面は置いておきます。

プレーンな状態の_sを触ったことがある方、またはゼロからテーマをスクラッチした経験がある方でないと解りづらいとは思いますが、そのままではほとんど意味をなさないブランクテーマが普通に使える状態に仕上がりました。
感覚的には現バージョンのAlpacaが持つ全機能のうちだいたい2~3割しか使いませんでした。
フレームワークとしてのアイデンティティを保ちつつ、かつ十分な実用性を発揮するという意味ではこのあたりが最小構成ではないかという判断ですが、つまりは、このレベルをデフォルト値に設定しておけば無駄なく効率的なプロジェクトの始点をつくることができるのかもしれません。

検証してみて

とりあえず、実際に試してみると思っていた以上にいろいろな発見がありました(重複や無駄も含めて)。
中でも、機能やデザインを削ったことによって得られた軽量さ・レスポンスの速さからは、今後改めて改善していくべき課題も見えたように思います。

現在は自社サービスまたはクライアント案件の開発でのみ採用しているAlpacaですが、こうした検証やデモンストレーション、導入サービスでのフィードバック等をもとに改善を重ね、近い将来には何らかの形で皆様にも触れていただく機会をつくりたいと考えております。

開発中の自社サービスについても、詳細はまた改めて。

※今回できた「Blanko」の身の振り方(GitHubでソース公開するか、安価で販売するか)については現在検討中です…。