こんにちは、日高です。早いもので、入社4ヶ月が経過しました。今回は、その4ヶ月間にRedmineやプラグインの開発を行う中で、開発をしやすくするために自作したツールを二つご紹介します。
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 installやbin/rails server、bin/rails testなどの通常のコマンドを実行するだけです。
cdredmined bundle install redmined bin/rails db:prepare redmined bin/rails server
別のターミナルでredmined bin/rails consoleを実行して、Railsコンソールを起動することもできます。
ちなみに、redminedは少し長いので、私はrという名前でエイリアスを設定して使っています。
r bin/rails s
このツールを作るモチベーションとなった理由がこれです。
公式ドキュメントにあるように、Redmineを正しく動かし、テストを実行するためには、いくつかの設定やライブラリの導入が必要です。redminedで実行したコマンドは、コマンドを通してDockerコンテナで実行されます。そして、コンテナで使うDockerイメージは、前述の公式ドキュメントなどをもとに、Redmineの動作やテストに必要な環境が構築された専用のイメージです。これによって、作業端末の環境に依存せず、Redmineが動く一定の環境で常に開発することができます。
なお、そのDockerイメージは、同リポジトリのパッケージとして管理しています。
redminedは、自動的にこのイメージをダウンロードしてコンテナを起動し、渡されたコマンドをコンテナ内で実行するためのコマンドラインツールということです。
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
https://github.com/hidakatsuya/action-setup-redmine
二つ目は、Redmineを構築するGitHub Actions用のアクションです。
これは主に、GitHub Actions上に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フレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。
|
Redmineの他の開発者やユーザーからのフィードバックや反応を貰えるのがOSS活動の楽しさの一つであると感じた。 |
|
オープンソースのプロジェクト管理ツールRedmineのリリース18周年をお祝いしました。 |
|
入門Redmineは試行錯誤を経ながら様々な改善を試みてきました。これまで本を手にとってくださった読者の皆様に感謝。 |
|
My RedmineとPlanioの違いを紹介。個人的に印象深いPlanioの魅力に触れます。 |
|
turbo-rails gemを介してTurbo Framesを利用し、フォーラムのメッセージをシームレスに更新できるかを検証しました。 |
|
プロジェクト管理ツール「RedMica」バージョン 4.0.0をリリース Redmine互換のオープンソースソフトウェア 今日使える明日のRedmine「RedMica」のバージョン4.0.0をリリースしました。 |
|
2025年11月29日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催) ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。 |
|
【AIがRedmineのチケットを要約】チケット内容が瞬時に分かる新機能「AIチケット要約」をMy Redmineで提供開始! Redmineのクラウドサービス『My Redmine JP Edition』で、チケット内容を要約する新機能「AIチケット要約」が使えるようになりました。 |
|
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |
