baserCMSで管理画面を即席で作る

baserCMS Advend Calendar 2012の25日目です。前日は、柴田さんの「開発スピードを爆速にしたいプログラマへ!baserCMSのテーマ16選」でした。
なぜか流れ的に僕が最後のトリを締めさせて頂くことになりました。

Advend Calendarでいろんな方の記事を見てみると同じ技術対象でも求めているモノが違ったり、立場の違い(PG, デザイナー, ディレクター, サイト運営者等)で違う解釈やアイデアがあったりしてすごく面白いと思いました。僕ごときがトリで締めるのは恐縮ですが、最後なんでまずは感想を。

Advent Calendarの感想

12/17(月) 「オレカスタマイズテーマから新しく配布されている公式テーマに変更してみた実録」隆行 権藤さん

テーマコンテストで色々テーマが増えてきましたが、時間がなくてまだ全然試してなかったのですが、試したい気にさせていただきました。

12/18(火) 「CSSフレームワークのFoundation 3をbaserCMSのテーマに対応させました(一部のみ)」 Kaneuchi Toruさん

Twitter bootstrapは知っていましたが、Foundation 3というCSSフレームワークは知りませんでした。もう少し調べて良ければ採用したいなーと思います。

12/19(水) 「baserCMSとお仕事と僕」リュウジ エガシラさん

今までのご苦労とbaserCMSの歴史で楽しく拝見させて頂きました。
コミュニティとってはすごく重要な話だと思います。フォーラムなどで機能追加要望を出してもbaserのシンプルという主義に合わなくて拒否られるのを見たりします。提案した人からすればそれはすごく納得いかないのではないでしょうか?ご本人の実益もあるでしょうが、それでも客観的に判断してよかれと思って提案されている訳ですから。
でも「baserCMSが何故生まれてどういった思想がある」のかが分かれば納得ですね。そういう意味で作者の思想を知るのは大事だと思います。

12/20(木)「自分のパソコンに開発環境を作る」松岡 謙治さん

僕もほぼ同じ環境(Virtual box + Ubuntu)で開発とかしていますが、Sambaとか使っていなかったので参考になりました。

12/21(金)「デザイナーさんでも出来る! baserCMS のプレフィクス認証機能を使ったログイン画面の作り方」Kyo Hata さん

今までAuthコンポーネント駆使して自前で作りまくってました。目からウロコでした。要件に合えばぜひ使いたいテクですね。

12/22(土)「baserCMSのプラグイン作り(フック処理)を楽しんでみましょー。」arataさん

個人的にすごく参考になりました。実は、この記事がなければ今日の僕の記事はプラグインに関して書くつもりでした。でも僕が書くとなんか仕組みとかダラダラ晒してみたいな感じになっちゃうので、プラグインを普段から書かれている人の記事はさすがにより実践的で価値があると思いました。

12/23(日)「baserCMSのライセンスのステキな関係 」Sunao Kiyosueさん

OSSのライセンスは僕がこの業界に入る前に(僕は異業種からなんの因果かIT業界に迷い込んでしまった人間なので)、Linuxとかストールマンなどのことを色々調べている時に書籍で勉強した経験があって「コピーレフト」って言葉を久しぶりに目にしてすごく懐かしかったのです。僕自身は経営をやっておりませんのでそれほどライセンス自体を意識したことはありませんでしたが今後はもっと意識したいと思い直しました。

12/24(月) 柴田篤志さん

Croogoは知っていたんですがWildflowerっていうのは知りませんでした。ちょっと調べてみようかと思います。(いや浮気したい訳ではなくて。。。)
書かれていることはなにかシンパシーを感じました。案件自体それほど多くないですがあっても短納期で予算もあまりない案件が多くて、それほど意識が高くなく平均的なスキルしかないサラリーマン的なプログラマーだと厳しい開発の現場になってきたように感じます。
受注の段階でもう上から流れてきた案件で技術が決まっていたり、工夫をして工数を短縮できる余地が無く、そのままやって残業繰り返してプライベート時間が無くなった挙句、予算割れとかどうしようも無い時もありますが生産性をあげようとフレームワークを絞ったりCMSのようなものを用意して武器を持とうとすることは重要だと思います。
プログラマーでも費用対効果とか利益的なことを考えないといけない時代になってきたのかもしれません。

管理画面を即席で作る

では、僕の記事に入りたいと思います。1回目はかなり堅苦しい記事を書いてしまったので今回は、ゆる〜い感じにしたいと思います。

一応、システムはDBからデータを取得したり動的な画面を生成したりはしますが管理画面がないケースがあったりします。それは運用をお客さんの方では行わず技術者がDBをphpMyAdminなどでデータを追加したり編集したりして行うような場合です。このようなシステムっていうのはほぼ予算の関係で優先度を付けて機能を削ってしまった挙句こうなってしまうか、納期的な都合でリリースを分けてファーストリリース時にはそうなってしまうケースが多いです。

ですが納品時に「やっぱり、管理画面はないとつらいよねー。編集したりしたいんでそら必要ですよ。(でも金は無いけど)」みたいな不条理なことが起こってしまったりします。その際は予算追加とか「言った言わんかった」みたいな感じになるのですが、実経験をもとにそこをbaserCMSで乗り切った話をします。

てっとり早く管理画面とマスタメンテを作る方法は無いか?
そうだマスメンはCakeのbakeで作ろう!
管理画面はどうする?認証系は?結構面倒なんだよね。最悪basic認証にする?
そうだbaserCMSを使おう!

みたいな感じの流れからbaserCMSを管理画面専用のアプリケーションとして用意することにします。

ステップ1

ドキュメントルートに通常どおり、htmlファイルなどを配置したい場合を参考にbaserCMSを用意します。

ディレクトリ構造は下記のようになります。

ユーザからはhttp://hostname/base/adminみたいなURLでアクセスできるようにする訳です。baseの部分は好きにしていいと思います。admin/adminってなるのが嫌でbaseってやってますがなんでもいいです。管理画面が欲しいっていうのが目的なだけなので。

ステップ2

インストーラに従ってインストールします。

ステップ3

必要な機能や画面をOFFにします。

システム設定で携帯とスマホの機能をOFFにします。スマートURLはmod_rewriteを使える環境ですとONにします。

プラグインを全てOFFにします。

ページを全てOFFにします。

ステップ4

シンプルなスケルトンに変更する

Not Foundの画面は下記のようになるので、必要に応じて画面を編集してやる必要がありますがここでは割愛せて頂きます。

ステップ5

管理者ユーザがアクセス出来るページを制限する為にアクセス制限設定を編集します。

新しく作成したアプリケーションのマスタ画面のみアクセス出来るよう権限を新規作成します。

必須ではないですが、プラグインは使用しないのでプラグインのテーブルは削除します。まだまだ要らないテーブルもありますが無難なところで妥協しています。

ステップ6

管理ユーザを1つ増やし、ステップ5で作成したアクセス制限を適用します。

ステップ7

作成したユーザでログインし直します。

どうでしょう!CMS機能が無いスケルトンな管理画面が出来ました。ここからはCakePHPのスキルがあれば拡張していけると思うので割愛しますが、サブディレクトリに管理画面を作成しマスタメンテに必要な機能だけを作って、てっとり早く要件を満たすことができました。数時間で実装して「おおー!すごいですね」「いやー、こんなんでよければ。。。」みたいな感じになります。

baserCMSというよりCMSの機能をOFFにしてますのでただのbaserということになりますが、別にサブディレクトリにしなくてもコレをメインにしてその上に独自アプリケーションを構築していけるなど、ケース・バイ・ケースでいろいろやれます。

baserCMSを別にCMSとして使わなくてもいいというかなりイレギュラーな使い方ですが、色々試せること自体がbaserCMSの良さでもあります。開発者としては様式美みたいなものがあって別のフレームワークとか技術を使ったシステムの公開ディレクトリ内にサブディレクトリ化したCakePHP1系のCMSの管理画面があるキメラっぽいシステムは作りたくはないですが、予算、工数、手間という制約があるなかでこれが求められるベストに近いのなら試してみる価値はあると思います。

PHPMatsuriの発表で、CMSとしてはCakePHPが1.2でも問題ないが開発者としては不満だと言いましたが、CakePHP2に対応っていうのもCMSとして使うだけではなく再利用可能な足場的な使い方もあるのでベースとなる部分が最新のCakePHP2っていうのは重要になってくるんですね。開発で使いたいのはCakePHP2の最新機能だったりしますので。

最後に

Advent Calendarに人生初でしかも2回も投稿するといった経験をしましたが、これまではスキルのめちゃくちゃ高い方が惜しげも無くノウハウを晒すというようなイメージを持っており自分が参加することがあるなど夢にも思っていませんでしたが勇気を出してやってみて良かったと思います。自分がたいしたことが無いと思っているノウハウでも他人にとってみれば価値のあることもあるかもしれません。

来年もAdvent Calenderがあればもっといろんな方の知見やノウハウを知りたいです。今回参加していない方もぜひ参加されることを期待しております。

有難うございました。