こんにちは、日高です。早いもので、入社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に投稿したパッチを振り返ってみる 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を利用し、フォーラムのメッセージをシームレスに更新できるかを検証しました。 |
プロジェクト管理ツール「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」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |