baserCMS初心者のためのカスタマイズガイドライン 

2019年の [baserCMS アドベントカレンダー](https://adventar.org/calendars/4498) の12記事目としての投稿です。

baserCMSは、Webサイト制作プラットフォームとして、様々な方法でカスタマイズする事ができるのですが、ここでは目的別にガイドラインを示します。

## デザインのカスタマイズ

### 1. 既存のテーマを調整する方法

最も早くWebサイトを公開する手法はこの方法です。
[baserマーケット](https://market.basercms.net/)に登録し、お好みのデザインのテーマをダウンロードして導入します。 

[テーマ設定機能](http://basercms.net/functions/theme_configs)に対応しているテーマであれば、メインイメージやメイン・サブカラーを管理システムで簡単に変更する事ができます。

テーマ設定機能に対応していないテーマの場合は、FTPツールで画像を直接差し替えたり、テンプレートやCSSを調整する必要があります。 一度、サーバー上にアップロードしたファイルを差し替えたり、調整する場合は、FTPツールでの再アップロードが必要ですが、テーマ内のファイルに書き込み権限がある場合は、管理システムの「テーマ管理機能」より編集する事も可能です。

* [baserマーケット](https://market.basercms.net/)

### 2. 静的HTMLをCMS化する方法

既に制作が完了している静的HTMLをbaserCMSで更新可能とする為には、HTMLにbaserCMSの専用タグを埋め込み、baserCMSで読み込み可能なテンプレートにする必要があります。
この方法であれば、CMS化できないデザインはないと言っても過言ではありません。  

静的HTMLをテンプレート化するには、[テーマガイド](http://wiki.basercms.net/ver4/%E3%83%86%E3%83%BC%E3%83%9E%E3%82%AC%E3%82%A4%E3%83%89)や、[テンプレートガイド](http://wiki.basercms.net/ver4/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89)と[関数リファレンス](http://wiki.basercms.net/ver4/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)を参考に、テーマフォルダ内にPHPファイルを作成します。
[テーマ制作チュートリアル](https://basercms.net/files/baser4tutorial.zip)を参考にするとCMS化する流れを理解しやすいのでおすすめです。

* [テーマガイド](http://wiki.basercms.net/ver4/%E3%83%86%E3%83%BC%E3%83%9E%E3%82%AC%E3%82%A4%E3%83%89)
* [テンプレートガイド](http://wiki.basercms.net/ver4/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89)
* [関数リファレンス](http://wiki.basercms.net/ver4/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)
* [テーマ制作チュートリアル](https://basercms.net/files/baser4tutorial.zip)


## 機能のカスタマイズ

### 1. 既存のプラグインを利用する

最も手軽に機能をカスタマイズする手法はこの方法です。
baserマーケットに登録し、お好みのプラグインをダウンロードして導入します。  
ただし、現時点において、baserCMSのプラグインはまだまだ多くありませんので、欲しい機能要望があれば、[ユーザーズフォーラムのプラグイン開発フォーラム](https://forum.basercms.net/c/plugin)に登録しておくと誰かが開発してくれるかもしれません。  

* [baserマーケット](https://market.basercms.net/)
* [baserCMSユーザーズフォーラム](https://forum.basercms.net/c/plugin)

### 2. プラグインを開発する
baserCMSは、CakePHPをベースに開発されていますので、CakePHPのプラグイン開発とほぼ同じ手法でプラグインを開発する事ができます。 [プラグイン作成ガイド](http://wiki.basercms.net/ver4/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%E3%82%AC%E3%82%A4%E3%83%89)を参考にご自分でプラグインの開発に挑戦してみてもいいかもしれません。

独自にデータベーステーブルを作成し、管理画面で管理するような仕組みを作ることもできますし、baserCMSのイベント機構（WordPressでいうアクションフックやフィルターフックのようなもの）で、baserCMS本体の振る舞いを変えることもできます。例えば、ブログ記事一覧で表示する記事に特定のフィルターをかけたり、ブログ記事にカスタム項目を追加するなどです。

ただ、残念なことに、baserCMSの最新版で利用している CakePHPは、旧バージョンの２系となります。現在、３系または４系に移行中ですのでご期待ください。（2019/12/23現在）

ちなみに、baserCMSでは、メンテナンス性確保の観点から、`app` フォルダ内直下の `Controller` や `Model`、`View` の中で開発することを推奨していません。プログラムを書く場合は、プラグインとして作りましょう。

* [プラグイン作成ガイド](http://wiki.basercms.net/ver4/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90%E3%82%AC%E3%82%A4%E3%83%89)
* [CakePHP Cookbook2系 プラグイン](http://book.cakephp.org/2.0/ja/plugins.html)


### 3. コアファイルのカスタマイズ

これは最終手段です。メンテナンス性確保の観点からいっておすすめはできません。
baserCMSは、オーバーライド機構と呼ばれるコアの機能をカスタマイズしやすい仕組みを導入しています。

baserCMSのコアとなるプログラムは、 `lib/Baser/` フォルダの中に入っているのですが、このファイルを直接編集した場合、baserCMSコアのアップデートの際、上書きする事になってしまい、メンテナンスが大変です。  
オーバーライド機構とは、baserCMSのコアファイルを、app フォルダや、利用中のテーマフォルダの同階層にコピーする事で、そちらを優先して利用する仕組みです。  

コピーして変更した際に、どういう変更を行ったかを記録しておかないと、baserCMSのバージョンアップ時に、baserCMSコア側で変更された内容を反映できないという問題はありますが、カスタマイズしたファイルがどれかすぐにわかるので、アップデート時の負担は軽減できます。  

## コアの開発に参加する

もう現在のbaserCMSには満足できない！と思われた優秀な方はぜひbaserCMSコアの開発に参加しましょう。
baserCMSのソースコードは [GitHub](https://github.com/baserproject/basercms) で管理されています。[baserCMSコアパッケージ開発者ガイド](https://github.com/baserproject/basercms/wiki/baserCMS%E3%82%B3%E3%82%A2%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E9%96%8B%E7%99%BA%E8%80%85%E3%82%AC%E3%82%A4%E3%83%89)を参考に、Issue や Pull Request を送りつけましょう。
毎月第３水曜日に開催されている、[baser井戸端もくもく会](https://basercms.net/news/archives/639#post-detail) に参加すれば、コアの開発方針にも口を出すことができます。

あなたのヒトコトが baser を変える。

ぜひお待ちしてます。

- [baserCMS GitHub](https://github.com/baserproject/basercms)
- [baserCMSコアパッケージ開発者ガイド](https://github.com/baserproject/basercms/wiki/baserCMS%E3%82%B3%E3%82%A2%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E9%96%8B%E7%99%BA%E8%80%85%E3%82%AC%E3%82%A4%E3%83%89)
- [baser井戸端もくもく会](https://basercms.net/news/archives/639#post-detail)