torutkのブログ

ソフトウェア・エンジニアのブログ

プラグイン作成はそんなに簡単ではない

はてな日記が前回更新から1か月近く経ってしまいました。この間、Redmineプラグインづくりにチャレンジしていたのですが、じりじりとしか進んでいませんでした。仕事から帰宅後に作業開始し、四苦八苦して睡魔に襲われ中断、また翌晩再開、予定のない休日は数時間ほどまとまって作業ができるのですが、それでもなかなか進まず、頓挫に近い状況が続きました。

Redmineプラグインの作り方のガイド

運よく、Redmine 2.xに対応したRedmineプラグイン作成のチュートリアル記事が公開されています。

http://www.r-labs.org/projects/r-labs/wiki/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89

そこで、まずこのガイドに沿ってプラグインを作る手順をトレースしてみました。

しかし、RubyRuby on Railsも知らないで始めているので、記述したコード1行1行を理解することなく漫然と動かして終わってしまいます。1行1行きちっと理解しようとすると、さすがにRailsを知らないという訳にはいきません。ところが、Railsはいわばお作法の塊(Convention over Configurationのポリシー)です。理解するには、Rubyの文法を覚えてロジックを理解するだけでなく、Railsのお作法をしっかり把握する必要があります。

ガイドから飛び出そうとすると

実際に自分で作成したい機能を作り始めました。ガイドでは、1つのモデルクラス、1つのコントローラクラス、代表的なアクションの構成です。出発点としてはこれがよいのですが、応用としてモデルを複数設けるとしたら、コントローラは1つとするか複数とするか、コントローラ間でredirectがある場合の必要なデータの受け渡しはどうするか、などの悩みが生じます。

やりたいことと似た機能のプラグインがあればいいのですが、意外と見つかりませんでした(あれば自分で作らず使ってしまうから当然なのかもしれません)。

そこで、不十分な理解のままガイドで作成したプラグインをいじりまわしていたため、思ったように進まず、頓挫に近い状態となりました。いくつかRedmineプラグインのソースを見てみたり、Rails本を読んでみたりとして時間が過ぎていきました。プラグイン作成に着手して2,3週目はこんな状況でほとんど前進はありませんでした。

その後、こうして試行錯誤をある程度繰り返すことで、少しずつRails的なふるまい(モデルクラス間の関係付けや、GETパラメータで値を受け渡す方法、POSTでリンクする方法、ログの出し方、など)を使えるようになってきました。すると、リンクのURLの制御の仕方、ルート定義などが徐々にイメージできるようになりました。また、うまく動かないときの原因の調査も途方にくれずなんとかできるようになり、やっとなんとかプログラミングが進められる段階になりました。プラグイン作成に着手してからおおよそ1か月が経過したところです。