pkp-libの解剖 − 学術出版システムのコア
大学ジャーナルに論文を投稿したり、同行審査済みプレプリントを検索したりしたことがあるなら、Open Journal Systemsプラットフォームに触れた経験があるはずだ。学術ウェブの古典的な存在だ。しかし、そんなプラットフォームを裏で支えているものを考える開発者は少ない。
Public Knowledge Projectの学術ソフトウェア群の裏には、PHPライブラリであるpkp-libが存在する。OJSジャーナルプラットフォーム、OMPモノグラフ、OPSプレプリント、OHSメタデータハーベスターなど、複数の製品の共用ロジックを包含している。
内部構造と設計思想
異なるプロジェクト間でコードをコピーする代わりに、チームはコア機能を別のリポジトリとして切り出した。このライブラリは、各アプリケーションのlibフォルダ内にサブモジュールとして組み込まれている。
内部アーキテクチャは日常的な処理を担当する:
- 査読者と編集者のための承認、ロール管理。
- 学術メタデータ標準であるOAI-PMHとDublin Coreのサポート。
- 機能を拡張するためのフックエンジン。
- 共用UIコンポーネントと原稿提出ワークフローの処理。
GitHubの統計を眺めるのは興味深い。リポジトリのスター数は控えめな350だ。しかしフォークは約500あり、オープンなイシューの数は1000を超えている。オープンな学術ソフトウェアにとっては、これは一般的な光景だ。人々はスターのためではなく、実際の作業課題を解決するために来到这里。
バグトラッキングの仕組み
プロジェクトのメインREADMEは抑制されている。ターミナルコマンドの例も、Composerによるインストール手順もない。その理由は単純だ:このリポジトリはアプリケーション全家系のエラーの単一のディスパッチポイントとして機能する。
学術誌の編集者がOJS 3.3でバグを発見した場合、pkp-libに直接チケットを作成する。メンテナーはイシューを特定のコアリリースにリンクし、その後修正は依存する全プラットフォームに反映される。小規模な開発チームながらも長年にわたり運用されている製品にとって、このアプローチは混沌を制御するのに役立つ。
コードの成長余地
このプロジェクトは2009年から存在しているため、コードベースにはPHP開発の異なる時代のアーキテクチャ層が含まれている。レガシーコードはMVCコンポーネントと共存し、リファクタリングはリリースごとに段階的に進行している。
このリポジトリを学ぶことは次のような場合に意味がある:
- OJS上で動作する大学ジャーナルを拡張またはカスタマイズする任務を与えられた。
- 論文エクスポートや引用データベース連携のプラグインを作成している。
- 複数の専門製品向けの共用コアがどのように構成されているかを確認したい。
pkp-libを任意のWebサイトのフレームワークとして使用することは推奨されない。このライブラリは出版ワークフローに対して狭い専門性を持っている。しかし、長年の歴史を持つドメイン駆動型システムの例として、興味深い示唆を与えてくれる。
関連プロジェクト