今年の5月1日から、Redmineの用語集プラグインをゼロから作ってみる作業を始めて一ヶ月が経過しました。(始めた経緯は、Redmine 4.0(Rails 5.1)でのプラグイン作成について - torutkのブログ に記載)
基本、オフの時間帯に細々と取り組んでいるので、まだ用語集としての基本機能がやっと通ったかなという段階です。経過は以下のWikiに執筆中です。
Redmineプラグイン開発環境 - ソフトウェアエンジニアリング - Torutk
ここまで作ってきてのRedmineプラグイン作成の感想を残しておこうと思います。
特に、メソッドの引数の括弧の省略、メソッドの引数の並びで最後がハッシュのときはハッシュの波括弧が省略される書き方は読み手を混乱させます。また、引数の省略も頻出し、これも読み手を惑わせます。
これは、Rubyのコードに慣れるしかないかなぁと思います。
用語集プラグインは、Redmineの機能拡張というよりも、むしろRedmineが使っているフレームワークRuby on Rails上に新規アプリケーションとして作ったものをRedmineと同居させているようなもの。MVC構造を一から作っているので、だから作るのが大変である
Redmineのモデルと関連を持たせているものの、MVCはそれぞれRedmineとは独立して存在しています(メニューの登録等一部関係はあり)。Redmineのプラグインが相当な自由度を用意しているといえるのかもしれません。
以前作りかけて挫折した採番プラグインも、思えばMVC構造を一から作ろうとしていたので用語集と同じに大変だったのかもしれません(以下リンク)。
Redmineプラグイン開発(できるといいなぁ)−採番プラグインを目指して
Railsのフレームワークの振る舞い(特にコントローラーとビューとの間のインタラクション)が頭の中にイメージできるまで、コントローラーとビューのコードを見てもしっくりこない
プラグイン開発の参考資料の拠り所
この一ヶ月で頻繁に参照した、あるいはとても役に立った参考資料をいくつか挙げておきます。
Redmine 2.xの記述で少し古いですが、プラグインの作り方についてはここの解説が柱となっています。
Redmine Plugin Extension and Development (English Edition)
- 作者:Alex Bevilacqua
- 出版社/メーカー: Packt Publishing
- 発売日: 2014/03/19
- メディア: Kindle版
英語の書籍ですが100ページ弱と分量はそう多くなく、雛形生成、メニュー登録、権限制御、ファイル添付、活動への反映、検索対象化などが解説されています。常に手元において内容確認しています。
ビューに関して、いくつかの領域、サイドバー、フォーム、nodata、fieldset、などなどのテクニックを紹介しています。
その他いくつかあり、随時追加予定
「似たプラグインのコードを参考にせよ」は参考にならない
よく、プラグインを作るなら「似たような機能のプラグインを探し、そのコードを真似ればいいよ」というアドバイスがあります。受け手によるとは思いますが、このアドバイスはプラグイン開発入門者には厳しいと感じています。
まず、似た機能のプラグインを探すところからです。機能(振る舞い)が似ていてもコードが参考になるかは中を見てみないと分かりませんし、プラグイン開発初心者はそのコードがよい手本となるものか、粗悪なものなのか見て判断つきません(判断つけば中級者です)。特に昨今Railsのバージョンアップにプラグインを追従させるため、書き方が古いもの、場当たり的にバージョンアップ対応してきているもの、きれいに対象バージョンに合わせて書かれたもの、など玉石混淆過ぎます。
また、完成形のプラグインのコードは、セキュリティ、バリデーション、ロジックなど様々なアスペクトが同じ個所に集約されているので、まだそれらアスペクトを理解しないうちのコードを読んでもなかなか理解をするのが難しいです。