-オープンソースのSNSエンジン OpenPNEプロジェクト-

TIPS

Home > TIPS

OpenPNE3 DBマスタースレーブ分割の設定方法

06 / 15 火曜日 2010

  • TIPS
  • Mamoru Tejima

OpenPNE3では、“設定だけで”MySQLのmaster-slave構成は利用できないようだ。世間のメジャーはまだOpenPNE2なの?

http://twitter.com/donz80/statuses/16214843210

この質問にお答えします。

OpenPNE3のマスタースレーブ分割を利用するためには、 config/database.yml を以下のように設定します。

all: slave_1: # スレーブは slave_* という名称で、マスタよりも先に定義しなければならない class: sfDoctrineDatabase param: dsn: ‘mysql:dbname=slave;host=localhost’ username: root encoding: utf8 attributes: { 164: true } priority: 2 # プライオリティ。この例だと、8分の2の確率でスレーブが利用される doctrine: # デフォルト値を master に変更予定だが、 doctrine でも今後動作する class: sfDoctrineDatabase param: dsn: ‘mysql:dbname=master;host=localhost’ username: root encoding: utf8 attributes: { 164: true } priority: 6 # この例だと、 8 分の 6 の確率でマスタが使用される。

参考
http://trac.openpne.jp/ticket/4036

Ustream小窓を作ってみました

04 / 05 月曜日 2010

川原です!

このごろUstreamというのが盛り上がってきているようですね!
近々、日本語での対応も行われるとの事なので、これからさらに盛り上がりそうです。

そんなこともあり、コミュニティの中で配信を告知して遊びたいと考え、ひとまずUstream小窓
を作ってみました。

動作イメージ

Ustreamの配信URL・ビデオURLを貼るだけで上記のように表示されます。

対応しているURLは以下のとおりです。

配信URL

http://www.ustream.tv/channel/文字列
http://www.ustream.tv/文字列

ビデオURL

http://www.ustream.tv/recorded/数字

導入方法

OpenPNE2

導入方法は2つあります。簡単な前者がオススメです。

小窓キャスト

OpenPNE2.12以降では小窓キャストにより、この小窓に対応できます。

管理画面に入り、SNS設定→小窓キャスト設定から以下のURLを登録するだけです。

/officialcast/www.ustream.tv/cmd/cmd_cast.xml

jsファイルを設置する

小窓キャストを利用しない場合は、自分でjsファイルを設置することにより対応できます。

以下のjsファイルダウンロードし、public_html/cmd/ へ設置して下さい。
(ファイル名は www.ustream.tv.js である必要があります。)

/officialcast/www.ustream.tv/cmd/www.ustream.tv.js

OpenPNE3

以下のjsファイルダウンロードし、web/cmd/ へ設置して下さい。
(ファイル名は www.ustream.tv.js である必要があります。)

/officialcast/www.ustream.tv/cmd/www.ustream.tv.js

使い方あれこれ

  • コミュニティイベントの詳細にUstreamのURLをはって、配信イベント
  • UstreamビデオのSNS内での共有

OpenPNE3プラグインで簡単マッシュアップ!

03 / 15 月曜日 2010

  • TIPS
  • 深町 英太郎

OpenPNE開発チームの深町です。

カヤックさんの多すぎるWebサービスの中に、im.kayac.comというサービスがあります。「I’m Kayac? 自己紹介?」とか思ってたんですが、どうやらInstant Messageの略でIMのようです。

im.kayac.comは、APIにリクエストを投げるだけで他のサービスに通知を飛ばせる便利なサービスです。専用のiPhoneアプリを入れることでiPhoneにポップアップ通知をすることができます。ちなみに僕はiPhoneは持っていません。Touchです。

おぉ、なんか便利そうだ。問題は使い道だなぁ。何に使おう。

製品テストにいいかも?

最近、OpenPNE3の単体テストを走らせていたのですが、時間の長いこと長いこと。その間ぼーっとしてるわけにもいかないのでTumblrでせっせとリブログを繰り返しているのですが、気づいたら終わってる。非効率だ。終わったら通知させるようにしよう。

$ symfony test:unit; curl -d ‘message=OpenPNE3 Unit Tests were done.’ http://im.kayac.com/api/post/nitro\_idiot

こうして単体テストを走らせておくと、終わったタイミングで御苑で花見をしている僕のiPhoneがピコンとなるわけです。あ、僕はiPhoneは持ってませんでした。Touchです。

とてもクールなサービスですね。

OpenPNEとの連携

以上、im.kayac.comの紹介でした。カヤックでは製品テストが好きなプログラマを募集しています!

…あ、僕はカヤック社員ではありませんでした。OpenPNE開発者です。

やっぱ他社のサービス紹介だけでもあれなのでOpenPNEとの連携でも考えたほうがいいですよねー :p

opImKayacComPluginってのはどう?

普段僕はOpenPNE3のプラグインなんて作らないのですが、「えー、深町さんひょっとして作れないんじゃないですかぁ?きゃははー」とか言われると嫌なのでチュートリアルがてら作ってみたいと思います。いや、作れるんだって!本気出せば!

今回作るのはフレンドが日記を書いたり、自分のにコメントがついたときにim.kayac.comを使ってiPhoneに通知できるようにするプラグイン「opImKayacComPlugin」です。

0. 実装方針

OpenPNE3で使われているフレームワークsymfonyには「イベントディスパッチャ」という機構があります。これは、拡張可能なプログラムを書ける大変クールな機構です。

OpenPNE3ではこの機構を使って、ページの読み込みの前後(正確にはアクションの前後)で、好きなコードを走らせることができます。たとえばopAshiatoPluginでは、メンバーのホーム・日記などを見たときに”あしあと”をつける処理をしています。

今回も同じ要領で、日記の作成のあとにim.kayac.comに通知を投げる処理を加えたいと思います。

1. config.phpでイベントを受け取る

OpenPNEのプラグインを作るときに、必ず実行させたいコードってたまにありますよね。そういうコードは config/config.php に書くといいです。今回イベントのリスナーは必ず追加したいのでここに書きます。

※追記 : 卜部さんから、sfPluginConfigurationを継承するクラスを作ることで、リスナーと処理を一緒のファイルに書けるよ、というアドバイスをもらいました。以下の例ではconfig/opImKayacComConfiguration.class.php というファイルに記述するといいプログラムになるかもしれません。参考 : http://github.com/ebihara/opPluginChannelServerPlugin/blob/master/config/opPluginChannelServerPluginConfiguration.class.php

・config/config.php

dispatcher->connect( 'op\_action.post\_execute\_diary\_create', array('opImKayacComListener', 'listenToPostDiaryCreate') ); OpenPNEのアクションが実行されると、アクションの前にop\_action.pre\_execute\_{module}\_{action}、アクションの後にop\_action.post\_execute\_{module}\_{action}という名前のイベントが発生します。これに対してconnect()を使ってリスナーを登録します。listenじゃなくてconnectなのが紛らわしいです。 opImKayacComListenerクラスはまだ作っていないので、この状態だとエラーになりますが、とりあえずここは放っておきましょう。 ### 2\. im.kayac.comに通知を投げるには まずはim.kayac.comに通知を投げる必要があります。im.kayac.comはPOSTメソッドでHTTPリクエストを飛ばせばいいです。PHPからはfile\_get\_contents()を使います。 static public function postToImKayacCom() { $params = array( 'password' => 'hogehoge', 'message' => '\[op3\] うべー', ); $header = array( 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($params), ); $options = array( 'http' => array( 'method' => 'POST', 'header' => implode("\\r\\n", $header), 'content' => $params, ) ); file\_get\_contents('http://im.kayac.com/api/post/nitro\_idiot', false, stream\_context\_create($options)); } [![Notification on iPod touch](/wp-content/uploads/2010/03/DSC_0605-300x199.jpg "im.kayac.com")](/wp-content/uploads/2010/03/DSC_0605.jpg) うべー。 こういうstaticなユーティリティ関数を使いたい場合は、慣習としてlib/util/にファイルを置きます。ここではlib/util/opImKayacComPluginToolkit.class.phpというファイルを作りました。 さて、いよいよ受け取ったイベントで通知処理をする段階です。 ### 3\. opImKayacComListenerクラスを作る さて、いよいよメインの処理です。といっても大したことをするわけじゃなくて、さっき作ったopImKayacComPluginToolkit::postToImKayacCom()を呼び出して通知するくらいです。 ・lib/opImKayacComListener.class.php getUser()->getMemberId() でアクセスしているユーザのMemberIdを取得して判定することができます。 さぁ、これで日記を投稿すれば僕に通知がくるようになりました。最後まで書いてると上司から肩を叩かれそうなのでチュートリアルはここまで! ### まとめ ・必ず実行したいコードは config/config.php に書く ・ユーティリティ関数はlib/util以下に置く ・イベントディスパッチャを使えば既存の機能を簡単に拡張できる ### さらに改良するには ただ、このままだと僕(nitro\_idiot)にしか通知を送れません。POSTするURLのユーザ名を引数で受け取ることでそれぞれのユーザに通知することができます。 その場合、それぞれのユーザにim.kayac.comのアカウントを設定させる必要もあります。これはconfig/doctrine/schema.yml に新規テーブルの記述を加えて、config/member\_config.yml と lib/form/MemberConfigForm/MemberConfigImKayacComForm.class.php を追加すれば実現できます。 他には日記コメントがついたら知りたい!とか、メッセージをすぐ確認したい!とかにも同じように対応することができます。 今あるOpenPNEのプラグインは、opDiaryPluginとかopMessagePluginとか、大きなものが多いですが、これくらい小さなものでも面白いものが作れるとわかっていただけたでしょうか? ### 今日作ったプラグインは… 今日作ったopImKayacComPluginはもちろんオープンソースです! http://github.com/fukamachi/opImKayacComPlugin この記事のコードからかなり変わっちゃっていますが、原型は同じなので参考にしていただけると幸いです。わからないことがあれば公式SNSや[Twitter](https://twitter.com/nitro_idiot)宛に気軽に聞いてください :)

OpenPNE3でのiPhone対応をたくらんでみる

07 / 01 水曜日 2009

開発チームの川原です。

この前、とあるイベントでOpenPNEはiPhone対応はしないのですか?
というご意見をいただきました。

ということで、週末を使ってiPod touch / iPhone的な
OpenPNE3のインターフェイスを作ってみようかとたくらんでみました。

OpenPNE + iPhone

と、まだログイン画面しか作られていませんが、iPhoneインターフェイスライクなものになっています!

iuiという、iPhone用のライブラリを利用しています。
http://code.google.com/p/iui/

週末を利用して作っているのでペースは遅いかもしれませんが、完成したら
本線の方の取り込みについて考えたいと思います。

https://trac.openpne.jp/svn/OpenPNE3/branches/kawahara/iui
上で作業しているので、興味があったら是非いじってみてください!

*ちなみに、川原はiPhoneや iPod touchを持っていない上に、Mac使いではないのでWindows版のSafariでしか動作検証がされていません。

OpenPNE3 機能対応状況をまとめました

06 / 26 金曜日 2009

開発チームの海老原です。
現時点における OpenPNE3 の機能実装状況をまとめました。

今村さんがまとめてくれたスプレッドシート(OpnePNE3の機能一覧)をアップデートし、更新した項目の備考欄に「○○月対応予定項目」を追記しました。現時点で対応が遅れている項目については、備考欄が赤字になっています。

現時点で対応が遅れている項目は、

  • 日記コメント記入履歴(opDiaryPlugin)
  • 日記メール投稿(opDiaryPlugin)
  • 日記コメントメール投稿(opDiaryPlugin)
  • トピック・イベント検索(opCommunityTopicPlugin)
  • 写真付き書き込み(opCommunityTopicPlugin)
  • メッセージ検索(opMessagePlugin)
  • SNS設定 - お気に入りフィード使用設定(管理機能)
  • SNS設定 - ログイン制限(管理機能)
  • SNS設定 - アフィリエイト用タグ(管理機能)
  • SNS内名称設定(管理機能)
  • 画像・書込み管理(管理機能)
  • 携帯版配色変更(管理機能)

となります。

未実装機能の実装やプラグイン開発にご協力いただける方は、こちらのエントリをご覧ください。一緒に OpenPNE 3 を盛り上げていきましょう!

opWikiPlugin を作ってみよう #1

06 / 12 金曜日 2009

  • TIPS
  • Kousuke Ebihara

OpenPNE開発チームの海老原です。

不定期ではありますが、 OpenPNE 3.2.x に向けたプラグインの作成チュートリアルを連載していこうと思います。

はじめに

OpenPNE 3 向けのプラグイン作成チュートリアルには、川原君の「プラグインの作り方」シリーズが存在しますが、これは OpenPNE 3 開発の初期の段階から執筆されたもので、いまでは内容が古くなってしまっています。プラグインのリリースをどうおこなえばよいかといったようなプログラミング以外に関するトピックもなく、このチュートリアルだけでプラグイン作成の全貌を把握することは難しくなってきたといえます。

また、現在開発を進めている OpenPNE 3.2 系は、ORM の Doctrine 化にはじまり、数多くの大きな機能改善がおこなわれます(その様子は開発版である OpenPNE 3.1.x を追うことで知ることができます)。
これらの改善は OpenPNE 3.0 ではおこなえなかったことや不充分だったことを実現するためのものであり、非常に意義のあることです。
しかし、開発者が自分自身でチェンジログからそれぞれの変更を充分に理解し、自作のプラグインに反映させていくのは極めて大変な作業です。

これらの状況を解決することが、このチュートリアルの目的です。つまり読者は、

  • ・最新の OpenPNE に向けたプラグイン作成方法を知ることができる
  • ・プラグイン開発工程全体の流れを知ることができる
  • ・OpenPNE3.2 の新機能や変更点を知ることができる

というメリットを享受することができます。

作成するプラグイン

OpenPNE 3 に Wiki 機能を提供するためのプラグイン、「opWikiPlugin」を作ることを考えます。
このプラグインでは SNS メンバー間での記事の共同編集を可能にします。 OpenPNE3、 symfony、 Doctrine がもたらす豊富な機能をフル活用し、 記事の変更履歴の記録、 SNS 外への記事の公開や管理機能などの作成も視野に入れた、実用的なプラグインに仕上げていきます。

このプラグインのソースコードは GitHub 上で管理されており、
http://github.com/ebihara/opWikiPlugin/tree/master
から入手することが可能です。とはいっても、このエントリの公開時点では README しかファイルが存在しません。
ソースコードは、このチュートリアルの連載にあわせて更新がおこなわれていく予定です。

開発環境の構築

OpenPNE 3 向けのプラグインを作成するためには、 OpenPNE 3 が動作する環境を用意する必要があります。
OpenPNE 3 の動作要件を知るには、OpenPNE3.1 セットアップ手順を確認するのが手っ取り早いです。要件を満たしている場合は、手順通りにセットアップするだけで開発環境が手に入ります。

要件を満たしていない場合はミドルウェアなどのセットアップをおこなっていく必要があるのですが、そのための素晴らしいチュートリアルが、先日、小川さんによって公開されました。この手順に従うことで CentOS 5 上で OpenPNE 3 を動かすことができますし、他のディストリビューションでも充分に応用が利くことでしょう。

※ただ個人的には、開発用環境としては Debian sid (不安定版) の利用をおすすめします。比較的新しいバージョンのミドルウェアや開発に有用な各種ツール群を容易に入手することができるからです。僕と同じく Debian を常用している小川さんが、近々、 Debian で OpenPNE3 の開発環境を構築するためのチュートリアルを公開するという噂を耳にしたので、こちらもお楽しみに!

開発環境上で OpenPNE3 のユーザ画面、管理画面が動作することが確認できれば準備完了です。さっそくプラグイン作成の作業に取りかかりましょう。

プラグイン生成コマンドを実行する

セットアップした OpenPNE3 の一番上のディレクトリ(プロジェクトルート)上で、以下のコマンドを実行します。
e38394e382afe38381e383a3-2511
これだけで、プラグインに必要なディレクトリ群がすべて生成されたことになります。
plugins 以下に作られた opWikiPlugin ディレクトリを覗くことでどのようなディレクトリが生成されているかがわかると思います。

このプラグインにアクションファイルなどを追加し、ブラウザからアクセスできることを確認するのもよいのですが、このチュートリアルではどのような機能を作るべきかきちんと計画してから実施することにします。
しかしせっかくプラグインを作ると決めたのですから、なにか「始めの一歩」のようなものがほしいはずです。

ということで、早速 GitHub 上にプラグインを公開してみることにしましょう。

GitHubに登録

まず、 GitHub のユーザアカウントを登録します。 “Sign up now!” ボタンから登録作業をおこなってください。
e38394e382afe38381e383a3-243

アカウント登録が完了したら、プロジェクトを作成します。
e38394e382afe38381e383a3-245
e38394e382afe38381e383a3-246

プロジェクトの作成が完了すると、これからおこなうべき手順が示されたページに遷移します。
e38394e382afe38381e383a3-247

基本的な手順はこのエントリで示しますが、 Global setup の手順についてはこのページに記載されている通りに実施して下さい。
e38394e382afe38381e383a3-248

first commit

まず、プラグインのソースコードを git の管理下に置きます。
プラグインのディレクトリ(plugins/opWikiPlugin)まで移動し、そのディレクトリ上から git init コマンドを実行してください。
e38394e382afe38381e383a3-252

早速コミットを……といいたいところなのですが、 git は空ディレクトリをコミットの対象としないため、現時点ではコミットすべき対象がないことになってしまっています。

そこで、 README ファイルを作成し、 git add コマンドでコミット対象に加えてください。
e38394e382afe38381e383a3-253

これでコミットの準備は整いました。
さっそく git commit コマンドでコミットしましょう。
e38394e382afe38381e383a3-254

ただし、これだけでは、ローカルの git レポジトリにコミットがおこなわれたに過ぎません。
この変更を GitHub にも反映させるためには、 GitHub のレポジトリを関連づけた上で、 git push コマンドで変更をリモートの GitHub に伝える必要があります。
e38394e382afe38381e383a3-255

ここまで完了したら、実際に GitHub のページにブラウザでアクセスしましょう。

最初のコミットが反映されているのが確認できるはずです。
e38394e382afe38381e383a3-256

これで準備は整いました。
次回は、プラグインが扱う各種画面のモックアップを作っていこうと思います。

OpenPNE 3.1 を CentOS 5 にインストールしてみました

05 / 30 土曜日 2009

OpenPNE開発チームの小川です。

前回はレンタルサーバに OpenPNE 3 をインストールする例を紹介しましたが、今回は自分で管理しているサーバへのインストール例として OpenPNE 3.1.0 を最小セットアップ状態の CentOS 5.3 にインストールする手順をご紹介します。

OpenPNE 3.1 の一般的なインストール方法は、OpenPNE3.1 セットアップ手順 をご覧ください。

はじめに

ここで紹介する手順は OpenPNE を動作させる例として最低限の手順しか記載していないので、実際に公開サーバの設定をする際には参考程度にご利用ください。

以下の手順では sudo を使用していますが、sudo の設定をしていない環境では「sudo」の付いているコマンドは「sudo」を抜いて root ユーザで実行してください。

また、ホスト名として sns.example.com を、OpenPNE を管理する一般ユーザとして admin を例にしていますが、環境に合わせて適宜読み替えてください。

ミドルウェアのインストール

Apache, MySQL, Postfix のインストール

yum コマンドを使ってOS標準のパッケージをそのままインストールします。

$ sudo yum install httpd mysql-server postfix

PHP のインストール

PHP に関してはバージョン 5.2.3 以降が必要なので、個別にインストールします。ソースコードからコンパイルしてももちろんよいのですが、今回は oss.oracle.com で公開されている rpm パッケージを利用しました。

$ sudo yum install aspell curl gmp libxslt wget

$ DIST=http://oss.oracle.com/projects/php/dist/files/EL5/i386
$ wget $DIST/php-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-cli-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-common-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-gd-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-mbstring-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-mysql-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-pdo-5.2.9-1.el5.i386.rpm
$ wget $DIST/php-xml-5.2.9-1.el5.i386.rpm
$ sudo rpm -ivh php-*.rpm
準備中...                ########################################### [100%]
   1:php-common             ########################################### [ 13%]
   2:php-cli                ########################################### [ 25%]
   3:php-pdo                ########################################### [ 38%]
   4:php                    ########################################### [ 50%]
   5:php-gd                 ########################################### [ 63%]
   6:php-mbstring           ########################################### [ 75%]
   7:php-mysql              ########################################### [ 88%]
   8:php-xml                ########################################### [100%]

APC のインストール(オプション)

PHP の快適な動作にはアクセラレータの導入が欠かせません。ここではセットアップガイドでも推奨されている APC をインストールしてみます。

$ sudo yum install autoconf213 automake gcc make httpd-devel

$ wget $DIST/php-devel-5.2.9-1.el5.i386.rpm
$ sudo rpm -ivh php-devel-5.2.9-1.el5.i386.rpm

$ sudo yum install php-pear
$ sudo pear channel-update pear.php.net
$ sudo pear upgrade-all --ignore-errors
$ sudo pecl install APC
Use apxs to set compile flags (if using APC with Apache)?  : yes
...
install ok: channel://pecl.php.net/APC-3.0.19
configuration option "php_ini" is not set to php.ini location
You should add "extension=apc.so" to php.ini
$ echo "extension=apc.so" | sudo tee /etc/php.d/apc.ini

ミドルウェアの設定

Apache の設定

VirtualHost の設定を httpd.conf の末尾に追加します。

$ sudo vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    ServerName sns.example.com
    DocumentRoot /var/www/sns/web
    <Directory /var/www/sns/web>
        AllowOverride All
    </Directory>
</VirtualHost>

OpenPNE を設置するディレクトリを作成します。

$ sudo mkdir /var/www/sns
$ sudo chown admin. /var/www/sns

設定ファイルが間違っていないかどうかテストします。

$ sudo /etc/init.d/httpd configtest
Warning: DocumentRoot [/var/www/sns/web] does not exist
Syntax OK

/var/www/sns/web は後の手順で作成するので、この Warning が出るのはよしとして進めます。

デーモンの起動

$ sudo /etc/init.d/httpd start
$ sudo /etc/init.d/mysqld start
$ sudo /etc/init.d/postfix start

MySQL のユーザ設定

まず、root ユーザのパスワードを設定します。new-password の部分は変更してください。

$ mysql -u root

mysql> UPDATE mysql.user SET Password = PASSWORD('new-password') WHERE User = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

OpenPNE 用に openpne というユーザを作成し、openpne3 というデータベースに対するアクセス権限を与えます。pasuwado の部分は変更してください。

mysql> GRANT USAGE ON *.* TO 'openpne'@'localhost' IDENTIFIED BY 'pasuwado';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON openpne3.* TO 'openpne'@'localhost';
Query OK, 0 rows affected (0.00 sec)

ファイアーウォールの設定

外部から HTTP でアクセスできるよう設定します。

$ sudo system-config-securitylevel-tui

「カスタマイズ」 → 「WWW (HTTP) 」にチェック → 「OK」 → 「OK」

OpenPNE 3.1 のインストール

ソースコードのダウンロード

SourceForge.net の OpenPNE プロジェクトのページから OpenPNE 3.1.0 の zip アーカイブをダウンロード・展開します。

$ sudo yum install unzip
$ cd /var/www/sns
$ wget http://nchc.dl.sourceforge.net/sourceforge/openpne/OpenPNE-3.1.0.zip
$ unzip OpenPNE-3.1.0.zip

キャッシュファイルの削除

OpenPNE 3.1.0 の zip アーカイブには誤ったキャッシュファイルが含まれている可能性があるので、念のためキャッシュファイルの削除をしてください。(3.1.0 バージョン固有の問題で、通常のインストールでは必要ありません)

$ cd OpenPNE-3.1.0
$ rm cache/*

プラグインインストール

OpenPNE 3.1.0 では初期データの登録処理の関係上、openpne:install タスクを実行する前に opPlugin:sync タスクを実行してあらかじめプラグインをインストールしておく必要があります。

せっかくなので、先日リリースされたばかりの opDiaryPlugin も一緒にインストールしておきましょう。

$ php symfony opPlugin:sync
$ php symfony opPlugin:install --stability=beta opDiaryPlugin

openpne:install タスクの実行

$ php symfony openpne:install

openpne:install タスクを実行すると DB のセットアップに必要な情報を聞かれるので、サーバ環境に合わせて入力していきます。

Choose DBMS (mysql, pgsql or sqlite)

使用する DBMS の種類を入力します。

ここでは、「mysql」と入力します。

Type database username

データベースのユーザ名を入力します。

作成した MySQL のユーザ名「openpne」を入力します。

Type database password (optional)

データベースのパスワードを入力します。

作成した MySQL ユーザのパスワード「pasuwado」を入力します。

Type database hostname

データベースサーバのホスト名を入力します。

ここでは「localhost」と入力します。

Type database port number (optional)

データベースのポート番号を入力します。未入力の場合は DBMS ごとのデフォルト値が使用されます。

ここでは未入力のまま Enter を押します。

Type database name

データベース名を入力します。

ここでは例として「openpne3」と入力します。

Type database socket path (optional)

データベース接続に使用するソケットのパスを入力します。

ここでは未入力のまま Enter を押します。

最後に入力した内容の確認をします。問題なければ「y」を入力します。

The DBMS                        mysql
The Database Username           openpne
The Database Password           ******
The Database Hostname           localhost
The Database Port Number
The Database Name               openpne3
The Database Socket

  Is it OK to start this task? (y/n)y

公開ディレクトリの設定

ここまでの手順で OpenPNE 3 が動作する状態になっているので、公開ディレクトリにシンボリックリンクを作成します。

$ cd /var/www/sns
$ ln -s OpenPNE-3.1.0/web

ブラウザからアクセス

ブラウザから「http://sns.example.com/」にアクセスして OpenPNE 3 のログイン画面が表示されれば OK です。(初期アカウントはセットアップガイドにある通り、sns@example.com / password となっています。変更して使ってください)

また、管理画面は「http://sns.example.com/pc_backend.php」へアクセスすれば表示されます。(初期アカウントはセットアップガイドにある通り、admin / password となっています。変更して使ってください)

OpenPNE3 をさくらのレンタルサーバにインストールしてみました

05 / 13 水曜日 2009

OpenPNE開発チームの小川です。

OpenPNE 3 のリリース以来、「OpenPNE 3 ってレンタルサーバでも動くの?」という質問をたくさんもらっていましたので、今回はその実証のため OpenPNE 3.0.4 を「さくらのレンタルサーバ」のスタンダードで設置してみました。

結論としてはまったく問題なく設置できたましたので、その手順を紹介します。

インストール手順

MySQL データベースの作成

まず、事前の準備としてさくらインターネットのサーバコントロールパネルから MySQL のデータベースを作成します。

  • ユーザ名(さくらのレンタルサーバのアカウント名と同じ)
  • データベース名(さくらのレンタルサーバのアカウント名と同じ)
  • ホスト名(「mysql***.db.sakura.ne.jp」のような形式)
  • パスワード(自分で入力したもの)

の情報を控えておきましょう。

SSH ログイン

ここからの作業は SSH でサーバにログインして行います。

OpenPNE3 をダウンロード

今回は OpenPNE-3.0.4 の zip アーカイブを使って設置してみます。wget でダウンロード、unzip で解凍します。
%wget "http://nchc.dl.sourceforge.net/sourceforge/openpne/OpenPNE-3.0.4.zip" %unzip OpenPNE-3.0.4.zip %ls MailBox OpenPNE-3.0.4 OpenPNE-3.0.4.zip db sblo_files www

openpne:install タスクの実行

OpenPNE 3 では、DB のセットアップ・ディレクトリパーミッションの設定・標準プラグインのインストールなどの作業を openpne:install タスクを実行すれば一括で行ってくれます。

さっそく OpenPNE ディレクトリに移動して、タスクを実行してみます。
%cd OpenPNE-3.0.4 %php symfony openpne:install

タスクを実行すると DB のセットアップに必要な情報を聞かれるので、サーバ環境に合わせて入力していきます。

Choose DBMS (mysql, pgsql or sqlite)

使用する DBMS の種類を入力します。

ここでは、「mysql」と入力します。

Type database username

データベースのユーザ名を入力します。

ここではさくらのアカウント名を入力します。

Type database password (optional)

データベースのパスワードを入力します。

ここではコントロールパネルで設定したパスワードを入力します。

Type database hostname

データベースサーバのホスト名を入力します。

ここでは「mysql***.db.sakura.ne.jp」という形式のものを入力します。

Type database port number (optional)

データベースのポート番号を入力します。未入力の場合は DBMS ごとのデフォルト値が使用されます。

ここでは未入力のまま Enter を押します。

Type database name

データベース名を入力します。

ここではさくらのアカウント名を入力します。

最後に入力した内容の確認をします。問題なければ「y」を入力します。

The DBMS                        mysql
The Database Username           (さくらのアカウント名)
The Database Password           ******
The Database Hostname           mysql***.db.sakura.ne.jp
The Database Port Number
The Database Name               (さくらのアカウント名)
The Database Socket

  Is it OK to start this task? (y/n)y

確認が終わると自動的にインストールが進んでいきます。途中 Warning がたくさん表示されてびっくりしますがインストールは問題なく完了しています。(Fatal Errorが表示されて止まっている場合は失敗しています。この Warning エラー表示については今後の開発で改善されるはずです!)

公開ディレクトリの設定

ここでは「http://(アカウント名).sakura.ne.jp/sns/」というURLで設置すると仮定します。(「/sns/」の部分は自由に決めてOK)

.htaccess ファイルを編集します。変更点は2か所です。

%vi web/.htaccess

#Options +FollowSymLinks +ExecCGI    # コメントアウトする

<IfModule mod_rewrite.c>
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  RewriteBase /sns/    # 自分で決めたパス「sns」を入れる

  # we skip all files with .something
  #RewriteCond %{REQUEST_URI} \..+$
  #RewriteCond %{REQUEST_URI} !\.html$
  #RewriteRule .* - [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

最後に公開ディレクトリにシンボリックリンクを作成します。
%cd ../www %ln -s ../OpenPNE-3.0.4/web _sns_

ブラウザからアクセス

ここまででインストール作業は完了です!

ブラウザから「http://(アカウント名).sakura.ne.jp/sns/」にアクセスして OpenPNE 3 のログイン画面が表示されれば OK です。(初期アカウントはセットアップガイドにある通り、sns@example.com / password となっています。変更して使ってください)

また、管理画面は「http://(アカウント名).sakura.ne.jp/sns/pc_backend.php」へアクセスすれば表示されます。(初期アカウントはセットアップガイドにある通り、admin / password となっています。変更して使ってください)

OpenPNE3の機能について

04 / 20 月曜日 2009

OpenPNE開発チームの今村です。

OpenPNE3の機能一覧表を作成いたしました。
OpenPNE3のことをもっと知りたいという方々へ参考になれば幸いです。

まだまだ未実装の機能が多々ありますが開発チームも頑張っていきます!
また、未実装で興味のある機能があれば是非プラグイン作成にチャレンジしてみてください。
是非、一緒にOpenPNE3を盛り上げていきましょう!!

機能をまとめたスプレッドシートのリンク先 → OpnePNE3の機能一覧

OpenPNE3プラグインの作り方#6

12 / 22 月曜日 2008

この記事は OpenPNE3.0.x のものです。現在の最新安定版では動作しない箇所が存在します。

開発チームの川原です!

(過去の記事)
OpenPNE3プラグインの作り方#1
OpenPNE3プラグインの作り方#2
OpenPNE3プラグインの作り方#3
OpenPNE3プラグインの作り方#4
OpenPNE3プラグインの作り方#5

My News作りは今回で最終回です!

あと残されている基本的な作業は

  • フォームによるポストに対するアクションの作成
  • プロフィール画面にMy Newsを表示する

この2つになるかと思います。

まずは、アクションを作ります。
第2回目でテスト動作に使用した
plugins/opSamplePlugin/apps/pc_frontend/modules/hello/actions/actions.class.php
に投稿がされた時のアクションを記していきます。

前回、ポスト先のアクション名は updateNews としていたはずです。
そのため、このファイルで宣言している helloActions クラスに
新たなメソッドを宣言します。
メソッド名は executeアクション名()
(アクション名の最初は大文字に変える)にします。

isMethod(sfRequest::POST))     {       // member\_news から 自分のメンバーIDが一致する1行を取りだす       $criteria = new Criteria();       $criteria->add(MemberNewsPeer::MEMBER\_ID,$this->getUser()->getMember()->getId());       $memberNews = MemberNewsPeer::doSelectOne($criteria);       // 前回作成した memberNewsFormの初期値として先ほど取りだした1行をセットする       $memberNewsForm = new MemberNewsForm($memberNews);       // POSTされたパラメータを取得する       $param = $request->getParameter('member\_news');       $param\['member\_id'\] = $this->getUser()->getMember()->getId();       // パラメータをバインドする       $memberNewsForm->bind($param);       // 入力された値が妥当かどうかを確かめる       if ($memberNewsForm->isValid())       {         // データベースに保存         $memberNewsForm->save();       }     }     // 最後に自分のホームにリダイレクトする     return $this->redirect('@homepage');   } }

アクションでは、
$this->getUser()->getMemer()
で自分のメンバー情報が取得できることを覚えておくと今後ラクになると思います。
(自分の情報がセットされた クラスMember のインスタンスです。
 また、テンプレートでは $sf_user で $this->getUser() が取得できます。
 よって、 $sf_user->getMember() で自分のメンバー情報が取得できます。)

アクション部はこういった感じです。
ホームにあるMy Newsのフォームでポストすることにより
正しく登録できることが確認できるでしょうか?

最後に、プロフィール画面から他人が見られるようにします。
第4回のように、テンプレート拡張を利用します。

パーシャルを追加します。

plugins/opSamplePlugin/apps/pc_frontend/modules/hello/templates

_sampleParts2.php を追加します。
これを、My Newsが表示されるものにします。
下のように編集してください。

getParameter('id', $sf\_user->getMember()->getId()); // member\_news テーブルから取得した $memberIdと一致する1行を取り出す $criteria = new Criteria(); $criteria->add(MemberNewsPeer::MEMBER\_ID, $memberId); $memberNews = MemberNewsPeer::doSelectOne($criteria); $body = ""; // もし行が存在した場合は、contentフィールドの内容を$bodyに代入する if ($memberNews) {   $body = $memberNews->getContent(); } // Partsヘルパー(OpenPNE3独自のヘルパー)に含まれる // include\_box関数を使って $body を出力する // include\_boxの仕様は前回の記事で説明 include\_box('MyNews','MyNews',nl2br($body));

**
plugins/opSamplePlugin/apps/pc_frontend/modules/member/config/view.yml
**
を次のようにします。

homeSuccess:
…(省略)…
      target:

profileSuccess:
  customize:
    sampleParts2:
      template:
      parts:
      target:

templateに今回作成した、 sampleParts2 を指定します。
プロフィールの上に表示したいので、 targetはbeforeです!

設定ファイル編集後はやっぱり symfony cc でキャッシュ削除をします。
これでプロフィール画面は次のようになるはずです。

後はフォームのtextareaの幅を調節すれば、現行の My News同様に扱うことができるでしょう。
(ついでに更新日時を表示するのを忘れていた!)

今回はかなりシンプルなアプリを作成してみましたが、
symfonyはprotype.jsを利用することができるので
凝ればAjaxでバリバリ動くリッチなWebアプリを作ることだって可能です。

symfony1.2の日本語資料も最近ようやく増え始めてきたので
ぜひOpenPNE3を使って、面白いアプリを作ってみてください。

「こんなの作ってみた!」という嬉しい報告をお待ちしています。

以後も、プラグイン開発関連の情報は引き続き発信していきたいと思いますので、
よろしくお願いします。

ページの先頭に戻る