« 2016年2月 | トップページ | 2016年4月 »

2016年3月

2016/03/31

JAXAのRedmine運用事例の分析~「ロール設定のORルール」と「カスタムフィールド設定のANDルール」

JAXAのRedmine運用事例の経験論文をじっくり読み直した。
特に、「ロール設定のORルール」と「カスタムフィールド設定のANDルール」の箇所が参考になったのでメモ。

【参考】
JAXA Repository / AIREX: CODA: JSS2の運用・ユーザ支援を支えるチケット管理システム: Redmineの事例と利用のヒント

JAXAのスーパーコンピュータ活用課でRedmineを使ったチケット管理システムの経験論文: プログラマの思索

【1】Redmineはとても柔軟なチケット管理システムなので、ソフトウェア開発のタスク管理以外にも、システム保守などの雑多な作業管理や、日々の事務作業にも適用可能だ。
すると、それぞれの業務の特徴を把握した後、Redmineにどのような設定を行えば、業務の要件を満たすのか、という業務要件とRedmineの機能のフィットギャップ分析が必要になってくる。

この作業はいわゆるERPのパラメータ設定と同じである。
つまり、ERPと言うパッケージ製品の中身、特にDB設定と機能の詳細を知らないと、適当にパラメータ設定してしまい、実際の業務では使い物にならない、と言われてしまう。
普通は、ERPコンサルタントと呼ばれる人が高い単価で仕事している作業になるだろう。

【2】Redmineでは、システム管理者がブラウザ上で自由にパラメータを設定できる。
【2-1】もっとも重要なパラメータは、トラッカー毎のワークフロー設定だろう。
ワークフローを定めて、チケットのステータス遷移がスムーズに流れなければ、業務として扱いづらい。

【2-2】次に重要なパラメータは、ロールとカスタムフィールドの設定だろう。
ロール毎に、Redmineの機能を絞込できるので基本は、組織の職位とロールを対応付ければいい。

しかし、正式な職位(部長、課長、係長)とは違って、その部署内のローカルな職位も必要だったりする。
例えば、工場では、数多くの班があって班長が品質管理やQC活動を推進していたりする。
あるいは、地方の営業所では、部長がおらず、稟議を回すには現地の人で回したいために、一部の業務だけ稟議決裁できる特別な権限を付与していたりする。

つまり、組織の職位とロールは必ずしも1対1に対応しないし、Redmineのロールはむしろ、もっと膨れ上がる可能性が高い。
JAXAの報告書のように、トラッカー * ロールの分だけワークフローの種類が増えるので、Redmineがどんどん複雑になってしまう。
これはRedmineに原因があるのではなく、業務に対するRedmineのパラメータ設定に問題がある。

【2-3】また、管理者の観点では、カスタムフィールドをチケットに増やしたがる。
なぜなら、チケット集計結果にカスタムフィールド単位のメトリクスを出力して、品質管理や稼働分析などに使いたいからだ。

チケット入力の運用ルールさえ徹底できれば、リアルタイムにチケット集計することで、いろんな観点で最新のメトリクスを採取できるメリットがある。
Redmineはガントチャート以外にもたくさんのビューがあるし、Excel出力すれば、好きなだけExcelマクロでグラフ化したりできる。

しかし、カスタムフィールドを増やすと、JAXAの報告書にあるように、カスタムフィールドが1個だけ違ったとしても、トラッカーを新規登録していくと、トラッカーが増大してしまう欠点がある。
これも、Redmineに原因があるのではなく、業務に対するRedmineのパラメータ設定に問題がある。

【3】JAXAが指摘している「ロール設定のORルール」と「カスタムフィールド設定のANDルール」は、上記の問題対するパラメータ設定の解決方法になる。

【3-1】「ロール設定のORルール」とは、プロジェクト設定>メンバーの画面で、ユーザ1人に対し、Redmineのロールを複数個対応させるルールだ。
例えば、リーダーのAさんは管理者と開発者、開発者のBさんは開発者ロールのように割り当てる。
すると、Aさんは管理者ロールとして完了ステータスに更新可能だが、Bさんは開発者ロールだけなので完了ステータスに更新できない。

確かに、Redmineのプロジェクト設定>メンバー画面では「管理者,開発者」のように表示される場合があるが、それは「ロール設定のORルール」を意味しているわけだ。

この運用ルールに基いて、JAXAの報告書では例えば、「一般」「承認者」「保守」というロールを作り、ユーザがプロジェクトごとに異なるロールを選択できるようにしている。
つまり、ワークフローのステータスをグループ化して、ステータスをグループ化した各グループ単位にロールを割り当てることで、ロールによる機能制限が可能になる。

普通はステータスやロールはそんなにコロコロ変わるわけではない。
業務や組織は頻繁に大きく変わるわけではないから。
だから、上記のように最初にきちんとパラメータ設定すれば、業務にフィットした運用が可能になるだろう。

JAXAでは、メリットを下記のようにまとめている。

(引用開始)
このように,ロール設定の OR ルールを利用することでロールと権限及びワークフローの保守負担を削減できる.
CODA では,導入当初は Figure 3 のような定義をしていたが,システムの利用範囲が広がるにつれてロールやワークフローの保守が複雑になってきたため,運用開始から約 1 年経過したところで Figure 4 に示したロール設定の OR ルールを利用する方法に変更した.
(引用終了)

【3-2】「カスタムフィールド設定のANDルール」とは、1個のトラッカーに対し、全ての業務をカバーするようなカスタムフィールドを全て追加しておき、プロジェクトごとにトラッカーのカスタムフィールドを選択するルールだ。

例えば、「全般」トラッカーは標準フィールド以外に、「影響度」「支援SW種別」「問合せ先」「ISO9001項番」というカスタムフィールドを追加したとする。
その後、プロジェクトAの「全般」トラッカーでは、プロジェクト設定>概要>カスタムフィールド画面で、「影響度」「問合せ先」だけを選択し、「支援SW種別」」「ISO9001項番」というカスタムフィールドはチェックしない。
すると、プロジェクトAでは、「全般」チケットの「影響度」「問合せ先」は入力できるが、「支援SW種別」」「ISO9001項番」は表示されないから入力できない。

つまり、管理画面のトラッカーは、全てのカスタムフィールドを包含するように設定し、各プロジェクト設定画面で必要なカスタムフィールドだけ選択して、不要なカスタムフィールドはOFFにすれば、トラッカーの種類を増やす必要がなくなる。
JAXAはそのような運用をしているらしい。

JAXAでは、メリットを下記のようにまとめている。

(引用開始)
この機能を利用すると,1 個のトラッカーで,業務のフローは同じだが業務ごとに管理すべき内容(フィールド)が異なるケースに対応できる.これは,保守が容易になる以外に,利用者にとっても以下のような利点がある.
(1) 業務分野への関係があるフィールドのみが表示されるので,画面表示の煩わしさが少なく,業務に集中しやすい.
(2) 利用者が複数の業務分野を担当している場合,プロジェクトが異なっても同じトラッカー(例では「全般」)を利用できるので,トラッカーの選択肢が少なくなり,選択に迷うことが少なくなる.
(引用終了)

さらに、Redmineではカスタムフィールドに、ロールごとに「必須」「読み取り専用」の設定が可能なので、その機能を考慮すると、より業務に即した運用が可能になるだろう。

【3-3】なお、「ロール設定のORルール」と「カスタムフィールド設定のANDルール」は正直複雑な設定方法なので注意が必要だ。
つまり、Redmineを業務に適用する前に、業務に必要なワークフロー(つまりトラッカー)や管理項目(カスタムフィールド)を事前に洗い出し、どのように運用を行うか、という運用設計を十分に検討する必要がある。

例えば、「カスタムフィールド設定のANDルール」では、RedmineプロジェクトごとにカスタムフィールドをON/OFFに選択するので、間違って選択したり忘れないように注意が必要になる。

つまり、業務の複雑さに合わせたRedmineの運用を回すには、Redmineのパラメータ設定ないし運用設計がそれなりに複雑になってしまうというトレードオフの関係が発生するので、注意が必要だ。

【4】JAXAはRedmineの運用ルール「ロール設定のORルール」と「カスタムフィールド設定のANDルール」を試行錯誤しながら見出したわけだ。
Redmineを作ったJPLも、そのような発想でRedmineを設計していたのだろうと推測する。
JPLすごいね。

【追記1】
Redmine本家でも、Redmineの運用事例として「Public sector>Japan Aerospace Exploration Agency (JAXA) 」にリンクが貼られている。
世界に誇れるくらい、日本の良い事例だろうと思う。

WeAreUsingRedmine - Redmine

【追記2】
JAXAのRedmine事例報告を記載した方から、「フィールド設定のANDルールにおいて、ANDルールの対象はカスタムフィールドのみであり、標準フィールド(例:対象バージョン、カテゴリ)は選択できない」内容に、論文を訂正された、という記載がありました。
詳細は、下記の論文を参考ください。

JAXA Repository / AIREX: CODA: JSS2の運用・ユーザ支援を支えるチケット管理システム: Redmineの事例と利用のヒント

| | コメント (0)

2016/03/23

Redmineと連携する構成管理リポジトリの作成を自動化する方法

Redmineと連携する構成管理リポジトリの作成を自動化する方法がようやく分かったのでメモ。

【参考】
HowTo Automate repository creation - Redmine

Repositories access control with apache mod dav svn and mod perl - Redmine

redmine/reposman.rb at master ・ redmine/redmine

リポジトリの作成を自動化したい - 履歴

Windows で Redmine と Subversion の認証連携をする ついでにLDAP設定も少し - Qiita

Redmineをインストールしたあとにやっておきたい初期設定 | いちよんこーど

redmineのインストール方法 - Ogalog

【1】Redmineの以前のVer1.xでは、SCMCreatorプラグインを使ったことがあり、Redmineの管理画面からSVNリポジトリを作成できて便利だった。
しかし、Redmineの度重なるVerUpにRedmineプラグインがなかなか追随できないので、最近は使っていなかった。

SCM Creator (+Github) - Plugins - Redmine

概要 - SCM Creator (+Github) - Andriy Lesyuk site

初めてRedmine環境を構築したらSCM連携で躓いた話 - Qiita

【2】Redmineの管理>設定>リポジトリタブに、「リポジトリ管理用のWebサービスを有効にする」というチェックボックスがある。
僕は、下記の記事のように、Redmineと連携する構成管理リポジトリと同期させる方法だけしか知らなかった。

小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog

しかし、上記の記事を読むと、Redmine純正ツールで、Redmineプロジェクトと1対1に対応するように、SubversionやGitなどの構成管理のリポジトリを自動生成してくれる方法があるらしい。
やり方としては、下記になるらしい。

1)Redmineの管理>設定>リポジトリタブに、「リポジトリ管理用のWebサービスを有効にする」をONに設定
2)Redmineのextra/svn/reposman.rb をRedmineサーバーに配置して、APIキーを指定したスクリプトを作り、Cronで動かす

例:*/5 * * * * ruby /var/www/redmine/extra/svn/reposman.rb --owner apache --svn-dir=/var/www/svn --redmine-host=http://127.0.0.1/redmine --key=hogehoge --scm subversion

reposman.rbを使うメリットとしては、プロジェクトリーダーにRedmineサーバーの管理を開放せずに、Redmine管理画面上から構成管理リポジトリを作成できるので、インフラのセキュリティ面としても有効だろう。

reposman.rbというRubyスクリプトは何に使うのか知らなかったのだが、こういう使い方をするわけですね。
他にも、メールによるチケット自動登録をサポートするrdm-mailhandler.rbも用意されているし、至れり尽くせりだなと思う。

【3】Redmine本家のWikiを色々見ると、Redmineサーバーの不正アクセスを防御する方法(例えば、パスワードを総当りで入力してSSHログインしようとするブルートフォース攻撃など)として、Fail2banを組合せるやり方が紹介されていたりして、なかなか役立つ。
Redmineサーバーを外部公開しているならば、参考になるのではないだろうか。

HowTo Configure Fail2ban For Redmine - Redmine

他にも色々探してみる。

| | コメント (0)

2016/03/22

Redmineチケットが深い階層になっている時に稀にLock wait timeoutが起きる症状

Redmineチケットが深い階層になっている時に稀にLock wait timeoutが起きる症状があるらしいのでメモ。

【現象】
Redmine本家の下記のスレッドで、Redmineチケットが深い階層になっている時に稀にLock wait timeoutが起きる症状があるらしい。

How to reproduce "Lock wait timeout" on production.log - Redmine

Defect #19344: MySQL 5.6: IssueNestedSetConcurrencyTest#test_concurrency : always fails - Redmine

Feature #18860: Replace awesome_nested_set gem with a custom implementation of nested sets - Redmine

症状を再現させるには、MySQLのコンソール画面で、Issuesテーブルにテーブルロックを故意にかけた後、チケット更新すると、Lock wait timeoutが発生する。

begin;
select * from issues for update;

テーブルロックがかかっているのだから、デッドロックが起きるのは当たり前だが。
コミッタのまるやまさんによれば、Defect #19344: MySQL 5.6: IssueNestedSetConcurrencyTest#test_concurrency : always fails - Redmineで既に認識済みで、MySQLのVer5.6以上で発生するらしく、PostgreSQLを使った方がいいよ、と勧めている。

(引用開始)
MySQL >= 5.6 and MariaDB have problem (#19344).
I recommend you use PostgreSQL instead of MySQL and MariaDB.
(引用終了)

直接関係しないが、Redmineプロジェクトが3000個以上もありネストしている場合でも、似たような症状が稀に発生するらしい。

Defect #19976: Redmine can't work with 3000 projects - Redmine

【推測される原因】
普通は上記のような症状は発生しないが、DB更新や画面表示の性能が悪い時に、おそらくチケットの階層構造が深いチケットを更新しようとすると、デッドロックが起きているのではないかと思われる。
階層の個数が数十個というレベルではなく、数百、数千というオーダーではないか、と推測される。

【Redmineで無限の階層を実現している仕様】
Redmineのチケットの階層構造は、awesome_nested_setというRubyGemで実装されている。
これは、RDBにおける再帰構造を入れ子集合モデルで実現しているのが重要なポイントだ。
換言すれば、awesome_nested_setというRubyGemがあるから、チケットの階層を無限にする仕様で実装できたのかもしれない。

Railsでawesome_nested_setを使って階層構造を作成する - Rails Webook

collectiveidea/awesome_nested_set: An awesome replacement for acts_as_nested_set and better_nested_set.

RDBでは再帰構造を実現するのが難しく、階層を例えば5回までに限定するなど、無限回まで拡張することはやりにくかった。
だから、Oracleでは、connect by句のような特殊な方言を使って、再帰構造のデータをSQLで取得できるようにしていた。

しかし、RDBで再帰構造を無限階層まで実現する方法は、入れ子集合モデルで既にアイデアは公表されており、Redmineはそのモデルを実装している。
だから、Redmineでは、チケットもプロジェクトも無限の階層を作り出すことができる。
実際、Issuesテーブルにlft, rgtというカラムがある理由は、入れ子集合モデルを実現しているからだ。

Redmineチケットの階層化の実装方法: プログラマの思索

Redmineでトラブル発生!素人が原因を調査して解決するまでにやったことまとめ ・ DQNEO起業日記

入れ子集合モデルに関しては、下記の記事が分かりやすい。
また、「達人に学ぶDB設計 徹底指南書」でも詳しく説明されている。

第5回 SQLで木構造を扱う~入れ子集合モデル (1)入れ子集合モデルとは何か :SQLアタマアカデミー|gihyo.jp … 技術評論社

入れ子集合モデルでチケットの階層構造を実現した時のボトルネックは、既存の深い階層構造を持つチケットのツリーに対し、1個のチケットを追加するとか、変更する場合、該当の階層構造のチケット全てのレコードに更新がかかるために、影響が大きいからだ。
つまり、Issuesテーブルのlft, rgtのカラム全てを再計算して更新し直すため、階層構造が深くなるほど、更新対象になるレコードも増える。
データ更新時間が長くなれば、デッドロックになる可能性も高くなる。
おそらく上記の現象は、階層構造が深くて、階層構造の配下にあるチケットの枚数がかなり多いのではないか、と推測される。

入れ子集合モデルの弱点はデータ更新の頻度が多くなり、更新の影響範囲が広い、ということだが、下記の記事では、Issuesテーブルのlft, rgtのカラムに有理数を設定可能にすることで対応できる、と紹介されている。
つまり、有理数の稠密性という特徴を生かせば、DB更新の影響範囲を狭めることができる、ということだ。

第6回 SQLで木構造を扱う~入れ子区間モデル (1)もしも無限の資源があったなら :SQLアタマアカデミー|gihyo.jp … 技術評論社

上記のような話を踏まえて、階層構造が深い場合にデッドロックが起きる現象を考えると、Redmineはワークフロー設定のような画面操作だけでなく、入れ子集合モデルのようなデータ構造までよく考えて作られていることが分かる。

個人的には、Redmineのテーブル設計をきちんと調査して、どのような設計思想でどんなテーブル構造で作られているのか、を見てみたいと思う。

| | コメント (0)

2016/03/21

Redmineのカスタムフィールドを導出属性にしてしまうプラグインredmine_plugin_computed_custom_field

Redmineのカスタムフィールドに計算式を機能追加するプラグインredmine_plugin_computed_custom_fieldを見つけたのでメモ。

【参考】
annikoff/redmine_plugin_computed_custom_field: Computed Custom Field for Redmine

Lo que le faltaba a Redmine ha llegado: Campos Calculados | Luis Blasco Consultor Redmine

【1】上記のRedmineプラグインredmine_plugin_computed_custom_fieldを入れると、カスタムフィールド欄に「computed」というデータ型が追加され、「Formula」に計算式を入れると、そのカスタムフィールドが導出属性(作出属性)として機能するらしい。
下記の例が載っている。

(引用開始)
Examples:

%{cf_1}*2+%{cf_2}

(%{cf_1}/3.14).round(2)

if %{cf_1}.zero?
%{cf_2}/2
else
%{cf_3}/2
end

# For IssueCustomField
(self.estimated_hours || 0) * 2

# For ProjectCustomField
self.parent_id == 2
(引用終了)

【2】上記プラグインが持つ意味は、Redmineチケットのカスタムフィールドが導出属性として使えるということだ。

【2-1】例えば、4年以上前のRedmineユーザメーリングリストでは、チケットに「出勤時刻」と「退勤時刻」のカスタムフィールドを追加して、出勤時間を別のカスタムフィールド(又は予定工数)に入れたい、という要望が上がっていた。
このレベルまでチケット管理の運用が回っているならば、Redmineを勤怠管理システムにしてしまう事ができるはずだ。

カスタムフィールドの計算 - Google グループ

【2-2】例えば、Redmineチケットのカスタムフィールド「原稿入稿日」に、チケット登録日の7日後の日付を自動で表示したい、という要望が上がっていた。
Redmineに直接パッチを当てることで対応されていたようだが、%{cf_xx}(xxはカスタムフィールドID)+7日後という計算式を設定すればいいだけのはず。

できた!!> Redmineのカスタムフィールドにデフォルトで7日後の日付を入れる | OTSUKARE-TION (おつかレーション)

あるいは、Redmineチケットのデフォルト項目「start_date」「due_date」「estimated_hours」「spent_time」「parent_id」などの変数を使う事例も考えられるだろう。

Redmineチケットのカスタムフィールドが導出属性として使えるならば、数値や金額や日付の自動計算などに応用することができるだろう。
そうすれば、Redmineのチケットがあたかも1個の帳票として扱えるかもしれない。

色々考えてみる。

| | コメント (0)

Redmineのリンク型カスタムフィールドの使い方

Redmineのリンク型カスタムフィールドの使い方がようやく分かったのでメモ。

【参考】
Feature #1358: Link_to for Custom Field - Redmine

南旺理工: Redmineのカスタムフィールドからリンクを張れる機能も今じゃ普通に標準装備な件

第14回RxTStudy勉強会「Redmineの未来を考える - 機能・運用・コミュニティ」の感想 #RxTStudy: プログラマの思索

【1】Redmineのカスタムフィールドには、Ver2.5からリンク型という型を指定することができる。
リンク型の仕様は、Feature #1358: Link_to for Custom Field - Redmineに記載されている。

(引用開始)
2.5.0 adds a "Link" custom field format but also adds the ability for other custom field formats to render values as a http link to a configurable URL with the following substitution available:

%value% => the custom field value
%id% => id of the customized object
%project_id% => id of the project of the customized object if defined
%project_identifier% => identifier of the project of the customized object if defined
%m1%, %m2%... => capture groups matches of the custom field regexp if defined
(引用終了)

【1-1】例えば、「外部リンク」というリンク型カスタムフィールドを作り、URL欄に「http://www.redmine.org/issues/%value%」と書いておく。
すると、チケットの「外部リンク」テキストに、「1358」という数値を入力すると、「http://www.redmine.org/issues/1358」のリンクが自動で貼られる。
チケットからリンクを動的に生成したい時に役立つ。
詳細は下記を参照。

Link_type_cf_field_redmine1

Link_type_cf_field_redmine2

【2】リンク型カスタムフィールドの使い道としては、例えば、二つのRedmineサーバーが別々に立っており、双方のRedmineサーバーのチケットの内容を相互リンクしたい時に使える。

【2-1】第14回RxTStudy勉強会「Redmineの未来を考える - 機能・運用・コミュニティ」の感想 #RxTStudy: プログラマの思索では、オフショア専用のRedmineサーバーと社内の開発チーム専用Redmineサーバーが別々に立っていて、オフショア専用Redmineサーバーへ社内Redmineサーバーのチケットの内容を同期したい、という質問があった。
別々のRedmineインスタンスを立てる理由は、社外やオフショアから社内のサーバーにアクセス制限がある、などの社内事情があるためだ。

REST APIでチケット登録したり、メールによるチケット自動登録とか色々やり方はあるだろうが、チケットの内容を手動で転記する場合、社内Redmineサーバーのチケットに、オフショア専用のRedmineサーバーのチケットにリンクさせるリンク型カスタムフィールドを作っておく解決方法もある。
つまり、社内のRedmineサーバーで、オフショアの受入バグを起票したら、オフショア専用のRedmineサーバーのチケットにも同じ内容を転記して、リンク型カスタムフィールドで遷移させるようにしておき、社内のSEやユーザもオフショア専用のRedmineサーバーでオフショアチームがどんな進捗状況であるか、外部リンクから辿ることができる。

カスタムフィールドにチケット番号を書く運用にすれば、社内Redmineチケットとオフショア専用Redmineチケットの組合せデータが残るので、双方のデータをExcel出力して、好きなように進捗報告を作ったり、メトリクス集計すればいい。

【2-2】他の使い方としては、例えば、外部ユーザ向けのサポートデスクWebシステムや、社内の品質管理システム、社内の原価管理システム、社内のドキュメントサーバーなどへのリンクをRedmineのチケットの属性の一つとして持たせることも考えられる。
大企業ほど、既に古い品質管理システムが稼働していて、すぐに廃棄もできない場合も多いので、Redmineからの片方向のリンクでもあれば、過去データを参照しやすい。

Redmineはバージョンアップするたびに、細かな機能が改善されているので、その機能をどんな場面でどのように使えば効果的なのか、を考えるのが楽しい。
他にも色々探ってみる。

| | コメント (0)

2016/03/18

Redmineの担当者プルダウンを絞込するプラグインのリンク

Redmineの担当者プルダウンを絞込するプラグインをリンクしておく。

【参考1】
Redmineの担当者をグループごとに分けて選択できるプラグインを作った - 世界中の羊をかき集めて

akira-kuriyama/redmine_assign_grouping: Redmine Plugin

「Redmineのチケットの担当者を関係者のみに絞り込むプラグイン」を修正した - 世界中の羊をかき集めて

akira-kuriyama/redmine_assign_narrowdown: redmine plugin

【1】Redmineは元来、少人数チームでプロジェクト管理する発想で作られている。
しかし、Redmineを事務処理のワークフローなどで使いたい場合、1プロジェクトに含まれるユーザ数が数十人~百人以上を設定せざるを得ない。
1個のプロジェクトに、○○申請書、△△依頼書のトラッカーを作り、社内のユーザ全員が自由に起票できる運用にしたいからだ。

すると、チケットの担当者プルダウンに数十人以上のユーザが表示されて、スクロールしながら逐一、担当者を指定する手間がかかってしまう。
そんな時に、チケットの担当者プルダウンを絞込できる機能があると、使い勝手が格段に良くなる。

【2】現状では、2つのプラグインがある。
【2-1】一つは、ユーザグループ単位にユーザをグルーピングして、担当者プルダウンに表示させる方法。
akira-kuriyama/redmine_assign_grouping: Redmine Pluginが相当する。

ユーザを必ず1個のユーザグループに割り当てて、ユーザグループ内の人数を制限しておけば、担当者プルダウンをスクロールせざるを得なくても、選択しやすく成る。
但し、一人のユーザが複数のユーザグループに所属させる運用の場合、複数のユーザグループに同一ユーザが表示されるので、担当者プルダウンのスクロール範囲が逆に広くなってしまうデメリットがある。

【2-2】もう一つは、チケットの関係者は普通は作成者と担当者、ウォッチャーだけだから、それら関係者のみ担当者プルダウンに表示させる方法。
akira-kuriyama/redmine_assign_narrowdown: redmine pluginが相当する。

最初のチケットの起票時に、担当者と関係者をウォッチャーに指定しておけば、担当者プルダウンの横の「関係者のみ」のチェックを押すと、関係者のみに絞込みされる。
担当者プルダウンのスクロール自体がなくなるので使いやすい。

【参考2】
Redmineで担当者を特定のルールでグループ化し、グループ毎に表示する(View customize plugin) - Enjoy*Study

onozaty/redmine-view-customize: View customize plugin for Redmine

【3】一番綺麗なのは、View customize pluginを入れて、自分でJavaScriptで自由自在にフック処理を埋め込むのが良いのだろう。
上記の例では、ユーザ名に「(所属名)」を入れて、担当者プルダウンにグルーピングして表示させる方法が紹介されている。
ユーザグループ単位に表示させる要件ではうまくいかない場合に、有効だろうと思う。

また、担当者プルダウンだけでなく、他のユーザ型のカスタムフィールドでも同様の問題が発生するから、View customize pluginを入れて同様の処理を実装すれば良い。
汎用的に実装するなら、こちらの方がお勧めなのだろう。

【追記】
下記の情報があったのでメモ。

nekosanzさんのツイート: "@tamaryoo @akipii @akahane92 @MadoWindahead @agilekawabata select2系のプラグインでてますよ。本当にRedmineの可能性が大きく広がります。カスタムフィールドも行けました。https://t.co/LvQO3FSafR"

Redmineで長いセレクトボックスを自動補完して欲しかったのでプラグインを作った - Qiita

| | コメント (0)

2016/03/13

Bitnami Redmine documentationのリンク

Bitnami Redmine documentationを読むと、Redmineの設定方法がなかなか良いのでメモ。

【参考】
Bitnami Redmine - Bitnami documentation

(引用開始)
5. How to create a full backup of Redmine?
5.1. Backup
5.2. Restore
6. How to upgrade Redmine?
7. How to change Redmine timezone?
8. How to install a plugin on Redmine?
8.1. Windows troubleshooting
9. How to install the RedmineCRM plugin?
10. How to install the Redmine Dropbox plugin?
11. How to install the Redmine Ultraviolet plugin?
12. How to install the Redmine Custom Workflows plugin?
13. How to install the Redmine Agile plugin?
14. How to configure the email settings of Redmine?
15. How to enable SSL?
16. How to see the Subversion repository from Redmine application or from web browser directly?
17. How to configure Redmine for advanced integration with Git
18. How to configure Redmine for advanced integration with Subversion
19. How to use Mercurial with Redmine
20. How to debug errors?
21. How to install Redmine People plugin?
22. How to configure fail2ban to work with Redmine?
(引用終了)

【1】ApachePassengerを使う時に、httpd.confの設定は、Apacheのバージョンでオプションに違いがある。
Ver2.4未満の場合とVer2.4以上の場合で、「<IfVersion < 2.3 >」「<IfVersion >= 2.3>」で分けている。
CSS、Javascriptが表示されない - Google グループにもあるように、はまっている人が多いみたい。

(引用開始)



PassengerEnabled on
Options -MultiViews
AllowOverride All
<IfVersion < 2.3 >
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
SetEnv RAILS_RELATIVE_URL_ROOT "/new_url"
PassengerAppRoot "/opt/bitnami/apps/redmine/htdocs"


(引用終了)

【2】Bitnami Redmine documentationの目次を読むと、個性的なプラグインのインストール方法が詳しく記載されているのが面白い。
Bitnamiでも、RedmineCRM plugin、Redmine Ultraviolet plugin、Redmine Custom Workflows plugin、Redmine Agile plugin、Redmine People pluginは安心してインストールできるみたい。
これらのプラグインを使う人が海外では多いのかな?

【RedmineCRM plugin】
CRM - Plugins - Redmine

RedmineはCRMソフトとして使えるか?Part2~RedmineをCRMソフトとして使うためのプラグイン: プログラマの思索

【Redmine Ultraviolet plugin】
epitron/redmine_ultraviolet: Advanced syntax highlighting for Redmine source code repositories (using Ultraviolet, which is based on Textmate syntax files).

Ultraviolet Syntax Highlighting - Plugins - Redmine

【Redmine Custom Workflows plugin】
Custom Workflows - Plugins - Redmine

Redmineのワークフロー管理機能に分岐やロジックを追加するプラグインredmine_custom_workflows: プログラマの思索

【Redmine Agile plugin】
Agile - Plugins - Redmine

【Redmine People plugin】
People - Plugins - Redmine

【3】「15. How to enable SSL?」の箇所はちょっとしか記載がないが、Apache - Bitnami documentationに詳細が書かれている。
RedmineをSSL化したい要望は多いので、Bitnamiユーザはチェックした方がいいかもしれない。

RedmineにSSL接続で設定する方法のリンク: プログラマの思索

【4】「22. How to configure fail2ban to work with Redmine?」の箇所も面白い。
「If you want to limit the number of attemps that the users could try to log in to Redmine (and avoid brute-force attacks), you could try to install fail2ban and configure it to work with Bitnami Redmine.」という記載の通り、fail2banを利用すると、ブルートフォース攻撃を緩和できるらしい。

Redmine本家やRedmineユーザメーリングリストの下記のスレッドにも記載がある。
試してないので分からないが、外部に公開しているRedmineサーバーに入れて見ることも可能だろう。

HowTo Configure Fail2ban For Redmine - Redmine

Re: [Redmine] さくらVPSでredmine始めました不正アクセス防止する設定 - Google グループ

上記の設定ノウハウは、Redmineというよりも、普通のWebサーバーの管理に近いので、それらのノウハウをRedmineサーバーに流用できるはず。

| | コメント (0)

2016/03/12

TestLink Tutorialのリンク

TestLink Tutorialのリンクがあったのでメモ。

【参考】
TestLink Tutorial: A Complete Guide

前文英語だが、画面キャプチャがあるので、操作方法は分かる。
チュートリアルの目次は下記の通り。

(引用開始)
In this tutorial we will learn
・Advantages of TestLink
・Login to TestLink
・Creating a Test Project
・Creating a Test Plan
・Build Creation
・Creating Testsuite
・Creating a Testcase
・Assigning test case to test plan
・Creating Users and Assigning Roles in TestLink
・Writing Requirements:
・Executing a test case
・Generating Test Reports
・Export Test case/ Test Suite
・Importing Test case/ Test suite
(引用終了)

但し、コメントを読むと、SMTPのメール設定、RedmineやMantisとの設定、Jenkinsからのテスト結果の自動登録などの方法は記載されていないので、注意。
あくまでも初心者向けに、TestLinkはこんなことができるよ、という説明。

| | コメント (0)

「社会人のためのシンポジウム発表入門 リーン論文作法」のリンク

@sakaba37さんの論文作法の資料が素晴らしいのでリンクしておく。

【参考】
社会人のためのシンポジウム発表入門 リーン論文作法: ソフトウェアさかば

和文論文誌 投稿のしおり 5.1 査読の基準

社会人が論文を書く時、慣れていないと正直書きにくい。
論文にはそれなりのお作法がある。
論文の査定基準として、たとえば、新規性・有効性・信頼性・了解性の観点がスライドでも紹介されている。
電子情報通信学会の査定基準らしい。

和文論文誌 投稿のしおり 5.1 査読の基準

(引用開始)
5.1 査読の基準

  基本的に,次の4条件について査読を行う.

(1) 新規性:投稿の内容に著者の新規性があること.
(2) 有効性:投稿の内容が学術や産業の発展に役立つものであること.
(3) 信頼性:投稿の内容が読者から見て信用できるものであること.
(4) 了解性:投稿の内容が明確に記述されていて読者が誤解なく理解できるものであること.

 信頼性については必須の要件であるが,新規性と有効性についてはいずれかが高ければ採録の対象となる.
 すなわち,新規性が高い場合は,有効性はさほど高くなくても採録の対象となり,有効性が高い場合は,新規性がさほど高くなくても採録の対象となる.

 新規性,有効性の評価では,できるだけ視点を広げて論文の良い点をみつけるようにする.
 このような観点で評価するときの参考として,新規性,有効性,信頼性に関するチェック項目を設定した.
 もちろん,これらのチェック項目をひとつでも満たす論文は採録可能であるというわけではない.
 論文の信頼性を確認したり,新規性,有効性に関する客観的な主張を明確にしたりする際に,参考にして頂きたい.
(引用終了)

4つの項目のうち、新規性や有効性の部分が書きにくいのではないだろうか、と思ったりする。
なぜなら、自分が書きたいと思う内容は、どこに今までにない新しい観点があるのか、ということを説明するのは難しいし、自分がいくら有効だと主張してもその根拠を定量的に示さなければ無意味なので、その裏付けにすごく労力がかかるから。
もちろん、信頼性や了解性も難しい。

論文であれ、報告資料であれ、発表資料であれ、@sakaba37さんのスライド17ページ「リーンな構成の論文」の構造はすごく役立つと思う。
論文全体の流れを組み立てる時に、新規性や有効性を盛り込むのが難しいなあ、といつも思っているが、「研究内容や結果の裏返し」が有効性の説明、「研究内容や結果が過去に提案されなかった」ことが新規性の説明、という観点はすごく参考になった。
確かに、イントロとまとめの部分は、後から修正する場合が多いから。

参考にしたいと思う。

| | コメント (0)

2016/03/07

Redmineのユーザ一括インポートプラグインがVer3.2でも対応しているみたい

Redmineのユーザ一括インポートプラグインがVer3.2でも対応していると分かったのでメモ。

【元ネタ】
rest apiを使ってユーザーを複数登録する方法をご教示頂けませんでしょうか? - Google グループ

shrkw/redmine_user_import: redmine plugin for user bulk import from csv file

以前のユーザ一括インポートプラグインはRedmineのVerUpに耐え切れず放置されていたのだが、上記のGithubのプラグインはRails4に対応しているようなので、ユーザ一括インポートできるようだ。

実際、下記のようなCSVを用意したとする。
1行目はヘッダ、2行目からユーザ情報。

login,password,lastname,firstname,mail,admin
test5,test5,テスト41,テスト22,xxx2@gmail.com,1
test6,test6,テスト41,テスト32,xxx3@gmail.com,1

Redmineのトップ画面の右上に「ユーザー一括登録」というリンクが出てくるので、そこから辿って、CSVを読みこませれば良い。
問題なく複数件でもユーザ登録できた。
マイグレーションも不要で、プラグインを配置するだけ。

Redmineを初めて導入する時に、複数のユーザを一括登録したい時があるので、ユーザ一括インポートプラグインがあると便利だ。

【追記】
@g_maedaさんが、REST API経由でユーザCSVを一括インポートするRubyスクリプトを公開されている。

CSVファイルを読み込んでRedmineにREST API経由でユーザーを登録する

【追記2】
rest apiを使ってユーザーを複数登録する方法をご教示頂けませんでしょうか? - Google グループで、KOGUREさんから返事があり、
@g_maedaさんのプログラムを修正し、パスワード列を省いたCSVファイルで、複数件のユーザ取込に成功したらしい。

| | コメント (0)

Redmineチケットの完了時に進捗率と期日を自動更新するプラグインredmine_issue_completion

Redmineチケットの完了時に進捗率と期日を自動更新するプラグインredmine_issue_completionを見つけたのでメモ。
これは便利。

【参考】
insspb/redmine_issue_completion: Redmine issue completion plugin helps you to fill some fields on issue close event. Based on redmine-auto-percent by @wadewomersley & @escline

チケットのステータスが完了へ更新すると、進捗率<100%または期日=ブランクのまま更新してしまう時が多い。
すると、完了チケットなのに、期日がなかったり進捗率≠100%なので、チケットを集計したい時にデータとしてイケてない。

redmine_issue_completionは、チケットを完了へ更新する時に、進捗率=100%かつ期日=入力日を自動設定してくれる。
チケットを登録するユーザにとって、一手間減るので、便利だ。

また、migrateが不要なプラグインなので、配置するだけでOk。
ソースを見る限り、短くて分かりやすいいソースなので、たぶんどのバージョンでも動作するだろう。

こういう機能もRedmine本家に組み込まれるといいなと思う。

| | コメント (0)

Redmineのもう一つのガントチャートプラグインEasyGanttのリンク

Redmineのもう一つのガントチャートプラグインEasy Ganttのリンクをメモ。
@onozaty さんの記事やプラグインはいつもお世話になってます。

【参考1】
Easy Ganttを試してみた - Enjoy*Study

Easy Gantt - Plugins - Redmine

Redmine Gantt Plugin - Easy Redmine

【参考2】
Redmine Lychee Enterpriseシリーズの解剖part1~Redmineの本来あるべきガントチャート機能 Lychee Gantt Chart: プログラマの思索

もう一つのRedmine製パッケージ製品ANKO REDMINE: プログラマの思索

Lychee Gantt Chart Plugin | Lychee Redmine(Agileware)

ANKO Gantt chart - Plugins - Redmine

Ankosoft Redmine Jenkins SVN ALM PMS | anko_gantt_chart

Redmineで最も使いたい機能といえば、たぶん、ガントチャート機能であり、これを使って進捗管理したい場合が多いだろう。
しかし、Redmine標準のガントチャートも、イナズマ線の表示、先行・後続の表示、ガントバー上でホバー表示などの機能があるが、MSProjectっぽく使いたい人にとっては物足りない部分もある。

2016年3月現在、Redmineのガントチャートの有償プラグイン製品は少なくとも下記の3つがあるらしい。

・Lychee Gantt Chart
・ANKO Gantt chart
・Easy Gantt

そのうち、Easy Ganttには、無償製品と有償製品の2種類があるみたい。
@onozaty さんの記事を読むと、ガントチャートをお手軽に使いたい時にいいのかな?

個人的には、ガントチャートを使いたいユーザ層はマネージャや管理職なので、お金を払ってもいいと思う人が多いだろうから、現時点ではおそらく最も高機能であるLycheeGanttChartがお勧めなのかな、と思う。
クリティカルパス表示、ガントチャート画面上でガントバーの移動・修正、印刷機能などが充実しているから。

僕は、LycheeGanttChartしか知らないが、Redmineユーザにとっては、ガントチャートを強化する有償プラグインが数多く発売されれば、選択肢が増えることなので嬉しい事だろう。
他にも色々集めてみる。

| | コメント (0)

2016/03/06

RedmineのチケットデータをRedmine外部のBIツールで表現するアイデア

redmine-users-jaで、RedmineのチケットデータをRedmine外部のBIツールで表現できないか、というスレッドがあったのでメモ。

【元ネタ】
QLIKVIEWでの分析方法 - Google グループ

akipiiさんはTwitterを使っています: "RedmineのチケットデータをRedmine外部のBIツールで表現できないか、というスレッドがある。アイデアは面白い。OSSで固めるならPentahoを使うか?QLIKVIEWでの分析方法 - Google グループ https://t.co/CYG2WUaBu8"

【参考】
オープンソースBI「Pentaho」とは | Think IT(シンクイット)

データ統合/ETLを使う | Think IT(シンクイット)

レポーティング機能を使う | Think IT(シンクイット)

OLAP分析機能を使う | Think IT(シンクイット)

(引用開始)
部内でredmineを通常運用していますが、表題(QLIKVIEW)のBIツールでデータを連携する良い方法を知っている方がいましたら教えてください。
http://www.qlik.com/jp

(中略)
QLIKVIEWでは経験がないのですが、TableauのWeb Data Connector(REST APIのjsonを使用)を使って可視化をしています。
同じような手法が取れればできるのではないかと思います。
※注:http://get.tableau.com/ja-jp/trial/tableau-software.html
(引用終了)

RedmineのチケットやWikiに情報が蓄積されてくると、その情報を加工したり、集計結果を表示したくなってくる。
自分たちの運用ルールやプロセス評価の方法に応じて、独自のビューで見たくなる。
しかし、Redmineのデフォルト機能のチケット一覧だけでは物足りない。

そんな問題の解決方法としては、集計用プラグインを作る方法もあるが、Redmineの外部にBIサーバーを立てて、BIツールがチケットやWikiの情報を集計して表示する方法も考えられる。

RedmineはREST APIで、JSONやXMLのチケット情報やユーザ情報などを簡単に取得できるので、それらのデータをリアルタイムに取得して、BIツールに流し込めば良い。
あるいは、RedmineのDBからデータを直接ロードして、バッチでBIツールに流しこむ方法もあるだろう。
BIツールは、クエリやスタースキーマをGUI上でグラフィカルに作成する機能が付いていて、グラフや図や表などの多彩なビューで表示する機能も持っているから、それら機能を使った方が簡単な場合もあるだろう。

個人的には、高価なBIツールのパッケージ製品を買うよりも、オープンソースのBIツールであるPentahoのようなツールでまずは試して使ってみて、もっと機能が必要ならパッケージ製品を買うようにした方が良いだろうと思う。

【追記】
ひでPさんはTwitterを使っています: "@akipii あまり普及していないようですが、数年前にIPAが定量的プロジェクト管理ツール(EPM-X)として、RedmineとPentahoを連携させたツールを発表しています。"

定量的プロジェクト管理ツール(EPM-X):IPA 独立行政法人 情報処理推進機構

| | コメント (0)

第14回RxTStudy勉強会「Redmineの未来を考える - 機能・運用・コミュニティ」の感想 #RxTStudy

昨日の第14回RxTStudy勉強会は、たぶん過去最高の参加者で盛り上がりました。
以下、自分の感想をラフなメモ書き。
以下、長文です。

【元ネタ】
RxTStudy #14 「Redmineの未来を考える - 機能・運用・コミュニティ」 - RxTStudy~Redmineとタスクマネジメントに関する勉強会 | Doorkeeper

2016/03/5 RxTStudy #14 「Redmineの未来を考える - 機能・運用・コミュニティ」 - RxTStudy~Redmineとタスクマネジメントに関する勉強会 - Togetterまとめ

【1】@g_maedaさんの講演は、RedmineのVer3.0~3.2の新機能紹介とRedmineを作っている人々の話。
2015年の1年間で、メジャーバージョンアップ3回、取り込まれたチケット数は約190枚。
わずか数名のコミッタがオープンソースのツールを保守されているのを考えれば、かなり頑張っていると思う。

@g_maedaさんが、Ver3.2のRedmineの貢献度の調査結果を下記記事でまとめてくれている。
2016年3月現在では、事実上、JPL、まるやまさん、@g_maedaさんの3人でRedmineを保守されていると言えるのではないか。

Redmineを作っている人々 - ファーエンドテクノロジー株式会社

パネルディスカッションでも、Redmineに貢献するにはどうすればいいか、という質問があり、@g_maedaさんいわく。
Redmine.orgでは、誰でも新規ユーザ登録できるので、Twitterに改善要望を流すのではなく、Redmine本家のチケットに登録し欲しい、とのこと。
また、@g_maedaさんいわく。
2008年頃からredmine-users-jaというユーザメーリングリストがGoogleフォーラムに既にあり、今も多数の質問や要望が上がっているので、定期的にチェックされている、とのこと。

Kawabata MitsuyoshiさんはTwitterを使っています: "要望など、日本語okなRedmine Usersグループを活用しましょう。https://t.co/s3qiQ8xQXr #RxTStudy https://t.co/TYfOx3xpOV"

個人的には、日本でRedmineがこれだけ注目されているのだから、Redmineに日本人のコミッタやコントリビュータを増やしたい、と思うと同時に、自分も何らかの形で貢献できれば、と思う。

【2】@akahane92さんの講演は、昨年のredmine.tokyoの講演のリバイバル&Ver3.2への最新評価の内容。
資料の最後には、Redmineをチューニングするための設定内容が全て公開されている。
Redmineを自社サーバーで運用している人にとっては、必見の資料だろう。

Kuniharu AKAHANEさんはTwitterを使っています: "本日の発表スライド https://t.co/wDfUAH9SCI に含まれる各種チューニング設定値データをGitHub Gist に書き出しました。お役に立てば幸いです。 https://t.co/z4hr3ceKQR #RxTstudy"

Setting_paramaters_for_Redmine_Performance_Tuning.txt

上記資料の評価結果では、Rubyは最新バージョン2.2にした方がRedmineの性能は良くなる。
Redmineも最新バージョン3.3よりもバージョン2.6の方が性能は一番良いが、3.3でもそれほど性能は変わらない。
むしろ、CSVインポート・ガントチャートの日付表示・レスポンシブ対応などの最新機能を持つバージョン3.3の方が、ユーザの利便性も高いから、バージョンアップした方が価値が上がるだろう。

からあげさんはTwitterを使っています: "RxTStudyに来てます。Redmine、Rubyを2.0から2.2にするだけで30%速くなるとのこと。OOGBCも入れるのがポイント。 #RxTstudy"

また、200万枚のチケットでも、Redmineの右上の検索ボックスで全プロジェクト横断かつ全チケット検索しない運用さえ回避すれば、Redmineは性能要件も問題ない、とのこと。

数十万チケット、数百万チケットまでRedmineにデータを蓄積すれば、Redmineは単なる情報システムではなく、一つのナレッジマネジメント・システムと言えるだろう。
Redmineがそれほどの大量データを蓄積したとしても、チケットの入力・参照・検索機能はユーザの利便性にほぼ問題ない、という評価結果は心強い。

【2-1】パネルディスカッションでは、仮想環境のRedmineでは性能は本当に良いのか?という質問があったが、@akahane92さんいわく。
データ移行やバックアップ、システム移行のことを考えると、仮想環境で構築した方が運用面でメリットがある。
仮想環境なら、Redmineまるごとスナップショットを定期的に取るだけでバックアップできるから、サーバーが落ちたとしても、最悪でも自分のノートPCで仮想環境のRedmineを起動することもできる。

また、手作りのサーバーと仮想環境を比較したが、性能はむしろ仮想環境の方が良い。
なぜなら、手作りのサーバーの場合、OSやミドルウェアのセットアップを最初から行い、チューニングしなければならないが、仮想環境なら、既にチューニング&初期設定されたOSやミドルウェアをコピーすればいい。
チューニングの評価も、いくらでもインスタンスを作って試行運用すればいいから、と。

上記資料はありがたいことに「CC Attribution-NonCommercial-NoDerivs License」で公開されているので、自社の業務にRedmineを導入・評価する人は上記資料を参考データとして使えるし、社内の説得にも使えるだろう。
自分たちでわざわざ、Redmineの性能評価をしなくても、@akahane92さんの資料を添付しておけば、社内にいるRedmineに懐疑的な人でも少なくとも、性能要件については納得してもらえるだろう。

【3】僕も久しぶりにRedmine運用について講演した。

実績工数管理システムとしてRedmineを使いたいというアイデアは既にBlogにも何度も書いてきた。

Redmineは実績工数管理システムになりうるか: プログラマの思索

Redmineの合計予定工数と合計作業時間の表示機能: プログラマの思索

【3-1】実績工数管理システムとしてRedmineを使いたい背景は、3つある。

一つは、実費請求の準委任契約の案件で、作業報告書をまとめて出力する時に使いたい。
2つ目は、数多くの小粒のシステム保守を抱えている保守チームが、月末の作業報告書を出力する時に使いたい。
3つ目は、社内に常駐する協力会社のメンバーの当月の作業報告&請求書に対し、自社の勤怠システムの作業工数や作業スケジュールと比較照合する時に使いたい。

いずれも、大手SIまたは発注者の立場のプロジェクトリーダーならば、月末月初に煩雑な管理作業に追われているのではないだろうか。
そして、普通は、ExcelやAccessで皆、ずっと頑張り続けているのが現状だろう。

【3-2】そんな背景や問題意識に対し、既に作業管理・障害管理・問合せ管理に使っているRedmineを工数管理システムとして流用したい、というアイデアは普通に考えられる。
実際、Redmineで障害管理・問合せ管理に使うケースは普通だし、チケット駆動で作業管理に使って、ToDoリスト代わりに運用しているところもあるだろう。
チケット入力の運用が既に回っているならば、後は実績工数や予定工数を入力する運用ルールを追加するだけでいいはずだ。

幸いなことに、Redmineは工数管理機能もかなり強化されている。
レポート画面で実績工数の一覧を表示できるし、チケット一覧画面でも、親子チケットを使った場合、合計の実績工数・予定工数を表示できるようになった。
また、@kusukawaさんのWorkTimeプラグインを入れれば、当月のチケット一覧や手持ちのチケットが一覧表示されるし、工数入力しやすくなる。
つまり、Redmineのデフォルト機能、WorkTimeプラグインによって、工数管理できる仕組みは整っている。

WorkTime - Work Time - r-labs

【3-3】しかし、実際に運用を試してみたが上手くいっていない笑。
理由はいくつかある。

一つは、工数の二重入力が発生すること。
実は、社内に既にある勤怠管理システムにもタイムカードがわりに勤怠工数を入力する運用が既にあるために、Redmineと双方に工数を入力する手間が発生する。
しかも、Redmineと勤怠管理システムでは、工数入力の対象の粒度が違ったりするし、整合性を取るのを考えるとかなり大変になる。

また、月末に勤怠工数を整理して、一括インポートしたい、という要望があったりする。
たとえば、複数の保守案件を抱えているので、各案件の採算で赤字にならないように、実績工数を上手く配分するように付け直したい、など様々な理由がある。
しかし、Redmineでは、実績工数をCSVで一括インポートする機能はなく、REST APIで一括インポートするしか無い。

2つ目は、親子チケットの入力の運用が徹底しにくいこと。
基本はPLが親チケットに本番障害、問合せ、システム保守の定常作業を書き、各担当者が子チケットに作業を詳細化していくイメージだった。
しかし、WBSに詳細化していく、というイメージをプログラマも含めて認識を共有していないと、整合性が取れない。
特に、実績工数を付け始めると、1日の合計の実績工数がたとえば、4hや20hのように入力ミスや入力漏れが多発する。

また、実は、親チケットに見積り工数を予定工数として入力し、実績工数を集計して、生産性を分析したいという意図も実はあった。
だが、予定工数は親チケット、実績工数は子チケットに分離されるので、運用ルールを徹底しないと、データの整合性が取れない。

3つ目は、Redmineに工数の月次締めという概念がないこと。
前月の作業報告を出力したら、前月以前の実績工数は修正不可としたいのだ。
さらに、その実績工数データは勤怠管理システムのデータと一致し、整合性が取れるものでありたい。
だが、それらの運用を手作業で徹底させるのは難しい。
やはり、Redmineの外側に、勤怠管理システムへ実績工数を送信する連携機能や、双方のシステムの工数データを照合してエラー帳票を出力する機能など、何らかの仕組みが必要になると思う。

そういう中途半端な結果の報告になってしまったが、Redmineが悪いのではなく、社内の運用とRedmineの機能が上手くマッチしていないことに根本問題がある。
Redmineの機能追加よりも、業務の運用設計が課題であると思う。

【4】パネルディスカッションや懇親会で話したり、聞いたり、感じたことをメモしておく。

【4-1】JRubyはRedmineに対応しているのか?
@g_maedaさんいわく、JRubyのGemがRailsの最新バージョンに対応していないらしい。
JRubyのGemを保守する人がヤル気がないらしい。
つまり、Redmineの問題ではなく、JRubyの方に問題がある。

個人的には、Windowsに素のCRubyでRedmineを構築するのは至難の業なので、JRubyで構築したい。
何とか解決できないか?

【4-2】Redmineの全文検索機能は、PostgresSQLのマテリアライズド・ビューを使うことで解決できるか?
@akahane92さんいわく、そのアイデアでOk。
マテリアライズド・ビューを定期的にリフレッシュすれば、インデックスが最新化され、高速に検索できる。

第8回東京Redmine勉強会の感想 #redmineT: プログラマの思索

【4-3】ユーザのCSVインポート機能は追加されないのか?
昔はUser CSV Import Plugin - Plugins - Redmineというプラグインがあったが今は使えなくなった。
しかも、JOSONでユーザデータを作っても、REST APIで複数ユーザをPOSTできなかった、と言う。
なので、1件ずつJSONデータをPOSTするしかなく、面倒だ、と。

@akahane92さんわいく、RedmineのLDAP認証の連携機能を使えば、LDAPユーザを自動認識してくれるので、登録が楽になった。そちらがお勧め。

RedmineでActive Directory(LDAP)認証を使う - 旅モバ

【追記】
下記のユーザ登録一括プラグインがVer3.2でも正常動作するようだ。
マイグレーション不要なので、便利と思う。
shrkw/redmine_user_import: redmine plugin for user bulk import from csv file

あるいは、@g_maedaさんのRubyスクリプトを使って、複数ユーザをREST APIで登録することもできるようだ。

CSVファイルを読み込んでRedmineにREST API経由でユーザーを登録する

Redmineのユーザ一括インポートプラグインがVer3.2でも対応しているみたい: プログラマの思索

【4-4】AWSやAzureなどのクラウドでRedmineを運用した場合、性能要件はどうなのか?
@akahane92さんもまだやっていない。
AWSの方が安く見えるかもしれないが、CPUの消費量が大きい場合、逆にコストが増える時もある。
また、特に、海外のオフショア先でRedmineを使う場合、海外の法律がRedmineのデータに適用されると、セキュリティや法的保証が確保できるか、まだ検証できない、と。
@g_maedaさんも、その問題点は認識しています、とのこと。

【4-5】複数のRedmineで、チケットの内容を同期、参照させることはできるか?
例えば、ある会社では、社内のRedmineはオフショア先に見せたくないので、オフショアとやり取りするRedmineを別途作り、社内のRedmineのチケットの内容をコピーして、そこでやり取りしている。
その作業を楽にしたい。

パネラーからはいろんな意見が出た。
REST APIでチケットの情報を抽出してPOSTする。
社内のRedmineのチケットを更新した時に、通知メールをオフショア用のRedmineへ送り、メールによるチケットの自動登録機能を使う。

一番良いアイデアと思ったのは、カスタムフィールドのリンク型を使うことだ。
@akahane92さんいわく。
チケットのカスタムフィールドにリンク型の項目を設定し、オフショア先のRedmineのURLを記載すれば、カスタムフィールドにチケット番号を書いておくと、自動でオフショア先のRedmineチケットにリンクしてくれる。
たぶん下記の設定だろうと思う。

Feature #1358: Link_to for Custom Field - Redmine

南旺理工: Redmineのカスタムフィールドからリンクを張れる機能も今じゃ普通に標準装備な件

【4-6】小暮さんのLT資料でも、RedmineにUNCパスを使う事例が紹介されていた。
前回の@netazoneさんのLT資料で紹介されていたから、僕もUNCパスのRedmineプラグインをさっそく入れてみた。
共有ファイルサーバーの認証さえクリアできれば、IEから共有ファイルサーバーのExcel資料に直接リンクできるので非常に便利。

Redmineで共有ファイルサーバーへリンクするプラグインredmine_wiki_unc: プログラマの思索

【4-7】今回の勉強会でも参加者の半数は初参加の人が多く、東京や福岡など遠方から参加された方もいた。
そんな人達と会話してみると、Redmineユーザはプログラマの人達より、情報システム部門やプロジェクトリーダー、PMOのバックグラウンドを持つ人が多いように感じた。
さかばさんの言う通り、Redmineユーザはアーリーアダプターではなく、RubyやRailsも知らない人達が自分たちの業務に導入したい、という意識を持っている人が多いように思う。

[#redmineT] Redmineはキャズムを超える - redmine.tokyoに参加して -: ソフトウェアさかば

彼らの話を聞くと、個別では色んな背景があるけれど、社内の開発業務にRedmineを全面導入して、Redmineを基盤とした開発プロセスを構築したい、という意識を持つ人が多いように感じた。
実際、色んなプロジェクト管理ツールを比較検討した結果、Redmineが候補に上がり、その導入と運用をやりたい、そのために情報を収集したい、ということでRedmine勉強会に参加されているようだ。

だから、Redmineと他のプロジェクト管理ツールを比較検討する時に、機能面だけでなく、性能面の評価も必要だから、@akahane92さんのRedmineチューニング資料は非常に重要な資料であると言える。
他社でこれだけの規模でも性能面に問題ないという大手メーカーの事例があれば、大手のユーザ企業ほど社内で説得しやすい。

【4-7-1】だが、他にも多数のプロジェクト管理用のパッケージ製品があるのに、なぜRedmineがそれほど注目されるのだろうか?
その回答は既に、第12回のRxTStudy勉強会で陸野さんが話されている。

Redmineの理想と現実~RxTStudy #12 「ITS活用最前線~現場からの実践報告」の感想: プログラマの思索

陸野さんいわく。
SEPGとしてCMMI/PSP/TSP、アジャイルなど数多くのプロセスを導入、運用されてきた。
その過程で、現場にたくさんパッケージ製品のプロジェクト管理ツールを入れてきたが、そのたびに失敗した。

パッケージ製品のプロジェクト管理ツールは、作った会社のプロセスが織り込まれている。
しかし、作った会社のプロセスと自社のプロセスは当然違うから、ツールを使う会社の現場のプロセスにはなかなかフィットしない。
だから、現場の抵抗も強く、ツールのメリットがなかなか出ない、と。
つまり、市販のプロジェクト管理ツールに埋め込まれている開発プロセスに自社の組織が従わせられることで、組織の運用が変わってしまい、組織が混乱してしまいがちなのだ。

また、自社の開発プロセスに合うように、パッケージ製品のプロジェクト管理ツールをカスタマイズするとなると、ベンダーにカスタマイズの費用を払わなければならない。
普通は、パッケージ製品のカスタマイズ費用はかなり高額だ。
たった少しの修正だけなのに、高額の開発費用がかかり、さらに、パッケージ製品の保守料を毎年支払うのだから、相当のコストがのしかかる。

しかし、Redmineはオープンソースでありながら、ワークフローやカスタムフィールドなどが柔軟で、REST APIなどの外部接続の機能も豊富なので、Redmineの外部でカスタマイズするのが簡単だ。
すなわち、Redmineというツールに組織の運用を従わせるのではなく、組織が目指す運用ルールにRedmineをフィットさせるようにできる。

たとえば、Redmineの設定を変えたり、Redmineの外部でデータ連携機能や集計機能を作ればいいのだ。
あるいは、Redmineはオープンソースなのだから、自分たちでカスタマイズして、Redmineを自社専用のツールにしてしまえばいい。

Redmineは戦略に従う。そして、Redmineは組織に従う~システム運用フローの背後にある組織構造の影: プログラマの思索にも書いたけれど、「Redmineは(組織の)戦略に従う」「Redmineは組織(の構造や開発プロセス)に従う」考え方の方が普通なのだろうと思う。

【4-7-2】そしてもう一点重要なポイントは、日本にRedmineのエコシステムが小規模だが生まれつつあることだろう。

JAXAのスーパーコンピュータ活用課でRedmineを使ったチケット管理システムの経験論文: プログラマの思索でも、JAXAの方が書かれているように、OSSであるRedmineを利用する場合、Redmine本体の開発が活発であるか、コミュニティ活動が充実しているか、は非常に重要な基準だ。
この点では、Redmineは2015年だけでもメジャーバージョンアップが3回もあって活発であり、Redmineの書籍も過去数年で10冊近く出版されてきたし、ネット上でもRedmineのセットアップからワークフロー設定、カスタマイズ、運用方法まで情報がかなり公開されている。

このRedmineのエコシステムがあるからこそ、従来はプログラマ層しか関心を持たなかったユーザ層がプロジェクトリーダー層へ、そしてPMOや品質保証部のように会社組織の上位層に関わる人まで、Redmineに興味を抱くようになってきたのだ。
より権限を持つ人達がRedmineに興味を持つことで、Redmineの普及がより加速しやすくなるメリットはあるだろう。
Redmineのユーザが増えることにより、Redmineのカスタマイズや保守サービスを専門に請け負うベンダーが増えて、ユーザも選択肢が増えるという好循環も生まれる。

そういうRedmineのエコシステムの構築をコミュニティに関わるユーザがどのように認識し、発展させていくか、と言うのが今後の課題。

【他の資料はコチラ】

| | コメント (0)

« 2016年2月 | トップページ | 2016年4月 »