<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OpenPNE &#187; TIPS</title>
	<atom:link href="http://www.openpne.jp/archives/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.openpne.jp</link>
	<description>オープンソースのSNSエンジン OpenPNEプロジェクト</description>
	<lastBuildDate>Tue, 07 Feb 2012 02:29:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OpenPNE3 DBマスタースレーブ分割の設定方法</title>
		<link>http://www.openpne.jp/archives/5094/</link>
		<comments>http://www.openpne.jp/archives/5094/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 14:20:32 +0000</pubDate>
		<dc:creator>Mamoru Tejima</dc:creator>
				<category><![CDATA[TIPS]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=5094</guid>
		<description><![CDATA[OpenPNE3では、&#8221;設定だけで&#8221;MySQLのmaster-slave構成は利用できないようだ。世間のメジャーはまだOpenPNE2なの? http://twitter.com/donz80/s [...]]]></description>
			<content:encoded><![CDATA[				<blockquote><p>OpenPNE3では、&#8221;設定だけで&#8221;MySQLのmaster-slave構成は利用できないようだ。世間のメジャーはまだOpenPNE2なの?</p></blockquote>
				<p><a href="http://twitter.com/donz80/statuses/16214843210">http://twitter.com/donz80/statuses/16214843210</a></p>
				<p>この質問にお答えします。</p>
				<p>OpenPNE3のマスタースレーブ分割を利用するためには、 config/database.yml を以下のように設定します。</p>
				<blockquote><pre>
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 の確率でマスタが使用される。</pre>
				</blockquote>
				<p>参考<br />
				<a href="http://trac.openpne.jp/ticket/4036">http://trac.openpne.jp/ticket/4036</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/5094/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ustream小窓を作ってみました</title>
		<link>http://www.openpne.jp/archives/4825/</link>
		<comments>http://www.openpne.jp/archives/4825/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 12:02:32 +0000</pubDate>
		<dc:creator>Shogo Kawahara</dc:creator>
				<category><![CDATA[OpenPNEからのおしらせ]]></category>
		<category><![CDATA[TIPS]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=4825</guid>
		<description><![CDATA[川原です！ このごろUstreamというのが盛り上がってきているようですね！ 近々、日本語での対応も行われるとの事なので、これからさらに盛り上がりそうです。 そんなこともあり、コミュニティの中で配信を告知して遊びたいと考 [...]]]></description>
			<content:encoded><![CDATA[				<p>川原です！</p>
				<p>このごろUstreamというのが盛り上がってきているようですね！<br />
				近々、日本語での対応も行われるとの事なので、これからさらに盛り上がりそうです。</p>
				<p>そんなこともあり、コミュニティの中で配信を告知して遊びたいと考え、ひとまずUstream小窓<br />
				を作ってみました。</p>
				<h2>動作イメージ</h2>
				<p><a href="http://www.openpne.jp/wp-content/uploads/2010/04/Ustream.png"><img src="http://www.openpne.jp/wp-content/uploads/2010/04/Ustream-254x300.png" alt="" title="Ustream" width="254" height="300" class="alignnone size-medium wp-image-4826" /></a></p>
				<p>Ustreamの配信URL・ビデオURLを貼るだけで上記のように表示されます。</p>
				<p>対応しているURLは以下のとおりです。</p>
				<h3>配信URL</h3>
				<p>http://www.ustream.tv/channel/文字列</p>
				<p>http://www.ustream.tv/文字列</p>
				<h3>ビデオURL</h3>
				<p>http://www.ustream.tv/recorded/数字</p>
				<h2>導入方法</h2>
				<h3>OpenPNE2</h3>
				<p>導入方法は２つあります。簡単な前者がオススメです。</p>
				<h4>小窓キャスト</h4>
				<p>OpenPNE2.12以降では小窓キャストにより、この小窓に対応できます。</p>
				<p>管理画面に入り、SNS設定→小窓キャスト設定から以下のURLを登録するだけです。</p>
				<p>http://www.openpne.jp/officialcast/www.ustream.tv/cmd/cmd_cast.xml</p>
				<h4>jsファイルを設置する</h4>
				<p>小窓キャストを利用しない場合は、自分でjsファイルを設置することにより対応できます。</p>
				<p>以下のjsファイルダウンロードし、<strong>public_html/cmd/</strong> へ設置して下さい。<br />
				（ファイル名は www.ustream.tv.js である必要があります。）</p>
				<p>http://www.openpne.jp/officialcast/www.ustream.tv/cmd/www.ustream.tv.js</p>
				<h3>OpenPNE3</h3>
				<p>以下のjsファイルダウンロードし、<strong>web/cmd/</strong> へ設置して下さい。<br />
				（ファイル名は www.ustream.tv.js である必要があります。）</p>
				<p>http://www.openpne.jp/officialcast/www.ustream.tv/cmd/www.ustream.tv.js</p>
				<h2>使い方あれこれ</h2>
				<ul>
				<li>コミュニティイベントの詳細にUstreamのURLをはって、配信イベント</li>
				<li>UstreamビデオのSNS内での共有</li>
				</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/4825/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenPNE3プラグインで簡単マッシュアップ！</title>
		<link>http://www.openpne.jp/archives/4682/</link>
		<comments>http://www.openpne.jp/archives/4682/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 14:03:46 +0000</pubDate>
		<dc:creator>深町 英太郎</dc:creator>
				<category><![CDATA[TIPS]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=4682</guid>
		<description><![CDATA[OpenPNE開発チームの深町です。 カヤックさんの多すぎるWebサービスの中に、im.kayac.comというサービスがあります。「I&#8217;m Kayac？ 自己紹介？」とか思ってたんですが、どうやらInsta [...]]]></description>
			<content:encoded><![CDATA[				<p>OpenPNE開発チームの深町です。</p>
				<p>カヤックさんの多すぎるWebサービスの中に、<a href="http://im.kayac.com/">im.kayac.com</a>というサービスがあります。「I&#8217;m Kayac？ 自己紹介？」とか思ってたんですが、どうやらInstant Messageの略でIMのようです。</p>
				<p>im.kayac.comは、APIにリクエストを投げるだけで他のサービスに通知を飛ばせる便利なサービスです。専用のiPhoneアプリを入れることでiPhoneにポップアップ通知をすることができます。ちなみに僕はiPhoneは持っていません。Touchです。</p>
				<p>おぉ、なんか便利そうだ。問題は使い道だなぁ。何に使おう。</p>
				<h3>製品テストにいいかも？</h3>
				<p>最近、OpenPNE3の単体テストを走らせていたのですが、時間の長いこと長いこと。その間ぼーっとしてるわけにもいかないのでTumblrでせっせとリブログを繰り返しているのですが、気づいたら終わってる。非効率だ。終わったら通知させるようにしよう。</p>
				<blockquote><p>
				$ symfony test:unit; curl -d &#8216;message=OpenPNE3 Unit Tests were done.&#8217; http://im.kayac.com/api/post/nitro_idiot</p></blockquote>
				<p>こうして単体テストを走らせておくと、終わったタイミングで御苑で花見をしている僕のiPhoneがピコンとなるわけです。あ、僕はiPhoneは持ってませんでした。Touchです。</p>
				<p>とてもクールなサービスですね。</p>
				<h3>OpenPNEとの連携</h3>
				<p><b>以上、im.kayac.comの紹介でした。カヤックでは製品テストが好きなプログラマを募集しています！</b></p>
				<p>…あ、僕はカヤック社員ではありませんでした。OpenPNE開発者です。</p>
				<p>やっぱ他社のサービス紹介だけでもあれなのでOpenPNEとの連携でも考えたほうがいいですよねー :p</p>
				<h3>opImKayacComPluginってのはどう？</h3>
				<p>普段僕はOpenPNE3のプラグインなんて作らないのですが、「えー、深町さんひょっとして作れないんじゃないですかぁ？きゃははー」とか言われると嫌なのでチュートリアルがてら作ってみたいと思います。いや、作れるんだって！本気出せば！</p>
				<p>今回作るのはフレンドが日記を書いたり、自分のにコメントがついたときにim.kayac.comを使ってiPhoneに通知できるようにするプラグイン「opImKayacComPlugin」です。</p>
				<h3>0. 実装方針</h3>
				<p>OpenPNE3で使われているフレームワークsymfonyには「イベントディスパッチャ」という機構があります。これは、拡張可能なプログラムを書ける大変クールな機構です。</p>
				<p>OpenPNE3ではこの機構を使って、ページの読み込みの前後(正確にはアクションの前後)で、好きなコードを走らせることができます。たとえばopAshiatoPluginでは、メンバーのホーム・日記などを見たときに&#8221;あしあと&#8221;をつける処理をしています。</p>
				<p>今回も同じ要領で、日記の作成のあとにim.kayac.comに通知を投げる処理を加えたいと思います。</p>
				<h3>1. config.phpでイベントを受け取る</h3>
				<p>OpenPNEのプラグインを作るときに、必ず実行させたいコードってたまにありますよね。そういうコードは config/config.php に書くといいです。今回イベントのリスナーは必ず追加したいのでここに書きます。</p>
				<p><span style="color: red;">※追記 :</span> 卜部さんから、sfPluginConfigurationを継承するクラスを作ることで、リスナーと処理を一緒のファイルに書けるよ、というアドバイスをもらいました。以下の例ではconfig/opImKayacComConfiguration.class.php というファイルに記述するといいプログラムになるかもしれません。参考 : <a href="http://github.com/ebihara/opPluginChannelServerPlugin/blob/master/config/opPluginChannelServerPluginConfiguration.class.php">http://github.com/ebihara/opPluginChannelServerPlugin/blob/master/config/opPluginChannelServerPluginConfiguration.class.php</a></p>
				<p>・config/config.php</p>
				<pre>
&lt;?php

// 日記が書き込まれたら
// opImKayacComListener::listenToPostDiaryCreate()を実行してね
$this->dispatcher->connect(
  'op_action.post_execute_diary_create',
  array('opImKayacComListener', 'listenToPostDiaryCreate')
);
</pre>
				<p>OpenPNEのアクションが実行されると、アクションの前にop_action.pre_execute_{module}_{action}、アクションの後にop_action.post_execute_{module}_{action}という名前のイベントが発生します。これに対してconnect()を使ってリスナーを登録します。listenじゃなくてconnectなのが紛らわしいです。</p>
				<p>opImKayacComListenerクラスはまだ作っていないので、この状態だとエラーになりますが、とりあえずここは放っておきましょう。</p>
				<h3>2. im.kayac.comに通知を投げるには</h3>
				<p>まずはim.kayac.comに通知を投げる必要があります。im.kayac.comはPOSTメソッドでHTTPリクエストを飛ばせばいいです。PHPからはfile_get_contents()を使います。</p>
				<pre>
  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));
  }
</pre>
				<p><a href="http://www.openpne.jp/wp-content/uploads/2010/03/DSC_0605.jpg"><img src="http://www.openpne.jp/wp-content/uploads/2010/03/DSC_0605-300x199.jpg" alt="Notification on iPod touch" title="im.kayac.com" width="300" height="199" class="alignnone size-medium wp-image-4704" /></a></p>
				<p>うべー。</p>
				<p>こういうstaticなユーティリティ関数を使いたい場合は、慣習としてlib/util/にファイルを置きます。ここではlib/util/opImKayacComPluginToolkit.class.phpというファイルを作りました。</p>
				<p>さて、いよいよ受け取ったイベントで通知処理をする段階です。</p>
				<h3>3. opImKayacComListenerクラスを作る</h3>
				<p>さて、いよいよメインの処理です。といっても大したことをするわけじゃなくて、さっき作ったopImKayacComPluginToolkit::postToImKayacCom()を呼び出して通知するくらいです。</p>
				<p>・lib/opImKayacComListener.class.php</p>
				<pre>
&lt;?php

class opImKayacComListener
{
  static public function listenToPostDiaryCreate()
  {
    opImKayacComPluginToolkit::postToImKayacCom('nitro_idiot');
  }
}
</pre>
				<p>ここで通知するユーザの選択もできます。たとえば、自分が日記を書いたときまでiPhoneに通知されたらうざいですよね。その場合は sfContext::getInstance()->getUser()->getMemberId() でアクセスしているユーザのMemberIdを取得して判定することができます。</p>
				<p>さぁ、これで日記を投稿すれば僕に通知がくるようになりました。最後まで書いてると上司から肩を叩かれそうなのでチュートリアルはここまで！</p>
				<h3>まとめ</h3>
				<p>・必ず実行したいコードは config/config.php に書く<br />
				・ユーティリティ関数はlib/util以下に置く<br />
				・イベントディスパッチャを使えば既存の機能を簡単に拡張できる</p>
				<h3>さらに改良するには</h3>
				<p>ただ、このままだと僕(nitro_idiot)にしか通知を送れません。POSTするURLのユーザ名を引数で受け取ることでそれぞれのユーザに通知することができます。</p>
				<p>その場合、それぞれのユーザにim.kayac.comのアカウントを設定させる必要もあります。これはconfig/doctrine/schema.yml に新規テーブルの記述を加えて、config/member_config.yml と lib/form/MemberConfigForm/MemberConfigImKayacComForm.class.php を追加すれば実現できます。</p>
				<p>他には日記コメントがついたら知りたい！とか、メッセージをすぐ確認したい！とかにも同じように対応することができます。</p>
				<p>今あるOpenPNEのプラグインは、opDiaryPluginとかopMessagePluginとか、大きなものが多いですが、これくらい小さなものでも面白いものが作れるとわかっていただけたでしょうか？</p>
				<h3>今日作ったプラグインは…</h3>
				<p>今日作ったopImKayacComPluginはもちろんオープンソースです！</p>
				<p>http://github.com/fukamachi/opImKayacComPlugin</p>
				<p>この記事のコードからかなり変わっちゃっていますが、原型は同じなので参考にしていただけると幸いです。わからないことがあれば<a href="http://sns.openpne.jp/?m=pc&#038;a=page_f_home&#038;target_c_member_id=6996">公式SNS</a>や<a href="http://twitter.com/nitro_idiot">Twitter</a>宛に気軽に聞いてください :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/4682/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenPNE3でのiPhone対応をたくらんでみる</title>
		<link>http://www.openpne.jp/archives/2436/</link>
		<comments>http://www.openpne.jp/archives/2436/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 12:18:40 +0000</pubDate>
		<dc:creator>Shogo Kawahara</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[開発情報]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=2436</guid>
		<description><![CDATA[開発チームの川原です。 この前、とあるイベントでOpenPNEはiPhone対応はしないのですか？ というご意見をいただきました。 ということで、週末を使ってiPod touch / iPhone的な OpenPNE3の [...]]]></description>
			<content:encoded><![CDATA[				<p>開発チームの川原です。</p>
				<p>この前、とあるイベントでOpenPNEはiPhone対応はしないのですか？<br />
				というご意見をいただきました。</p>
				<p>ということで、週末を使ってiPod touch / iPhone的な<br />
				OpenPNE3のインターフェイスを作ってみようかとたくらんでみました。</p>
				<div id="attachment_2437" class="wp-caption alignnone" style="width: 358px"><img src="http://www.openpne.jp/wp-content/uploads/2009/07/ws000006.png" alt="OpenPNE + iPhone" title="ws000006" width="348" height="418" class="size-full wp-image-2437" /><p class="wp-caption-text">OpenPNE + iPhone</p></div>
				<p>と、まだログイン画面しか作られていませんが、iPhoneインターフェイスライクなものになっています！</p>
				<p>iuiという、iPhone用のライブラリを利用しています。<br />
				<a href="http://code.google.com/p/iui/">http://code.google.com/p/iui/</a></p>
				<p>週末を利用して作っているのでペースは遅いかもしれませんが、完成したら<br />
				本線の方の取り込みについて考えたいと思います。</p>
				<p><a href="https://trac.openpne.jp/svn/OpenPNE3/branches/kawahara/iui">https://trac.openpne.jp/svn/OpenPNE3/branches/kawahara/iui</a><br />
				上で作業しているので、興味があったら是非いじってみてください！</p>
				<p>＊ちなみに、川原はiPhoneや iPod touchを持っていない上に、Mac使いではないのでWindows版のSafariでしか動作検証がされていません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/2436/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OpenPNE3 機能対応状況をまとめました</title>
		<link>http://www.openpne.jp/archives/2406/</link>
		<comments>http://www.openpne.jp/archives/2406/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 13:53:00 +0000</pubDate>
		<dc:creator>Kousuke Ebihara</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[開発情報]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=2406</guid>
		<description><![CDATA[開発チームの海老原です。 現時点における OpenPNE3 の機能実装状況をまとめました。 今村さんがまとめてくれたスプレッドシート（OpnePNE3の機能一覧）をアップデートし、更新した項目の備考欄に「○○月対応予定項 [...]]]></description>
			<content:encoded><![CDATA[				<p>開発チームの海老原です。<br />
				現時点における OpenPNE3 の機能実装状況をまとめました。</p>
				<p>今村さんがまとめてくれたスプレッドシート（<a href="http://spreadsheets.google.com/pub?key=pmWKfSECNafIk1_E995i_dw&#038;gid=0">OpnePNE3の機能一覧</a>）をアップデートし、更新した項目の備考欄に「○○月対応予定項目」を追記しました。現時点で対応が遅れている項目については、備考欄が赤字になっています。</p>
				<p>現時点で対応が遅れている項目は、</p>
				<ul>
				<li>日記コメント記入履歴（opDiaryPlugin）</li>
				<li>日記メール投稿（opDiaryPlugin）</li>
				<li>日記コメントメール投稿（opDiaryPlugin）</li>
				<li>トピック・イベント検索（opCommunityTopicPlugin）</li>
				<li>写真付き書き込み（opCommunityTopicPlugin）</li>
				<li>メッセージ検索（opMessagePlugin）</li>
				<li>SNS設定 &#8211; お気に入りフィード使用設定（管理機能）</li>
				<li>SNS設定 &#8211; ログイン制限（管理機能）</li>
				<li>SNS設定 &#8211; アフィリエイト用タグ（管理機能）</li>
				<li>SNS内名称設定（管理機能）</li>
				<li>画像・書込み管理（管理機能）</li>
				<li>携帯版配色変更（管理機能）</li>
				</ul>
				<p>となります。</p>
				<p>未実装機能の実装やプラグイン開発にご協力いただける方は、<a href="http://www.openpne.jp/archives/2241/">こちらのエントリ</a>をご覧ください。一緒に OpenPNE 3 を盛り上げていきましょう！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/2406/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>opWikiPlugin を作ってみよう #1</title>
		<link>http://www.openpne.jp/archives/1948/</link>
		<comments>http://www.openpne.jp/archives/1948/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 04:32:40 +0000</pubDate>
		<dc:creator>Kousuke Ebihara</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[OpenPNE3.0]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=1948</guid>
		<description><![CDATA[OpenPNE開発チームの海老原です。 不定期ではありますが、 OpenPNE 3.2.x に向けたプラグインの作成チュートリアルを連載していこうと思います。 はじめに OpenPNE 3 向けのプラグイン作成チュートリ [...]]]></description>
			<content:encoded><![CDATA[				<p>OpenPNE開発チームの海老原です。</p>
				<p>不定期ではありますが、 OpenPNE 3.2.x に向けたプラグインの作成チュートリアルを連載していこうと思います。</p>
				<h3>はじめに</h3>
				<p>OpenPNE 3 向けのプラグイン作成チュートリアルには、川原君の「プラグインの作り方」シリーズが存在しますが、これは OpenPNE 3 開発の初期の段階から執筆されたもので、いまでは内容が古くなってしまっています。プラグインのリリースをどうおこなえばよいかといったようなプログラミング以外に関するトピックもなく、このチュートリアルだけでプラグイン作成の全貌を把握することは難しくなってきたといえます。</p>
				<p>また、現在開発を進めている OpenPNE 3.2 系は、ORM の Doctrine 化にはじまり、数多くの大きな機能改善がおこなわれます（その様子は開発版である OpenPNE 3.1.x を追うことで知ることができます）。<br />
				これらの改善は OpenPNE 3.0 ではおこなえなかったことや不充分だったことを実現するためのものであり、非常に意義のあることです。<br />
				しかし、開発者が自分自身でチェンジログからそれぞれの変更を充分に理解し、自作のプラグインに反映させていくのは極めて大変な作業です。</p>
				<p>これらの状況を解決することが、このチュートリアルの目的です。つまり読者は、</p>
				<ul>
				<li>・最新の OpenPNE に向けたプラグイン作成方法を知ることができる</li>
				<li>・プラグイン開発工程全体の流れを知ることができる</li>
				<li>・OpenPNE3.2 の新機能や変更点を知ることができる</li>
				<p>というメリットを享受することができます。</p>
			</div>
			<div class="textBody" id="extended">
				<h3>作成するプラグイン</h3>
				<p>OpenPNE 3 に Wiki 機能を提供するためのプラグイン、「opWikiPlugin」を作ることを考えます。<br />
				このプラグインでは SNS メンバー間での記事の共同編集を可能にします。 OpenPNE3、 symfony、 Doctrine がもたらす豊富な機能をフル活用し、 記事の変更履歴の記録、 SNS 外への記事の公開や管理機能などの作成も視野に入れた、実用的なプラグインに仕上げていきます。</p>
				<p>このプラグインのソースコードは GitHub 上で管理されており、<br />
				<a href="http://github.com/ebihara/opWikiPlugin/tree/master">http://github.com/ebihara/opWikiPlugin/tree/master</a><br />
				から入手することが可能です。とはいっても、このエントリの公開時点では README しかファイルが存在しません。<br />
				ソースコードは、このチュートリアルの連載にあわせて更新がおこなわれていく予定です。</p>
				<h3>開発環境の構築</h3>
				<p>OpenPNE 3 向けのプラグインを作成するためには、 OpenPNE 3 が動作する環境を用意する必要があります。<br />
				OpenPNE 3 の動作要件を知るには、<a href="http://www.openpne.jp/openpne_3_1_setup_guide/">OpenPNE3.1 セットアップ手順</a>を確認するのが手っ取り早いです。要件を満たしている場合は、手順通りにセットアップするだけで開発環境が手に入ります。</p>
				<p>要件を満たしていない場合はミドルウェアなどのセットアップをおこなっていく必要があるのですが、そのための素晴らしいチュートリアルが、先日、<a href="http://www.openpne.jp/archives/2127/">小川さんによって公開されました</a>。この手順に従うことで CentOS 5 上で OpenPNE 3 を動かすことができますし、他のディストリビューションでも充分に応用が利くことでしょう。</p>
				<p>※ただ個人的には、開発用環境としては Debian sid （不安定版） の利用をおすすめします。比較的新しいバージョンのミドルウェアや開発に有用な各種ツール群を容易に入手することができるからです。僕と同じく Debian を常用している小川さんが、近々、 Debian で OpenPNE3 の開発環境を構築するためのチュートリアルを公開するという噂を耳にしたので、こちらもお楽しみに！</p>
				<p>開発環境上で OpenPNE3 のユーザ画面、管理画面が動作することが確認できれば準備完了です。さっそくプラグイン作成の作業に取りかかりましょう。</p>
				<h3>プラグイン生成コマンドを実行する</h3>
				<p>セットアップした OpenPNE3 の一番上のディレクトリ（プロジェクトルート）上で、以下のコマンドを実行します。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-2511.png"><img class="aligncenter size-full wp-image-2329" title="e38394e382afe38381e383a3-2511" src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-2511.png" alt="e38394e382afe38381e383a3-2511" width="401" height="70" /></a><br />
				これだけで、プラグインに必要なディレクトリ群がすべて生成されたことになります。<br />
				plugins 以下に作られた opWikiPlugin ディレクトリを覗くことでどのようなディレクトリが生成されているかがわかると思います。</p>
				<p>このプラグインにアクションファイルなどを追加し、ブラウザからアクセスできることを確認するのもよいのですが、このチュートリアルではどのような機能を作るべきかきちんと計画してから実施することにします。<br />
				しかしせっかくプラグインを作ると決めたのですから、なにか「始めの一歩」のようなものがほしいはずです。</p>
				<p>ということで、早速 GitHub 上にプラグインを公開してみることにしましょう。</p>
				<h3>GitHubに登録</h3>
				<p>まず、 GitHub のユーザアカウントを登録します。 &#8220;Sign up now!&#8221; ボタンから登録作業をおこなってください。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-243.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-243-300x161.png" alt="e38394e382afe38381e383a3-243" title="e38394e382afe38381e383a3-243" width="300" height="161" class="aligncenter size-medium wp-image-2330" /></a></p>
				<p>アカウント登録が完了したら、プロジェクトを作成します。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-245.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-245-300x163.png" alt="e38394e382afe38381e383a3-245" title="e38394e382afe38381e383a3-245" width="300" height="163" class="aligncenter size-medium wp-image-2331" /></a><br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-246.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-246-204x300.png" alt="e38394e382afe38381e383a3-246" title="e38394e382afe38381e383a3-246" width="204" height="300" class="aligncenter size-medium wp-image-2332" /></a></p>
				<p>プロジェクトの作成が完了すると、これからおこなうべき手順が示されたページに遷移します。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-247.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-247-180x300.png" alt="e38394e382afe38381e383a3-247" title="e38394e382afe38381e383a3-247" width="180" height="300" class="aligncenter size-medium wp-image-2333" /></a></p>
				<p>基本的な手順はこのエントリで示しますが、 Global setup の手順についてはこのページに記載されている通りに実施して下さい。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-248.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-248-300x58.png" alt="e38394e382afe38381e383a3-248" title="e38394e382afe38381e383a3-248" width="300" height="58" class="aligncenter size-medium wp-image-2334" /></a></p>
				<h3>first commit</h3>
				<p>まず、プラグインのソースコードを git の管理下に置きます。<br />
				プラグインのディレクトリ（plugins/opWikiPlugin）まで移動し、そのディレクトリ上から git init コマンドを実行してください。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-252.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-252.png" alt="e38394e382afe38381e383a3-252" title="e38394e382afe38381e383a3-252" width="319" height="61" class="aligncenter size-full wp-image-2335" /></a></p>
				<p>早速コミットを……といいたいところなのですが、 git は空ディレクトリをコミットの対象としないため、現時点ではコミットすべき対象がないことになってしまっています。</p>
				<p>そこで、 README ファイルを作成し、 git add コマンドでコミット対象に加えてください。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-253.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-253.png" alt="e38394e382afe38381e383a3-253" title="e38394e382afe38381e383a3-253" width="239" height="34" class="aligncenter size-full wp-image-2336" /></a></p>
				<p>これでコミットの準備は整いました。<br />
				さっそく git commit コマンドでコミットしましょう。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-254.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-254.png" alt="e38394e382afe38381e383a3-254" title="e38394e382afe38381e383a3-254" width="333" height="56" class="aligncenter size-full wp-image-2337" /></a></p>
				<p>ただし、これだけでは、ローカルの git レポジトリにコミットがおこなわれたに過ぎません。<br />
				この変更を GitHub にも反映させるためには、 GitHub のレポジトリを関連づけた上で、 git push コマンドで変更をリモートの GitHub に伝える必要があります。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-255.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-255.png" alt="e38394e382afe38381e383a3-255" title="e38394e382afe38381e383a3-255" width="534" height="126" class="aligncenter size-full wp-image-2338" /></a></p>
				<p>ここまで完了したら、実際に GitHub のページにブラウザでアクセスしましょう。</p>
				<p>最初のコミットが反映されているのが確認できるはずです。<br />
				<a href="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-256.png"><img src="http://www.openpne.jp/wp-content/uploads/2009/06/e38394e382afe38381e383a3-256-300x179.png" alt="e38394e382afe38381e383a3-256" title="e38394e382afe38381e383a3-256" width="300" height="179" class="aligncenter size-medium wp-image-2340" /></a></p>
				<p>これで準備は整いました。<br />
				次回は、プラグインが扱う各種画面のモックアップを作っていこうと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/1948/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenPNE 3.1 を CentOS 5 にインストールしてみました</title>
		<link>http://www.openpne.jp/archives/2127/</link>
		<comments>http://www.openpne.jp/archives/2127/#comments</comments>
		<pubDate>Sat, 30 May 2009 07:00:31 +0000</pubDate>
		<dc:creator>Rimpei Ogawa</dc:creator>
				<category><![CDATA[TIPS]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=2127</guid>
		<description><![CDATA[OpenPNE開発チームの小川です。 前回はレンタルサーバに OpenPNE 3 をインストールする例を紹介しましたが、今回は自分で管理しているサーバへのインストール例として OpenPNE 3.1.0 を最小セットアッ [...]]]></description>
			<content:encoded><![CDATA[				<p>OpenPNE開発チームの小川です。</p>
				<p><a href="http://www.openpne.jp/archives/1846/">前回</a>はレンタルサーバに OpenPNE 3 をインストールする例を紹介しましたが、今回は自分で管理しているサーバへのインストール例として OpenPNE 3.1.0 を最小セットアップ状態の CentOS 5.3 にインストールする手順をご紹介します。</p>
				<p>OpenPNE 3.1 の一般的なインストール方法は、<a href="http://www.openpne.jp/openpne_3_1_setup_guide/">OpenPNE3.1 セットアップ手順</a> をご覧ください。</p>
			</div>
			<div class="textBody" id="extended">
				<h2>はじめに</h2>
				<p>ここで紹介する手順は OpenPNE を動作させる例として最低限の手順しか記載していないので、実際に公開サーバの設定をする際には参考程度にご利用ください。</p>
				<p>以下の手順では sudo を使用していますが、sudo の設定をしていない環境では「sudo」の付いているコマンドは「sudo」を抜いて root ユーザで実行してください。</p>
				<p>また、ホスト名として <em>sns.example.com</em> を、OpenPNE を管理する一般ユーザとして <em>admin</em> を例にしていますが、環境に合わせて適宜読み替えてください。</p>
				<h2>ミドルウェアのインストール</h2>
				<h3>Apache, MySQL, Postfix のインストール</h3>
				<p>yum コマンドを使ってOS標準のパッケージをそのままインストールします。</p>
				<pre><code>$ sudo yum install httpd mysql-server postfix
</code>
</pre>
				<h3>PHP のインストール</h3>
				<p>PHP に関してはバージョン 5.2.3 以降が必要なので、個別にインストールします。ソースコードからコンパイルしてももちろんよいのですが、今回は <a href="http://oss.oracle.com/projects/php/">oss.oracle.com</a> で公開されている rpm パッケージを利用しました。</p>
				<pre style="overflow: auto"><code>$ 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%]
</code>
</pre>
				<h3>APC のインストール（オプション）</h3>
				<p>PHP の快適な動作にはアクセラレータの導入が欠かせません。ここではセットアップガイドでも推奨されている APC をインストールしてみます。</p>
				<pre><code>$ 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] : 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
</code>
</pre>
				<h2>ミドルウェアの設定</h2>
				<h3>Apache の設定</h3>
				<p>VirtualHost の設定を httpd.conf の末尾に追加します。</p>
				<pre><code>$ sudo vi /etc/httpd/conf/httpd.conf
</code>
</pre>
				<pre><code>&lt;VirtualHost *:80&gt;
    ServerName <em>sns.example.com</em>
    DocumentRoot /var/www/sns/web
    &lt;Directory /var/www/sns/web&gt;
        AllowOverride All
    &lt;/Directory&gt;
&lt;/VirtualHost&gt;
</code>
</pre>
				<p>OpenPNE を設置するディレクトリを作成します。</p>
				<pre><code>$ sudo mkdir /var/www/sns
$ sudo chown <em>admin</em>. /var/www/sns
</code>
</pre>
				<p>設定ファイルが間違っていないかどうかテストします。</p>
				<pre><code>$ sudo /etc/init.d/httpd configtest
Warning: DocumentRoot [/var/www/sns/web] does not exist
Syntax OK
</code>
</pre>
				<p>/var/www/sns/web は後の手順で作成するので、この Warning が出るのはよしとして進めます。</p>
				<h3>デーモンの起動</h3>
				<pre><code>$ sudo /etc/init.d/httpd start
$ sudo /etc/init.d/mysqld start
$ sudo /etc/init.d/postfix start
</code>
</pre>
				<h3>MySQL のユーザ設定</h3>
				<p>まず、root ユーザのパスワードを設定します。<em>new-password</em> の部分は変更してください。</p>
				<pre><code>$ mysql -u root

mysql> UPDATE mysql.user SET Password = PASSWORD('<em>new-password</em>') 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)
</code>
</pre>
				<p>OpenPNE 用に <em>openpne</em> というユーザを作成し、<em>openpne3</em> というデータベースに対するアクセス権限を与えます。<em>pasuwado</em> の部分は変更してください。</p>
				<pre><code>mysql&gt; GRANT USAGE ON *.* TO '<em>openpne</em>'@'localhost' IDENTIFIED BY '<em>pasuwado</em>';
Query OK, 0 rows affected (0.00 sec)

mysql&gt; GRANT ALL ON <em>openpne3</em>.* TO '<em>openpne</em>'@'localhost';
Query OK, 0 rows affected (0.00 sec)
</code>
</pre>
				<h3>ファイアーウォールの設定</h3>
				<p>外部から HTTP でアクセスできるよう設定します。</p>
				<pre><code>$ sudo system-config-securitylevel-tui
</code>
</pre>
				<p>「カスタマイズ」 → 「WWW (HTTP) 」にチェック → 「OK」 → 「OK」</p>
				<h2>OpenPNE 3.1 のインストール</h2>
				<h3>ソースコードのダウンロード</h3>
				<p><a href="http://sourceforge.net/project/showfiles.php?group_id=174268&#038;package_id=307735">SourceForge.net の OpenPNE プロジェクトのページ</a>から OpenPNE 3.1.0 の zip アーカイブをダウンロード・展開します。</p>
				<pre><code>$ 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
</code>
</pre>
				<h3>キャッシュファイルの削除</h3>
				<p>OpenPNE 3.1.0 の zip アーカイブには誤ったキャッシュファイルが含まれている可能性があるので、念のためキャッシュファイルの削除をしてください。（3.1.0 バージョン固有の問題で、通常のインストールでは必要ありません）</p>
				<pre><code>$ cd OpenPNE-3.1.0
$ rm cache/*
</code>
</pre>
				<h3>プラグインインストール</h3>
				<p>OpenPNE 3.1.0 では初期データの登録処理の関係上、openpne:install タスクを実行する前に opPlugin:sync タスクを実行してあらかじめプラグインをインストールしておく必要があります。</p>
				<p>せっかくなので、<a href="http://www.openpne.jp/archives/1987/">先日リリースされたばかりの opDiaryPlugin</a> も一緒にインストールしておきましょう。</p>
				<pre><code>$ php symfony opPlugin:sync
$ php symfony opPlugin:install --stability=beta opDiaryPlugin
</code>
</pre>
				<h3>openpne:install タスクの実行</h3>
				<pre><code>$ php symfony openpne:install
</code>
</pre>
				<p>openpne:install タスクを実行すると DB のセットアップに必要な情報を聞かれるので、サーバ環境に合わせて入力していきます。</p>
				<dl>
				<dt>Choose DBMS (mysql, pgsql or sqlite)</dt>
				<dd style="text-indent: 2em">使用する DBMS の種類を入力します。</dd>
				<dd style="text-indent: 2em">ここでは、「mysql」と入力します。</dd>
				<dt>Type database username</dt>
				<dd style="text-indent: 2em">データベースのユーザ名を入力します。</dd>
				<dd style="text-indent: 2em">作成した MySQL のユーザ名「<em>openpne</em>」を入力します。</dd>
				<dt>Type database password (optional)</dt>
				<dd style="text-indent: 2em">データベースのパスワードを入力します。</dd>
				<dd style="text-indent: 2em">作成した MySQL ユーザのパスワード「<em>pasuwado</em>」を入力します。</dd>
				<dt>Type database hostname</dt>
				<dd style="text-indent: 2em">データベースサーバのホスト名を入力します。</dd>
				<dd style="text-indent: 2em">ここでは「localhost」と入力します。</dd>
				<dt>Type database port number (optional)</dt>
				<dd style="text-indent: 2em">データベースのポート番号を入力します。未入力の場合は DBMS ごとのデフォルト値が使用されます。</dd>
				<dd style="text-indent: 2em">ここでは未入力のまま Enter を押します。</dd>
				<dt>Type database name</dt>
				<dd style="text-indent: 2em">データベース名を入力します。</dd>
				<dd style="text-indent: 2em">ここでは例として「openpne3」と入力します。</dd>
				<dt>Type database socket path (optional)</dt>
				<dd style="text-indent: 2em">データベース接続に使用するソケットのパスを入力します。</dd>
				<dd style="text-indent: 2em">ここでは未入力のまま Enter を押します。</dd>
				</dl>
				<p>最後に入力した内容の確認をします。問題なければ「y」を入力します。</p>
				<pre><code>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
</code>
</pre>
				<h3>公開ディレクトリの設定</h3>
				<p>ここまでの手順で OpenPNE 3 が動作する状態になっているので、公開ディレクトリにシンボリックリンクを作成します。</p>
				<pre><code>$ cd /var/www/sns
$ ln -s OpenPNE-3.1.0/web
</code>
</pre>
				<h3>ブラウザからアクセス</h3>
				<p>ブラウザから「http://<em>sns.example.com</em>/」にアクセスして OpenPNE 3 のログイン画面が表示されれば OK です。（初期アカウントはセットアップガイドにある通り、sns@example.com / password となっています。変更して使ってください）</p>
				<p>また、管理画面は「http://<em>sns.example.com</em>/pc_backend.php」へアクセスすれば表示されます。（初期アカウントはセットアップガイドにある通り、admin / password となっています。変更して使ってください）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/2127/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>OpenPNE3 をさくらのレンタルサーバにインストールしてみました</title>
		<link>http://www.openpne.jp/archives/1846/</link>
		<comments>http://www.openpne.jp/archives/1846/#comments</comments>
		<pubDate>Wed, 13 May 2009 03:47:53 +0000</pubDate>
		<dc:creator>Rimpei Ogawa</dc:creator>
				<category><![CDATA[TIPS]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=1846</guid>
		<description><![CDATA[OpenPNE開発チームの小川です。 OpenPNE 3 のリリース以来、「OpenPNE 3 ってレンタルサーバでも動くの？」という質問をたくさんもらっていましたので、今回はその実証のため OpenPNE 3.0.4  [...]]]></description>
			<content:encoded><![CDATA[				<p>OpenPNE開発チームの小川です。</p>
				<p>OpenPNE 3 のリリース以来、「OpenPNE 3 ってレンタルサーバでも動くの？」という質問をたくさんもらっていましたので、今回はその実証のため OpenPNE 3.0.4 を「さくらのレンタルサーバ」のスタンダードで設置してみました。</p>
				<p>結論としてはまったく問題なく設置できたましたので、その手順を紹介します。</p>
			</div>
			<div class="textBody" id="extended">
				<h2>インストール手順</h2>
				<h3>MySQL データベースの作成</h3>
				<p>まず、事前の準備としてさくらインターネットのサーバコントロールパネルから MySQL のデータベースを作成します。</p>
				<ul>
				<li> ユーザ名（さくらのレンタルサーバのアカウント名と同じ）</li>
				<li> データベース名（さくらのレンタルサーバのアカウント名と同じ）</li>
				<li> ホスト名（「mysql***.db.sakura.ne.jp」のような形式）</li>
				<li> パスワード（自分で入力したもの）</li>
				</ul>
				<p>の情報を控えておきましょう。</p>
				<h3>SSH ログイン</h3>
				<p>ここからの作業は SSH でサーバにログインして行います。</p>
				<h3>OpenPNE3 をダウンロード</h3>
				<p>今回は OpenPNE-3.0.4 の zip アーカイブを使って設置してみます。wget でダウンロード、unzip で解凍します。<br />
				<code><br />
				%wget "http://nchc.dl.sourceforge.net/sourceforge/openpne/OpenPNE-3.0.4.zip"<br />
				%unzip OpenPNE-3.0.4.zip<br />
				%ls<br />
				MailBox<br />
				OpenPNE-3.0.4<br />
				OpenPNE-3.0.4.zip<br />
				db<br />
				sblo_files<br />
				www<br />
				</code></p>
				<h3>openpne:install タスクの実行</h3>
				<p>OpenPNE 3 では、DB のセットアップ・ディレクトリパーミッションの設定・標準プラグインのインストールなどの作業を openpne:install タスクを実行すれば一括で行ってくれます。</p>
				<p>さっそく OpenPNE ディレクトリに移動して、タスクを実行してみます。<br />
				<code><br />
				%cd OpenPNE-3.0.4<br />
				%php symfony openpne:install<br />
				</code></p>
				<p>タスクを実行すると DB のセットアップに必要な情報を聞かれるので、サーバ環境に合わせて入力していきます。</p>
				<dl>
				<dt>Choose DBMS (mysql, pgsql or sqlite)</dt>
				<dd style="text-indent: 2em">使用する DBMS の種類を入力します。</dd>
				<dd style="text-indent: 2em">ここでは、「mysql」と入力します。</dd>
				<dt>Type database username</dt>
				<dd style="text-indent: 2em">データベースのユーザ名を入力します。</dd>
				<dd style="text-indent: 2em">ここではさくらのアカウント名を入力します。</dd>
				<dt>Type database password (optional)</dt>
				<dd style="text-indent: 2em">データベースのパスワードを入力します。</dd>
				<dd style="text-indent: 2em">ここではコントロールパネルで設定したパスワードを入力します。</dd>
				<dt>Type database hostname</dt>
				<dd style="text-indent: 2em">データベースサーバのホスト名を入力します。</dd>
				<dd style="text-indent: 2em">ここでは「mysql***.db.sakura.ne.jp」という形式のものを入力します。</dd>
				<dt>Type database port number (optional)</dt>
				<dd style="text-indent: 2em">データベースのポート番号を入力します。未入力の場合は DBMS ごとのデフォルト値が使用されます。</dd>
				<dd style="text-indent: 2em">ここでは未入力のまま Enter を押します。</dd>
				<dt>Type database name</dt>
				<dd style="text-indent: 2em">データベース名を入力します。</dd>
				<dd style="text-indent: 2em">ここではさくらのアカウント名を入力します。</dd>
				</dl>
				<p>最後に入力した内容の確認をします。問題なければ「y」を入力します。</p>
				<pre><code>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
</code>
</pre>
				<p>確認が終わると自動的にインストールが進んでいきます。途中 Warning がたくさん表示されてびっくりしますがインストールは問題なく完了しています。（Fatal Errorが表示されて止まっている場合は失敗しています。この Warning エラー表示については今後の開発で改善されるはずです！）</p>
				<h3>公開ディレクトリの設定</h3>
				<p>ここでは「http://（アカウント名）.sakura.ne.jp/<em>sns</em>/」というURLで設置すると仮定します。（「/<em>sns</em>/」の部分は自由に決めてOK）</p>
				<p>.htaccess ファイルを編集します。変更点は2か所です。</p>
				<pre><code>%vi web/.htaccess

<strong>#</strong>Options +FollowSymLinks +ExecCGI    <strong># コメントアウトする</strong>

&lt;IfModule mod_rewrite.c&gt;
  RewriteEngine On

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

  # 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]
&lt;/IfModule&gt;
</code>
</pre>
				<p>最後に公開ディレクトリにシンボリックリンクを作成します。<br />
				<code><br />
				%cd ../www<br />
				%ln -s ../OpenPNE-3.0.4/web <em>sns</em><br />
				</code></p>
				<h3>ブラウザからアクセス</h3>
				<p>ここまででインストール作業は完了です！</p>
				<p>ブラウザから「http://（アカウント名）.sakura.ne.jp/<em>sns</em>/」にアクセスして OpenPNE 3 のログイン画面が表示されれば OK です。（初期アカウントはセットアップガイドにある通り、sns@example.com / password となっています。変更して使ってください）</p>
				<p>また、管理画面は「http://（アカウント名）.sakura.ne.jp/<em>sns</em>/pc_backend.php」へアクセスすれば表示されます。（初期アカウントはセットアップガイドにある通り、admin / password となっています。変更して使ってください）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/1846/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>OpenPNE3の機能について</title>
		<link>http://www.openpne.jp/archives/1762/</link>
		<comments>http://www.openpne.jp/archives/1762/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 03:20:36 +0000</pubDate>
		<dc:creator>imamura</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[サイト情報]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=1762</guid>
		<description><![CDATA[OpenPNE開発チームの今村です。 OpenPNE3の機能一覧表を作成いたしました。 OpenPNE3のことをもっと知りたいという方々へ参考になれば幸いです。 まだまだ未実装の機能が多々ありますが開発チームも頑張ってい [...]]]></description>
			<content:encoded><![CDATA[				<p>OpenPNE開発チームの今村です。</p>
				<p>OpenPNE3の機能一覧表を作成いたしました。<br />
				OpenPNE3のことをもっと知りたいという方々へ参考になれば幸いです。</p>
				<p>まだまだ未実装の機能が多々ありますが開発チームも頑張っていきます！<br />
				また、未実装で興味のある機能があれば是非プラグイン作成にチャレンジしてみてください。<br />
				是非、一緒にOpenPNE3を盛り上げていきましょう！！</p>
				<p><span class="icon">機能をまとめたスプレッドシートのリンク先</span><span class="icon"> → </span><a href="http://spreadsheets.google.com/pub?key=pmWKfSECNafIk1_E995i_dw&amp;gid=0"><span class="icon">OpnePNE3の機能一覧</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/1762/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenPNE3プラグインの作り方#6</title>
		<link>http://www.openpne.jp/archives/950/</link>
		<comments>http://www.openpne.jp/archives/950/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 10:53:49 +0000</pubDate>
		<dc:creator>Shogo Kawahara</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[開発情報]]></category>
		<category><![CDATA[OpenPNE3.0]]></category>

		<guid isPermaLink="false">http://www.openpne.jp/?p=950</guid>
		<description><![CDATA[この記事は OpenPNE3.0.x のものです。現在の最新安定版では動作しない箇所が存在します。 開発チームの川原です！ （過去の記事） OpenPNE3プラグインの作り方#1 OpenPNE3プラグインの作り方#2  [...]]]></description>
			<content:encoded><![CDATA[				<p><strong>この記事は OpenPNE3.0.x のものです。現在の最新安定版では動作しない箇所が存在します。</strong></p>
				<p>開発チームの川原です！</p>
				<p>（過去の記事）<br />
				<a href="http://www.openpne.jp/archives/683/" target="_blank">OpenPNE3プラグインの作り方#1</a><br />
				<a href="http://www.openpne.jp/archives/688/" target="_blank">OpenPNE3プラグインの作り方#2</a><br />
				<a href="http://www.openpne.jp/archives/704/" target="_blank">OpenPNE3プラグインの作り方#3</a><br />
				<a href="http://www.openpne.jp/archives/785/" target="_blank">OpenPNE3プラグインの作り方#4</a><br />
				<a href="http://www.openpne.jp/archives/856/" target="_blank">OpenPNE3プラグインの作り方#5</a></p>
				<p>My News作りは今回で最終回です！</p>
				<p>あと残されている基本的な作業は</p>
				<ul>
				<li>フォームによるポストに対するアクションの作成</li>
				<li>プロフィール画面にMy Newsを表示する</li>
				</ul>
				<p>この２つになるかと思います。</p>
				<p>まずは、アクションを作ります。<br />
				<a href="http://www.openpne.jp/archives/688/" target="_blank">第2回目</a>でテスト動作に使用した<br />
				<strong>plugins/opSamplePlugin/apps/pc_frontend/modules/hello/actions/actions.class.php</strong><br />
				に投稿がされた時のアクションを記していきます。</p>
				<p>前回、ポスト先のアクション名は <strong>updateNews</strong> としていたはずです。<br />
				そのため、このファイルで宣言している helloActions クラスに<br />
				新たなメソッドを宣言します。<br />
				メソッド名は <strong>executeアクション名()</strong><br />
				（アクション名の最初は大文字に変える）にします。</p>
				<blockquote><p>&lt;?php<br />
				// (コメント行省略)..</p>
				<p>class helloActions extends sfActions<br />
				{<br />
				&nbsp;&nbsp;// (コメント行省略)..<br />
				&nbsp;&nbsp;public&nbsp;function&nbsp;executeIndex($request)<br />
				&nbsp;&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sfView::SUCCESS;<br />
				&nbsp;&nbsp;}</p>
				<p>&nbsp;&nbsp;public&nbsp;function&nbsp;executeUpdateNews($request)<br />
				&nbsp;&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;POSTリクエストかどうかを確認する<br />
				&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($request->isMethod(sfRequest::POST))<br />
				&nbsp;&nbsp;&nbsp;&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;member_news&nbsp;から&nbsp;自分のメンバーIDが一致する１行を取りだす<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$criteria&nbsp;=&nbsp;new&nbsp;Criteria();<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$criteria->add(MemberNewsPeer::MEMBER_ID,$this->getUser()->getMember()->getId());<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$memberNews&nbsp;=&nbsp;MemberNewsPeer::doSelectOne($criteria);</p>
				<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;前回作成した&nbsp;memberNewsFormの初期値として先ほど取りだした1行をセットする<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$memberNewsForm&nbsp;=&nbsp;new&nbsp;MemberNewsForm($memberNews);</p>
				<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;POSTされたパラメータを取得する<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$param&nbsp;=&nbsp;$request->getParameter(&#8216;member_news&#8217;);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$param['member_id']&nbsp;=&nbsp;$this->getUser()->getMember()->getId();</p>
				<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;パラメータをバインドする<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$memberNewsForm->bind($param);</p>
				<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;入力された値が妥当かどうかを確かめる<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($memberNewsForm->isValid())<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;データベースに保存<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$memberNewsForm->save();<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
				&nbsp;&nbsp;&nbsp;&nbsp;}<br />
				&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;最後に自分のホームにリダイレクトする<br />
				&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this->redirect(&#8216;@homepage&#8217;);<br />
				&nbsp;&nbsp;}<br />
				}</p></blockquote>
				<p>アクションでは、<br />
				<strong>$this->getUser()->getMemer()</strong><br />
				で自分のメンバー情報が取得できることを覚えておくと今後ラクになると思います。<br />
				（自分の情報がセットされた クラスMember のインスタンスです。<br />
				　また、テンプレートでは $sf_user で $this->getUser() が取得できます。<br />
				　よって、 $sf_user->getMember() で自分のメンバー情報が取得できます。）</p>
				<p>アクション部はこういった感じです。<br />
				ホームにあるMy Newsのフォームでポストすることにより<br />
				正しく登録できることが確認できるでしょうか？</p>
				<p>最後に、プロフィール画面から他人が見られるようにします。<br />
				<a href="http://www.openpne.jp/archives/785/">第4回</a>のように、テンプレート拡張を利用します。</p>
				<p>パーシャルを追加します。</p>
				<p><strong>plugins/opSamplePlugin/apps/pc_frontend/modules/hello/templates</strong></p>
				<p>に <strong>_sampleParts2.php</strong> を追加します。<br />
				これを、My Newsが表示されるものにします。<br />
				下のように編集してください。</p>
				<blockquote><p>&lt;?php<br />
				// idパラメータ（プロフィールページを表示するとき指定しているメンバーID）<br />
				// を取得します。自己プロフィールのように id がない場合は、自分のメンバーIDを $memberIdに代入する<br />
				$memberId = $sf_request->getParameter(&#8216;id&#8217;, $sf_user->getMember()->getId());</p>
				<p>// member_news テーブルから取得した $memberIdと一致する1行を取り出す<br />
				$criteria = new Criteria();<br />
				$criteria->add(MemberNewsPeer::MEMBER_ID, $memberId);<br />
				$memberNews = MemberNewsPeer::doSelectOne($criteria);</p>
				<p>$body = &#8220;&#8221;;<br />
				// もし行が存在した場合は、contentフィールドの内容を$bodyに代入する<br />
				if ($memberNews)<br />
				{<br />
				&nbsp;&nbsp;$body = $memberNews->getContent();<br />
				}</p>
				<p>// Partsヘルパー（OpenPNE3独自のヘルパー）に含まれる<br />
				// include_box関数を使って $body を出力する<br />
				// include_boxの仕様は<a href="http://www.openpne.jp/archives/856/" target="_blank">前回の記事</a>で説明<br />
				include_box(&#8216;MyNews&#8217;,'MyNews&#8217;,nl2br($body));</p></blockquote>
				<p><strong><br />
				plugins/opSamplePlugin/apps/pc_frontend/modules/member/config/view.yml<br />
				</strong><br />
				を次のようにします。</p>
				<blockquote><p>homeSuccess:<br />
				&#8230;（省略）&#8230;<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:   [after]</p>
				<p>profileSuccess:<br />
				&nbsp;&nbsp;customize:<br />
				&nbsp;&nbsp;&nbsp;&nbsp;sampleParts2:<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template: [hello, sampleParts2]<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parts:    [profile]<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:   [before]</p></blockquote>
				<p>templateに今回作成した、 sampleParts2 を指定します。<br />
				プロフィールの上に表示したいので、 targetはbeforeです！</p>
				<p>設定ファイル編集後はやっぱり <strong>symfony cc</strong> でキャッシュ削除をします。<br />
				これでプロフィール画面は次のようになるはずです。</p>
				<p><a href="http://www.openpne.jp/wp-content/uploads/2008/12/ws000033.png"><img src="http://www.openpne.jp/wp-content/uploads/2008/12/ws000033.png" alt="" title="ws000033" width="500" height="204" class="alignnone size-full wp-image-951" /></a></p>
				<p>後はフォームのtextareaの幅を調節すれば、現行の My News同様に扱うことができるでしょう。<br />
				（ついでに更新日時を表示するのを忘れていた！）</p>
				<p>今回はかなりシンプルなアプリを作成してみましたが、<br />
				symfonyは<a href="http://www.prototypejs.org/" target="_blank">protype.js</a>を利用することができるので<br />
				凝ればAjaxでバリバリ動くリッチなWebアプリを作ることだって可能です。</p>
				<p>symfony1.2の日本語資料も最近ようやく増え始めてきたので<br />
				ぜひOpenPNE3を使って、面白いアプリを作ってみてください。</p>
				<p>「こんなの作ってみた！」という嬉しい報告をお待ちしています。</p>
				<p>以後も、プラグイン開発関連の情報は引き続き発信していきたいと思いますので、<br />
				よろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openpne.jp/archives/950/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

