concrete5(5.7.x)アドオンを作成した時に準備したこと

# はじめに

この記事は[concrete5 Japan Advent Calendar 2016](http://www.adventar.org/calendars/1439)の13日目の記事です。
12日の記事はmizuno.fumitoさんの[アドオン公開とフィードバック](http://qiita.com/ounziw/items/e5c47bc765df3262bee6)です。

concrete5のアドベントカレンダーに今年は参加してみようと思って見てみたら、既に残り2枠しかなかったのでネタを考える前に勢いだけで参加をポチしました。なので現在「さて何書こうかな」といった感じで書いています。

愛媛でフリーランスをしていて、自分の事業サイトもconcrete5で作っている途中[^1]なのですが、その経過でアドオンを作ったりしました。
そのついでにマーケットプレイスへ公開も挑戦してみましたので、その辺りの注意点を思い出しながら復習がてらに備忘録として残します。


# 作業環境

**MAMP PRO**環境下に**concrete5(5.7.x)**をインストールしてバーチャルホストを宛てています。

* OS : `macOS`
* ローカル環境 : `MAMP PRO 3.5.2 (PHP 7.0.8)`
* 作業ディレクトリ : `~/Sites/c57/`
* ローカルURL : `http://c57.local/`


# サンプル

今回の題材にするアドオンは、半年くらい前にマーケットプレイス公開まで行いました。
[Simple Anchor](https://www.concrete5.org/marketplace/addons/simple-anchor/)

こちら、ソースコードをダウンロードしていただいて参考にして頂いて大丈夫です。
誰が見てもいいように、割と丁寧に作ったはず…です。


# アドオン開発時の構成

`simple_anchor`ディレクトリをGitのルートにしています。
Gitのブランチモデルは、リリースバージョンが管理しやすいよう**Git Flow**を採用しました。

ファイル構成は下記の通りになります。
`simple_anchor`ディレクトリ以下の構成は大体`application`ディレクトリの内容に沿って、必要な分のみ用意すれば大丈夫ですが、アドオンとしてインストールできるようにするには最低限`simple_anchor`ディレクトリ直下の`controller.php`が必要になります。

今回は時間が足りないので、ファイルの内容に関してはダウンロードしたソースコードを参照して頂ければと…。

```text:ファイル構成
c57/
└─packages/
  └─simple_anchor/ (Git Root)
    ├─.git/
    ├─blocks/
    │ └─anchor/
    │   ├─templates/
    │   │ ├─heading_1.png
    │   │ ├─heading_2.png
    │   │ ├─primary_button.png
    │   │ ├─standard_button.png
    │   │ └─success_button.png
    │   ├─add.php
    │   ├─controller.php
    │   ├─db.xml
    │   ├─edit.php
    │   ├─form.php
    │   ├─icon.png
    │   └─view.php
    ├─languages/
    │ └─ja_JP/
    │   └─LC_MESSAGES/
    │     └─messages.mo
    ├─controller.php
    ├─icon.png
    ├─INSTALL.TXT
    ├─LICENSE.TXT
    └─README.md
```


# 完成したアドオンをマーケットプレイスへ申請

作成したアドオンを、[マーケットプレイスの申請の仕方・審査の手引](http://concrete5-japan.org/community/forums/development/post-11008/)を参考に申請してみました。

マーケットプレイスへ作成したアドオンをzip圧縮してアップロードすると、まずは自動審査が実行され、下記の内容が検査されます。

![スクリーンショット1.jpg](https://qiita-image-store.s3.amazonaws.com/0/13487/c66b6de2-32b2-93df-27b3-0cf96efab356.jpeg)

下記は審査画面で表示されている順の審査内容です。

> 1. Doesn't have hidden "dot" files
>     * `.htaccess`や`.git`などの非表示ファイル/ディレクトリの類が混じっていないか
>     * macOSの人は`.DS_Stores`には特に注意
>     * Git管理していた`.git`も混ぜてはいけません
> 2. Minimum version matches controller.php
>     * 選択したconcrete5の最低必須バージョンと`controller.php`に記述された最低必須バージョンが一致しているか
> 3. Doesn't make use of include statements
>     * コード内で`include`関数の類を使用していないか
> 4. Each PHP file contains exec or die statements
>     * 全てのコードに`exec or die`ステートメントが使われているか
> 5. Doesn't use native cookie functions or $_COOKIE
>     * コード内で`$_COOKIE`またはクッキー関数の類を使用していないか
> 6. Version in matches controller.php
>     * 入力したアドオンのバージョンと`controller.php`に記述されたアドオンのバージョンが一致しているか
> 7. Doesn't use native session functions or $_SESSION
>     * コード内で`$_SESSION`またはセッション関数の類を使用していないか
> 8. Handle matches controller.php
>     * 入力したアドオンのハンドル名と`controller.php`に記述されたアドオンのハンドル名が一致しているか
> 9. PHP files parse correctly
>     * コードがきちんとパースされているか
> 10. Doesn't use direct mysql / mysqli calls
>     * コード内で`mysql`関数や`mysqli`関数の類が使用されていないか
> 11. Doesn't use eval
>     * コード内で`eval`関数の類を使用していないか
> 12. Doesn't use execution functions
>     * コード内で`exec`関数の類を使用していないか
> 13. Doesn't use file system IO functions
>     * コード内でファイルの入出力関数の類を使用していないか
> 14. Includes valid package controller namespace
>     * コード内で適正な`namespace`が使われているか
> 15. Doesn't modify permissions
>     * ファイル権限を変更するコードが含まれていないか
> 16. Has valid 97x97 marketplace thumbnail
>     * サイズ`97x97`のマーケットプレイス用のアイコン画像が用意されているか

自動審査を通過後、**Peer Review Board**(以下PRB)、簡単に言えば公式審査員による手動審査が行われます。
問題部分や、改善した方がよい部分などをチャット形式で指示してもらえます。

![スクリーンショット2.jpg](https://qiita-image-store.s3.amazonaws.com/0/13487/16542cd3-e0a4-98cf-8410-af4fe39894d0.jpeg)

そうしてやりとりして、指示された内容を修正して、圧縮して、アップして、再審査しての繰り返しになります。
修正分を圧縮するときに、誤まって`.DS_Stores`などが混じってしまうとアップし直しになるので気をつけましょう。

自分は英語がからっきしなので、ここのやりとりに非常に苦戦しました…。
良い英語の勉強方法があれば教えていただきたいです…。[^2]

そして最後にOKが出るとそのまま公開になります。


# concrete5 ver8 によるアドオン開発への影響

そういえば**ver8**出ましたね。仕事が忙しくて、残念ながら殆ど確認出来てないのですが、来年に入ったら確認したいと思います。
システム要件を見る感じ、バージョンアップによる開発への影響は殆どないと思います。
ですが、最低環境が**PHP 5.5.9 以降**に引き上がっていますので、**ver8**以降のみに対応するアドオンであれば、配列記述を`array()`から`[]`へ変更出来たり、いろいろメリットがありそうな気がしています。


# まとめ

自分が公開した[Simple Anchor](https://www.concrete5.org/marketplace/addons/simple-anchor/)みたいな簡単なアドオンでもいいので、作ってアップしてみるといろいろ知見が広がるかもしれません。


# さいごに

スケジュールがギリギリだったのもあって、内容が足りない走り書きの上に、投稿もギリギリになってしまいました…。
来年があれば、もっと余裕を持って投稿したいところ…。

あと、ねこみみ隊長が愛媛に居るタイミングで開催出来そうな時があれば一緒に[concrete5の日＠愛媛](http://concrete5-japan.org/news/concrete5-day-ehime-201605/)をモクモクやってたりします。お近くの方はぜひ参加してみてください。

というわけ(？)で、明日はねこみみ隊長(nekomimiTaicho)さんです。


[^1]: 仕事優先で後回しになりがちなので全く完成が見えません。これは良くない。来年は頑張る。(抱負)
[^2]: 地道にやれ