wiki:pne-book-9-5
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Version 10 (modified by imoto, 12 years ago) (diff)

--

TOC

OpenPNE3

解説:國忠
文:井本

概要

現在、OpenPNEのバージョンはOpenPNE2系です。
しかし、2008年度中を目処にOpenPNE3をリリースすることを決めています。
これはOpenPNEのメジャーバージョンアップです。そこで今回はこのOpenPNE3の解説をして、どの様にOpenPNEが変わるかということを解説していきたいと思います。

OpenPNE3開発の経緯

OpenPNE1.0がリリースされてから6ヵ月後にOpenPNE2がリリースされました。
この時の注目は、「OpenPNEAPI」「携帯版の機能拡張」「ユニコード化」「大規模運用対応」「フロントコントローラーモデル採用」でした。
特にユニコード化はOpenPNE2の特徴で、このOpenPNE2がリリースされた後に日本語圏以外のSNSも立ち上がるようになりました。実際、カニチィという日本語・英語・中国語で交流できる多言語サイトが登場し、話題を呼びました。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/kanichi.png

OpenPNE2でユニコード化された理由としては多くの需要があったことと、OpenPNEを日本だけではなく、世界の人にも使ってもらえるようにと思い、開発しました。そして、今回OpenPNE3でも多くの要望や意見を交えながら、バージョンアップの開発に踏み切っています。
このバージョンアップで多くの機能を取り入れていく予定なので、その注目機能についてみていきましょう。

注目機能

・フレームワーク採用
・XHTML+CSS化
・国際化
・外部連携(OpenID、OpenSocial)

OpenPNE3にもいくつか注目機能があります。
それではそれぞれの注目機能について簡単に解説していきます。

フレームワーク採用

現在、OpenPNEでは独自フレームワークを採用しています。
しかし、ドキュメントの不足や設計なども問題から、なかなか開発者に受け入れてもらいにくいという現状もあります。OpenPNEはPHPフレームワークを開発しているわけでないのでフレームワークについてのドキュメントを書くなら少しでもOpenPNEの開発をしたいという思いがあり、これまでフレームワークについてのドキュメントはありませんでした。
しかし、OpenPNEがここまで世の中に広まり、今後もより良いものにしていくためには多くの開発者と共に作り上げないと考えています。
そこで、このOpenPNE3では独自のフレームワークではなく、外部開発のフレームワークを採用したいと考えました。外部のフレームワークを採用することにより、まずフレームワークについてのドキュメント整備が必要なくなります。そして、慣れ親しんだフレームワークを採用することにより、多くの開発者と共に開発することができるという点もあります。
また、最近は簡単で迅速に開発できるフレームワークも増えてきました。この様な迅速に開発できるフレームワークを採用することによりOpenPNEの開発スピードを上げたいという想いもあります。

OpenPNE3のフレームワーク採用の候補に挙がったフレームワークがいくつかあります。 そのフレームワークとは、「CakePHP」「symfony」「ethna」「ZendFramework」「maple」「CodeIgniter?」です。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/GoogleTrends.png

実績、Googleトレンドでの比較、実際に簡単なアプリケーションを作ってみての結果、今のところOpenPNE3に採用するフレームワークはsymfonyになりました。

ただ、やはりいくつか越えなければならない懸念点もあります。一番の懸念点は現在のパフォーマンスを維持、そして高めることができるかということです。
特にsymfonyは多くの設定ファイルを読み込むため、普通のフレームワークより表示速度が遅いと言われています。しかし、symfonyにはその遅さをカバーできるだけの強力なキャッシュ機能を備えているので、そのキャッシュ機能を活かしていきたいと考えています。

また、symfonyはCakePHPなどと違いPHP4では動作しません。つまり、PHP5以上でなければなりません。フレームワークの選定に入った当初はこの点は非常に懸念点でした。なぜなら、レンタルサーバがほとんどPHP4だったからです。しかし、2007年7月にPHPコミュニティで、PHP4のメンテナンス終了に関して発表があり、2007年12月31日をもって、PHP4の機能追加を終了し、2008年8月8日にはセキュリティパッチの提供も終了という通知が出されました。
この発表により、レンタルサーバはPHP5への移行を始めると考えこのPHPの対応バージョンによる懸念点を解消しました。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/symfony.png

symfony Web PHP Framework
http://www.symfony-project.org/

XHTML+CSS化

これまで、OpenPNEのテンプレートはCSSではなくテーブルタグを使っていました。
しかし、テンプレートが見にくく開発スピードが上がらないなどの点からこのOpenPNE3ではテンプレートのXHTML+CSS化に取り組むことにしました。

このXHTML+CSS化はOpenPNE2.0のころから要望があったのですが、なかなか実現できていない機能でした。すでにOpenPNE2.12でXHTML+CSS化にに取り組み始めています。そして、OpenPNE3では完全にXHTML+CSS化している予定です。
このXHTML+CSS化により、ソースコードの量が格段に減ります。
一番少ないテンプレートでは、ソースコード量が約3分の1まで減ります。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/css.png

このXHTML+CSS化はすでにプロジェクト化されwikiも公開されています。 そこで指針も公開されています。また、すでに開発体制も整っています。

  • 指針
    • テーブルレイアウトを廃し、CSSによるレイアウトに切り替える
    • XHTMLの構文適合性を満たす
    • XHTMLの目的適合性をある程度意識

  • 開発体制
    • マークアップ班 - OpenPNEが出力するHTMLのうち各部位のマークアップを行う
    • テンプレート班 - マークアップ班のマークアップを参考に、テンプレート上で実際のマークアップを行う
    • パーツ・進捗管理班 - パーツや進捗の管理を行う
    • 広報班 - このプロジェクト自体や進捗などを広く世間に伝えていく

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/css_prj.png

パーツ単位の作業手順

国際化

OpenPNE2からユニコード化し、ソースコードレベルでは国際化していました。
確かにOpenPNE2でユニコード化したことで多くのSNSに採用されることになりました。しかし、もっと多くの人に使ってもらいたいという思いからOpenPNE3では本格的に国際化のに取り組みます。
具体的に、国際化とはメニューなどを日本語だけではなく各国の言語にしていきたいと考えています。この国際化の取り組みにより、あまりプログラミングの知識を必要としない海外の人もテンプレートやソースコードを触ることなく、簡単にSNSを立ち上げることができるようになります。

国際化にあたり、まずは英語版OpenPNEをリリースすることを目標にしています。
英語版開発体制が完了した後に、国際化OpenPNEを作成します。
まずは、英語版OpenPNEの普及を図り、そこでのフィードバックを活かし手いきたいと考えています。また、コミュニティで開発者を募り、国際化への足ががりにしたいと考えています。
当初はPC版のみで実装していく予定です。

外部連携

この外部の連携はOpenPNE2でも取り組んできました。
そのOpenPNE2で取り組んできたものとはOpenPNEAPI、小窓、MasterPNE、SlavePNEです。
最近はOpenPNEと何か他の外部アプリケーションを一緒に使いたいという要望もあります。
その様な要望に答えるべく、ID連携のためにOpenIDに対応していきたいと考えています。
現在もOpenPNEのID連携はできます。しかし、現在のID連携はSlavePNEを中心としたID連携です。しかし、今後はMasterPNEでのID連携も強化するためにOpenIDに対応していきたいと考えています。
また、Googleが提供するSNS向けのアプリケーションAPIであるOpenSocialにも対応していく予定です。
この2つの機能に関してはすでにプロジェクト化しある程度実装も進んでいるので詳しく解説していきます。

OpenID

OpenIDとはWebサイトを超えて認証システムを構築できるシステムです。
OpenPNEがOpenIDに対応することで、外部のアプリケーションとのID連携が容易になります。
OpenPNEにおけるOpenIDの対応方法は2パターン考えられます。
その2パターンとは「OpenPNEがOpenIDのプロバイダになる」と「OpenPNEがOpenIDのカスタマになる」です。

OpenPNEがOpenIDのプロバイダになると、OpenIDに対応する外部サービス、ソフトウエアに対して認証情報を提供できるようになります。
例えば、OpenPNEにログインしている人だけ、MediaWikiが編集できたり、OpenPNEにログインしている人だけ、MovableTypeで立ち上げたブログにコメントをつけることができるようになります。

OpenPNEがOpenIDのカスタマになると、他のOpenIDプロバイダのURLでOpenPNEにログインできるようになります。例えば、ライブドアのアカウントで、OpenPNEにログインできたり、OpenID.ne.jpのアカウントで、OpenPNEにログインできるようになります。

まずはOpenPNEがOpenIDのプロバイダになるための実装から開発を行っています。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/openid.png

  
OpenID 公式サイト (英語)
http://openid.net/

OpenSocial

OpenSocialとはGoogleが提供するSNS向けのアプリケーションAPIの共通仕様です。
OpenSocialはJavaScriptと単純なHTMLで動作します。
現在OpenSocialが対応しているのは、プロフィール情報の吐き出し、フレンドリンク情報の吐き出し、新着情報の吐き出しです。

この機能が実現できるようになれば、iGoogleに新着情報を出すことができるようになりSNSの利用がますます便利になります。

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/igoogle.png igoogleでのイメージ図

https://trac.openpne.jp/svn/prj/pne-book/pne-book-9/pne-book-9-5/open_social.png

OpenSocial
http://code.google.com/apis/opensocial/

OpenPNE3になることによってどう変わるか

OpenPNE2がOpenPNE3になって誰にどのような形で影響を与えるのかという視点で考えていきたいと思います。
今回は、開発者、オーナー、ユーザーの三者の視点からOpenPNE3がどの様に影響を与えるのかを解説します。OpenPNE3のキーワードである「フレームワーク採用」「XHTML+CSS化」「国際化」「外部連携」の四つの中で影響を与えそうな機能を中心に見ていきます。

開発者

フレームワーク採用

フレームワークにsymfonyを採用した場合ドキュメントが豊富にあります。
これまでOpenPNEにはフレームワークのドキュメントなどは一切ありませんでした。ドキュメントを書かなかった理由としては、ドキュメントを書くよりOpenPNEのソースコードを一行でも書く方がいいと考えていたからです。OpenPNEはPHPフレームワークを作っている訳ではないので、PHPフレームワークの設計などはsymfonyに任せることで、SNSエンジンの設計に集中できます。

また、symfonyをフレームワークに採用した場合は、O/Rマッパーなどを使用することで迅速に開発を進めることができます。まず、迅速に開発をして、表示が遅いようであれば直接SQLを書き直したりキャッシュ機能を使って負荷を軽減することもできます。

XHTML+CSS化

XHTML+CSS化により、ソースコード量が少なくなり開発者はテンプレートが見やすくなります。
このことによって管理が容易になったり、修正したい箇所が分かり易いという利点が挙げられます。

国際化

国際化により、多くの人にOpenPNEを使用してもらえる機会が増えます。そして、国際化を足ががりに日本だけではなく、海外の人も巻き込んで一緒にOpenPNEを開発していくことも可能になります。
現在OpenPNEは国内で開発されて国内で使用されています。しかし、OpenPNE3で国際化することで、世界中の人で開発され世界中の人に使用されるソフトを目指すことができるようになります。

オーナー

フレームワーク採用

もしフレームワークにsymfonyを採用した場合、スペックの低いレンタルサーバだと非常に重くなる可能性はあります。しかし、symfonyには強力なキャッシュ機能が備わっているのでそのキャッシュ機能でカバーできると考えています。
また、symfonyを採用した場合はPHPのバージョンがPHP5である必要があります。現在、レンタルサーバはPHP4が多いですが、PHP4のサポートがなくなるという発表があったことで今後PHP5への以降が盛んになると思われます。

symfonyを採用することによりOpenPNE本線の開発スピードが上がればそれによってより多くの機能が使えたりOpenPNEが便利になったりと恩恵を受けることができます。

XHTML+CSS化

XHTML+CSS化によりソースコードが見やすくなります。これまでテンプレートはソースコード量が多く、どこに何が書いているのか分からない状態で修正などをしたい場合も手を加えることが困難だったが、XHTML+CSS化されることで、あまり知識がない人も簡単なテンプレートの修正は行うことができます。

国際化

国際化によって、テンプレートなどを触る必要なく日本語以外の言語に対応したSNSを立ち上げることができます。
これまでカニチィの様な二国間SNSや国際交流SNSを立ち上げたいと考えた場合ある程度ソースコードやテンプレートを修正する必要があったのである程度の知識は必要でした。 しかし、国際化することでほとんど知識がない人でも国際化したSNSを立ち上げることができるようになります。

外部連携

外部連携を強化することで、これまでカスタマイズが必要で強引にOpenPNEと連動させて一緒に使用していたものが簡単にOpenPNEと外部のサービスを連動させることができるようになります。
例えば、よくOpenPNEにwikiを入れたいという話を聞きますが、wikiを直接OpenPNEに組み込むのはそれなりにカスタマイズが必要です。
しかし、この外部連携を使えばOpenPNEとMediaWikiをOpenIDでID連携することができで、簡単にOpenPNEとWikiを使用することができます。
また、OpenPNEのソースコードを直接書き換えているのでOpenPNEのバージョンアップに追従できていなかったものが、外部連携でそのカスタマイズを置き換えることでOpenPNEのバージョンアップに追従できるようになります。
また、導入することができる機能の幅も広がるので、SNSの可能性を広げることができます。

ユーザー

外部連携

外部連携によって多くの機能を使うことができます。
ID連携をすることで、OpenPNEと同じIDで外部アプリケーションにログインできたり、外部アプリケーションのIDでOpenPNEにログインすることができるようになり、管理が楽になります。
また、外部連携によって他のアプリケーションを使うことができるようになるのでSNSを便利に使用することができます。

レビュー機能の廃止

レビュー機能は使用頻度が低いため、機能を見直します。現在のレビュー機能を削除し、小窓を拡張して同様の機能を実現し置き換える予定です。

ただ、一方的にレビューを廃止するというわけではなく、現在あるレビューに関しては日記などに置き換える予定です。
これまでのレビューというのはAmazonの商品だけでのレビューでした。しかし、これから小窓を拡張することで、Amazonの商品だけではなく他にもレビューすることができるようになりレビューの幅が広がります。

OpenPNE3開発に向けて

開発スタンス

OpenPNE3の開発スタンスについてまとめます。
これらの開発スタンスはOpenPNEの開発スタンスではなく、自分自身がこの開発スタンスで臨むということです。

人間関係の表現

OpenPNEは何のソフトなのかを間違えないでいきたいと考えています。
現時点で見えてるのは、「SNSは人間関係を表現するソフト」だと考えているので、そこは見失わないでいきたいと思っています。

具体的には「日記」「あしあと」「コミュニティ」など、非常に面白い機能はありますが、SNSの本質を考えたときに、究極的にはこれらの機能が含まれなくても良いと思います。
この様に書くと「それじゃ面白い機能が何も無いじゃん」と誤解を受けるかも知れないが、多くの機能を中途半端に追加するより「人間関係の表現」に特化する必要があるということです。
その「人間関係の表現」ができてこそ、「日記」「あしあと」「コミュニティ」などの各機能がより良く機能すると考えています。だからこそ、常にSNSは何のためのソフトなのかということを意識しながら開発を進めていきたいと考えています。

一隅を照らす

「人間関係を表現する」についての役割を背負い、その隅を照らし続けたいと考えています。

例えばOpenPNEは「人間関係」を照らし、MediaWikiは「知識の集積」、WordPressは「日記」、Flickrは「写真」、YouTubeは「動画」を照らすというように一隅を照らしていきたいと考えています。

ギリギリまで削除

「この機能を取ったらSNSのソフトとして存在し得ない」というギリギリまで削除したいと考えています。
「SNSは人間関係を表現するソフト」なので、それ以外の部分は削除していくと、ソフトとして完成度が高まるのではないかと思っています。

伽藍とバザールにあった以下の一文が非常に心に残っています。

「完成」(デザイン上の)とは、付け加えるものが何もなくなったときではなく、むしろなにも取り去るものがなくなったとき。

手段より目的優先

「どのプログラム言語を使うのか」「オブジェクト指向を使うのか」「PHPのフレームワークを使うのか」「Table構造で書くのか」「XHTML+CSS化するのか」と言うのは非常に大事なことだが、これらが目的ではなく手段にとどめておきたいと考えています。

開発にはさまざまな要素があって、その時々に応じて最善の手段を選択していきたいと考えています。そして、様々な選択肢の中からそれぞれのメリット、デメリットを考えた上で常に選択をしていきたいと考えています。

  伽藍とバザール
エリック・レイモンドによって書かれたオープンソースのソフトウェア開発に関する論文。伽藍とバザールは山形浩生氏によって翻訳されWebで公開されています。


伽藍とバザール
http://cruel.org/freeware/cathedral.html


OpenPNE3への想い

OpenPNE3がなぜ今開発されるのか。それは端的に言えば今のOpenPNE2に限界を感じたからです。
OpenPNE1.0系がOpenPNE2.0系へメジャーバージョンアップした時も同じです。常に良いものを追い求めていたら、いつかは枠に収まりきらなくなり大きな壁にぶち当たります。その時、その壁を突き破ることができなければOpenPNEは終わりだと考えています。

OpenPNEはこれまで多くの人に使われてきました。そして多くの方に興味を持ってもらえるようになりました。しかし、今のソースコードや設計では興味を持ってもなかなか開発に踏み切れないということもあります。
本当はOpenPNEをより良いものにしたいという気持ちがあれば一緒に開発して欲しいという思いはあります。しかし現実的には興味はあるが開発できないという壁があります。
これらの壁を突き破るのが今回のフレームワークを採用する一つの理由です。
フレームワークを採用することで、そのドキュメントなどを活かし、OpenPNEに興味を持った人が少しでも開発に参加し易くしたいという思いがあります。

今後、OpenPNEはもっと器を大きくして広く開発者を受け入れたいと考えています。
そのために、このOpenPNE3では多くの方のを受け入れられるだけの準備をしておきたいと考えています。