備忘録
備忘録
学びと解説
学びと解説
Python
Python
Linux
Linux

記事内に商品プロモーションを含む場合があります。

Redmineプラグイン開発のためのガイド|ひな形作成とHookの使い方


背景

Redmineプラグイン開発に関する情報を収集し、備忘録としてまとめたので、
Redmineプラグインの開発手順や、ひな形作成のコマンド、Hookの利用方法などについて解説する。

実施した環境

ツール バージョン 備考
Ubuntu 22.04 LTS
Ruby 3.2.4 rbenvでインストール

プラグインのひな形作成コマンド

Redmineには、プラグインのひな形を自動的に生成するコマンドが用意されている。
Redmineをインストールしたディレクトリに移動して、以下のコマンドを実行する。

# 引数にプラグイン名を指定
bundle exec rails generate redmine_plugin Sample

このコマンドを実行すると、controllers, helpers, models, views などのディレクトリが生成され、
モデルやコントローラーのスクリプトおよびテストコードのひな形が作成される。

プラグインの登録

プラグインRedmineに登録するためには、init.rbファイルを作成し、以下のように情報を記述する。

Redmine::Plugin.register :sample do
  name 'Sample plugin'
  author 'saitoxu'
  description 'This is a sample plugin'
  version '0.0.1'
  url 'http://example.com/path/to/plugin'
  author_url 'http://example.com/about'
end

init.rbとは

init.rb ファイルは、プラグインの情報を定義するためのファイルで、プラグインの名前やバージョン、作者情報などを記述する。

例:

Redmine::Plugin.register :redmine_demo do
  name 'Redmine Demo plugin'
  author 'Author name'
  description 'This is a plugin for Redmine'
  version '0.0.1'
  url 'http://example.com/path/to/plugin'
  author_url 'http://example.com/about'
end

Hookとは

Hookは、Redmineで特定のイベントが発生した際にプラグインの独自処理を実行するための仕組み。
プログラムの動作を動的に変更するために使われ、プラグインやエクステンションの開発において重要な役割を果たす。

Hookの種類

Redmineには以下の種類のHookがある。

Hookの種類 説明
View Hooks ビューにHTMLを挿入するために使用
Controller Hooks コントローラーでの処理に追加
Model Hooks モデルの処理に追加
Helper Hooks ヘルパーの処理に追加

詳細は以下のURLを参照:
Redmine Hook一覧

以下に、例のセクションにおいて「どのような処理か」を解説する文言を追加し、SEOの観点から最適化しました。


主に使うHookの紹介

1. View Hooks
View Hooksは、ビューに特定のHTMLを挿入するためのHook。
特定のページやテンプレートに対して追加の情報を表示したり、独自のUIコンポーネントを埋め込んだりする場合に利用される。
以下の例は、課題作成ページの上部にカスタムメッセージを表示するための設定。

# リスナークラスを定義し、init.rbで読み込ませる
class DemoHookViewListener < Redmine::Hook::ViewListener
  render_on :view_issues_new_top, :partial => "Demo/issue_note"
end

このコードは、view_issues_new_topという位置にDemo/issue_noteというパーシャルを挿入し、課題作成画面の上部に特定のメッセージや情報を表示する。

2. Controller Hooks
Controller Hooksは、コントローラーの特定のアクションが実行された後に追加の処理を行うHook。
データベースの変更や、リクエストの内容に基づいて追加のロジックを実行する場合に利用される。
以下の例では、新規課題が保存された後に、特定のプロジェクトに対して追加の処理を実行する。

class DemoHookListener < Redmine::Hook::Listener
  def controller_issues_new_after_save(context = {})
    project = context[:project]
    request = context[:request]
    # 独自の処理を記述
  end
end

このコードは、課題が保存された後に発生するイベントにフックし、プロジェクト情報やリクエスト内容に基づいて、カスタム処理を追加で実行する。

まとめ

Redmineプラグイン開発では、ひな形作成コマンドを活用することで、効率的に開発を開始できる。
また、Hookを使うことでRedmineの動作を柔軟にカスタマイズすることが可能になる。
プラグインの独自機能を効果的に追加し、プロジェクト管理をより強力にするために、これらの手法を積極的に活用してほしい。

参考サイト