SlideShare a Scribd company logo
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
1
Redmine本家コピー
+投票サイト作成
(Python-Redmine利用事例)
2018/11/10
redmine.tokyo 第15回勉強会
@y503unavailable
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
2
Agenda
• 自己紹介
1. 背景/目的
2. 作ってみた
3. レシピ(作成手順)
4. 何事も思い通りにはいかない
5. まとめ
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
3
自己紹介
名前:奈良 裕記 ( y503unavailable <- httpエラーコード503)
• 製造業で製品開発部門のadminやってます。
– 部門サーバ、LAN、PC、全般の構築/運用/子守
(全社単位の情報システムとは別、部門所属)
• Redmine歴
– 2009年から利用
– 部内SaaSの積りで各種運用中
– Redmine.Tokyoには第4回から参加、現在スタッフ
– サーバ統合事例@第7回勉強会
Redmineカスタムフィールド表示改善@第10回勉強会
UnofficlaRedmineCookingの紹介@第11回勉強会
UnofficlaRedmineCookingの紹介とRedmine本家への貢献@第12回勉強会
UnofficialCookingの1年-闇鍋とデモサイトへの発展@第13回勉強会
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
4
1.背景/要求レベルは高度化する
• 利用範囲増加→要求レベル上昇、複雑化
– Redmine内のデータの活用、作業の効率化
– 例:複数Redmineサーバのデータを集計/連携
• 標準画面/Pluginでは実現困難に
(固有ロジック組込み困難)
→結果的にExcelなどの途中処理/作業手間が発生。
• 導入当初:通常の作業は Redmine本体/Pluginで十分可能
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
5
各自の機能追加変更への立場
• Redmine管理者
– 対応負荷増→管理者がボトルネック化も
– 部門間の重要度判断差異、他人事
– (SEC/動作リスク面)Redmine内触らせたくない
• エンドユーザ
– 管理者にいちいち頼む必要
→利用モチベーション低下
→結果的に非効率な対応実施も
※各現場の業務組織/Redmine運用体制/人間関係に強く依存
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
6
必要なこと
• Redmine自体に手を入れず、ユーザ自身が外から
データを効率的に処理可能にする。
• 汎用言語で業務ロジックを利用可能にする。
• RESTAPIでどこまで出来るか、実際にやってみる。
• 必要なことは、最終的な利用価値を上げること
– ユーザを巻き込み、適切な環境を作り維持する
– 管理者に依存する作業を減らす。
(管理者のボトルネック回避、ユーザのオーナシップ)
※各現場の業務組織/Redmine運用体制/人間関係に強く依存
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
7
2.作ってみた
• Python-Redmineを利用し、
複数Redmineからデータコピー
(Redmine本家とUnofficialCooking(RedmineTokyo内情報蓄積サイト))
• Python以外に追加した機能
– Vote Pluginを導入
• ユーザのVoteで順位変動
– Tag Pluginを導入
• カテゴリと違い、複数項目選択可
– カテゴリのサブプロジェクト継承機能
• 複数PJのデータを、単独/集約し、単一カテゴリ分類可
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
8
できたもの
• 画面紹介
– チケット画面、一覧画面、タグ選択表示
• 詳細はデモサイト参照 (百聞は一見に如かず)
– http://150.95.132.208/redmine
– ConnpassのID/受付番号でログイン可能
# 開催直近1週間に登録した人は未登録、
# id= redmine pass=tokyo でもログイン可能
– 11月中は稼働予定
• ソースはコメント含み200行未満
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
9
チケット画面(投票/タグ)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
10
Redmineチケット一覧画面(親PJ)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
11
タグ選択時の表示
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
12
3.レシピ(作成手順)
1. Redmine本体、Plugin導入
2. トラッカー、PJ階層、Ver/カテゴリ定義
3. Python-Redmine環境、スクリプト作成、
実行
4. 参加者登録、アクセス権設定、カスタム
クエリ作成、カテゴリ/タグ設定
(UnofficialCooking分)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
13
Redmineサイト作成、事前準備-1
• RedmineをVPS上にAnsibleでインストール
– https://github.com/y503unavailable/redmine-centos-ansible
– https://github.com/y503unavailable/redmine
– サブプロジェクトのカテゴリ継承機能(標準
外)利用のため、改造版3.4利用(本家5358)
• Vote pluginとTag pluginの導入
– https://github.com/ojde/redmine-vote_on_issues-plugin
– https://github.com/ixti/redmine_tags
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
14
Redmineサイト作成、事前準備-2
• Voteトラッカーの準備
– 各項目をカスタムフィールドとして定義
– トラッカー作成、Role設定
• プロジェクト階層作成
– Redmine本家分とUnofficial分のサブPJ作成
• versionとissue_categoriesを設定
– Redmine本家とID合わせるため、今回はRESTではな
くExcelでSQL作成し設定
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
15
Python-Redmine実行環境
• Redmineとは別のVPSに入れた
• Python-Redmineをインストール
– https://python-redmine.com/
• 転送用スクリプトを作成し実行
– 開発元と下記参考ページのコピペで開始。
https://qiita.com/mima_ita/items/1a939db423d8ee295c85
– 合計200行未満、 Pythonは実質初めて。
Rubyより楽に馴染めた。(主観)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
16
Redmineサイト,Python転送後
• 勉強会参加者のID登録、グループ定義、PJメンバ
設定
– ユーザID/PASSは、connpassのID/受付番号利用
– ユーザ登録とグループ一括設定はツール利用
• https://yoshinorin.net/2017/04/16/create-redmine-user-import-from-csv/
• https://github.com/two-pack/redmine_auto_assign_group/wiki/Usage
• カスタムクエリ作成
– vote,本家plus1,comment数,カテゴリ,タグ
• UnofficialCooking部分のカテゴリとタグ設定
– カテゴリ分類は、Redmine本家に合わせた。
– 表示内容デモのため、一部を手動設定(結構大変)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
17
4.何事も思い通りには行かないもの
• チケット転送時のトラブル
– 通信エラー対応
– 優先度の内部ID範囲変更
– AWS(Lightsail)のCPU性能制限
– 対象バージョン は一覧にありません
• 多少は苦労しないと身に付かない。
• (初めてのPythonなので、デバッグは略)
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
18
通信エラー対応
• 数千件転送で通信エラー発生
• チケット情報読込中に発生。
• 定期的にSleep入れたが改善されず
• 対策
• RESTで転送済最終チケット番号+1を指定し再開-不可
– 失敗例 http://www.redmine.org/issues.xml?status_id=*&sort=id&id=>%3D100
• 転送済件数+1から再実行処理を入れて対応
– 途中チケットの増減あると、重複/取りこぼし可能性有
– エラー処理が本筋だが、性能問題もあるので
raise exceptions.ServerError
redminelib.exceptions.ServerError:
Redmine returned internal error, check Redmine logs for details
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
19
優先度の内部ID範囲変更
• Redmine2.1にて、優先度の内部IDが変更
された(3~7 → 1~5)
– http://blog.redmine.jp/articles/issue-priority-css-class-changed/
– 旧IDの6(urgent)を転送した時に、有効範囲外
としてエラー発生する。
• 対策
issue.priority_id = issue_org.priority.id -2
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
20
AWS(Lightsail)のCPU性能制限
• 今回はPython実行環境用にVPS(AWS LightSail)を利用した。
• LightSail(1GB) は、高負荷状態が長時間継
続するとCPU性能を制限される(仕様)
– 今回の連続転送処理では、1時間半の連続実
行で、25件/分→5件/分に落とされた。
• 対策→1時間半でインスタンス再作成
– 行儀悪いが数回なのでご勘弁。。でもCLIで自動化したいところ
• CPU性能制限参考→ https://ryuzoji.com/archives/1450
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
21
「対象バージョン は一覧にありません」
• Redmine内部の整合性チェック違反
– チケットの対象バージョンに、既に完了した
バージョンを設定するのはおかしい
(画面上では選択肢に出てこない)
•
対策:バージョンを未完了に戻す。
– sqlで versionのstatusをopenに変更
raise exceptions.ValidationError(', '.join(': '.join(e) if isinstance(e, list) else e for e in errors))
redminelib.exceptions.ValidationError: 対象バージョン は一覧にありません
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
22
5.まとめ
python-redmineによりできたこと
• Redmine外からPythonでRedmineを操作可能
– Redmine内部の変更不要(plugin,DB,Rails,Patch)
– 落とし穴はもちろんある。
• 複雑な処理をユーザ側で容易に実行できる。
– 例:複数Redmine環境の集計、データ連携
– Redmine管理者の手間削減、ユーザ満足度向上、迅速
• Python以外にも多数言語用Redmineライブラリ
– https://redmine.tokyo/issues/699
• 道具と事例を増やして楽しましょう
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
23
参考情報
• Python-redmine関連
– https://python-redmine.com/
– https://qiita.com/mima_ita/items/1a939db423d8ee295c85
• Unofficial Redmine Cooking (カスタマイズ情報用PJ)
– Unofficial Redmine Cookingの紹介
– https://redmine.tokyo/projects/unofficialcooking
–
Redmine以外でのデータ表示/操作例
– カテゴリをサブプロジェクトで継承利用
– タグ機能を追加
– チケットの投票機能
• Redmine,Ansible カスタマイズ関連コード
– https://github.com/y503unavailable/redmine-centos-ansible
– https://github.com/histudy/ansible-role-redmine
– https://github.com/y503unavailable/redmine
• Redmine.Tokyo 過去講演一覧-プラグイン・カスタマイズ
• Redmine Advent Calendar2018 (旬の情報として)
– https://adventar.org/calendars/3352
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
24
御清聴ありがとうございました
• 各自のRedmine運用に、多少なりとも役に立てば幸いで
す。
• Redmineはオープンソースソフトです。
– 協力して育成&利用していきましょう。
ユーザ会はそのための場所です。
• ご意見、内容指摘の連絡先
redmine.Tokyo UnofficialCooking
y503unavailable@ twitter, discord
• ところで、ソース要りましたっけ..
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
25
UnofficialCookingのご紹介
• 第12回勉強会発表内容を抜粋し添付します。
– (本発表内容に関連し、利用者に有用と判断し
たため)
• https://www.slideshare.net/y503unavailable/unofficialcookingredmine
• https://redmine.tokyo/projects/unofficialcooking
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
26
1.Redmineは単に無料で使えるソフト?
無料で使える、だけじゃない
OSS(OpenSourceSoftware)だから
・改造して利用する自由
(ソース改造、プラグイン利用、、)
・パッチ提案する自由
(取り込まれれば将来のVerUp追随不要)
・共同で育てて利用していくソフトウェア
Redmine本家とユーザ会はそのための場所
・リーマンの第3法則
システムの進化はフィードバックプロセスにより決まる
http://forza.cocolog-nifty.com/blog/2012/08/post-9619.html
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
27
2.標準機能から変更したい
同じ悩みを持つのは、
自分だけじゃない。
・本家の残チケット検索-4500件、Groonga無し
・用途もニーズもユーザレベルも千差万別
・改造にはスキルと内部構造の知識が必要
ユーザ会で情報共有!
もっと効率的に利用
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
28
情報共有場所を作成し運用中
Unofficial Redmine Cooking
https://redmine.tokyo/projects/unofficialcooking
・Redmine.TokyoのサブPJ
・チケットベースで情報共有
・Since 2016/11
名前:多少のアングラ感と親しみ
を持って貰えれば。
UndocumentedとかCracking
のレベルではありません。
・1年でチケット100件超えた。
・参加者もっと増やしたい。
・未解決案件有-識者アドバイス願
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
29
Unofficial Redmine Cooking守備範囲
オープンソースだから可能なこと
29
下記対応により出来ること
・Redmineソース改造
・Redmine本家未取込パッチ
・プラグイン活用
・DB直接操作
・他ツールとの連携
機能要望(解決方法不明)
要は
標準外
2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例)
@y503unavailable
30
運用補足
・記入内容は、概要紹介+リンクで可
項目:現象/要望、解決策、対応状況、補足
・記入手順
https://redmine.tokyo/projects/unofficialcooking/wiki
テンプレ埋めてください。
・要望/質問の回答保証はありません。
・正確性の保証もありません。
・Redmine.Tokyoのユーザ登録要
名前は実名で無くとも可
手動登録なので登録完了までお待ちください。

More Related Content

PDF
Redmineプラグインのテスト自動化を頑張っている話
PDF
Redmineの情報を自分好みに見える化した話
PDF
レコメンドアルゴリズムの基本と周辺知識と実装方法
PDF
はじめる! Redmine (2021年版)
PDF
チケット駆動開発をパターン言語で読み解く~「成功するプロジェクトのための開発基盤と手法」
PDF
デザイナのためのGit入門
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
PDF
Djangoフレームワークのユーザーモデルと認証
Redmineプラグインのテスト自動化を頑張っている話
Redmineの情報を自分好みに見える化した話
レコメンドアルゴリズムの基本と周辺知識と実装方法
はじめる! Redmine (2021年版)
チケット駆動開発をパターン言語で読み解く~「成功するプロジェクトのための開発基盤と手法」
デザイナのためのGit入門
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Djangoフレームワークのユーザーモデルと認証

What's hot (20)

PPTX
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
PDF
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
PPTX
Redmineでメトリクスを見える化する方法
PDF
Git flowの活用事例
PDF
RedmineのFAQとアンチパターン集
PPTX
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
PPTX
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
PDF
ディープラーニングのフレームワークと特許戦争
PPTX
データ分析基盤を支えるエンジニアリング
PPTX
え!?データがオンプレにあるけどPower BI で BI したいの?
PDF
うちのRedmineの使い方(2)
PDF
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
PDF
とあるメーカーのRedmine活用事例
PDF
Redmineで地理空間情報を扱う、Redmine GTT (Geo-Task-Tracker) pluginの紹介
PDF
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
PPTX
開発環境の認証を改善して Redmineを社内標準にした話
PDF
俺のインセプションデッキ【Remaster版】
PPTX
グラフデータベース入門
PDF
データ基盤グループを支えるチームビルディング
PDF
Redmineとgitの 連携利用事例
【DL輪読会】Llama 2: Open Foundation and Fine-Tuned Chat Models
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
Redmineでメトリクスを見える化する方法
Git flowの活用事例
RedmineのFAQとアンチパターン集
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
ディープラーニングのフレームワークと特許戦争
データ分析基盤を支えるエンジニアリング
え!?データがオンプレにあるけどPower BI で BI したいの?
うちのRedmineの使い方(2)
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
とあるメーカーのRedmine活用事例
Redmineで地理空間情報を扱う、Redmine GTT (Geo-Task-Tracker) pluginの紹介
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
開発環境の認証を改善して Redmineを社内標準にした話
俺のインセプションデッキ【Remaster版】
グラフデータベース入門
データ基盤グループを支えるチームビルディング
Redmineとgitの 連携利用事例
Ad

Similar to Redmine本家コピー+投票サイト作成(Python-Redmine利用事例) (20)

PPTX
ロボットシステム学2015年第8回
PDF
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
PDF
財布にやさしいRを使ったデータマイニング
PPTX
Redmineサーバ統合事例
PPTX
Unofficial Redmine Cookingの紹介
PDF
Runtime c++editing
PDF
Voicepic@FukuiMASeminar
PPTX
ロボットシステム学2015年第7回
PDF
[db tech showcase Tokyo 2018] #dbts2018 #E37 『Attunity Replicateが変えた Oracle D...
PDF
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
PDF
Kamonを理解する
PPT
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
PPTX
複数Redmine環境におけるユーザ管理の効率化
PDF
Aerospike deep dive LDTs
PDF
KLab Social Game Platform ~Symfony1.4活用事例~
PPTX
C#/.NETがやっていること 第二版
PDF
PL/Pythonで独自の集約関数を作ってみる
PPTX
Unofficial Redmine Cooking & unofficial-redmine.org 紹介 redmine.tokyo#21
PDF
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
PPT
Zabbix study5lt
ロボットシステム学2015年第8回
Unofficial redmine cooking , unofficial-redmine.org 直近カスタマイズ事例
財布にやさしいRを使ったデータマイニング
Redmineサーバ統合事例
Unofficial Redmine Cookingの紹介
Runtime c++editing
Voicepic@FukuiMASeminar
ロボットシステム学2015年第7回
[db tech showcase Tokyo 2018] #dbts2018 #E37 『Attunity Replicateが変えた Oracle D...
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Kamonを理解する
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
複数Redmine環境におけるユーザ管理の効率化
Aerospike deep dive LDTs
KLab Social Game Platform ~Symfony1.4活用事例~
C#/.NETがやっていること 第二版
PL/Pythonで独自の集約関数を作ってみる
Unofficial Redmine Cooking & unofficial-redmine.org 紹介 redmine.tokyo#21
Complex Event Processing on Ruby, Fluentd and Norikra #rubykaigi
Zabbix study5lt
Ad

Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)

  • 1. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 1 Redmine本家コピー +投票サイト作成 (Python-Redmine利用事例) 2018/11/10 redmine.tokyo 第15回勉強会 @y503unavailable
  • 2. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 2 Agenda • 自己紹介 1. 背景/目的 2. 作ってみた 3. レシピ(作成手順) 4. 何事も思い通りにはいかない 5. まとめ
  • 3. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 3 自己紹介 名前:奈良 裕記 ( y503unavailable <- httpエラーコード503) • 製造業で製品開発部門のadminやってます。 – 部門サーバ、LAN、PC、全般の構築/運用/子守 (全社単位の情報システムとは別、部門所属) • Redmine歴 – 2009年から利用 – 部内SaaSの積りで各種運用中 – Redmine.Tokyoには第4回から参加、現在スタッフ – サーバ統合事例@第7回勉強会 Redmineカスタムフィールド表示改善@第10回勉強会 UnofficlaRedmineCookingの紹介@第11回勉強会 UnofficlaRedmineCookingの紹介とRedmine本家への貢献@第12回勉強会 UnofficialCookingの1年-闇鍋とデモサイトへの発展@第13回勉強会
  • 4. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 4 1.背景/要求レベルは高度化する • 利用範囲増加→要求レベル上昇、複雑化 – Redmine内のデータの活用、作業の効率化 – 例:複数Redmineサーバのデータを集計/連携 • 標準画面/Pluginでは実現困難に (固有ロジック組込み困難) →結果的にExcelなどの途中処理/作業手間が発生。 • 導入当初:通常の作業は Redmine本体/Pluginで十分可能
  • 5. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 5 各自の機能追加変更への立場 • Redmine管理者 – 対応負荷増→管理者がボトルネック化も – 部門間の重要度判断差異、他人事 – (SEC/動作リスク面)Redmine内触らせたくない • エンドユーザ – 管理者にいちいち頼む必要 →利用モチベーション低下 →結果的に非効率な対応実施も ※各現場の業務組織/Redmine運用体制/人間関係に強く依存
  • 6. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 6 必要なこと • Redmine自体に手を入れず、ユーザ自身が外から データを効率的に処理可能にする。 • 汎用言語で業務ロジックを利用可能にする。 • RESTAPIでどこまで出来るか、実際にやってみる。 • 必要なことは、最終的な利用価値を上げること – ユーザを巻き込み、適切な環境を作り維持する – 管理者に依存する作業を減らす。 (管理者のボトルネック回避、ユーザのオーナシップ) ※各現場の業務組織/Redmine運用体制/人間関係に強く依存
  • 7. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 7 2.作ってみた • Python-Redmineを利用し、 複数Redmineからデータコピー (Redmine本家とUnofficialCooking(RedmineTokyo内情報蓄積サイト)) • Python以外に追加した機能 – Vote Pluginを導入 • ユーザのVoteで順位変動 – Tag Pluginを導入 • カテゴリと違い、複数項目選択可 – カテゴリのサブプロジェクト継承機能 • 複数PJのデータを、単独/集約し、単一カテゴリ分類可
  • 8. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 8 できたもの • 画面紹介 – チケット画面、一覧画面、タグ選択表示 • 詳細はデモサイト参照 (百聞は一見に如かず) – http://150.95.132.208/redmine – ConnpassのID/受付番号でログイン可能 # 開催直近1週間に登録した人は未登録、 # id= redmine pass=tokyo でもログイン可能 – 11月中は稼働予定 • ソースはコメント含み200行未満
  • 9. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 9 チケット画面(投票/タグ)
  • 10. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 10 Redmineチケット一覧画面(親PJ)
  • 11. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 11 タグ選択時の表示
  • 12. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 12 3.レシピ(作成手順) 1. Redmine本体、Plugin導入 2. トラッカー、PJ階層、Ver/カテゴリ定義 3. Python-Redmine環境、スクリプト作成、 実行 4. 参加者登録、アクセス権設定、カスタム クエリ作成、カテゴリ/タグ設定 (UnofficialCooking分)
  • 13. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 13 Redmineサイト作成、事前準備-1 • RedmineをVPS上にAnsibleでインストール – https://github.com/y503unavailable/redmine-centos-ansible – https://github.com/y503unavailable/redmine – サブプロジェクトのカテゴリ継承機能(標準 外)利用のため、改造版3.4利用(本家5358) • Vote pluginとTag pluginの導入 – https://github.com/ojde/redmine-vote_on_issues-plugin – https://github.com/ixti/redmine_tags
  • 14. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 14 Redmineサイト作成、事前準備-2 • Voteトラッカーの準備 – 各項目をカスタムフィールドとして定義 – トラッカー作成、Role設定 • プロジェクト階層作成 – Redmine本家分とUnofficial分のサブPJ作成 • versionとissue_categoriesを設定 – Redmine本家とID合わせるため、今回はRESTではな くExcelでSQL作成し設定
  • 15. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 15 Python-Redmine実行環境 • Redmineとは別のVPSに入れた • Python-Redmineをインストール – https://python-redmine.com/ • 転送用スクリプトを作成し実行 – 開発元と下記参考ページのコピペで開始。 https://qiita.com/mima_ita/items/1a939db423d8ee295c85 – 合計200行未満、 Pythonは実質初めて。 Rubyより楽に馴染めた。(主観)
  • 16. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 16 Redmineサイト,Python転送後 • 勉強会参加者のID登録、グループ定義、PJメンバ 設定 – ユーザID/PASSは、connpassのID/受付番号利用 – ユーザ登録とグループ一括設定はツール利用 • https://yoshinorin.net/2017/04/16/create-redmine-user-import-from-csv/ • https://github.com/two-pack/redmine_auto_assign_group/wiki/Usage • カスタムクエリ作成 – vote,本家plus1,comment数,カテゴリ,タグ • UnofficialCooking部分のカテゴリとタグ設定 – カテゴリ分類は、Redmine本家に合わせた。 – 表示内容デモのため、一部を手動設定(結構大変)
  • 17. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 17 4.何事も思い通りには行かないもの • チケット転送時のトラブル – 通信エラー対応 – 優先度の内部ID範囲変更 – AWS(Lightsail)のCPU性能制限 – 対象バージョン は一覧にありません • 多少は苦労しないと身に付かない。 • (初めてのPythonなので、デバッグは略)
  • 18. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 18 通信エラー対応 • 数千件転送で通信エラー発生 • チケット情報読込中に発生。 • 定期的にSleep入れたが改善されず • 対策 • RESTで転送済最終チケット番号+1を指定し再開-不可 – 失敗例 http://www.redmine.org/issues.xml?status_id=*&sort=id&id=>%3D100 • 転送済件数+1から再実行処理を入れて対応 – 途中チケットの増減あると、重複/取りこぼし可能性有 – エラー処理が本筋だが、性能問題もあるので raise exceptions.ServerError redminelib.exceptions.ServerError: Redmine returned internal error, check Redmine logs for details
  • 19. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 19 優先度の内部ID範囲変更 • Redmine2.1にて、優先度の内部IDが変更 された(3~7 → 1~5) – http://blog.redmine.jp/articles/issue-priority-css-class-changed/ – 旧IDの6(urgent)を転送した時に、有効範囲外 としてエラー発生する。 • 対策 issue.priority_id = issue_org.priority.id -2
  • 20. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 20 AWS(Lightsail)のCPU性能制限 • 今回はPython実行環境用にVPS(AWS LightSail)を利用した。 • LightSail(1GB) は、高負荷状態が長時間継 続するとCPU性能を制限される(仕様) – 今回の連続転送処理では、1時間半の連続実 行で、25件/分→5件/分に落とされた。 • 対策→1時間半でインスタンス再作成 – 行儀悪いが数回なのでご勘弁。。でもCLIで自動化したいところ • CPU性能制限参考→ https://ryuzoji.com/archives/1450
  • 21. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 21 「対象バージョン は一覧にありません」 • Redmine内部の整合性チェック違反 – チケットの対象バージョンに、既に完了した バージョンを設定するのはおかしい (画面上では選択肢に出てこない) • 対策:バージョンを未完了に戻す。 – sqlで versionのstatusをopenに変更 raise exceptions.ValidationError(', '.join(': '.join(e) if isinstance(e, list) else e for e in errors)) redminelib.exceptions.ValidationError: 対象バージョン は一覧にありません
  • 22. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 22 5.まとめ python-redmineによりできたこと • Redmine外からPythonでRedmineを操作可能 – Redmine内部の変更不要(plugin,DB,Rails,Patch) – 落とし穴はもちろんある。 • 複雑な処理をユーザ側で容易に実行できる。 – 例:複数Redmine環境の集計、データ連携 – Redmine管理者の手間削減、ユーザ満足度向上、迅速 • Python以外にも多数言語用Redmineライブラリ – https://redmine.tokyo/issues/699 • 道具と事例を増やして楽しましょう
  • 23. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 23 参考情報 • Python-redmine関連 – https://python-redmine.com/ – https://qiita.com/mima_ita/items/1a939db423d8ee295c85 • Unofficial Redmine Cooking (カスタマイズ情報用PJ) – Unofficial Redmine Cookingの紹介 – https://redmine.tokyo/projects/unofficialcooking – Redmine以外でのデータ表示/操作例 – カテゴリをサブプロジェクトで継承利用 – タグ機能を追加 – チケットの投票機能 • Redmine,Ansible カスタマイズ関連コード – https://github.com/y503unavailable/redmine-centos-ansible – https://github.com/histudy/ansible-role-redmine – https://github.com/y503unavailable/redmine • Redmine.Tokyo 過去講演一覧-プラグイン・カスタマイズ • Redmine Advent Calendar2018 (旬の情報として) – https://adventar.org/calendars/3352
  • 24. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 24 御清聴ありがとうございました • 各自のRedmine運用に、多少なりとも役に立てば幸いで す。 • Redmineはオープンソースソフトです。 – 協力して育成&利用していきましょう。 ユーザ会はそのための場所です。 • ご意見、内容指摘の連絡先 redmine.Tokyo UnofficialCooking y503unavailable@ twitter, discord • ところで、ソース要りましたっけ..
  • 25. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 25 UnofficialCookingのご紹介 • 第12回勉強会発表内容を抜粋し添付します。 – (本発表内容に関連し、利用者に有用と判断し たため) • https://www.slideshare.net/y503unavailable/unofficialcookingredmine • https://redmine.tokyo/projects/unofficialcooking
  • 26. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 26 1.Redmineは単に無料で使えるソフト? 無料で使える、だけじゃない OSS(OpenSourceSoftware)だから ・改造して利用する自由 (ソース改造、プラグイン利用、、) ・パッチ提案する自由 (取り込まれれば将来のVerUp追随不要) ・共同で育てて利用していくソフトウェア Redmine本家とユーザ会はそのための場所 ・リーマンの第3法則 システムの進化はフィードバックプロセスにより決まる http://forza.cocolog-nifty.com/blog/2012/08/post-9619.html
  • 27. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 27 2.標準機能から変更したい 同じ悩みを持つのは、 自分だけじゃない。 ・本家の残チケット検索-4500件、Groonga無し ・用途もニーズもユーザレベルも千差万別 ・改造にはスキルと内部構造の知識が必要 ユーザ会で情報共有! もっと効率的に利用
  • 28. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 28 情報共有場所を作成し運用中 Unofficial Redmine Cooking https://redmine.tokyo/projects/unofficialcooking ・Redmine.TokyoのサブPJ ・チケットベースで情報共有 ・Since 2016/11 名前:多少のアングラ感と親しみ を持って貰えれば。 UndocumentedとかCracking のレベルではありません。 ・1年でチケット100件超えた。 ・参加者もっと増やしたい。 ・未解決案件有-識者アドバイス願
  • 29. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 29 Unofficial Redmine Cooking守備範囲 オープンソースだから可能なこと 29 下記対応により出来ること ・Redmineソース改造 ・Redmine本家未取込パッチ ・プラグイン活用 ・DB直接操作 ・他ツールとの連携 機能要望(解決方法不明) 要は 標準外
  • 30. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 30 運用補足 ・記入内容は、概要紹介+リンクで可 項目:現象/要望、解決策、対応状況、補足 ・記入手順 https://redmine.tokyo/projects/unofficialcooking/wiki テンプレ埋めてください。 ・要望/質問の回答保証はありません。 ・正確性の保証もありません。 ・Redmine.Tokyoのユーザ登録要 名前は実名で無くとも可 手動登録なので登録完了までお待ちください。