July 12, 2014

LTのスライド (Redmine with Sidekiq)

Redmine Sidekiq Plugin を紹介しました。

Sidekiqで非同期のデモをしました。

これは非同期処理のworker classです。
チケットのステータスを変更するだけの単純な例です。

class SandboxWorker
  include Sidekiq::Worker
  sidekiq_options retry: 2

  def perform(name=nil, count=nil)
    puts 'Doing sandbox work'

    Issue.all.each do |issue|
      issue.status_id += 1
      issue.save
    end
  end
end

非同期処理の活用で面白いプラグインができると良いですね。

Let the ticket monitoring by async!


爆速でRedmineのPluginを作成しました。

飯田治行さん(@haru_iida)のセッションで「RedmineのER図はありますか?」の質問があって
Rails ERDで出力できます!」と応えました。

休憩時間にER図を見せよと思ってbundle exec erdコマンドを実行 …
… 処理が終わらない! モデルが60以上あって関連が複雑だから \(^o^)/

野田誠人さん(@pinzolo)のセッション中に関心のあるモデルだけのER図を出力する
プラグインを爆速で作ることに成功! 次のLT(非同期 Redmine)でER図を紹介できました。

紹介したER図はこちらです。
このプラグインの作り方も紹介します。

generateコマンドで簡単にPluginが作れます。

今回はProjectに関連を持った5つのモデルをER図にしました。

$ bundle exec rails generate redmine_plugin redmine_draw_erd
$ echo "gem \"rails-erd\"" > ./plugins/redmine_draw_erd/Gemfile
$ mkdir -p ./plugins/redmine_draw_erd/lib/tasks/redmine/draw
$ cat << __EOS__ > ./plugins/redmine_draw_erd/lib/tasks/redmine/draw/erd.rake
require "rails_erd/diagram/graphviz"

namespace :redmine do
  namespace :draw do
    desc "Generate Entity Relationship Diagrams"
    task erd: :environment do
      options = {
        filetype: :png,
        attributes: [:foreign_keys, :primary_keys, :content],
        title: "Project",
        only: [:Project, :Member, :Issue, :Version, :News],
        filename: File.join(File.expand_path('tmp/pdf', Rails.root), "project")
      }

      Rails.application.eager_load!
      RailsERD::Diagram::Graphviz.create(options)
    end
  end
end
__EOS__

rake redmine:draw:erdコマンドでER図が出力されます。

当日は出力するモデルを検討したので実装に5分ほどかかりましたが
この手順でコマンドを入力するだけだと30秒でプラグインの作成からER図の表示が完了します。

$ bundle install
$ bundle exec rake redmine:draw:erd
$ open ./tmp/pdf/project.png

このPluginはGithubに公開しています。
(redmine.orgにはもう少し手を加えてから登録します。)