concrete5と「パッケージ」について

      2015/12/17

concrete5 Japan Advent Calendar 2014

この記事はconcrete5 Japan Advent Calendar 2014のリレーブログ8日目の記事です。
7日目のAsami Shimadaさんのエントリ「私がconcrete5に魅了された理由」からバトンを引き継いでいます。
Asamiさんはどこだろ~!(ブログ記事のお写真を拝見しながら)いつか関東勉強会参加の際にお会いできればうれしいです!

そしてAdvent Calendar開催から1週間経ちました!
いろんな立場のconcrete5ユーザーさんの記事を拝見できて新しい発見もできて面白い企画に感謝感謝です。

簡単な自己紹介

ざっくりですが岐阜の田舎でホームページを作っている人です。DTPもやりますが苦手です^▽^;ほか雑務。
小さい会社なので各技術の分業ではなく担当制?みたいな感じでクライアントの相談を受けながら提案(または営業からのヒアリングから)、デザイン、コーディング(必要であればCMSの導入)、その後のサポート他、なのをやっています。
また個人的な話になるとスポーツ観戦が好きです。野球シーズン中はドラゴンズを追っかけ、シーズンオフは技術勉強しています。

concrete5との出会いとか

きっかけや、使うようになってからの使用感はすでに記事にしてあるので、興味のある方は「concrete5に触れる」や「concrete5を改めて考えてみる」を併せてご覧ください。

本題

記事の内容は何にしようと考えていたのですが、「パッケージ」をテーマにしようと思います。
というのも、制作はパッケージにまとめると幸せになれる。の記事を拝見してから、ずっとパッケージが気になって気になって仕方なかったのでこれを機にパッケージに関して調べてみることにしました。(だって幸せになれるんですよ!みんなで幸せになりたいじゃないですか!!^▽^)

パッケージを使用するとどう幸せになれるかというと、今まで自作していたテーマカスタムテンプレートはそれぞれthemes内やblocks内に個別にアップしていたけれど、パッケージとしてひとまとめにすることでメンテがラクですよ。という作業効率が改善されて幸せになれるところですかね。
packagesというのは今までマーケットプレイスで配布されているアドオンをここに突っ込む!という程度の認識しかなかったので
これを機にそこから一歩進んでみようという魂胆です。concrete5を始めた方が多いみたいなので、いきなりパッケージといわれても「???」となるかもしれませんが、パッケージってこういうこともできるんだな、くらいに軽い気持ちで見てもらえれば幸いです。

今回のデモを紹介するにあたって。

さて、そんな便利そうなパッケージ。
今回はこちらのページの動画を参考にして、テーマをパッケージ化してインストールしてみようと思います。
が、ごめんなさい、もう言いたくもないんですけど英語が全然わからない!ので!!解説が!!!できないの!!!!すみません!!!!!
あとは5.7をベースにしていますので私の検証含んでいますし、また今後変わる可能性もあることをあらかじめご了承ください。

準備します

2
ローカルにconcrete5の5.7をインストールしておき、上記のようにpackagesフォルダの中に今回作ったパッケージ(フォルダ名:oikawa)をいれ、さらにパッケージ内にthemesフォルダを作り、その中に使用するテーマ(フォルダ名:immature)を入れてあります。
※今回はサンプルとしてimmature内の中身は「Elemental」(5.7系のデフォルトで使用されているテーマです)をごっそりもってきています。

ファイルの準備

パッケージ(フォルダ名:oikawa)の中身
12
・controller.php
・icon.png(97px×97pxのPNG形式。パッケージを示すアイコン画像で、テーマフォルダ内のサムネイル画像とは別モノです。)

無くてもいいかも?なファイル
・LICENSE.TXT(ライセンスが書いてあるファイル。マーケットプレイスにあるファイルはThis software is licensed under the terms described in the concrete5.org marketplace. Please find the add-on there for the latest license copy.って書かれています。)
・INSTALL.TXT(インストール手順が書いてあるファイル。)
・CHANGELOG(パッケージのバージョン情報が書いてあるファイル。)
・README.md(パッケージの添付文書が書いてあるファイル。)

controller.phpの中身

PSR-2に準拠したコーディングにしなければいけないようです。
・・・がすみません、PSR-2というものを今知ったので、紹介するコードが5.7に最適なコードとはいえないかもしれません。今日から覚えます。

namespace Concrete\Package\Oikawa;

use Concrete\Core\Package\Package;
use Concrete\Core\Page\Theme\Theme;

defined('C5_EXECUTE') or die(_("Access Denied."));

class Controller extends Package
{

	protected $pkgHandle = 'oikawa'; //パッケージハンドル
	protected $appVersionRequired = '5.7.1'; //concrete5のバージョン
	protected $pkgVersion = '1.0'; //パッケージのバージョン

	public function getPackageDescription()
	{
		return t("Adds 01kawa Theme.");  //パッケージの説明
	}

	public function getPackageName()
	{
		return t("Oikawa"); //パッケージ名
	}

	public function install()
	{
		$pkg = parent::install();
		Theme::add('Immature', $pkg); //テーマのインストール
	}
}

5.6までの違いは名前空間(namespace)とuse演算子です。
名前空間は Concrete\Package\パッケージ名といった感じでパッケージ名は大文字でつけます。
use演算子はまだイメージがつかみきれていないのですが、パッケージやテーマを制作する際に必要な情報(外部クラス)を引っ張ってくることができるみたいです。今回は動画にならって記述していますが適宜変更してください。

それからパッケージに関する情報も必要です。
パッケージハンドルはマーケットプレイスで配布する場合は他の方とかぶらないように配慮が必要だそうです。(IDをつけることが推奨されています。)
concrete5のバージョンは動作する最低のバージョン。
ここをたとえば最新の5.7.2.1にすると、5.7.2のバージョンでは動かせません。
パッケージの説明はインストール時にパッケージ名の下に表示されます。
installの中はパッケージをインストールしたときに展開する内容をいれていきます。

concrete5 -- 機能追加 2014-12-07 12-55-31
うまくいけば「機能追加」内インストール待ちのところにパッケージ情報が表示されます。

さっそくインストールといきたいところですがテーマ側の修正も必要です。

テーマの修正

3
テーマ「immature」の中身です。
先述したとおり、Elementalのファイルのままなんですけどパッケージ化にあたりちょこっと修正しました。

【1】Elementalpage_theme.phpのnamespaceの箇所を下記に変更。

namespace Concrete\Theme\Elemental;

namespace Concrete\Package\Oikawa\Theme\Immature;
use Concrete\Core\Page\Theme\Theme;

【2】description.txtを変更
Immature(テーマ名)
immature is custom theme(テーマ説明文)

【3】css/main.lessのImport core mixins so we can use themの箇所を

@import "../../../../../concrete/css/build/core/include/mixins.less";

に変更。

インストールできました。
concrete5 -- 機能追加 2014-12-07 13-05-04

テーマも有効にしておきましょう。
concrete5 -- テーマ 2014-12-07 13-28-33
これで「immatureテーマ」を使用したサイト作りができます。
また、パッケージのアンインストール時には
concrete5 -- 機能追加 2014-12-07 14-30-12
まず有効のテーマを別のテーマに変更しておかなければいけません。アンインストール後画面が真っ白になります。

ひととおりやってみた感想

5.7をベースに進めてきましたが、名前空間とuse演算子がやっぱりポイントになってくると思います。
特にuse演算子はConcrete\Core\Page\Theme\Theme;で動かなかったら\Concrete\Core\Page\Theme\Theme;にしてみるとかPageTheme;にするとか試してみるといいかもしれません。
それからもう少しパッケージについての情報がほしいところですね!たとえばconcrete5のガイドブックでは

また、テーマの場合はパッケージハンドルを「theme_」ではじめることが慣習になっています。

とありましたが他にもそういうルールがあるのかな、とか。デモはtheme_ルール無視してましたね、すみません!

パッケージの活用方法

concrete5 -- 機能追加 2014-12-07 20-50-14
私は社長に少人数向けのサークル管理(地域のスポーツクラブとか、そういうイメージです)ができる仕組みを作ってネ★と言われており、「ハードル高いな・・・」と思いつつ勉強しては手が止まりその度にお茶を濁していたんですけど(酷いですね)
今回のパッケージを勉強してみた感想としてパッケージから展開できないかなーと思っています。
ざっくりとしか考えてないんですけどサークルっていうパッケージに、テーマをはじめ行事日程を記入するブロックやそれを表示するページタイプ、カスタムテンプレートをつめておいてインストールしたらサークルサイトを作るための機能がもうある程度揃ってる・・・、みたいなのを作れたらいいなぁって思ってます。

とりあえずある程度サンプルを作って提案して社長にconcrete5っていいじゃん!と思ってもらえたら次のステップはやっぱりこれですよね~( ̄▽ ̄)b
パッケージ機能を活かしてどう幸せになるかがみえてきましたね!
concrete5を触ったことが無い方はこれを機にぜひ幸せになれる(かもしれない)concrete5を触ってみてくださいね。
始める!

今後活動していきたいこと、勉強していきたいこと

今後活動していきたいことですが第40回名古屋勉強会後の懇親会で「ホームページの提案をする際にプラン(パッケージ)があればいいよね」というお話から広がってconcrete5 パッケージ制作部ができました。
簡単にご紹介すると上のサークルの事例とも重なるんですけどconcrete5を使ったホームページパッケージを作りたいです!
・・・がまだまだスタートしたばかりなので私も今後の展開が楽しみです。
どういうものを作っていくかという仕様のところから、プランとか、今回のような名前空間のつけ方などの技術に関するものまで考えなきゃ、やらなきゃいけないことはたくさんです!
とりあえず足を引っ張らないようにがんばります^▽^;
facebookの更新を怠けてたので、もうちょっと頑張らねば・・・!

それに伴いconcrete5の中の、次に勉強したいところが定まってきた気がします。パッケージで何ができるのかという技術的なことを中心に、パッケージのアップデートはどうするのかとか、XMLなどのconcrete5独自ルールとか、データの保存とか引っ張り出し方とか。
あとPSR-2とかの標準化の波に乗っていけるように・・・。
次回のコンなご勉強会や2月のCMS Fun Nagoyaには行く予定ですが、上記の内容を勉強する機会があればぜひ声をかけてくださるとうれしいです~!お財布と要相談します(笑)

今回の記事を書くにあたって拝見したページなど

制作はパッケージにまとめると幸せになれる。・・・銀ねこさんのエントリでは5.6のパッケージ方法が紹介されています。ナイスタイトルに心鷲掴みにされました!
Overview & Full Screencast・・・5.7の開発ドキュメントです。
fruitful・・・マーケットプレイスで販売されている、5.7ベースのフリーのパッケージです。テーマのほか独自ブロックやカスタムテンプレートなどのいろんな機能がパッケージされています。勉強させていただきました。
concrete5 アドオンの5.7対応例・・・菱川さんがアドオンの5.7対応方法をエントリにしてくださってます。名前空間とかuse演算子とかおさえておきたい方には特にオススメです。
あとは海外サイトですがCodeBlog.chとか、Andrew Emblerは検索キーワードで探しまくってたらよく検索結果ででてきました、書いてある内容については以下略なんですが、参考にさせていただきました。
この場を借りてお礼申しあげます。

実際に動かしながら「あーなるほど」とか「なんで動かないんか?」とか試行錯誤しているのですが、
それを多くの方に理解してもらえるように文章で説明するのはむずかしいですね^^;
普段覚書程度の記事しか書かないので貴重な体験をさせていただきました。

concrete5 Japan Advent Calendar 2014 9日目にバトンタッチ!

みなさんよいクリスマスとconcrete5ライフを!!
concrete5 Japan Advent Calendar 2014、まだまだ続きます!
明日はsouichirho.ishikawaさんの「Debian 系Linux で concrete5 サイトをセットアップしたときに感じたよい点、課題点」です!お楽しみに!!

追記

1年後のアドベントカレンダーもパッケージについて書きました。

 - concrete5