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

開発情報

Home > 開発情報

OpenPNE 3.1 機能紹介 #3 - OAuth

09 / 12 土曜日 2009

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

3.1 機能紹介シリーズ第三弾です。今回は OpenPNE 3.1.2 から新しく対応した OAuth について紹介します。

OAuth とは

SNS 内データのように保護されたリソースへの API を使ってアクセスする場合に有用なアクセス制御の仕組みです。

OAuth 登場以前は API を使用する外部アプリケーションなどに利用者の ID やパスワードを預けなければなりませんでした。 ID とパスワードを預けるということは、そのサイトにおける全権限を与えてしまうことに等しいというだけでなく、その ID とパスワードを他サービスと共用していた場合、そのサービスについても不正利用される危険が常につきまとうということになります。

OAuth ではデータにアクセスするために ID やパスワードとまったく紐付かないトークンを使用します。このトークンは、認証済みのユーザから使用を許可されたもので、あらかじめ許可されている API へのアクセスしかおこなえません。また、このトークンが不正利用された場合はいつでも破棄することができます。

SNS が OAuth に対応することで、安心して外部のアプリケーションを利用することができるようになります。

OAuth 対応アプリケーションを作る

OAuth に対応したアプリケーションを作るには、まず、 SNS への申請が必要です。

アプリケーションはメンバー画面と管理画面の両方からおこなうことができます。

ここではメンバー画面の例を示します。

まず、 SNS の設定変更画面 (/member/config) にアクセスします。メニューに「外部サービスとの接続設定」という項目があるので、それをクリックします。

pictureefbc882009-09-11-154734efbc89

「アプリケーションの追加」リンクをクリックします。

pictureefbc882009-09-11-154926efbc89

アプリケーション情報の登録を促されるので、必要な情報を入力します。使用する API は、アプリケーションが使用する予定の API をすべて選択します。ここで選択されなかった API は使用することができません。

pictureefbc882009-09-11-155006efbc89

アプリケーションの情報が表示されます。これで、このアプリケーションがこの SNS で使用できるようになりました。

pictureefbc882009-09-11-155129efbc89

この画面で表示される Consumer key と Consumer secret はアプリケーションを特定するために使用される情報です。これは絶対に公開しないでください。

実際に WebAPI にアクセスしてみる

では、実際にアプリケーションから OAuth を使って WebAPI にアクセスします。

OAuth のフロー

OAuth は以下のようなフローで認可処理をおこないます。

oauth_flow_ja

コーディング

それでは実際にコーディングに入ります。

OAuth のフローは単純なため、署名部分を除いては自分で書くこともできますが、 OpenPNE でより楽に OAuth を扱うためのライブラリを作成しました。(このライブラリは Apache2 Lisence として提供します。ご自由にお使いください)

OpenPNE3 用 OAuth ライブラリ (Gist) ※このコードは気が向き次第改良を加えていきます

また、このライブラリは PHP で OAuth を扱うための以下のライブラリに依存します。こちらも忘れずに入手してください。
http://oauth.googlecode.com/svn/code/php/

以下に、このライブラリを使って OpenPNE の OAuth を利用する手順を示します。

コンシューマの設定をする

ライブラリを使用するために、コンシューマに関する簡単な情報を設定する必要があります。

OpenPNEOAuth::getInstance() メソッドに、 SNS の URL とコンシューマキーとコンシューマシークレットを引数として指定します。

OpenPNEOAuth::getInstance($url, $consumerKey, $consumerSecret)

これでコンシューマ情報の登録は完了です。

以降は、OpenPNEOAuth::getInstance() を引数なしでコールし、 OpenPNEOAuth のインスタンス経由で各種メソッドを使用できるようになります。

リクエストトークンを取得する

リクエストトークンを取得するには、 OpenPNEOAuth::getRequestToken() メソッドをコールバック URL 付きでコールします。この URL は、認可後にユーザが戻ってくる外部アプリケーションの URL です。 URL を持たないデスクトップアプリケーションなどの場合は、文字列 “oob” を指定してください。

OpenPNEOAuth::getInstance()->getRequestToken('http://example.com/')

このメソッドは、リクエストトークン取得用の URL にアクセスした際のレスポンス本文をパースし、連想配列にしたものを返します。 oauth_token というキーでリクエストトークンの値が、 oauth_token_secret というキーでトークンに紐付いたシークレットの値が格納されています。

認可用 URL を取得し、リダイレクトさせる

メンバーが認可をおこなうページへの URL を取得するには、 OpenPNEOAuth::getAuthorizeUrl() メソッドをコールします。このメソッドは、 OpenPNEOAuth::getRequestToken() の返り値のように、 oauth_token というキーの要素を持つ連想配列を引数に取ります。

$url = OpenPNEOAuth::getInstance()->getAuthorizeUrl($token)

OpenPNEOAuth::getRequestToken() の返り値は、認可用ページの URL を表す文字列です。この URL に対して、リダイレクトなどの方法によってメンバーを誘導します。

header('Location: '.$url);

認可されたリクエストトークンを使ってアクセストークンを取得する

メンバーが認可をおこなったあとは、リクエストトークンを取得する際に指定した URL に戻ってきます。この際、リクエストトークンが oauth_token というパラメータで、確認用コードが oauth_verifier というパラメータで渡されているので、これを元にアクセストークンを取得します。

アクセストークンを取得するには、 OpenPNEOAuth::getAccessToken() メソッドを、認可済みリクエストトークンと確認用コードを引数に指定してコールします。

$token = OpenPNEOAuth::getInstance()->getAccessToken($_GET['oauth_token'], $_GET['oauth_verifier'])

OpenPNEOAuth::getAccessToken() の返り値は、 OpenPNEOAuth::getRequestToken() と同様に、レスポンス本文をパースし連想配列にしたものです。oauth_token というキーでアクセストークンの値が、 oauth_token_secret というキーでトークンに紐付いたシークレットの値が格納されています。

OAuth に対応した API の URL に対して、アクセストークン付きでアクセスする

OpenPNE3 で利用できる OAuth に対応した API には、現時点で OpenPNE Web API があります。

たとえばこの API でメンバーの情報を取得する場合、 http://sns.example.com/api.php/feeds/member/1 に GET でリクエストします。

このような場合は OpenPNEOAuth::doOAuthGet() メソッドが利用できます。 OpenPNEOAuth::doOAuthGet() は、 リクエスト対象の URL、 OpenPNEOAuth::getAccessToken() で得られるアクセストークンが格納された連想配列を引数に指定します。

$token = OpenPNEOAuth::getInstance()->doOAuthGet('http://sns.example.com/api.php/feeds/member/1', $token)

POST, PUT, DELETE メソッドによるリクエストもサポートしています。

POST と PUT はそれぞれ OpenPNEOAuth::doOAuthPost(), OpenPNEOAuth::doOAuthPut() というメソッドで扱えます。これらのメソッドはリクエスト対象の URL、リクエスト本文の文字列(OpenPNE Web API の場合は XML 文書)、アクセストークンが格納された連想配列を引数に取ります。

DELETE の場合は OpenPNEOAuth::doOAuthDelete() というメソッドを使用します。このメソッドの引数は OpenPNEOAuth::doOAuthGet() と同様、 リクエスト対象の URL、 OpenPNEOAuth::getAccessToken() で得られるアクセストークンが格納された連想配列です。

実際のサンプルコード

手順通りにライブラリを使用して、できあがったサンプルコードを以下に示します。

このコードは OAuth を使用した外部アプリケーション開発に必要な手順を示すための最低限のサンプルでしかありません。このコードは XSS 攻撃や変数汚染攻撃などに対して脆弱です。絶対にこのまま使用しないでください。

詳細な情報を得るには

OAuth の仕様書である OAuth Core 1.0 Revision A をご覧ください。

また、 OpenPNE3 で OAuth を使うためのドキュメントを現在作成中です(日本語版、英語版)。現時点ではかなり荒削りですが、参考資料としてはお使いいただけると思います。

OpenPNE 3.1 機能紹介 #2 - OpenID

09 / 07 月曜日 2009

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

3.1 機能紹介シリーズ第二弾です。前回の WebAPI の記事から 3 ヶ月が経ってしまいましたが、先日リリースした 3.1.2 では嬉しい機能がたくさん増えているので、どんどん記事を書いていこうと思います。お楽しみに!

ということで OpenPNE 3.1 における OpenID についてご紹介します。

OpenID について

OpenID という言葉は、「認証技術」と「認証に使用されるID」の両方の意味を持っています。
「認証に使用される ID」としての OpenID は、ユーザを識別するための URL 形式の ID で、対応サイトから発行されます。
「認証技術」としての OpenID は、一つのサイトから発行された OpenID を使って、他サイトの認証をおこなうことができる技術です。

また、拡張プロトコルを用いることで、認証技術に付随したサービスなどを提供することができることも特徴のひとつです。

その他、 OpenID についての詳しい情報は、 OpenID.ne.jp の OpenIDとは?、OpenID (http://openid.net/) の What is OpenID?をご覧ください。

他バージョンの実装との違い

OpenID が利用できる OpenPNE は、 OpenPNE 3.1 がはじめてというわけではありません。

実は OpenID の機能は OpenPNE 2.12 から利用できます。symfony 対応のためにほとんどスクラッチから書き直した OpenPNE 3.0 でも、 OpenID の機能に関しては既に実装済みです。

そこで、 OpenPNE 2 や OpenPNE 3.0 と比べて OpenPNE 3.1 ではどう変わったのかをわかりやすく表にしてまとめてみました。

機能バージョン毎の対応状況
OpenPNE 2.12.0 +OpenPNE 3.0.0 +OpenPNE 3.1.2 +
OpenID 1.1 の OP *1 対応*3*3
OpenID 1.1 の RP *2 対応×
OpenID 2.0 の OP 対応××
OpenID 2.0 の RP 対応×
OpenID SREG によるプロフィール連携
(OP 側対応)
××
OpenID SREG によるプロフィール連携
(RP 側対応)
××
OpenID AX によるプロフィール連携
(OP 側対応)
××
OpenID AX によるプロフィール連携
(RP 側対応)
××
  • *1 OpenID Provider の略で、 OpenID を発行するとともにユーザの身元の保証をおこなうサーバのこと。
  • *2 Relying Party の略で、 OpenID を使用するサービスのこと。コンシューマとも呼ぶ。
  • *3 信頼した RP の情報を保持できないなど不完全な実装になっている。

それでは、具体的に改善点を見ていきましょう。

OpenID による認証の改善

OP としての OpenID 2.0 対応

いままで OpenID Provider としては OpenID 1.1 にしか対応していませんでしたが、 OpenPNE 3.1.2 からはようやく OpenID 2.0 対応の OpenID Provider になれるようになりました。

これにより、対応サイトで SNS のドメインを入力するだけで OpenID を使用することができるようになります。もう長い OpenID の URL を入力する必要はありません

許可画面のレイアウト変更

Allen Tom 氏による Details-of-UX-Best-Practices-for-OPs に則って認可画面のレイアウトを変更しました。

以前の許可画面

pictureefbc882009-09-07-172530efbc89

新しい許可画面

pictureefbc882009-09-07-172657efbc89

ユーザに、現在何がおこっていて、これからどういうことが起こるのかを明確に説明できるような画面になったかと思います。

RP の許可状態の保持、許可の履歴の記録

いままでは RP の許可状態を保持できなかったために、 RP を使うたびに先ほどの許可画面で許可をおこなわなければなりませんでした。これは安全性を保つ一方で利便性を損なっています。

OpenPNE 3.1.2 からは RP の許可状態が保持できるようになりました。許可画面で自動的にログインをおこなうためのチェックボックスにチェックを入れることで、次回以降は許可画面を経なくても OpenID を使ったログインをおこなうことが可能になります。

もし自動的な許可を解除したい場合や、どういう RP を許可してきたかをみたい場合は、設定変更画面から OpenID の設定ページにアクセスしてください。

pictureefbc882009-09-07-175524efbc89

この画面では、自分の OpenID を確認することもできます。

プロフィール連携

OpenPNE 3.1.2 からは OpenID SREG か OpenID AX によるプロフィール連携が利用できます。 OpenID SREG は OpenID 1.1 と OpenID 2.0 対応サイトで、 OpenID AX は OpenID 2.0 対応サイトでのみ利用できるプロフィール連携の仕組みです。

この仕組みを使うと、 SREG もしくは AX に対応している OP のプロフィール情報を、同じく SREG もしくは AX に対応している RP で使用することができます。

OpenPNE では以下のプロフィール情報が連携可能です。
※許可画面において、特定のプロフィール項目を連携させるか否かをメンバーが選択できるようになっています。
※連携対象となるのは 3.1.2 の新機能であるプリセットプロフィール機能で登録されたプロフィール項目のみです。プリセットプロフィール機能についてはまた後日解説させていただきます。

項目名OpenID SREG で連携可能OpenID AX で連携可能
ニックネーム
メールアドレス
生年月日
性別
郵便番号
使用言語
タイムゾーン
電話番号×
都市×
自己紹介文×
プロフィール画像×

まとめ

普及しているというにはまだまだですが、最近では日本国内の OpenID 対応サイトも増えてきました。

プロフィール連携などの付加機能も備え、これからの Web で重要な位置を占めるに違いない OpenID を是非みなさんの SNS で活用してみてください!

今週のOpenPNE#20 (2009/08/30 ~ 2009/09/05)

09 / 06 日曜日 2009

OpenPNE 開発チームのきわです。

今週から9月に突入!
OpenPNE3.1.2やopCommunityTopicPluginのリリースなど、OpenPNE3が大忙しの月初めでした。

開発状況

OpenPNE3開発状況

今週はついにOpenPNE3.1.2がリリースされました!
OpenPNE3.1.2は、機能追加もさることながら、バグ修正も多く入っているので動作も随分安定してきています。
皆さんぜひDLしてみてくださいね。
OpenPNE3 デモSNSも近々OpenPNE3.1.2にバージョンアップされる予定です。お楽しみに。

OpenPNE 3.1.2 リリースのお知らせ

/archives/3426/

OpenPNE3 改訂履歴

http://trac.openpne.jp/wiki/pne-openpne3/ChangeLog/ja#a20090904Ver.3.1.2

OpenPNE3 デモSNS

http://demo3.openpne.jp/

プラグインは、9月5日に opCommunityTopicPlugin 0.9.6 がリリースされました。
携帯版の品質向上・トピック機能の追加・管理画面からの書き込み監視機能の追加など、多くの機能追加・改善が行われています。
また、opCommunityTopicPluginは1月からリードメンテナが不在で海老原君が臨時のメンテナをつとめていましたが、今回のリリースからリードメンテナが櫻井洋一郎 (Youichirou Sakurai) さんになりました。
メーリングリストには、櫻井さんの紹介も投稿されています。

opCommunityTopicPlugin 0.9.6 をリリースしました

/archives/3436/

[opCommunityTopicPlugin]リードメンテナ紹介:櫻井洋一郎 (Youichirou Sakurai) さん

http://groups.google.co.jp/group/openpne-dev/browse_frm/thread/9ac067b34d78e98c/171f1f795275f0db?q=openpne-dev#171f1f795275f0db

OpenPNE2→OpenPNE3 へのコンバータの開発も進んでいます。
今週で実装が一段落し、テスト段階に入りました。

2系から3系へのDBコンバータ

/archives/3324/

OpenPNE3.1.3に向けても既に動き始めています。
OpenPNE3.1.3で追加される、テキストエリアに文字装飾機能を使えるようにする機能追加について、川原君が実装をはじめています。
OpenPNE2 では文字装飾機能は日記のみにしか使えませんでしたが、OpenPNE3ではプロフィール項目などにも絵文字挿入・文字装飾機能が利用できるようになりそうです。

携帯用絵文字入力などが可能なwidgetを作成する

http://trac.openpne.jp/ticket/4273

twitterは相変わらず開発者の海老原君、川原君、深町君が開発中の呟きを頻繁にポストしています。
皆さんも気兼ねなく#op3devで投稿してみてください!疑問・質問でもOKです。

twitter OpenPNE3開発に関する呟き

http://search.twitter.com/search?q=%23op3dev

発言された内容は連絡なしに「今週のOpenPNE」に転載させていただく可能性があります。「今週のOpenPNE」に掲載したくない発言は #x-wpne のタグを追加してください。

OpenPNE2開発状況

OpenPNE2.14.2 / OpenPNE2.12.14 は2009/9/17リリース予定です。大体の対応項目をきめました。2.14で追加された新機能の不具合修正がメインになっています。

OpenPNE2.14.2 開発用レポート

http://trac.openpne.jp/report/154

OpenPNE2.12.15 開発用レポート

http://trac.openpne.jp/report/155

ハイライト

twitter 発言ハイライト(#op3dev)

文字装飾機能

  • ooharabucyou: 携帯絵文字入力補助テストのためにopDiaryPluginをフォーク
  • ooharabucyou: http://trac.openpne.jp/ticket/4273 さて、widgetは用意できた。あとは、HTMLに変換する関数を用意して opDiaryPluginのフォークをいじってpull requests だ。
  • ooharabucyou: sfWidgetFormRichTextareaOpenPNE での入力をHTMLに変換する関数は、そのクラスに静的メソッド持たせて、あとはヘルパーで何とかすればいい気がしてきたぞ

DBコンバータ

  • nitro_idiot: メモリ使用量が516MB越えでぎりぎりFatal error。1024MBならおそらくコンバートできるんだろうけど、これはDoctrineのNestedSetの問題っぽいしなぁ。どうしよう
  • nitro_idiot: 今日はDBコンバータのconvertMemberProfileの後半部分で殺人的にメモリを食ってる問題に取り組む /li>
  • nitro_idiot: 昨日は結局member_profileの問題は解決せず。保留して続きの変換処理を追記中
  • nitro_idiot: opMessagePlugin関連のテーブル変換処理の記述終わり。コンバート後のテストも近いかな
  • nitro_idiot: リファクタリングしたらコードが100行縮まった。おおよそ実装は終わった。あとはテストとopMessagePluginのリリース待ち
  • nitro_idiot: コードを抽象化したはいいけど今度はfree()してもメモリを解放してくれなくなった。困った
  • nitro_idiot: DBコンバータの処理速度向上のために、関数用のハッシュ表を持たせる
  • nitro_idiot: getModelsIterator()とselectOne()をキャッシュ可能にすれば処理速度が上がるかもしれない

その他

  • nitro_idiot: opGenerate:pluginでtest用の雛形を生成するチケットを作成しました。早速コミットしたので意見などあればチケットか @nitro_idiot まで http://trac.openpne.jp/ticket/4300

  • ooharabucyou: partsYesNoはpostだったら自動的にCSRF対策するくらいの勢いを見せた方がいいかもしれない

  • co3k: http://trac.openpne.jp/ticket/4302#comment:2 への対処の際に default ルールを deprecated にする予定。実際に廃止するのは当分先の話だと思いますが……

  • co3k:OpenPNE3.1.2 のチェックが一通り終わろうという時に OpenID の RP 周りで新規セットアップ限定の不具合を見つけちゃったよ>< もういっぺんタグ切る

コミュニティでの話題ハイライト

  • [公式SNSトピック] 2.12.4 → 2.14.1 にグレードアップしたら、日記が書き込めなくなっなった
  • [公式SNS日記] SNS上で変更が反映されない
  • [公式SNSトピック] 外部ブログにて、ブログのRSSに挿入されるPR表示を消す方法
  • [公式SNSトピック] CMD機能のGoogleMap表示が世界地図になる・マーカーが表示されない

今週追加された機能ハイライト

OpenPNE3 - core

  • #3878:誕生日バナー機能の追加 (urabe)
  • #3943:ユーザ画面と管理画面から、OAuth を用いて SNS の情報にアクセス可能なアプリケーションを登録できるようにする (ebihara)
  • #4243:OpenID SREG と OpenID AX によるプロフィール連携機能の実装 (ebihara)
  • #4294:OpenID の Relying Party の許可状態を永続的に保持できるようにする (ebihara)

OpenPNE3 - plugins

  • [opCommunityTopicPlugin]#3745:トピック・イベント管理機能を管理画面に追加 (saku)
  • [opCommunityTopicPlugin]#4019:PC版でトピック検索フォームをコミュニティのホームに表示する (saku)
  • [opCommunityTopicPlugin]#4109:トピック検索機能を追加する (fukamachi)

今週修正したバグハイライト

OpenPNE3 - core

  • #4141:ログイン画面のレイアウト設定がガジェット編集画面に適用されない (kawahara)
  • #4189:コミュニティ管理者であったときSNS退会ができない (kawahara)
  • #4209:プロフィール項目の説明が表示されない (kawahara )
  • #4302:プラグインの app/*/config/routing.yml で設定したルーティングルールが有効にならない (ebihara)

OpenPNE2

  • #4168:コメントを許可しない時のコメント返信ボタン(リンク)の表示 (imamura623)
  • #4083:パスワード再発行ページへの説明文 (imamura623)
  • #3236:アルバムの表示順に整合性がないため昇順に変更する (imamura623)

今週報告されたバグハイライト

OpenPNE3

  • #4302:プラグインの app/*/config/routing.yml で設定したルーティングルールが有効にならない (ebihara )
  • #4305:IE8 でテキストエリアに一定の文字を入力すると、スクロールバーが小刻みに動く (urabe)
  • #4307:参加コミュニティが0件の場合、マイホームのコミュニティ最新書き込み公開範囲にかかわらず全てのトピックが表示される (kiwa)

OpenPNE2

  • #4299:アップグレードSQLでDuplicate column name ‘u_datetime’エラーが発生する (OpenPNE公式SNS)
  • #4304:2.12xから2.14xにアップグレードしたら日記とレビューが書き込めない (OpenPNE公式SNS)
  • #4308:PostgresSQL環境で日記コメント便利機能が使えない (imamura623)

OpenPNE 3.1.2 リリースのお知らせ

09 / 04 金曜日 2009

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

本日 2009/09/04(金)、 開発版 OpenPNE 3.1.2 をリリースしました。

今回は、「連携性の強化」をモットーに掲げ OAuth 対応や OpenID によるプロフィール連携などの機能追加をおこないました。大変お待たせしました。

今回追加した連携系の機能やその活用方法については、後日別エントリにて解説させていただきます。

機能追加・機能改善

  • #4295 プリセットプロフィール機能の追加(ebihara)
  • #4243 OpenID SREG と OpenID AX によるプロフィール連携機能の実装(ebihara)
  • #4294 OpenID の Relying Party の許可状態を永続的に保持できるようにする(ebihara)
  • #3943 ユーザ画面と管理画面から、OAuth を用いて SNS の情報にアクセス可能なアプリケーションを登録できるようにする(ebihara)
  • #4296 モデルに Zend_Acl によるアクセスコントロールの機能を追加する(ebihara)
  • #4293 OpenID Provider として OpenID 2.0 に対応できるようにする(ebihara)
  • #4241 フリーエリアガジェットなどでリッチテキストエリアだけでなく通常のテキストエリアも利用できるようにする(kawahara)
  • #3878 誕生日バナー機能の追加(urabe)

その他の機能追加・機能改善については、 ChangeLog をご覧ください。

バグ修正

  • #4302 プラグインの app/*/config/routing.yml で設定したルーティングルールが有効にならない(ebihara)
  • #4209 プロフィール項目の説明が表示されない(kawahara)
  • #4164 プロフィールガジェット設定が出来ない(kawahara)
  • #4210 レイアウト設定の初期値が正しくセットされない(kawahara)
  • #4169 プロフィール画像登録直後に画像が表示されない(kawahara)

その他のバグ修正については、 ChangeLog をご覧ください。

バンドルされるプラグインの追加・更新情報

以下のプラグインがアップデートされます。

  • opAuthMailAddressPlugin 1.1.2 → 1.1.4.1
  • opAuthOpenIDPlugin 1.1.0 → 1.1.1
  • opCommunityTopicPlugin 0.9.5 → 0.9.6
  • opWebAPIPlugin 0.3.6 → 0.3.7

注意事項

3.0.x に同梱されていたプラグインの一部は Doctrine に未対応のため、現時点の OpenPNE 3.1.1 ではご利用いただけません。

同梱されているプラグインは以下となります。

* opAuthMailAddressPlugin
* opAuthMobileUIDPlugin
* opAuthOpenIDPlugin
* opCommunityTopicPlugin
* opWebAPIPlugin
* opDiaryPlugin
* opBlogPlugin

なお、今後プラグイン側のバージョンアップによって同梱されるプラグインが増える場合があります。
詳しくは各プラグインのリリース情報をご覧ください。

バージョンアップ・インストール

バージョンアップ

バージョンアップ方法は、同梱の doc/ja/OpenPNE3_Version_Up_Guide.txt や OpenPNE3.1 バージョンアップ手順 をご覧ください。

インストール

インストール方法は、同梱の doc/ja/OpenPNE3_Setup_Guide.txt や OpenPNE3.1 セットアップ手順 をご覧ください。

ダウンロード・チェンジログ

ダウンロード

/pne-downloads

チェンジログ

http://trac.openpne.jp/wiki/pne-openpne3/ChangeLog/ja

OpenPNE3プラグインに快適なテストライフを

09 / 02 水曜日 2009

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

 先日DBコンバータの記事を書きましたが、今日はOpenPNE3プラグインの自動テストについてです。

日々はめんどくさいの連続

 僕は非常に怠慢な人間です。日々めんどくさいとつぶやいています。

 パジャマに着替えるのめんどくさい。
 寝癖なおすのめんどくさい。
 家から出るのめんどくさい。
 1日3食めんどくさい。
 家に帰るのめんどくさい。
 寝るのめんどくさい。
 生きてるってめんどくさい。

 まあ別に生きてるのめんどくさい人はそう多くないと思いますが、「○○めんどくさい」と日々考えてるプログラマも多いでしょう。

 めんどくさいものの代表として「テスト」がありますね。プログラムは好きだけど、テストするのはめんどくさい。うん、よく分かる。

 そんな怠慢なプログラマのためにあるもの。それが「自動テスト」です。

自動テストって何?

 プログラムを書くと必ずテストしますね。めんどくさくてしないときもあるけど、大体します。

 コンパイルが通るかどうか。関数が予想した値を返すか。フォームが投稿できるか。データが保存されているか。レイアウトが崩れてないか。

 確認することが多くてうんざりしますね。

 まあそうは言っても、テストが1回限りならやるかもしれません。でも現実は違う。修正するたびにテスト、テスト、テスト。下手すると作業時間のほとんどがテストだったりします。

「あぁ、誰か代わりにテストしてくれないかな…」

 こういった繰り返し作業は人間のすることじゃありません。これこそプログラムにさせればいい。

 このような、テストさせるためのプログラムが「自動テスト」です。

プラグインのテスト

 OpenPNE3で使われているsymfonyは自動テストに対してとても熱心です。チュートリアルのJobeetにもテストに関する章が3つあります。

 幸いにも、OpenPNE3プラグインのテストも同じように書けます。

テストの準備はめんどくさい

 テストを書くためにはまずtestディレクトリを作って、さらにその下にbootstrapとfixturesとunit、functionalを作って、bootstrapに初期化用のテストプログラムを書いて……。

 ……めんどくさい。こんなことは我々メンドクサー(造語)のすることじゃない。

 めんどくさいことは自動化しよう。テストの準備もプログラムにやらせたい。

opGenerate:pluginでテストの雛形も作っちゃえ

 そう思って、プラグインの作成時に一緒にテストの準備もすることにしました。

#4300 (opGenerate:pluginでtest用の雛形を生成する) - OpenPNE - Trac

 以下のコマンドを打つと、

$ symfony opGenerate:plugin opSamplePlugin

 以下のようなディレクトリができる。

$ ls plugins/opSamplePlugin
apps config i18n lib test

 新しく追加されたtestディレクトリは以下の構造になっています。

  • test/
    • bootstrap/
      • database.php
      • functional.php
      • unit.php
    • fixtures/
      • test_data.yml
    • functional/
      • mobile_frontend/
        • skeletonActionsTest.php
      • pc_frontend/
        • skeletonActionsTest.php
    • unit
      • model/
        • SkeletonTest.php

 初期化用のbootstrapはほとんどいじる必要がありません。主に編集するのは太字で書いたファイルです。

 まだ実験段階なので、skeletonという名前がついていますが、最終的にはこれも自動でsampleActionsTest.phpといった名前に変更される予定です。

テストの書き方

 テストの書き方はsymfonyのドキュメントを参照してください。同じです。

 読んだけどわかんないよー、って人はお気に入りのプラグインのテストを参考にするといいですよ。

これでもめんどくさいだって?

 これで自動テストを書くための準備は整いました。

 だけど「そもそも自動テスト書くのがめんどくさい」って人もいるかもしれません。

 もし、「こうだったら自動テストを書く気にもなるのに」と思っている方がいれば言ってください。どんどんみんなで改善していきましょう。

 OpenPNE3に快適なテスト環境を作りましょう :)

今週のOpenPNE#19 (2009/08/23 ~ 2009/08/29)

08 / 29 土曜日 2009

OpenPNE 開発チームのきわです。

8月ももうおしまい!来週から9月に突入ですね><
OpenPNEプロジェクトは今週もまったりガツガツ進行中です。

開発状況

OpenPNE3開発状況

今週はOpenPNE3.1.2の追い込みです!
3.1.2は今月(あと3日!)中にリリースされる予定なので、皆さん楽しみにしていてください!

今週はOAuth機能の調整やOpenID対応の改善が行われました。
また、今週新たに「プリセットプロフィール機能」というものが追加されました。
この機能は「出身地」「国」や「誕生日」など今まで逐一手動で設定していく必要があったプロフィールをプリセットで用意するというものです。これにより、今まで設定が面倒だったプロフィールが簡単に追加できるようになります。

OpenPNE3.1.2 開発用レポート

http://trac.openpne.jp/report/152

ユーザ画面と管理画面から、OAuth を用いて SNS の情報にアクセス可能なアプリケーションを登録できるようにする

http://trac.openpne.jp/ticket/3943

OpenID Provider として OpenID 2.0 に対応できるようにする

http://trac.openpne.jp/ticket/4293

OpenID の Relying Party の許可状態を永続的に保持できるようにする

http://trac.openpne.jp/ticket/4294

OpenPNE2→OpenPNE3 へのコンバータの開発も進んでいます。
今週は画像の移行時にメモリを大量に消費する問題が解決されました。

2系から3系へのDBコンバータ

/archives/3324/

また、OpenPNE3のデモサイトも一新されました!
OpenPNE3.1.1を気軽に触って体感してみてください!
OpenIDのコンシューマになっているので、OpenIDのアカウントをお持ちのかたはそちらでログインできます。

OpenPN3 デモSNS

http://demo3.openpne.jp/

twitterは相変わらず開発者の海老原君、川原君、深町君が開発中の呟きを頻繁にポストしています。
皆さんも気兼ねなく#op3devで投稿してみてください!疑問・質問でもOKです。

twitter OpenPNE3開発に関する呟き

http://search.twitter.com/search?q=%23op3dev

発言された内容は連絡なしに「今週のOpenPNE」に転載させていただく可能性があります。「今週のOpenPNE」に掲載したくない発言は #x-wpne のタグを追加してください。

OpenPNE2開発状況

OpenPNE2 は、まったりお休み状態でした。
2009/09/17リリース予定のOpenPNE2.14.2 / OpenPNE2.12.15 に向けて来週から動き出しますよ!

OpenPNE2.14.2 開発用レポート

http://trac.openpne.jp/report/154

OpenPNE2.12.15 開発用レポート

http://trac.openpne.jp/report/155

ハイライト

twitter 発言ハイライト(#op3dev)

OpenID AX対応

  • co3k: よし OpenID AX 経由でプロフィール画像も取れるようにしたよ(かなりコードがひどいことになってるので直しまくるよ)

ACL対応

  • co3k: WebAPI 絡みで ACL 周りをどう固めるか決めないとやばくなって悩んでたが、モデルたちに Zend_Acl_*_Interface を実装する方向でなんとかなりそうなようなちょっと試す
  • co3k: とりあえず API で使う目的でモデルに ACL の機構を追加できるようにした。行けそうなら 3.1.3 で全体的にやってしまう予定
  • co3k: テーブルクラスでは Zend_Acl_Role を追加しまくる appendRoles() とルールを定義する appendRules() の二つのメソッドの定義が強制される感じ
  • co3k: レコードクラスのほうでは generateRoleId() の定義が強制される。これは Member のインスタンスを引数にとって、メンバーがレコードから見てどのロールに当たるかを返すメソッド
  • co3k: 早速 Zend_Acl_Assert_Interface::assert() を使う必要がでてきたのでレコードクラスに Zend_Acl_Resource_Interface を実装しちゃうぜ

DBコンバータ

  • nitro_idiot: DBコンバータにmember_configの変換処理を追加。暗号復号化のためにEncryptKeyの質問が増えた
  • nitro_idiot: DBコンバータ走らせてたらPHPにメモリ足りねーよって怒られた。256MBじゃ足りない様子
  • nitro_idiot: file_binの箇所でメモリ食ってる。暗黙の参照渡しとかありそうだ
  • nitro_idiot: 関数呼び出しのたびにsfValidatorFileインスタンスが作られていたのが原因だった。GCで回収されないのは謎だけど、とりあえずvalidatorをクラス変数にすることでかなりメモリ不足が解消された
  • nitro_idiot: 少し増加がゆるやかになったけど、やっぱりメモリが足りないって怒られる。もうちょっと調査が必要
  • nitro_idiot: DBコンバータでのDoctrine様によるメモリ不足問題の解決方法について軽くブログにまとめました http://e-arrows.sakura.ne.jp/2009/08/doctrine-allowed-memory-size.html
  • nitro_idiot: ようやくDBコンバータをコミット。今日はメモリの使用率を抑えるようリファクタリングしました

その他

  • ooharabucyou: sfWidgetFormRichTextareaOpenPNE(開発中・日記などで使えるリッチテキストエリア)内で、パーシャル呼び出すとかしちゃうかもしれないなぁ・・・う~ん。

  • ooharabucyou: う~ん、設定ファイルとかを駆使した方がいい気がしてきてしまった。

  • tejima: OpenPNE 徹底的にわかりやすいAPIを実装するべきだと思う。まだtwitterに比べて5倍ぐらい難しいよ。

  • nitro_idiot: (1) opGenerate:pluginでテストの雛形を生成。 (2) テストケースの網羅を目指すのではなく、バグ修正時などにできる部分から作り始める (3) 修正時にテストも同時コミットを慣例化

コミュニティでの話題ハイライト

  • [公式SNSトピック] 携帯日記作成時のコメント許可がデフォルトで「許可しない
    」になっている
  • [公式SNSトピック] 携帯【かんたんログイン】で送信確認の文言を表示しない方法
  • [公式SNSトピック] ポータルクリエイターのリンク集にAタグを入力できた上にWarningが発生
  • [公式SNS 日記] ついぴーねの利用実証トライアルに参加してくれるSNSオーナーを募集中

今週追加された機能ハイライト

  • #4212:_partsFormの改良 ( 必須項目での表示等) (kawahara)
  • #4243:OpenID SREG と OpenID AX によるプロフィール連携機能の実装 (ebihara)
  • #4293:OpenID Provider として OpenID 2.0 に対応できるようにする (ebihara)
  • #4296:モデルに Zend_Acl によるアクセスコントロールの機能を追加する (ebihara)

今週修正したバグハイライト

OpenPNE3

  • #4282:コミュニティ管理者がコミュニティメンバを退会させるときに確認画面を出すようにする (kawahara)
  • #4291:コミュニティ参加申請済みだということをメッセージで出るようにする (kawahara)

今週報告されたバグハイライト

OpenPNE3

  • #4282:コミュニティ管理者がコミュニティメンバを退会させるときに確認画面を出すようにする (kawahara)
  • #4291:コミュニティ参加申請済みだということをメッセージで出るようにする (kawahara)
  • #4292:利用規約、プライバシーポリシーが表示されない (imamura623)
  • #4297:日記の件数が増えると一覧表示できなくなる (kiwa)

OpenPNE2

  • #4280:IE8 でテキストエリアに一定の文字を入力すると、スクロールバーが小刻みに動く (urabe)

今週のOpenPNE#18 (2009/08/16 ~ 2009/08/22)

08 / 22 土曜日 2009

OpenPNE 開発チームのきわです。先週は海老原君どうもありがとうございました。

気づけば8月も後半戦!第3週の報告です(`・ω・´)

開発状況

OpenPNE3開発状況

今週もtwitterではバシバシ開発の呟きがポストされています。
皆さんもOpenPN3 の開発に関する呟きを#op3dev で気軽にしてみてください!
疑問・質問でもOKです。

twitter OpenPNE3開発に関する呟き

http://search.twitter.com/search?q=%23op3dev

今週はOpenPNE3.1.2に向けて、OpenID AXの対応が進められました。
また、プロフィール項目の日付での検索が正しく行われない不具合など、バグ修正も行われています。

OpenPNE3.1.2 開発用レポート

http://trac.openpne.jp/report/152

OpenPNE2→OpenPNE3 のバージョンアップについても用意が進んでます!!
今週、データベースのコンバータの再作成が本格的に進みました。symfonyのtaskで作成し、コマンド一発でコンバートできるようになる予定です。
データベースのコンバータの作成を主導している深町さんが今週ブログをあげてくれたので、ぜひご覧下さい。

2系から3系へのDBコンバータ

/archives/3324/

OpenPNE2開発状況

2009/08/15(土)にAmazonAPI仕様変更に対応したOpenPNE2.14.1 / OpenPNE2.12.14をリリースしましたが、sourceforgeからDLできない・2.14.1のパッケージがtrunkになっていた・PHP4への対応が不十分だったなど、バタバタした一週間でした。
OpnePNE2を利用している皆様には大変ご迷惑おかけしました。

PHP4への対応が不十分だった問題は、2009/08/21(金)にOpenPNE2.14.1.1 / OpenPNE2.12.14.1 をリリースすることで対応しました。
2.10, 2.8への追加対応パッチも作成されているので、ご利用下さい。

安定版OpenPNE2.14.1再アップロードしました

/archives/3291/

【緊急リリース】 OpenPNE2.14.1.1, OpenPNE2.12.14.1 リリースのお知らせ

/archives/3341/

ハイライト

コミュニティでの話題ハイライト

  • [公式SNSトピック] KOF2009に向けて
  • [公式SNSトピック] フッターの画像変更について
  • [公式SNS日記] OpenPNEユーザー会として、OSC2009 fall 東京 出展します

今週追加された機能ハイライト

  • #4241:フリーエリアガジェットなどでリッチテキストエリアだけでなく通常のテキストエリアも利用できるようにする (kawahara)
  • #4250:openpne:migrate 時に、自動生成のスクリプトを実行しないオプションと、自動生成のスクリプトしか実行しないオプションを追加する (ebihara)
  • #4251:パスワードは6~12文字で入力しなければいけないということを登録画面・変更画面で表示 (kawahara)

今週修正したバグハイライト

OpenPNE3

  • #4208:プロフィール項目でメンバー検索に利用しないとしているのにもかかわらず検索フォームが表示される (kawahara)
  • #4257:プロフィール編集などで選択式(コンボボックス)・日付の項目が必須でなくても空欄選択肢がない (kawahara)
  • #4265:メンバー検索で日付・複数選択項目を正しく検索できない (kawahara)
  • #4265:メンバー検索で日付・複数選択項目を正しく検索できない (kawahara)
  • #4267:日付型プロフィール項目に下限・上限値制限をしないときに下限値が設定時の日付になる (kawahara)

OpenPNE2

  • #4166:Amazon仕様変更後のレビュー機能がPHP4環境で動作しない (urabe)
  • #4247:sourceforgeにあがっている2.14.1のパッケージがtrunkをパッケージングしたものになっている (imamura623)

今週報告されたバグハイライト

OpenPNE3

  • #4245:メンバーパスワード変更時に現在のパスワードを入力しなくてもパスワードが変更できる (kawahara)
  • #4249:docomo端末(シミュレータ)にて携帯版新規登録でfatalエラーが出る場合がある (kawahara)
  • #4271 :携帯の画像投稿で2件アップロードすると投稿アドレスが表示されなくなる (kawahara)

OpenPNE2

  • #4263:function cache使用時、プロフィール画像を変更した場合コミュニティホームの9面パネルに反映されない (kiwa)
  • #4248:trunkとstable-2.14.xでversion.php以外にコードの相違点がある (kiwa)

2系から3系へのDBコンバータ

08 / 20 木曜日 2009

OpenPNE開発チームの深町です。主にOpenPNE3の開発をしています。

 今、大急ぎで開発を進めているものの1つに「DBコンバータ」があります。これは、既存のOpenPNE2で作られたSNSをOpenPNE3に移行させるため、2系のDBを3系仕様に一発変換するというステキかつ壮大なものです。

 このDBコンバータの完成を待って公式SNS(現状2系で運営)も3系に移行することになります。

 公式SNSのOpenPNE3化を心待ちにしている方もいるでしょうから、開発の進捗状況と今後の方針などを書いてみようと思います。

これまでの開発秘話

それって前々から作ってなかったっけ?

 実はDBコンバータの開発を始めたのは何ヶ月か前のことです。そのときも自分一人で開発を進めていました。

 独立したPHPスクリプトとして作り始めたDBコンバータ。一応の完成は見たのですが、実際に公式SNSの移行作業をするとうまくいかない。特に画像データの移行ができませんでした。

 そして僕は、

「この方法はダメだ。いくらPHPと言えど原始的すぎる」

と思い、もっといい方法はないものかと考え始めたのです。

 このせいで移行が遅れたという点ではお詫びします。

DBコンバータを作り直す

 独立したPHPスクリプトではSQL文を大量に処理しなければならず、見た目も保守性も悪いものです。僕が作ったんだからよくわかります。あれは確かにかっこわるい

「もっと抽象化して扱えればいいのだけど」

 海老原さんに相談した結果、symfonyのタスクとして実装してはどうかという案をもらいました。

 そしてその方針でDBコンバータを再び作り直しているわけです。

symfonyのタスクとしての実装

 理想としては以下のような呪文を叩くだけでDBが3系のものに置き換わるような実装です。

$ ./symfony openpne:upgrade-from-2

 とても簡単。かっこいい

 それにこういった実装だとOpenPNE3に組み込まれたDoctrineを使ってDBを抽象化できますしね。今までよりずっと良い方法であることは疑いようがないわけです。

今考えている仕様と動作制約

 当然ながら僕はこの呪文が多くのSNS管理者様に唱えてもらえることを望んでいます。なので、できれば管理者の方々に負担をかけたくありません。

 できるだけ皆が楽できるように、極力自動化することを目指します。

  • upgrade-from-2を唱えると今までのデータを引き継いだOpenPNE3のSNSがセットアップされる
  • 当然そのあとにプラグインのインストールなどの煩わしい作業はない
  • 2系のデータはすべて残す (3系未実装項目があるため)

 自動的にセットアップし、プラグインもインストールして、データも移行する。

 個人的には、DBだけでなく、サイトデザインもまるごと移行できればいいなとも思っているのですが、それはまだまだ夢の段階のようです。

OpenPNE3化で失うもの

 この移行はきっとすばらしいものではありますが、失うものもあります。

 OpenPNE2とOpenPNE3は、言ってしまえばまったく別ものなので、「2系にある機能」なのに「3系では未実装」、という機能がいくつかあります。

 機能の対応状況は下のページに詳しく書いてあります。「実装済み」になっていない機能は対応されていない可能性が高いです。

OpenPNE3機能一覧

 これらの機能はOpenPNE3化後は使えません(これは僕のせいではありませんよ)。今できることは開発チームをムチ打って大急ぎで実装させるか、実装される日のために黙って今までのデータを大事に取っておくことくらいです。

2系のデータはどうなる?

 こういった事情から、2系のデータはそのまま取っておかなければなりません。この扱いについては今一度憂慮するべきでしょう。将来的にはいろんな環境のSNSでも便利に使ってもらいたいと考えてはいます。

 ただ、とりあえずは動くものを作りたい。なので実装の手間を考えて、2系のデータはDBごと残し、3系はDBを新規作成してインストールするようにしています。つまりOpenPNE3化するためにはデータベースが2個必要です。

 レンタルサーバではDBが1個に限定されているところも多いので、どうしても後回しになってしまいますが、別に見捨てたつもりはないです。

開発の進捗状況

 まだ使える状態ではありませんが、開発は以下のブランチ上で進めています。

http://trac.openpne.jp/browser/OpenPNE3/branches/fukamachi/db-convert-from-2.x/

 DBコンバータ自体はopenpneUpgradeFrom2Task.class.phpです。

 先ほど、やっとDB変換のための初期処理まで完成したところです。芯の部分は明日からですね。

ツッコミと激励と

 このDBコンバータについては完全に深町が一人で開発をしているので、直接僕に聞こえるようにメールなりつぶやくなりしてくれればいいです。

E-Mail : fukamachi@tejimaya.net
Twitter : http://twitter.com/nitro_idiot
公式SNS : ID:6996

 自分もまた開発が進み次第、つぶやいたり記事書いたりします。

 ではごきげんよう。

今週のOpenPNE#17 (2009/08/09 ~ 2009/08/16)

08 / 16 日曜日 2009

OpenPNE 開発チームのきわではなく、海老原です。
今週末はきわさんが忙しいとのことだったので、久々に僕が『今週のOpenPNE』を投稿することになりました。楽しみにされていた方ごめんなさい!

そんなわけでさっそく8月第2週の報告をしていきます。

開発状況

OpenPNE3開発状況

これは先週も報告されていましたが、主に海老原や川原君が、 OpenPNE3 開発に関するつぶやきを #op3dev というハッシュタグ付きで Twitter にポストしています。

OpenPNE3 開発やプラグインに関することでしたら Tips や疑問などどんなことでも結構ですので、みなさんも #op3dev を使ってつぶやいてみてください!

twitter OpenPNE3開発に関する呟き

http://search.twitter.com/search?q=%23op3dev

OpenPNE 3.1.2 ですが、近日中のリリースに向けて開発を進めています。
3.1.1 で果たせなかった OAuth 対応と OpenID AX への対応を中心に、数々の機能改善とバグ修正がおこなわれます。

また、不足機能の数々が実装された opCommunityTopicPlugin の新バージョンと、新しくなった opOpenSocialPlugin が同梱される……かもしれません。お楽しみに!

OpenPNE3.1.2 開発用レポート

http://trac.openpne.jp/report/152

開発全般の動きとして、コーディング規約やテーブル定義書などドキュメント類の整備に向けての準備が進みはじめました。

OpenPNE3 開発とプラグイン開発を盛り上げるために、来週も引き続き開発用のドキュメントを作っていきます。こちらもご期待ください。

OpenPNE3のテーブル定義書(作成中)をアップしました

/archives/3224/

OpenPNE3 標準コーディング規約を作成しました

/archives/3236/

PHP_CodeSniffer で OpenPNE3 標準コーディング規約のチェックをおこなえるようにしました

/archives/3263/

OpenPNE2開発状況

ギリギリになってしまいましたが、Amazon Product Advertising API への PHP4対応がおこなわれた、 OpenPNE2.14.1 / OpenPNE2.12.14 が無事にリリースされました。

同時に、現在 2.10 と 2.8 系をお使いの方へのパッチも併せて提供されています。 7 月に公開されたパッチを適用しているかどうかで使用するパッチファイルが変わりますので、告知をよく見てお使いください。アップデート前には必ず大事なSNSのバックアップを!

また、 2.14.1 ではアップグレードに関する不具合への修正がおこなわれています。こちらもチェックをお忘れなく。

OpenPNE2.14.1 , OpenPNE2.12.14 リリースのお知らせ

/archives/3271/

ハイライト

コミュニティでの話題ハイライト

  • [公式SNSトピック] KOF2009に向けて
  • [公式SNSトピック] フッターの画像変更について
  • [公式SNS日記] OpenPNEユーザー会として、OSC2009 fall 東京 出展します

今週追加された機能ハイライト

  • #4239:携帯版では空メールでの新規登録をおこなう (kawahara)
  • #4240:メンバー設定のうち、設定変更を許可しない項目を管理画面から設定できるようにする (ebihara)

今週修正したバグハイライト

OpenPNE3

  • #4237:コミュニティ管理者がSNS退会したときに決める管理者がランダムで決定している (kawahara)
  • #4179:承認待ちコミュニティメンバーが正しく表示されないことがある (kawahara)
  • #4164:プロフィールガジェット設定が出来ない (kawahara)

OpenPNE2

  • #4166:Amazon仕様変更後のレビュー機能がPHP4環境で動作しない (urabe)
  • #4175:public_htmlのディレクトリ名を変更していた場合、2.14.0アップデートスクリプトが正常に処理されない (urabe)
  • #4227:アルバム設定変更時に一部の環境でWarningが発生する (kiwa)
  • #4129:SlavePNEでPOP3などのストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない (urabe)
  • #4142:2.12→2.14のUpgrade SQL, update SQL:update09 がMySQL4.0で動作しない (kiwa)

今週報告されたバグハイライト

OpenPNE2

  • #4238:メールのSubjectが文字化けしてしまう (OpenPNE公式SNS)

PHP_CodeSniffer で OpenPNE3 標準コーディング規約のチェックをおこなえるようにしました

08 / 14 金曜日 2009

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

PEAR に PHP_CodeSniffer という PHP 5 向けのツールが登録されています。これは PHP などのスクリプトの構文解析をおこない、特定のコーディング規約に反していないかどうかをチェックするものです。使ったことのある方も多いのではないでしょうか。

このツールには前々から興味があったのですが、 OpenPNE3 ではちょうど先日 コーディング規約を作ったばかり なので、この機会に PHP_CodeSniffer で OpenPNE3 標準コーディング規約のチェックがおこなえるように、ルールファイルを作ってみました。

現時点では trunk の data ディレクトリ以下に置いてあります。
https://trac.openpne.jp/svn/OpenPNE3/trunk/data/CodingStandard/OpenPNE3/

これを使って早速チェックしてみましたが……

picture-2

う、うーん……

picture-3

やはり現時点ではあまり芳しくない成績ですね。 PHP_CodeSniffer で適宜チェックして、コードの品質を上げていきたいところです。

ページの先頭に戻る