Redmineとプラグインの開発を支える自作のツール


My Redmine

こんにちは、日高です。早いもので、入社4ヶ月が経過しました。今回は、その4ヶ月間にRedmineやプラグインの開発を行う中で、開発をしやすくするために自作したツールを二つご紹介します。


Redmined

https://github.com/hidakatsuya/redmined

一つ目は、redminedというコマンドラインツールです。これを使うことで、RedmineのソースコードとDockerがあれば、常に同一の環境で動くRedmineに対して開発を行うことができるようになります。もちろんRedMicaでも利用できます。

使い方

どんなツールなのかを理解していただくために、RedMicaを例に簡単に使い方を説明します。詳細は README.md をご覧ください。

RedMicaのソースコードの入手とDockerのインストールは完了しているものとします。

まず、リポジトリにあるredminedをダウンロードして、パスが通った場所に保存します。GitHub上から直接ダウンロードするか、次のコマンドを実行して$HOME/.local/bin/redminedに保存することもできます(curlコマンドが必要です)。

curl https://raw.githubusercontent.com/hidakatsuya/redmined/main/redmined -o ~/.local/bin/redmined && chmod +x $_

次の内容で<RedMicaがあるディレクトリ>/config/database.ymlを作成します。

development:
  adapter: sqlite3
  database: db/development.sqlite3
test:
  adapter: sqlite3
  database: db/test.sqlite3

あとは、redminedを経由してbundle installbin/rails serverbin/rails testなどの通常のコマンドを実行するだけです。

cd 
redmined bundle install
redmined bin/rails db:prepare
redmined bin/rails server

別のターミナルでredmined bin/rails consoleを実行して、Railsコンソールを起動することもできます。

ちなみに、redminedは少し長いので、私はrという名前でエイリアスを設定して使っています。

r bin/rails s

常に同一の環境で動くRedmineで開発できる

このツールを作るモチベーションとなった理由がこれです。

公式ドキュメントにあるように、Redmineを正しく動かし、テストを実行するためには、いくつかの設定やライブラリの導入が必要です。redminedで実行したコマンドは、コマンドを通してDockerコンテナで実行されます。そして、コンテナで使うDockerイメージは、前述の公式ドキュメントなどをもとに、Redmineの動作やテストに必要な環境が構築された専用のイメージです。これによって、作業端末の環境に依存せず、Redmineが動く一定の環境で常に開発することができます。

なお、そのDockerイメージは、同リポジトリのパッケージとして管理しています。

redminedは、自動的にこのイメージをダウンロードしてコンテナを起動し、渡されたコマンドをコンテナ内で実行するためのコマンドラインツールということです。

複数のRedmine環境を動かすことができる

Redmineのソースコードのルートディレクトリに.redmined.jsonという名前の設定ファイルを置くことで、複数のRedmineの開発環境を構築することも可能です。

redminedは、デフォルトではredmined-containerという名前のコンテナを起動し、bundle installでインストールしたgemはredmine-bundle-cacheボリュームに保存します。

例えば、Redmineに加えて、RedMicaの開発環境を用意するとします。それぞれを異なるコンテナとボリュームで隔離して動かす場合は、RedMicaのルートディレクトリに次の内容で.redmined.jsonファイルを作成します。

{
  "default": {
    "name": "redmica",
    "port": "3001"
  }
}

RedMicaのディレクトリ内でredmined bin/rails serverを実行すると、redmined-container-redmica (redmined-container-<name>)コンテナが起動し、redmined-bundle-cache-redmica (redmined-bundle-cache-<name>)ボリュームにgemが保存されます。また、お察しの通り、RedMicaは3001ポートで実行されます。

さらに、RedMicaをRuby3.2で動かしたい場合もあるかもしれません(デフォルトではRuby3.3で実行されます)。その場合は、以下の様に設定を追加します。

{
  "default": {
    "name": "redmica",
    "port": "3001"
  },
  "ruby3.2": {
    "name": "redmica-ruby3.2",
    "port": "3002",
    "ruby": "3.2",
    "env": {
      "PUMA_MIN_THREADS": 1
    }
  }
}

RedMicaのディレクトリ内でredmined -n ruby3.2 bin/rails serverを実行すると、remdined-container-redmica-ruby3.2コンテナが起動します。また、envの環境変数は自動的にコンテナに展開されます。

利用できるRubyバージョンはredminedイメージのタグ一覧から確認できます(執筆時点では3.2と3.3が利用でき、3.3がデフォルトです)。

なお、.redmined.jsonはグローバルのgitignoreに追加することをお勧めします。

# ~/.config/git/ignore
.redmined.json

action-setup-redmine

https://github.com/hidakatsuya/action-setup-redmine

二つ目は、Redmineを構築するGitHub Actions用のアクションです。

これは主に、GitHub Actions上にRedmineプラグインのテスト環境を構築するために使うことを想定しています。

プラグインのテストの実行にはRedmine本体が必要

Redmineプラグインのテストを実行するためにはRedmine本体が必要です。そして、テストはプラグインがサポートする複数のRedmine環境(メジャーバージョンごとやRedMicaなど)に対して実行する必要もあると思います。

開発しているプラグインが一つだけなら問題ないかもしれませんが、多くのプラグインを開発している場合、個別にテスト環境を構築するために非常に多くの労力が必要となります。

action-setup-redmineはこれを解決するために作られました。

使い方

例えば、RedMica v3.0系の最新版に対してプラグインのテストを実行するには次のようにします。

steps:
  - uses: hidakatsuya/action-setup-redmine@v1
    with:
      repository: "redmica/redmica"
      version: "stable-3.0"
      database: "postgres:14"
      ruby-version: "3.3"

  - name: Run plugin's tests
    run: bin/rails redmine:plugins:test NAME=your_plugin_name

加えて、Redmineのmasterブランチに対してもテストする場合は次のように修正します。

strategy:
  matrix:
    include:
      - repository: "redmica/redmica"
        version: "stable-3.0"
      - repository: "redmine/redmine"
        version: "master"

steps:
  - uses: hidakatsuya/action-setup-redmine@v1
    with:
      repository: ${{ matrix.repository }}
      version: ${{ matrix.version }}
      database: "postgres:14"
      ruby-version: "3.3"

  - name: Run plugin's tests
    run: bin/rails redmine:plugins:test NAME=your_plugin_name

最後に

今後も継続してRedmineとプラグインの開発環境を改善していきたいと思います。実は、現在もう一つ別のツールを作っているところです。そのツールも含めて、また別の機会でもご紹介できればと思います。

また、redminedは開発で使うことを想定して作ったものですが、RedmineやRedMicaを手元で簡単に試す手段としても使えるかもしれません。よろしければ活用していただけると幸いです。

【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。

My Redmine

こちらの記事もオススメです!
私が過去にRedmineに投稿したパッチを振り返ってみる
Redmineの他の開発者やユーザーからのフィードバックや反応を貰えるのがOSS活動の楽しさの一つであると感じた。
Redmine 18周年を祝う会 & 入門Redmine 第6版 出版記念パーティin 松江を開催しました
オープンソースのプロジェクト管理ツールRedmineのリリース18周年をお祝いしました。
書籍『入門Redmine』執筆の歴史を振り返る
入門Redmineは試行錯誤を経ながら様々な改善を試みてきました。これまで本を手にとってくださった読者の皆様に感謝。
My RedmineとPlanioの違い
My RedmineとPlanioの違いを紹介。個人的に印象深いPlanioの魅力に触れます。
Turbo FramesでRedmineのフォーラム機能の画面遷移を削減できるか試した話
turbo-rails gemを介してTurbo Framesを利用し、フォーラムのメッセージをシームレスに更新できるかを検証しました。
ファーエンドテクノロジーからのお知らせ(2024/11/27更新)
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア
ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。
2024年12月14日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催)
ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。
RubyWorld Conference 2024 (12/5・6開催) にPlatinumスポンサーとして協賛
ファーエンドテクノロジー株式会社は、2024年12月5日(木)〜6日(金)に島根県松江市で開催される「RubyWorld Conference 2024」にPlatinumスポンサーとして協賛しています。
プロジェクト管理ツールRedmineのクラウドサービス「My Redmine」の海外向けサービス「My Redmine Global Edition」の提供を開始
「My Redmine」の海外向けサービスとして、新たに「My Redmine Global Edition」の提供を開始しました。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け