Redmineプラグインの開発環境構築


ある日突然、Redmineプラグイン開発をすることがあるかもしれません。
開発方法の詳細は調べる必要があるとしても、環境ぐらいは簡単に作りたいものです。
開発環境の構築方法です。

# 環境
- MacOS Sierra Version 10.12.6
- Docker Version 17.09.0-ce-mac35 (19611)
- Redmine 3.4.2

# 手順
## docker-compose

データベースのインストールや初期構築の手間を省くために[公式dockerイメージ](https://hub.docker.com/_/redmine/)を使います。
[docker-compose で構築した環境で redmine プラグインを開発しはじめる例 - Qiita](https://qiita.com/tily/items/8996831d0603c6ef1cfc)を参考にします。

```docker-compose.yml
version: '3.1'
services:
  redmine:
    image: redmine
    ports:
      - 80:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: redmine
    volumes:
      - ./work:/usr/src/redmine/plugins/redmine_plugin_of_yours/
      - ./log:/usr/src/redmine/log
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: redmine
      MYSQL_DATABASE: redmine
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
```

### 工夫した点

- [library/redmine - Docker Hub](https://hub.docker.com/_/redmine/)の例では`REDMINE_DB_PASSWORD`が`example`です。そのままでは動かないので`redmine`に変更します（開発環境ですので、パスワードは公開しても痛くも痒くもありません）。
- 作業ディレクトリ配下の`work`ディレクトリにRedmineプラグインのディレクトリを用意します。Redmine本体は変更しません。プラグインのディレクトリだけマウントすれば十分です。
- logディレクトリもマウントします。Redmineは原則prodcution環境で動かします。起きた例外はこのディレクトリに出力される`production.log`ファイルで確認します。
- dbコンテナへの依存をdepends_onで明記します。プラグイン開発時は変更するたびに再起動します。起動時にredmineコンテナを明示的に指定して、再起動時にRedmineプロセスのみ再起動できるようにします。
- dbコンテナのcommandについては後述します。


### 注意点
- Docker For Macは管理者権限を与えているため80番ポートで起動できます。80番ポートでの起動が面倒な場合は任意のポートに変えてください。

## Redmine起動

```
docker-compose up redmine -d
```

http://localhost で起動します。

## プラグインのスケルトン生成

```
docker-compose exec redmine bundle exec ruby bin/rails generate redmine_plugin redmine_plugin_of_yours
```

`generate redmine_plugin`については[Plugin Tutorial - Redmine](http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial)を見てください。


## ログイン

[ログイン — Redmine.JP](http://redmine.jp/tech_note/first-step/admin/login/)
  > Redmineをインストールした直後であればユーザー名、パスワードともに"admin"でログインできます。
  
Redmineの管理者ユーザはadmin:adminです。

## Wikiの保存時にInternal errorが出る場合

[dockerでRedmineを起動する - Qiita](https://qiita.com/kazuy/items/1a4c0f718c59479e2aa5#%E5%86%85%E9%83%A8%E3%82%A8%E3%83%A9%E3%83%BC)
  > プロジェクトを作成しようとした所、以下のようなエラー画面が表示された。
  > 修正箇所：dbの所にcommandを追加。

`command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
`を追加します。

## Redmine終了
```
docker-compose kill
```

# この先
あとは公式の[プラグイン開発チュートリアル](http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial)を読んでバリバリ開発してください。

# 参考情報

- [dockerでRedmineを起動する - Qiita](https://qiita.com/kazuy/items/1a4c0f718c59479e2aa5)
  MariaDBを使う例です。
- [Redmineプラグインのviewを作るための情報あれこれ | | Scimpr Blog](https://blog.scimpr.com/2015/04/02/redmine%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AEview%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%83%85%E5%A0%B1%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/) 既存のhelperやCSSクラスの説明があります。
- [Redmine PluginのViewの拡張ポイント（View hook）がどこにあるか？を列挙する - Qiita
](https://qiita.com/digdagdag/items/424ae1055d66d4672ca1) View hookの反映されるページのスクリーンショットがあります。
- [Redmine の wiki index ページを tree view で表示する - redmine_wiki_index_tree_view - basyura's blog](http://blog.basyura.org/entry/2014/04/29/001952) View hookのサンプルがあります。
- [Redmine - wiki 記法を増やす - basyura's blog](http://blog.basyura.org/entry/2016/06/20/221455)