Quantcast
Channel: エンジニアの雑記のような何か
Viewing all articles
Browse latest Browse all 151

Redmineのプラグイン開発における概要の備忘録

$
0
0

背景

Redmineプラグイン開発について情報収集を行った結果を、備忘録としてまとめる。

実施した環境

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

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

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

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

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

プラグインの登録

以下は、プラグインの情報を登録するための init.rbファイルの例である。

Redmine::Plugin.register :sampledo
  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_demodo
  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の種類

ツール 備考
View Hooks 最も多く使用する
Controller Hooks
Model Hooks
Helper Hooks

詳細は、以下のURLを参照すること。 Redmine Hook一覧

主に使うHookの紹介

1. View Hooks

View Hooksは、ビューに対して特定のHTMLを挿入するためのHook。

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

2. Controller Hooks

Controller Hooksは、コントローラーの特定のアクションが実行された後に追加の処理を行うためのHook。以下にその例を示す。

classDemoHookListener< Redmine::Hook::Listenerdefcontroller_issues_new_after_save(context = {})
    project = context[:project]
    request = context[:request]
    # ここに処理を書くendend

まとめ

Redmineプラグイン開発では、ひな形作成コマンドを使って効率的に開発を開始することができる。そしてHookを活用することで、Redmineの動作を柔軟にカスタマイズすることが可能となる。

参考サイト


Viewing all articles
Browse latest Browse all 151

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>