投稿日:

第17回 WordBench神戸にて「jetpackって何だ?!」を発表させて頂きました。


11/10 開催の 第17回 WordBench 神戸に参加させて頂きました。

今回僕の発表予定は無かったのですが、前日「Jetpack」という WordPress のプラグインを知って感動したので、急遽お時間を頂いてLTをさせて頂きました。Jetpack は Automattic 社謹製のプラグインで、WordPress.com で提供されている便利な機能を、自分の WordPress サイトにも導入できるユーティリティパッケージプラグインです。WordPress 業界?では有名なプラグインということですが、僕は知らなかったので感動。ちょうど2.0になったばかりとのことで、有名なものでも自分の感動を共有したく、LT発表させて頂きました。以下、発表したスライドになります(Web公開にあたって少し内容調整しています)。

上記スライドでも紹介していますので、ここでは詳細は割愛いたしますが、ニーズの高そうな機能を一つにパッケージしたこのプラグインはシンプルで良いですね。各機能の幾つかには、高機能な専用プラグインが別の開発元からリリースされているものもありますが、単体パッケージでここまで出来るのは便利ですし、メンテナンス性も高いように思います。Automattic 社謹製というのも、安心ですね。

注目すべき機能の1つとして、「Photon CDN」をスイッチ ON でとても簡単に利用できるようになっています。この Photon CDN は単純なCDN機能だけではなく、画像のリサイズ、トリミング、そしてフィルターの適用など、オリジナル画像に様々な加工を施した画像を取得できるようになっています。アイデア次第で色々な事ができるのではないでしょうか? WordPress サイトからの利用のみ許可されているようですが、(たぶん)無償で利用できるサービスです。是非一度その機能の概要だけでもご確認ください。

§

今回の全体のプログラムは以下のような内容でした。

  1. 「Initializr や Boilerplateについて話そう!」 by @pictron2009
  2. 「WordPress3.5 でどこが変わるのか?」by @bren_boss
  3. 「GPLライセンスの話」by @uemera @bren_boss
  4. ライトニングトーク
    • 「jetpackって何だ?!」by @yuka2py
    • 「WordBench神戸の歴史」 by @uemera
  5.  「WordPress駆け込み寺」by 全員 (初級)

Initializr や Boilerplateについて話そう!

今回、私的に楽しみにしていたのは、冒頭の Initializer/Boilerplate のセッションです。Initializer は知っていたのですが、Boilerplate というのは初耳。憧れの @pictron2009 氏による解説で、概要を知ることが出来ました。Initializer も Boilerplate も Web フロントエンドを利用する際のベースできるファイルセットです。「Boilerplate」の方がプレーンで、どのようなコンテキストでも必須となるであろうものを集積しています。このセットの内容が、最新の Web フロントエンドの開発セットのベストプラクティスではないかとの事です。採用しないまでも、このファイルセットが選ばれた意義、意味合いを考察することで最新の Web の流れを感じ取ることが出来そうに思います。

Initializer」は Boilerplate ベースのプロジェクトで、より実践的です。Boilerplate から一歩進み、プレーンHTML5、レスポンシブWebデザイン、Twitter Bootstrap の利用という3つのコンテキストから、自分のプロジェクトに適合するファイルセットを選択してダウンロードできます。また、幾つかのコンポーネントは要否を選択もできます。

Initializer は前々から使おうと思っていたのですが、WordPress を最近弄っていたこともあり、なかなか機会が無く使えていません…。と思っていたんですが、Boilerplate ベースの WordPress テーマもあると教えて頂きました。なんと! 次の WordPress のテーマ作成の際には是非検討してみたいと思っています。

WordPress 3.5 でどこが変わるのか?

@bren_boss さんの WordPress 3.5 の変更点の紹介も面白かったですね。細かな変更点が多いようですが、個人的には「メディアライブラリ」の改良に期待!という感じです。また管理画面のメニューから「リンク」が割愛されるようです。機能的には残っているらしいとのことですが、管理画面のメニューから割愛されるということで、今後の利用や活用には注意が必要かも知れませんね。

GPLライセンスの話

次いで GPL ライセンスの話題。難しいトピックですが、@bren_boss さん、@uemera さん、@nipper_onside さん等が頑張って解説してくださいました! 僕的な理解の要約は以下の通りです。もし間違ってる部分あればご指摘頂けたら嬉しいです。

  • GPL製品を組み込んだ製品はGPLでなければならない
  • GPL製品は販売してもOK
  • GPL製品を利用してソフトウェアを作り、利用する場合、ソースの公開は不要
    • 例えば、受託開発したWPテーマのソースの公開は不要
  • WordPressの世界では、テーマに含まれる画像やCSSも、GPLまたはGPL互換ライセンスとすることが期待されている
    • 公式のテーマ/プラグインディレクトリのテーマは全てGPL

その他

ライトニングトークは、僕(@yuka2py)と上村さん(@uemera)です。僕のは上に書いたとおりです。上村さんによる WordBench 神戸の歴史紹介も興味深かったです。

投稿日:

WordCamp Osaka 2012 に登壇させて頂きました


11月3日、大阪の天満研修センターで行われた「WordCamp Osaka 2012」にスタッフとして参加、また僭越ながら僕も「エンジニアの為の WordPress入門 〜WordPressはWebAppプラットフォームです〜」というタイトルで登壇をさせて頂く機会も頂きまして、とても有意義な一日となりました。この記事では当日の僕の周りの様子などを簡単にまとめさせて頂きました。

スタッフの僕

朝 8:00 集合。列車の遅延でギリギリ到着となった僕  (^_^;A。でも、なんとか滑り込みセーフ。既に大勢のスタッフの方で熱気ムンムン。程なくセンター内に移動してスタッフ説明会。僕の役割はサービスカウンターでのお客様からのご質問対応などです。スタッフTシャツを着て持ち場に移動。既にサービスカウンターなどのセットアップは完了していて、前日からご準備頂いていた実行委員やスタッフの皆さんに感謝です! そして開場。最初は少しずつでしたが、やがてドババっとお客様が入場されて来て凄いなー状態。しかし、受付の皆さんの尽力でスムーズに入場は進んだ模様です。さすが!

やがてサービスカウンターにも質問者の方が…。どのセッションを聞いたら良いのか、という内容から、現実に目の前に WordPress 案件が入って来てどのように対処したものか?という具体的な質問までありまして、頑張ってお答えいたしました。少しでもお役に立てたのであれば良いなーと思っています。

スピーカーの僕

11時頃までサービスカウンターをお手伝いして、一旦スタッフルームへ。11:50から自分の担当のセッションがあったので、その準備です。あと1枚出来ていないスライドがあります。色々手直ししたいところも有るのですが、とりあえずその未完成の1ページはなんとか完成させないと…。セッションでどうしても伝えたい一番大事な言葉を、その1枚に込めました。完成したスライドは我ながら結構なボリューム。40分の持ち時間でお話できるのかしら?

それからしらばらく待機。このような大きなイベントで登壇させて頂くのは初めてなので緊張です…。同じ時間帯に登壇される他のスピーカーの皆さんがいらっしゃいましたので、ちょっとだけご挨拶。でも緊張でお話もそこそこに。トイレに行ったり、座ったり、立ったりと落ち着きません。余計に緊張するので、セッションのリハなどは止めておきました。MacBook Air はパタリと閉じて、僕もちょっぴり目を閉じて。

やがて、前のセッションが終わったようです。観念してセッションの部屋へ移動。途中、行列が出来ている部屋。「すごいなー」と横見しつつ奥の部屋へ。ドア付近まで来て、違うな、と気付きます。そこは大部屋、僕小部屋…。あれ?と思ってフロアマップを見ると、どうやらさっき通り過ぎた行列の部屋が僕の担当みたいです。びっくり…。自分では、かなりニッチな層を対象にしたセッションだと思っていたので、シケシケではないかと心配していたぐらいだったので…。

すみませーん…と列の間を割って部屋に入ったら、部屋の中に友人のたきぐちさんが司会担当で居てくれてだいぶホッとしました。まぁ、もう喋るしかない。諦めも肝心。そう思って MacBook をセットアップしていると、少しずつ気持ちも落ち着いて来ました。まあ、なんとかなるでしょう!

お話したスライドは以下になります。

この資料では、WordPress のカスタマイズを、
エンジニア寄りの視点で、解説させていただきます。WordPressのカスタマイズはこれからだけど、PHPには精通されている方、一般的なWebアプリケーションフーレムワークでの開発の知識のある方などを主な対象として、当初つまずきやすいと思われる箇所や、私個人が疑問に思った箇所、気付くのに時間が掛かった箇所などを紹介させていただいています。

内容が盛りだくさんだったので、だいぶ急いで喋ったつもりですが、それでも時間オーバー。運営スタッフ各位にご迷惑をお掛けしたと思います。また、後半かなり駆け足となりましたので、聞きに来ていただいた来場者の皆さんにも大変申し訳なく思っています。この場をお借りしてお詫び申し上げます。もしよければ、スライド資料を改めてご一覧いただけたらと思います!

とは言え、思ったよりは上手く喋れたと思います。後の動画配信で鼻水を出す事は必須だとは思いますが、それでも、もっとグダグダになるかと思っていたので、ワリとマシでした。ここ最近 WordBench 神戸などでお話させていただいていたからかなーと思います。

自分のセッションを終えてからはしばらく放心状態。セッションの時間をオーバーしてしまったこともあり、聞いてくださった方の感想はほとんど聞けなかったのが残念。僕のセッションを聞いていただいた皆様、もし良かったら良いものも悪いものも、どこかで感想いただけたら嬉しいです。

来場者の僕

セッション後の僕は基本的にはお役御免ということだったので、1つだけ他のセッションに聴講させて頂きました。

「おすすめ開発ツール談義」
http://2012.osaka.wordcamp.org/timetable/302-5/

NetBeans も Dreamweaver も使った事があったので、この日聞きたかったのは「Coda」の話。僕も1年位前から Mac の人なので、Coda の噂はチラホラ気になっていました。ただ僕は Android の開発もあるのでとりあえず Aptana を利用中。なので、この機会に、Coda の良さを知りたかった次第ですが、この日はとてもラッキーでした。スペシャルゲストとして Coda 2 開発元のパニックの長谷川さんも登壇されて Coda の魅力が紹介されていました。短い時間でしたので、機能の全体を俯瞰することは出来ませんでしたが「CSS に強い」というのはハッキリと分かることができました。是非試用してみたい!と思ったのですが…むむむ、使用期間が7日間しかなくて、私のお小遣いで買うにはちょっと高く、しばらくは我慢しないとな…と思っています。試用期間がエディタが体に馴染むか分かるぐらい…たとえば3ヶ月ぐらいあれば嬉しいなぁ…とボソっとつぶやいておきます。 (;゚∀゚)

主題に戻って、NetBeans も Dreamweaver も Coda も Eclipse も、そして Emacs も vim も、エディタはどれも得意分野が異なっていて、それぞれの分野で優秀で、面白いですね。どれも優劣では無いように思います。そんな中、Coda はこれまで想像していた通り、新しく僕の優れたパートナーの一つになってくれる予感がしました。なので、なんとか早い時期に使ってみたいなーと思います。

他のセッションも拝見したいものは沢山あったのですが、今回聴講者として参加できたのはこのセッションだけとなりました。残念ですが、おそらく、後日 WordCamp Osaka 2012 の公式サイトになどに動画やスライドなどが掲載されるかと思っていますので、そちらで聴講させて頂くつもりです。

さいごに

数ヶ月前。実行委員のたきぐちさんから WordCamp Osaka 2012 での登壇を依頼された時は嬉しい反面、僕につとまるものか心配していました。実際、資料の準備はだいぶ前から始めましたが、なかなかまとまらずに困り果て、そして結局当日のギリギリに何とか仕上げることが出来たという体たらくでしたが、それでもお引き受けして良かったです。僕にとってはとても新しい経験になりました。

WordPress と出会ったのは1年ぐらい前。それ以前の僕とは視界がだいぶ違っていることに、自分自身で気付いています。開発者としてもそうですし、デザイナーとしても、プランナーとしても、そしてもちろん僕という人間にとっても。それは WordPress という製品だけでなく、それを取り巻くコミュニティの存在があったからこそです。ずっと机に向かいがちだった僕ですが、最近は少し窓の外を気にして、ドアを開けて、表を歩くことに興味を抱けるようになりました。今日よりも明日、もうちょっと遠くまで出掛けてみたいなー、と今はそう思っています。

そんな僕にとって、今回の WordCamp Osaka 2012 は、ちょうど良い冒険でした。臆病な僕なのですが、これからはより、いつも同じ道を歩くのではなくて、少しでも別の道を、顔を上げて、そして出来るだけにこやかに歩いていきたいなーと思っています。

…ということで、一緒に歩いてくれる人、募集中ですw(可愛い方 優遇ですw)

 

投稿日:

オブジェクト指向プログラミングを理解する為の4つのポイント


一度理解してしまうと、もうそういう風にしか考えられなくなるけれど、理解するまではちょっと難しい、そんな「オブジェクト指向プログラミング」ですが、その理解に少しでも近づけるように、僕なりのポイントを4つ程挙げてみました。突っ込みどころも多いとは思いますが、僕なりの考えです。オブジェクト指向プログラミングはやってるけれど「何かあまりしっくりと来ていないな…」という方へ、ちょっとでも参考になれば幸いです。

1. クラスと継承は、忘れる

オブジェクト指向プログラミングの解説で、まず最初に「クラス」と「継承」の説明がなされることがよくあります。間違いでは無いでしょうし、多くのオブジェクト指向プログラミング言語ではクラスはとても重要な役割を担います。Java はクラスが無ければオブジェクトを作ることも出来ません。しかし、やっぱり一旦忘れてください。クラスや継承は、オブジェクト指向プログラミングを理解するにうえで、大きな誤解を生むことがあるからです。

「継承によって、あるオブジェクトが他のオブジェクトの特性を引き継ぐ」—— 継承についての説明です。しかし、これを単に「機能を効率的に(あるいは簡単に)受け継ぐ手段」だと理解してしまうことがあるようです。でもそれは間違った理解です。ここでの間違った理解は、典型的な「ごった煮クラス」を作成してしまう罠の入り口です。便利だから、便利だからと、あるクラスに山のようなメソッドが実装されていきます。そしてやがて、アプリケーションの大半のロジックが1つのクラスに実装され、まるでベタ書きの PHP のようになったコードを見た事があります。

クラスと継承は、オブジェクト指向プログラミングを理解する上では雑音になります。一旦忘れてください。

2. 包含関係は重要

継承関係と同様に大切な概念として紹介される概念に「包含関係」があります。オブジェクト指向プログラミングの解説ではよく、継承関係を「is-a関係」、包含関係を「has-a」関係と説明されます。継承は忘れてくださいと書きましたが、実はこの「包含関係」こそ、オブジェクト指向プログラムの実現する上でとても重要な概念ですので、しっかりと抑えることが大切です。

「オブジェクトが別のオブジェクトを所有し、その機能を利用する」—— これが「包含関係」です。具体例は次のパートで挙げたいと思いますが、例えば、あるオブジェクトAが幾つかの機能を持つ時、その機能の一部を別のオブジェクトBに担当させ、オブジェクトAはオブジェクトBを所有することで、オブジェクトBの機能を利用することを言います。

極端な話、継承は無くてもオブジェクト指向プログラミングは実現できますが、包含の概念はとても重要です。どういうわけか、オブジェクト指向プログラミングの多くの解説において、継承についての説明はたっぷりあるものの、包含についての説明は小さな扱いになっているような気がします。そのような中でクラスと継承を学ぶと、この包含関係の重要性についての気付きが遅れてしまいがちになります。ですので、しつこいですが、継承は一旦置いておいてください。そして包含関係について、重要だと思って注目してください。

3. オブジェクトは役割を持つ

オブジェクトはそれぞれ、何らかの役割を担います。役割は明確であることが大切です。オブジェクトはそれぞれの役割を与えられて、その与えられたその役割について責任を持つ。これこそがオブジェクト指向プログラミングの本質です。

では、オブジェクトの役割分担とはどういうことでしょうか? 一例をあげてみます。テトリスのようなゲームのオブジェクト構成を考えてみましょう。ざっと Game(ゲーム全体)、Stage(ゲーム画面)、Block(落ちてくるブロック)が思いつきます。底に積み重なったブロックはどう表現しましょうか? Stage オブジェクトに、配列で持ちますか? プレイの制限時間はどうしましょう?  Stage オブジェクトに終了時間を持って監視しますか? どうやらこの調子では、Stage オブジェクトはゲームのほとんどを管理する大きなクラスになってしまいそうです。

そこで、実際のスポーツの試合を考えてみましょう。コートの上にボールは有りますが、「コート」はストップウォッチを持って試合終了の笛を吹いたりはしません。それは審判やタイムキーパーの役目ですね。それと同様に、Stage は「コート」としての役目に徹してもらって、Timekeeper という別のオブジェクトを用意して時間を管理させ、StackedBlocks というまた別のオブジェクトを用意してステージ上に積み重なったブロックを管理させてはどうでしょうか。つまり、役割を分担するわけです。

これで少し役割が分担できました。Timekeeper オブジェクトは時間を管理する役割、StackedBlocksは積み重なったブロックを管理する役割を担うことになります。

また、上のコードで、Stage オブジェクトが Timekeeper オブジェクトと、StackedBlocks オブジェクトを持つことになりますが、これが「包含関係」です。Stage オブジェクトに Timekeeper と StackedBlocks が含まれて(包含されて)いますね。このように、「包含関係」は役割毎に存在する複数のオブジェクトを関連づけるための大切な方法の一つなのです。

オブジェクトを役割分担するメリットは、そのまま「オブジェクト指向プログラミングのメリット」と言えます。オブジェクトが役割毎に分けられると、それぞれのオブジェクトは小さく、そして単純になります。役割の少ない、小さなオブジェクトは、簡潔で見通しが良くなります。シンプルなコードは変更も簡単で保守もしやすいです。また、単純なロジックだけが含まれることで、バグが混入しにくくなります。プログラマは小さくて閉じた世界だけで考えることができるので、自信をもって「論理的に正しい」と言えるコードを書きやすくなり、不安も減るでしょう。また、十分に設計が上手いと、再利用性が高いオブジェクトを作ることもできます。このように、オブジェクトに明確な役割を持たせることで、様々な恩恵を得ることが出来るようになります。これが、オブジェクト指向プログラミングの最も重要な概念です。

4. オブジェクトは役割について責任を持つ

さて、役割が分担された小さなオブジェクトは、もちろん単体では動作しません。アプリケーションの中のオブジェクトは、互いに会話してメッセージをやり取りし、アプリケーションの動作が成り立っていきます。オブジェクト同士の会話は、一般にはメソッドのコールを通じて行われます。

ここで「会話する」という点の理解は重要です。いろんなオブジェクトが存在し、それらが相互に会話してアプリケーションが成り立って行く、という感覚です。そのように組み立てられたプログラムは、一連の処理があちらこちらのオブジェクトに散在することになり、プログラムが上から下に流れて行くようなイメージにはなりません。友人のPHPのプログラマーは、それを「非常に見難い」と評価していましたが、そういうものだと思う方が近道です。実装があちらこちらに散在することに違和感を覚える人は、慣れが必要です。

コツのひとつとして、プログラムの流れを追うのでは無く、オブジェクトがそれぞれの役割を全うすることを意識して見ることがとても大切です。もう少し分かり易く言うと、それぞれのオブジェクトや、オブジェクトのメソッドが正しく動くように小さな単位で考える、ということです。全体を見るのでも、流れを追うのでもありません。そのオブジェクトや、オブジェクトのメソッドが、それぞれ正しく動くようにだけ考えていくことが、役割分担されたオブジェクトと上手く付き合っていく為のコツです。

まとめと発展

以上について、まとめてみました。

  • クラスや継承は、いったん忘れた方が、オブジェクト指向を理解し易い
  • 「包含関係」は大切なので必ず抑える
  • オブジェクトはそれぞれに個別の役割を持つものと意識する
  • オブジェクトが相互に連携してアプリケーションが成り立つものと理解する
  • プログラムは流れでなく、オブジェクトの単位で眺める

ちょっと極端な内容になってしまいましたが、オブジェクト指向がなかなかしっくり来ない方は、今一度リセットしてこの観点で学んでみるのも良いかと思います。学習にあたっては、言語仕様がシンプルでクラス等の雑音の少ない JavaScript が良いように思います。

もちろんクラスや継承も大事だけど…

「クラスや継承は一旦忘れてください」と書きましたが、やっぱり大切ですw。避けて通れない道でもあります。しかし、クラスや継承は、オブジェクト指向プログラミングを扱い易くするための一つの手法に過ぎず、オブジェクト指向の本質では無いことを忘れないでください。例えば「クラス」は、実装の継承手段やオブジェクトの雛形として非常に便利ですが、JavaScript のようにクラスという概念が無い言語でも、別の方法でその目的を実現するものもあります。クラスや継承は、どちらかというと、プログラムの実装の再利用性を高めるための一つのテクニックだと僕は認識しています。

オブジェクトの役割を常に意識する

クドくなりますが、オブジェクト指向で設計やプログラミングをする時は、個々のオブジェクトの役割をしっかりと考えて、それに必要なメソッド(機能)やフィールド(データ)を追加していくことが大切です。便利だからと、安易にオブジェクトに機能を追加するのではなく、「このオブジェクトは本当にこの機能を持つべきなのか?」と疑うぐらいで丁度良いです。場合によっては、新しい種類のオブジェクトが必要になります。慣れないうちは、なるべく擬人化して考えると良いかも知れません。「○○さんは、■■■が役割だから、▲▲▲▲▲は○○さんの仕事だよね」という感じです。

オブジェクトの粒度

オブジェクト指向で設計やプログラムを行っていると、時にオブジェクトが細かくなり過ぎることや、沢山のクラスやファイルが出来てしまうことに戸惑いを感じる事があるかも知れません。少し高度になると、沢山の種類のオブジェクトの存在がメモリや実行速度の問題につながることもあります。あるいは、単に技術的な扱い易さの問題で、1つのオブジェクトに2つ以上の役割を与えたくなることもあります。学習の時点では「役割は細分化する」で良いと思いますが、こと「実践」において、これについて明確に「どうすべき」という指針はありません。それはケースバイケースであり、様々な要素を含めて検討すべき問題です。つまり、実にそれこそが、オブジェクト指向の「設計」の重要なポイントなのです。ですので、個々のプロジェクトの中で、そこは十分に悩んでいただければと思います。

デザインパターン

オブジェクト指向でのプログラムの設計には、幾つかの便利なパターンがあります。最初の頃はお薦めしませんが、オブジェクトを中心に考えることが出来る癖が着いて来た頃に、是非それらを一度勉強してみることをお薦めします。「プログラミング」というものが、優れたアイデアによってより機能的に、よりシンプルに、そしてより美しくなる姿を見る事ができると思います。僕は昔 Java の Collection フレームワークを勉強してとても感動した覚えがあります。またオブジェクト指向による実装の抽象化という概念も、そこから学びました。そんな美しいプログラミングを目にして、感動して、よりプログラミングが好きになれたら僕はとても素敵だなーと思います。

以下に、僕的に「これ知っておいた方がよいなー」と思えるパターンを少しだけ抜き出して紹介してみます。まずは、とりあえず知っておきたい、そして実は良く見掛ける(いつの間にかあなたも使っている筈の)パターンです。説明は何も書きませんので、グーグル先生に教えてもらってください。

  • Factory Method パターン
  • Singleton パターン
  • Observer パターン

また次は、これを知っていると、設計の幅がぐんと広がるゾー的なパターンです。Visitor パターンは僕も最近になって知りましたが、知らなかったのを不幸と思えるほどの強力な武器になりました。オブジェクト指向は奥が深いですね。

  • Strategy パターン
  • Adapter パターン
  • Visitor パターン

 

以上です。ではでは、ハッピーコーディング!

 

 

投稿日:

appfog に PHP + MySQL 環境を作る


appfog」は、とても手軽で簡単な PaaS 環境で、私は最近実験的なプロジェクトや、WordPress の開発環境として利用させて頂いています。今回は、appfog に、プレーンな PHP + MySQL 環境を構築してみましたので、手順を簡単にご紹介いたします。「appfog 簡単そう!」って思ってもらえると幸いです。

セットアップ

アプリケーションの作成(Webサーバー)

まず、ダッシュボードから、Create App に入り、PHP 環境を選択します。

 

次に、インフラを選択します。個人的には AWS US  East か HP がお気に入りです(理由は URL が短いからですw)。サブドメインも入力して、[Create App] します。

これだけ httpd 環境が出来るのですから、素晴らしいですね!
処理完了後、上の図の例では、http://c5.aws.af.cm にアクセスすると、既にHello World が表示されます。

サービスの作成(MySQL)

次に MySQL をセットアップします。

アプリの管理画面の Services のセクションを開きます。
画面下の方、Provision Service のセクションから、MySQL を選び、DB 名を入力してから、[Create] します。

これだけで、アプリケーションから利用できる MySQL のセットアップが完了です。

DBへの接続情報を取得するには

さて、PHP から MySQL へ接続情報はどのように入手できるでしょうか?

appfog の場合、DB 接続の為のホストや、ユーザー名、パスワードといった情報は、VCAP_SERVICES という環境変数より JSON で取得できます。appfog のドキュメントだと、次ページに関連の記述があります。

http://docs.appfog.com/services/overview

この環境変数を取得し、JSON をパースして DB アクセス情報を取得する PHP スクリプトは以下のようになります。

 

以上、ということで、簡単ですねー! DB接続情報の取得は少々面倒に思われるかも知れませんが、全体を通してとてもシンプルで扱い易い PaaS 環境です。無料の基本利用枠があり、トラフィックさえ少ない感じなら5サイトぐらいは運用できそうです。環境を作ったり削除したりも Web の管理画面から簡単に出来たり、これまで使った PaaS の中では一番気に入っています。

ちなみに、好きなものを好きと言ってるだけです。ステマじゃありませんのであしからず♪

 

投稿日:

PHPFog/AppFog と WordPress とファイル管理


以前の記事「PHPFog と WordPress とファイル管理」からのアップデートです。

WordPress は管理画面からサイト自体に様々なカスタマイズが行えることが特徴であり強みです。管理画面からテーマやプラグインをインストールすると、基本的に wp-contents 内に必要なファイルがダウンロードされて追加されます。PHPFog や AppFog などの環境上に WordPress をデプロイしてもこれは同様なのですが、実はちょっと困ったことがあります。

問題

PHPFog では、初期にデプロイされた後、WordPress の管理画面で行った変更については、git clone でも pull でも取得できません。AppFog もツールや方法は異なるものの同様です。つまり、最後に push(update)した変更しか取得することが出来ないわけで、そうなると当然ながら、テーマやプラグイン、また画像などのメディアファイルなど、WordPress の管理画面から追加されたファイルを手元に取得することが困難です。また取得が困難なだけでなく、手元のファイルをアップデートしてサーバーに push (update)しようものなら、それらのサーバーにしか無いデータが消えてしますことがあります。

解決策

プラグイン「BackWPup」を利用します。
http://wordpress.org/extend/plugins/backwpup/

BackWPup は、WordPress のデータベースの中身やファイル等の全てをバックアップできる強力なバックアップツールです。バックアップするファイルは、別の FTP サーバーはもちろん、DropBox、Amazon S3、Google Strage、MS Azure といった様々な媒体に転送できます。バックアップのセットアップもとても簡単です。

このプラグインを用いて、例えば、バックアップ先に DropBoxを指定してバックアップを実行させます。BackWPup の処理が完了し、しばらくしたら DropBox の中の指定したディレクトリにちゃんとバックアップファイルが転送されています。これを解凍して、手元の WordPress の wp-contents を更新し、改めて PHPFog や AppFog に push/update します。

以前の記事「PHPFog と WordPress とファイル管理」では、navphp というファイルエクスプローラ利用しましたが、それよりもずっと簡単に、しかも副次的に(?)サイトのバックアップまで取得できるので大変スマートな方法だと思います。

BackWPup のインストール

管理画面の「プラグイン」>「新規追加」から通常通りインストール、有効化してください。
「BackWPup」で検索できます。

ローカルの WordPress データを最新にするまでの流れ

  1. [BackWPup] > [Add New] から、新規 Job を追加する
    • 設定項目は大変多いですが、とりあえずほとんどデフォルトのままでOK
    • バックアップファイルの転送先のみ注意して入力する
  2. [BackWPup] > [Jobs] で Job 一覧を開いて、作成した Job を [Run Now] で実行する
  3. 指定したファイル転送先にファイルが転送されるので、ファイルを取得する
  4. ローカルの WordPress ファイルをアップデートして、サーバーに push/update する

 

 

以上です。