Archives for 12月2011

地震、解散、起業などいろいろあった2011年を振り返る

もう大晦日、ということで、いろいろ皆さんもあったと思いますが、僕もいろいろありました。そこで、今年を振り返ってみようと思います。

1月から3月頭:案件で大忙し

1月から3月の間は大きめの仕事や同時並行してのいくつかの案件をかかえておりまして、大変慌ただしく過ごしておりました。

そう、あの日までは。

3月:大地震、起きる

3月11日は、大地震が起きました。
本来は3月11日はもっと楽しい日になるはずだったんですよ。
というのも、僕の誕生日が3月11日でして。

おまけにその日はMacBook Airが届く日だったんです。
もううきうきしながら過ごしていたわけです。

117rg

が、こんな具合に事務所もめちゃめちゃに。
この崩れた一番下にMacBook Airがあります。

仕事も地震の影響でいろいろ延びました。

4月から5月:引越し、そして会社の解散

この時期は、自宅を東京の高田馬場から千葉へ引っ越すというプロジェクトが進行していて忙しかったのですが、それに加えて、5年間経営していた会社を解散することが決まり、それも忙しかったです。

あと、5月末にウェブデザインコーディネートカタログという本が出ました。あと、千葉に引っ越して、子どもが保育園に通い始めるというビッグイベントも起きています。

webyafor311という被災者支援チャリティーパーティーにも関わりました。しかしその後こういった部分の活動はできなかったので反省です。

4月9日

#webyafor311 ウェブ屋・ウェブ担 for 被災者支援チャリティーパーティー出演

5月31日

ウェブデザインコーディネートカタログ執筆

5月31日

会社を解散

6月から9月:起業、しかし引き継ぎに精を出す

6月以降はGreativeという屋号を持つ個人事業主となったのですが、Greativeの仕事を行える状況にはまだありませんでした。
というのも会社の残りの仕事がまだ残っていたからです。それでもCakePHPの勉強会をやったり、書籍のイベントをやったりと次の事業の仕込みは行っておりました。

また、この時期から自宅中心での作業になったので、今までの事務所勤務という形態から大きく変わります。
働き方の模索の一環として、コワーキングスペースやシェアオフィスといった場所での仕事を追求したりしました。
ここでの出会いが12月のイベントなどにつながったりしていくのです。

7月21日

デザイナー向けCakePHP勉強会 : ATND出演

8月18日

CSS Nite in Ginza, Vol.58出演

9月9日

菅平に開発合宿

10月から12月:イベント、新規案件ざんまい

10月を過ぎる頃にはようやくGreativeとしての仕事をスタートさせることが出来、不思議なことにいろいろなお話が発生してきました。

特にイベント関係はてんこもりで、WordCamp、CSS Nite LP 20 Shift5などビッグなイベントへの出演が決まったり、Playframework 勉強会へのLT参戦など新しいところへのチャレンジも行えました。CSS Nite LP 20 Shift5は、前評判がものすごい高く、ハードルをあげられてしまってどうしようとなりましたが、無事終える事ができました。

またWPJellyというWordPressのプラグインを作る塾みたいなこともやったりしています。

10月8日

第二回 #Playframework 勉強会 in Tokyo #play_ja出演

11月27日

WordCamp Tokyo 2011出演

12月

WPJelly出演

12月10日

CSS Nite LP, Disk 20:Webデザイン行く年来る年(Shift5)出演

こうして一年を眺めてみると、非常に波瀾万丈という感じです。
仕事的にはデザインとエンジニアリングの融合を頑張った一年だったと思っています。

無事今年も納まりましたので、来年に向けて休養をしたいと思います。

では、来年もどうぞよろしくお願いします。

Read More

横浜のコワーキングスペース「タネマキ」に行ってきたよ

今年ももうあとわずかな12月の終わりに、ふと横浜のコワーキングスペース「タネマキ」に仕事をしに行ってきました。
コワーキングスペースは、最近都内を中心にぼこぼこ立ち上がっていますが、それ以外の地域ではそこまで活発ではない印象を受けます。
僕自身は住んでいるのが千葉の新京成線沿いなので方角的には真逆です。
ちなみに横浜は津田沼から1本で行く事が可能で、電車内で座れれば比較的楽につけます。車中も開発を続けており、なかなかの成果がでました。

今回お邪魔した「タネマキ」さんは横浜。横浜にコワーキングスペースがあるのか、いくつあるのかとかも特にリサーチしていないのですが、結構ないのではないかと思っており、注目していました。

「タネマキ」は、「何かしでかす場所を作る」場所ということで、何かが起きそうなエネルギーを感じます。

IMG 3032

こちらが、タネマキの入り口です。横浜から歩いて8分くらい。僕は電車で移動中にコートを置き忘れてなくしたため、新しく買ってたりしたので40分くらいかかりました。

IMG 3033

こんな看板があります。2時間500円、1日1000円です。その日は2時間コースを選択。今はフリードリンクとのこと。バーカウンターの整備がすすんでいました。

IMG 3034

入り口です。この日は扉がぴしゃっと閉まっていたので、ちょっとびびりましたが、はじめての方も気後れせずに開けてみましょう。

IMG 3035

入ると、もくもくと仕事をしている人たちがいた!
でも、音楽がかかっていたり、ドリンクの机があったりと、もくもくの中にもわきあいあいがある感じで、自分も作業をはじめると居心地がいいことに気づきます。
気軽に話しかけてOKな感じなので、自然と情報交換がはじまったりします。

IMG 3036

入り口には現在本だなが工事中とのこと。ここには、技術書の他に、漫画なども整備していくらしいです。
期待ですね!
コワーキングスペースは、主催者の指向性により、集まる人も自然と決まってきたりします。
例えば「タネマキ」では、フロントエンド系の人が多そうな印象を受けました。

IMG 3038

主催者の一人、ウエツハラさんです。

ということで興味あればぜひ行ってみてください。

Read More

CakePHPのACLを効率的に管理する

CakePHP Advent Calendar 2011の3日目です。

@kara_dが担当させていただくことになりました。

今回はACLについて書こうと思います

ACLは、僕にとって結構CakePHPを選ぶポイントの1つで、気に入っています。
Play Frameworkにもあればいいのにって思ったりします。

ACLってなんだっけ?って方は、
ACL を制御するシンプルなアプリケーション
このチュートリアルで遊んでみてください。

そうそう、今回の記事はバージョン1.3系の話です。2.0系のACLは使った事がないですが、きっとよいでしょう。

ところで、ACLを結構使っていると言うと、俺も使ってるぜってあまりならないことが多いです。
多くの場合、

  • なんか複雑そうだったのでオレオレACLを使っている
  • そもそもプロジェクトでそういう複雑なパーミッション管理が必要でない

という感じではないでしょうか?

しかしCakePHP標準のACLは非常に便利な上に、使うことで生じるメリットがあります。

  • デフォルトで組み込まれているためメンテされており、安心
  • 既に多くの使用実績があり、なかなか厳格
  • それほど多くはないがノウハウがWeb上にある

ということで、積極的な利用をおすすめしたいです。

ACLの管理をコードでする理由

ACLと一口に言っても、その管理の方法は様々なスタイルがあり、よく使われているものにACLプラグインというのがあります。

Alaxos – CakePHP – Plugin ACL

これは、Webの画面からACLやAROのビルドやパーミッション設定が出来るというものです。非常に便利で、特にパーミッション設定などは、一覧で何が出来てなにが出来ないかを把握するのに役立ちます。
ただし、僕はこのプラグインは限定的に利用するにとどめています。

ACLプラグインは、ACL周りの設定には使用せず、現状のACLがきちんとパーミッション設定されているかの確認のみに使用します。

何故でしょうか?

実は最初の頃ACLの管理にはこのプラグインを使っていました。
しかし、CakePHPを使ったプロジェクトが大きくなるにつれて、複数人数で開発を行うようになり、ACL設定の漏れやマージミスが発生したのです。

そこで、至った結論が、「ACLはコードで管理する」というものでした。

ACLのパーミッションの管理方法について

CakePHPには、ACLの設定をコードで行う事が出来るAPIが用意されています。

例えば、Pagesコントローラーのindexについてアクセス許可をしたい場合、

$this->Acl->allow($group, "controllers/Pages/index");

という書き方で対象のグループに許可を与える事が出来ます。だいたい、僕が使うグループは、管理者グループ、一般ユーザーグループ、特殊ユーザーグループ(プレミア会員など)みたいな感じでユーザーを設定しておいて、それぞれに許可を出します。

アクセスを禁止する場合は、

$this->Acl->deny($group, "controllers/Pages/index");

denyメソッドを使います。

もちろん、これはコントローラー側でACLコンポーネントを使用するという前提の話です。
こういった感じで、各アクションのパーミッション設定をしていきます。
CakePHPでは、プラグインのアクションにもパーミッションが設定できるようになっており、

$this->Acl->allow($group, "controllers/MyCategory/Categories/index");

みたいな書き方でMyCategoryプラグインのCategoriesコントローラーのindexアクションの設定が行えます。

また、

$this->Acl->allow($group, "controllers/Pages");

という書き方をすると、該当コントローラーのパーミッションを一度に設定することも出来ます。

これらを使って、コードとしてコントローラーに書いておくことで、

  • コードとして書かれているため、Gitなどで共有できる
  • 間違いがあった場合、お互いに修正できる
  • 新しい環境での構築が楽

上記のメリットがあります。

効率的な管理

ただし、プロジェクトが進むと、アクションとグループの数が増えて、ACLのコードが膨大になったりします。
1000行超えとかあります。

さて、こういうアクション毎に設定していった大量のACLを整理するにはどうしたらよいでしょうか?
考え方のベースとしては、ACLの一括設定を有効に使っていくというのが考えられます。

スタイルとしては2つで、許可を行うものの一覧を表すホワイトリスト形式と、許可しないものの一覧を列挙するブラックリスト方式です。

ホワイトリスト形式は、こんな感じで、

$this->Acl->deny($group, "controllers/Pages");
$this->Acl->allow($group, "controllers/Pages/about");
$this->Acl->allow($group, "controllers/Pages/test");
$this->Acl->allow($group, "controllers/Pages/contact");

一旦全てを許可しない状態に設定したあと、許可するものを指定していく方式です。
許可するものを視覚化できるので、一般ユーザーなどの管理に使えます。書かなかったアクションは許可されないからです。

ブラックリスト形式は、逆に、

$this->Acl->allow($group, "controllers/Pages");
$this->Acl->deny($group, "controllers/Pages/about");
$this->Acl->deny($group, "controllers/Pages/test");
$this->Acl->deny($group, "controllers/Pages/contact");

こういう風に、全てを許可した上で、禁止するアクションのみを指定していきます。
この方式は管理者ユーザーのような、大多数の部分にはアクセスできるけれど、一般ユーザーの登録みたいなアクセスされるとなんらかの不整合が起きたりするところへ禁止する形に向いています。
ブラックリスト方式の注意点は、新しくアクションが追加されたことを知らずに、ACLを再構築してしまうと、暗黙のうちに許可されてしまう点です。

これらを駆使して、ACLのパーミッションコードを書いていくと、結構縮まります。

ということで、良いACLライフを!!

明日は@shin1x1さんです。よろしくお願いします。

Read More