Redmineのテキスト書式をTextileからCommonMark Markdownに変換するプラグインを試した話

3行で言うと…


My Redmine

今週のブログ担当は前田稔です。本記事では、Redmine のテキスト書式を変換するプラグイン「Redmine Reformat」を試した結果をご紹介します。

はじめに

背景

社内 Redmine のテキスト書式は Textile が使われています。しかし、色々な機運が高まり脱 Textile に向けて試行錯誤中です。その一環として、「Redmine Reformat」というプラグインを用いて、Textile 形式から CommonMark Markdown 形式への変換を試してみました。

Redmine Reformat とは?

「Redmine Reformat」は、Redmine で使用されるテキスト書式を変換するための rake タスクを提供するプラグインです。ソースコードは以下で公開されています。

orchitech/redmine_reformat: A Swiss-Army Knife for Converting Redmine Rich Text Data

なお、Textile からの変換は pandoc のインストールが必要です。

CommonMark Markdown について

Redmineの以前のバージョンでは、テキスト書式としてTextile、Markdown(Redcarpetベース)、CommonMark Markdownが使えました。 最近、CommonMark Markdownへの移行が進み、Redmine 5.1からデフォルトの書式がTextileからCommonMark Markdownに変更されました。 また、互換性のため残されていたRedcarpetベースのMarkdownも、Redmine 6.0.0 から廃止されました。 そこで、変換先の書式をCommonMark Markdownにしました。

詳しくは以下のリンクを参照してください。

期待と検証結果

チケットの説明(履歴を含む)や Wiki など、テキスト書式が有効な項目において機械的な変換ができることを期待していました。 結果として、一部修正が必要なケースがあるものの、概ね期待通りの変換が可能であることが確認できました。

変換前の Wiki 表示(Textile) 変換後の Wiki 表示(CommonMark Markdown)
変換前の Wiki 表示(Textile) 変換後の Wiki 表示(CommonMark Markdown)

注意事項

以下の場合には手動での修正が必要になる可能性があります。

  1. テーブル(表)のセル結合やセル内のテキスト配置
  2. 箇条書きの中にテーブル(表)やマクロが含まれるケース
  3. {border: 1px solid green;} などのスタイル指定

検証環境と変換手順

次の環境で検証しました。Redmine ならびに pandoc は検証時点で最新のバージョンを使用しています。

Environment:
  Redmine version                6.0.2.stable
  Ruby version                   3.3.6-p108 (2024-11-05) [x86_64-linux]
  Rails version                  7.2.2
  Environment                    development
  Database adapter               PostgreSQL
  Mailer queue                   ActiveJob::QueueAdapters::AsyncAdapter
  Mailer delivery                smtp
Redmine settings:
  Redmine theme                  Default
SCM:
  Subversion                     1.14.2
  Mercurial                      6.3.2
  Bazaar                         3.3.2
  Git                            2.47.1
  Filesystem
Redmine plugins:
  redmine_reformat               0.8.3
$ pandoc --version
pandoc 3.6.2

以下のコマンドで変換を実行しました。テキスト書式の設定は自動的に更新されます。

bin/rails reformat:convert to_formatting=common_mark

変換が完了すると、Progress monitoring finished. と表示されます。

テーブル(表)の変換の工夫

pandoc を使用して変換されたテーブル(表)は、パイプ(|)とハイフン(-)で表現されます。ただし、表示が崩れる場合があります。その場合、pandoc の変換拡張である -pipe_tables を使用すると、HTML の <table> タグ形式で出力可能です。これにより、意図したレイアウトを再現できる場合があります。

pandoc の変換コマンド の例:

module RedmineReformat
  module Converters
    module TextileToMarkdown
      class Conversion
        PANDOC_COMMAND = [
          'pandoc',
          '--wrap=preserve',
          '-f',
          'textile-smart',
          '-t',
          'gfm-pipe_tables'
        ]

参考リンク:

おわりに

本記事では、Redmine のテキスト書式を CommonMark Markdown に変換するプラグイン「Redmine Reformat」を用いた検証結果を共有しました。テキスト書式の変換を検討されている方の参考になれば幸いです。

My Redmine

【スタッフ募集中】
「My Redmine」など弊社提供サービスのお問い合わせ対応を担当するカスタマーサポートスタッフを募集しています。
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。採用情報の詳細


こちらの記事もオススメです!
ruby/ruby.wasm を使って Redmine をブラウザ内で動かす話
Ruby on Rails アプリケーションである Redmine の Wasm 化を試しました。
Redmineのバグを修正する流れ
Redmineのバグを発見し、原因調査、修正、Redmine.orgへのパッチ提供、そして取り込まれるまでの一連の流れを、実際の事例を基に紹介します。
Redmine 6.0で使えるようになる「部分引用機能」の紹介とその実装
Redmineのチケットやフォーラムに返信するとき、メッセージを部分的に引用して返信する機能を開発しました。この機能はRedmine 6.0で使えるようになりました。
来るRedmine 6.0でのデフォルトテーマの改善状況:見やすく、読みやすく
Redmine 6.0でデフォルトテーマが改善され見やすく、読みやすくなりました。その改善内容を紹介します。
Turbo FramesでRedmineのフォーラム機能の画面遷移を削減できるか試した話
Redmineのフォーラム機能におけるユーザー体験を向上させるため、画面遷移を減らし、部分的にシームレスな更新を実現するためにTurbo Framesを試しました。
ファーエンドテクノロジーからのお知らせ(2025/01/29更新)
2025年2月16日 オライリー本の全冊公開日のお知らせ(もくもく勉強会も同時開催)
ファーエンドテクノロジーが所蔵するオライリー本(全冊)公開日のご案内です。公開日には「もくもく勉強会」も同時開催します。
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア
ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。
プロジェクト管理ツールRedmineのクラウドサービス「My Redmine」の海外向けサービス「My Redmine Global Edition」の提供を開始
「My Redmine」の海外向けサービスとして、新たに「My Redmine Global Edition」の提供を開始しました。
オープンソースのプロジェクト管理・タスク管理ツール「Redmine」の定番書籍、『入門 Redmine 第6版』が発売
オープンソースの課題管理システム「Redmine」の定番書籍が改訂され、第6版となって発売されました。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け