Redmine wikiマクロを作成する方法１

# Redmine wikiマクロを作成する方法１

[Redmine Advent Calendar 2024](https://adventar.org/calendars/10311)の６日目の記事として作成しました。

今年のRedmine Advent Calendarに空白が多く残っており、クリスマスが過ぎる前までになんとか空白の日付の記事を書いて、空白の日付を埋めることを優先して記事を作成しました。そのため、濃くない内容の記事になるかもしれませんが、ご容赦ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/4671b7e3-ba84-65ab-1939-69605ecef600.png)


* * *
## 背景

Redmineには自作のwikiマクロを作成して登録することができます。
その方法としてはプラグインを作成いたしますがwikiマクロの登録のためのプラグインは比較的開発が簡単であるため、プラグインを作ったことがない方でも簡単に試してみることができるメリットがあります。

wikiマクロでは色々な処理をすることができるためRedmineの構造を理解したり、Rubyを理解したり、プラグインの仕組みを理解したりするためには良い教材になるかと思います。
今年のRedmine Advent Calendarを通して、何回かに分けてwikiマクロの作り方を紹介したいと思います。

今回の記事ではwikiマクロを登録するためのプラグインの作成方法とハローワールド的な簡単なマクロを作ってwikiマクロがRedmineに登録できることを確認したいと思います。

開発環境の説明をいたします。Redmine 6.0.1を使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/ca48c119-9d22-3700-ced4-72352dddac78.png)


## wikiマクロ登録用プラグインの作成方法

RedmineのWikiマクロは、RedmineのWikiテキスト内（チケットの本文でも表示可能）で独自の機能やデータ表示を可能にします。そのためにはRedmineのプラグインでWikiマクロを登録します。

---

### 1. **プラグインの作成**
まず、Redmineプラグインの基本構造を作成します。

１. Redmineのディレクトリに移動します：
   ```bash
   cd /path/to/redmine
   ```
　 
２. プラグインの雛形を生成します：
   ```bash
   bundle exec rails generate redmine_plugin wiki_macro_plugin
   ```

   - `wiki_macro_plugin`はプラグイン名です。任意の名前で大丈夫です。今回の例では「wiki_macro_plugin」を使用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/8780b714-3254-30ee-90b7-e1fe8a306b0b.png)


３. `wiki_macro_plugin`ディレクトリが作成され、その中にプラグインの基本ファイルが生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/3e2f3d04-edd6-870e-6596-9f4fb943a1de.png)

---

### 2. **マクロを実装**
プラグイン内でWikiマクロを定義します。

1. 作成したプラグインのディレクトリに移動します：
   ```bash
   cd wiki_macro_plugin
   ```

2. redmine-6.0.1/plugins/wiki_macro_plugin/init.rbの「`init.rb`」ファイルを編集して、Wikiマクロを登録します：
   ```ruby
   Redmine::Plugin.register :wiki_macro_plugin do
     name 'My Macro Plugin'
     author 'Your Name'
     description 'A plugin to add custom wiki macros'
     version '0.1.0'
   end

   Redmine::WikiFormatting::Macros.register do
     desc "Example macro to display a greeting"
     macro :greet do |obj, args|
       "Hello, #{args.first || 'world'}!"
     end
   end
   ```

   - `Redmine::Plugin.register :my_macro_plugin do`はプラグインの基本情報を記載します。ここで登録した情報が下図のプラグインのページに反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/3bdd3821-fe55-3689-5dc6-be7f3b88cb63.png)

   - `desc`にWikiマクロの説明文を記載します。
   - `macro`の第一引数はマクロ名（この場合、`:greet`）です。
   - macroブロック内でマクロの処理を記述します。ここでは、引数があれば、その引数を返し、引数がなければworldを表示させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/dc468411-058a-0218-3baf-5a56f07659c9.png)

---

### 3. **Redmineを（再）起動**
新しいマクロを作成または更新した場合、Redmineのアプリケーションサーバー（Passenger, Puma, Unicornなど）を再起動してください。

私の場合、「`bundle exec rails server -e production -p 3601`」でサーバーを起動させることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/0e449160-a09f-1794-1dd1-dc183333f0eb.png)


---

### 4. **マクロの使い方**
RedmineのWikiページで、以下のように記述することでマクロを使用できます：
```
{{greet}}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/c3abff17-1f76-82cb-fc04-ddfc43a7519b.png)

引数がない場合はデフォルト値が使われます：
```
Hello, world!
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/6b985a07-8e5c-0692-d00b-bf236ccff218.png)

引数を渡す場合：
```
{{greet(John)}}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/3d24396b-0224-4421-1eaf-0a6bfdb815ec.png)

上記の場合、結果は次のようになります：
```
Hello, John!
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633321/b383c3fd-d943-36af-0bb7-56c66a219fbc.png)


---

上記の手順で、Redmineに独自のWikiマクロを簡単に追加できます。




* * *
## 感想

* 数日分の記事を書くためのネタが無く、wikiマクロを色々書いて遊びながら記事を書く予定です。
* 今日は、まずはwikiマクロを登録するためのプラグインの作り方を説明しました。

* * *
### この記事の作成者の紹介
* * *
山崎進
* Redmine、Jquery、JavaScript,Rails、Ruby、SQL、VBA、RPAの開発を行なっています。
* 自動化、業務の効率化に高い関心があります。
* 下記の媒体で情報を発信しています。Redmineのプラグインの開発などに対応が可能ですので、お気軽にご連絡ください。

　* Qiita：https://qiita.com/ankosoft
　* Twitter：https://twitter.com/yamasaki24
　* Redmine Advent Calendarで記事投稿
　* redmine.tokyoで講演多数
　* Redmine Japan Vol.1 前夜祭、Redmine Japan Vol.3で講演
　* https://ankosoft.co.jp/blog/
　* https://technology.ankosoft.co.jp/

* * *
### 関連記事（2024年のRedmine Advent Calendarの記事です。）

 *　[Redmine wikiマクロを作成する方法１](https://qiita.com/yam_asaki/items/1dfd349e078fc6d0f764)

 *　[Redmine wikiマクロを作成する方法２（完了チケットの割合をグラフで表示）](https://qiita.com/yam_asaki/items/5e09143f93104c5590a1)

 *　[Redmine wikiマクロを作成する方法３（ステータスごとのチケットの割合をグラフで表示）](https://qiita.com/yam_asaki/items/ff108e081dc421fe2b10)

 *　[Redmine wikiマクロを作成する方法４（ステータスごとのチケットの割合を一つのグラフで表示）](https://qiita.com/yam_asaki/items/d0f0bba1b0caa892bd46)

 *　[Redmine wikiマクロを作成する方法５（特定のユーザーのチケット状態の確認）](https://qiita.com/yam_asaki/items/4138dc71505c7c33f63f)

 *　[Redmine wikiマクロを作成する方法６（プロジェクトに所属する全てのユーザーのチケット状態の確認）](https://qiita.com/yam_asaki/items/e80f9252a50caee14f1d)

### 関連記事（2023年のRedmine Advent Calendarの記事です。）
 *　[JqueryでRedmineのメニューにアイコンを入れる方法](https://qiita.com/yam_asaki/items/32097598cb0a653dd916)

 *　[JqueryでRedmineのメニューを閉じたり開いたりする方法](https://qiita.com/yam_asaki/items/5ac4a1127beeed53059c)

　*　[JqueryでRedmineの「活動ページ」をもっと便利に(タイトルを開閉したり、曜日を入れたり)](https://qiita.com/yam_asaki/items/718513b52b30b30f65bc)

　*　[JqueryでRedmineの「活動ページ」をもっと便利に②(フィルタリング機能と移動機能)](https://qiita.com/yam_asaki/items/2428610fd89bc73ce0ab)

　*　[JqueryでRedmineの「wikiページ」をもっと便利に(フィルタリング機能と移動機能)](https://qiita.com/yam_asaki/items/a6a32c45dbbc72a28836)

　*　[JqueryでRedmineの「チケットページ」をもっと便利に(年ごと、月ごと、四半期ごとの集計機能の開発)](https://qiita.com/yam_asaki/items/176d07588793b3e66b5d)

　*　[RedmineのパスワードやログインIDを忘れた時の復旧方法](https://qiita.com/yam_asaki/items/6881c92b30dc85f589ad)

　*　[「rails console」を使ってRedmine上のスケジュールを一括変更する方法](https://qiita.com/yam_asaki/items/1d41dc8653773f3522e6)