ディレクトリツアー

解説:海老原
文:井本

概要

ここでは、OpenPNEのディレクトリのうち、特に主要なものをアルファベット順に解説していきます。
SourceForge?.netなどからダウンロードできるOpenPNEの圧縮ファイルを解凍したり、trac.openpne.jpでOpenPNEのtrunkを見てみると、以下のような構造になっているのがわかると思います。

bin/
lib/
public_html/
setup/
var/
webapp/
webapp_biz/
webapp_ext/
config.php.sample
LICENSE

今回は、これらのディレクトリのうち主要なものを紹介していきます。

ルートディレクトリ

各ディレクトリを見る前に、ルートディレクトリ(一番上の階層)について見ていきましょう。

  • LICENSE - OpenPNEは現在PHPLicenseを採用しています。そのライセンス事項が書かれているのが、このファイルです
  • config.php.sample - 設定ファイル(config.php)の編集前のファイルです。OpenPNEをセットアップするには、このconfig.php.sampleからconfig.phpをコピーし、config.phpのほうをコメントの内容に従って書き換える必要があります

ところで、WordPress?やXOOPSなど、ほかの一般的なWEBアプリケーションのように、このディレクトリにはindex.phpがルートディレクトリに存在しません。これは、OpenPNEでは後ほど解説するpublic_htmlディレクトリのみをWEBサーバの公開領域に設置することを推奨しているためです(注:config.phpなどのファイルをWEBサーバの公開領域に設置してしまうと、サーバの設定などによってはファイルの中身(config.phpであればデータベースの接続情報など)が見られてしまったり、想定外のPHPスクリプトにアクセスされてしまうなど、セキュリティ上好ましくありません)。

WordPress Japan
http://wordpress.xwd.jp/

XOOPS Cube日本サイト
http://xoopscube.jp/

libディレクトリ

include/
smarty_plugins/
README.txt

このlibディレクトリの中には、includeディレクトリとsmarty_pluginsディレクトリがあります。includeディレクトリにはPEARなどの外部のライブラリが、smarty_pluginsにはSmartyのプラグインが格納されています。ここでは、includeディレクトリについて見ていくことにします。
なお、README.txtにも書かれているように、ライブラリにはOpenPNEと違ってPHP License以外のものが含まれています。中にはソースコード自体の改変を禁じているものもあるので、取り扱う場合は各ライブラリのライセンス事項をよく理解する必要があります。
(注:これらのディレクトリはインクルードパスに指定されているので、読み込む際にライブラリのフルパスなどを指定する必要はありません)

include(lib/include)ディレクトリに格納されているライブラリ

このディレクトリには、たとえば以下のようなライブラリが格納されています。

  • PEAR::Auth - OpenPNEの認証処理は基本的にはPEAR::Authを使っておこなわれます。OpenPNEの目玉機能であるSlavePNEも、実はこのPEAR::AuthのAuth_Containerという機構を利用して実現されています
  • PEAR::DB - OpenPNEがデータベースを扱うときに使われるライブラリです
  • kcaptcha - 招待メールの送信時などに使われる、Captcha(メンバーに画像の中にある文字を打ってもらうことで、ロボットによる処理かどうかを判別する機能)はこのライブラリを使って実現されています
  • Smarty - テンプレートエンジンです。OpenPNEの各ページはSmartyに対応したテンプレートで記述されています
  • simplepie - RSS取得用のライブラリです。外部ブログの更新情報などを取得する場合に使われます
 PEAR
 http://pear.php.net/
 
 Smarty
 http://www.smarty.net/
 
 Simplepie
 http://simplepie.org/

 kcaptch
 http://example.com/

pubic_htmlディレクトリ

cmd/
css/
flash/
img/
js/
modules/
skin/
cap.php
config.inc.php
img_skin.php
img.php
index.php

このpubic_htmlディレクトリはWebサーバから読み込まれるディレクトリなのでCSSファイルやJavaScript?ファイルなどがあります。

OpenPNEでは、基本的にこのディレクトリ内のindex.phpが読み込まれて処理がはじまります。
画像を表示する場合には、img.phpが読み込みまれます。これらのファイルはデータベースから画像ファイルを読み込みます。データベースの画像を直接表示することはできないので、PHPスクリプトにデータベースの画像を出力してもらい、それをWEBブラウザで表示します。
(注:スキン画像を表示する場合はimg_skin.phpが読み込まれます。基本的な処理はimg.phpと同様ですが、読み込む際に画像ファイル名ではなくスキン画像名を指定するところが異なります)

cmdディレクトリ(public_html/cmd)

このcmdディレクトリは、OpenPNEの目玉機能である小窓機能を実現するためのJavaScript?が格納されています。小窓にはCMDタグ形式(<cmd src="ドメイン名">と記述する)、URL2CMD形式(小窓対応のURLを記述する)と2つの形式がありますが、どちらの形式で小窓が使用されても、このcmdディレクトリにあるJavaScript?が読み込まれます。
小窓にはたとえば以下のようなものがあります。

  • youtube小窓
  • ニコニコ動画小窓
  • 価格.com小窓
  • GoogleMaps?小窓

cssディレクトリ(public_html/css)

このcssディレクトリには、OpenPNEのスタイルシートが入っています。
OpenPNEのデザインに関わるCSSは基本的に、すべてこのcssディレクトリに入っています。しかし、現状は動的に書き出す必要がある配色設定などはテンプレートに直接書いています。
動的に書き出す必要がないフォントの大きさなどのCSSはこのcssディレクトリに入っています。

flashディレクトリ(public_html/flash)

ここにはflashファイルが入っています。現在あるlist.swfというファイルはフレンドリスト・コミュニティリストなどをFlashで表示するためのものです。このflashのソースも公開してますので、これを再編集してオリジナルのフレンドリストを作ることも可能です。

Flashの使い方
http://trac.openpne.jp/wiki/FlashHowTo

imgディレクトリ(public_html/img)

次はimgディレクトリです。OpenPNEでは先に説明したimg.phpを通して画像ファイルを読み込みますが、サーバの負荷対策のためにこのimgディレクトリに画像を書き出し、それを読み込むようにすることができます。(注:config.phpでOPENPNE_IMG_CACHE_PUBLICをtrueに書き換える必要があります。ただし、このディレクトリ内の.htaccessからmod_rewriteを利用できる環境であることが条件です)

jsディレクトリ(public_html/js)

このjsディレクトリにはOpenPNEでJavaScript?を使用するためのファイルが格納されています。

modulesディレクトリ(public_html/modules)

このディレクトリには、admin、pc、setupと各モジュールごとに必要なファイルが入っています。たとえば、adminディレクトリには、管理画面で使用するCSSやボタン画像などがあります。

skinディレクトリ(public_html/skin)

このskinディレクトリにはスキン画像が格納されています。
OpenPNE2.10系から、ヘッダーやナビメニューなどのスキン画像をあらかじめ用意されたものから選択出来る機能が追加されました。
OpenPNEレッド、OpenPNEベージュ、OpenPNEイエロー、OpenPNEグリーン、OpenPNEブルー、OpenPNEネイビー、OpenPNEパープル、そしてOpenPNE2.8系で使用されていたスキン画像用のディレクトリがあります。

setupディレクトリ

script/
sql/
OpenPNE_Setup_pgsql.html
OpenPNE_Setup.html
OpenPNE_Upgrade.html

このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。
OpenPNE_Setup.htmlはMySQLを前提に書かれているので、PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを参照してください。
また、OpenPNE_Upgrade.htmlがアップグレード用のマニュアルとなります。アップグレードをする場合はこちらを参照してください。

sqlディレクトリ(setup/sql)

このディレクトリにはSQLファイルが入っています。OpenPNEは原則として画像などもデータベースに保存しているためバージョンアップの時もこのSQLを実行するだけでバージョンアップをすることができます。
現状、以下のRDBMSに対応したSQLがあります

  • MySQL4.0用SQLディレクトリ(mysql40/)
  • MySQL4.1以降用SQLディレクトリ(mysql41/)
  • PostgreSQL7.4以降用SQLディレクトリ(postgres74/) これらのディレクトリは、以下の構成になっています。
    install/
    update/
    upgrade/
    option/
    

各ディレクトリにはそれぞれの用途に合わせたSQLファイルが入っています。
installディレクトリにはOpenPNEを新規にインストールするためのSQLが入っています。
] updateディレクトリには、開発版間のマイナーバージョンアップ(2.9.1→2.9.2、2.9.2→2.9.3)をするためのSQLが格納されています。主に開発者や最新の動向を追いたい人が使用するSQLです。
upgradeディレクトリには旧安定版から安定版へのバージョンアップ(2.6から2.8、2.8から2.10など)をするためのSQLが格納されています。安定版を用いて運用しているSNSについては、こちらのSQLを実行します。
optionディレクトリには、OpenPNEの動作に必須ではないSQLが入っています。例えば、add_c_api.sqlは実行しなくてもOpenPNEは動作しますが、API機能を使用する場合にはこのSQLファイルを実行する必要があります。

scriptディレクトリ(setup/script)

OpenPNE2.10でおこなわれた、「個体識別番号をMD5ハッシュ値として格納する」「旧形式の携帯絵文字を新形式の携帯絵文字にコンバートする」など、SQLの実行で対応できない仕様変更などは、ここに格納されたスクリプトでおこないます。

varディレクトリ

このvarディレクトリには基本的には一時的なファイル、一時的なデータが入ります。よって、OpenPNEをダウンロードして展開した状態だと空の状態です。
OpenPNEはデータはデータベースに置くという方針で開発しています。しかし、毎回データベースに接続して読み込んでいると表示速度が遅くなるので、一度データベースから読み込んだファイルはこのvarディレクトリにキャッシュとして置いておきます。
キャッシュすることで、毎回データベースにデータを読み込みに行く必要がなくなるのでパフォーマンスが向上します。

webappディレクトリ

lib/
modules/
templates/
validate/
init.inc
version.php

OpenPNEのアクションファイルなど、アプリケーション部分のスクリプトなどはこのwebappディレクトリに格納されています。

libディレクトリ(webapp/lib)

このディレクトリは、ライブラリが格納されています。同じ役割のディレクトリがincludeディレクトリにもありますが、webapp以下のディレクトリはOpenPNEの独自ライブラリである点が異なります。 libディレクトリにはいくつかファイルがあります。その中でcontroller.phpというファイルがありますが、この中でOpenPNEのメインの処理を行っています。

dbディレクトリ(webapp/lib/db)

OpenPNEではデータベースからデータを取得したり、データベースにデータを書き込む場合に、このディレクトリ内のライブラリで定義された関数を実行しています。
例えば、メンバーのidを取得したい場合、member.phpファイル内のdb_member_c_member4c_member_idという関数をコールすることで、指定したメンバーの情報が取得しています。

OpenPNEディレクトリ(webapp/lib/OpenPNE)

このOpenPNEディレクトリには独自のクラスライブラリが格納されています。例えば、Smarty.phpはsmartyの派生クラスであるOpenPNE_Smartyというクラスを定義しています。

colorディレクトリ(webapp/lib/color)

colorディレクトリには配色設定ファイルが格納されています。
このディレクトリはktaiディレクトリとpcディレクトリに分けてプリセットカラーが定義されています。

smarty_pluginsディレクトリ(webapp/lib/smarty_plugin)

このsmarty_pluginsディレクトリには、OpenPNEに特化したSmartyのプラグインが入っています。
たとえば、OpenPNEでは、部分SSL機能を使用することなどでURLが変わることがあります。そのため、function.t_url.phpというSmartyプラグインを使うことで動的にURLを生成しています。
その他にも、CMDタグを小窓にするfunction.t_cmd.phpや、絵文字を変換するためのoutputfilter.pne_display_emoji.phpなどがあります。

modulesディレクトリ(webapp/modules)

modulesディレクトリには、pcモジュール、adminモジュールなど、各モジュール用のディレクトリが格納されています。各モジュールのディレクトリは以下のような構成になっています。

  • do - データベースの情報を更新するなどの実行系のアクションをおこなうためのPHPスクリプトファイルが格納されています
  • page - ページ表示アクションをおこなうためのPHPスクリプトファイルが格納されています
  • templates - ページを表示するためのテンプレートファイルが格納されています
  • validate - 各アクション実行ごとに入力値のチェックをする際のルールが記述されたファイルです

webapp_extディレクトリ

root/webapp_ext/modules/

admin/
ktai/
pc/

このwebapp_extディレクトリは拡張用のディレクトリです。
独自に新しい機能を追加したり、既存の機能を拡張するためのディレクトリです。
何らかの機能を追加したい場合、直接ファイルを書き換えるということも可能ですが、バージョンアップに追従できないというデメリットがあります。
実際に、このwebapp_extディレクトリを使用して機能を拡張する場合は、webappディレクトリやPNEBIZ機能を実現するために用意されているwebapp_bizディレクトリなどを参考にしてください。

webapp_extディレクトリを使用する場合は、config.phpでUSE_EXT_DIRをtrueにする必要があります。このUSE_EXT_DIRをtrueされていると、まずwebapp_extディレクトリが読み込まれ、もしアクションファイルが存在しない場合は、webappのアクションファイルを読み込みます。