[Ruby] Backlog の課題を擬似的にインポートする
先人のコードを参考に目的はすぐに達成できたのですが、いろいろいじくりまわしながら ruby の勉強をしてました。
忘れないうちにひとまずまとめておきます。
[markdown]
> * [Backlog API に ruby スクリプトから接続する | deadwood](https://www.d-wood.com/blog/2014/05/12_6190.html)
## きっかけ
* 他のプロジェクトの課題を、別のプロジェクトにインポートできないか。
* 課題の検索画面でダウンロードできる .csv ファイルを登録できればよい。
どうやらインポート機能は無いよう。
## API と CSV を確認
無料版をほぼ一人で使ったことしかないので、そういう用途を満たせるか確認してみる。
### API
こんな手順で API を使えば、疑似インポートできるのではないか。
1. [backlog.createIssue](http://www.backlog.jp/api/method4_1.html) … 課題を作成
2. [backlog.updateIssue](http://www.backlog.jp/api/method4_2.html) … 完了理由とコメントを追加
3. [backlog.addComment](http://www.backlog.jp/api/method_addComment.html) … さらにコメントがあれば追加
4. [backlog.switchStatus](http://www.backlog.jp/api/method4_3.html) … 状態(完了ステータス)を変更
### CSV
API Method と CSV の項目を照らし合わせるとカバーできそう。
* 必須項目でないものを () で記載。
* 対応しない項目は取り消し線を書き加えた。
| | API Method | createIssue | updateIssue | addComment | switchStatus |
|—-|————|—————|—————-|————|————–|
| 1 | ID | | | | |
| 2 | プロジェクトID | projectId | | | |
| 3 | プロジェクト名 | | | | |
| 4 | キーID | | | | |
| 5 | キー | | key | key | key |
| 6 | 種別ID | | | | |
| 7 | 種別 | (issueType) | | | |
| 8 | カテゴリーID | | | | |
| 9 | カテゴリー名 | (component) | | | |
| 10 | バージョンID | | | | |
| 11 | バージョン | (version) | | | |
| 12 | 件名 | summary | | | |
| 13 | 詳細 | (description) | | | |
| 14 | 状態ID | | | | statusId |
| 15 | 状態 | | | | |
| 16 | 優先度ID | | | | |
| 17 | 優先度 | (priority) | | | |
| 18 | マイルストーンID | | | | |
| 19 | マイルストーン | (milestone) | | | |
| 20 | 完了理由ID | | (resolutionId) | | |
| 21 | 完了理由 | | | | |
| 22 | 担当者ID | (assignerId) | | | |
| 23 | 担当者 | | | | |
| 24 | 作成者ID | | | | |
| 25 | 作成者 | | | | |
| 26 | 作成日 | | | | |
| 27 | 期限日 | (due_date) | | | |
| 28 | 更新者ID | | | | |
| 29 | 更新者 | | | | |
| 30 | 更新日 | | | | |
| 31 | 添付 | | | | |
| 32 | 共有 | | | | |
| 33 | コメント1 | | (comment) | | |
| 34 | コメント2 | | | content ※ | |
※ 以降、コメントがあれば行が増える。
### 補足
一工夫いりそうなところ。
* projectId が、管理画面からすぐに把握できないのでキーから取得する。
* due_date は、取り得る値 `””` を API を通しては受け付けなかったので処理を分ける。
* 課題種別、バージョン、カテゴリー名、マイルストーンは、インポート先に存在しないものを事前に作成しておく。
* [backlog.addIssueType](http://www.backlog.jp/api/method_addIssueType.html) で作成。
* [backlog.addComponent](http://www.backlog.jp/api/method_addComponent.html) で作成。複数選択される。
* [backlog.addVersion](http://www.backlog.jp/api/method_addVersion.html) で作成。複数選択される。
* Milestone は、backlog.addVersion であわせて作成される。
* assignerId は、存在しない担当者の作成まで含めると複雑になりすぎるのでやめる。
## コード
というわけでまとめました。
> * [DriftwoodJP/Backlog-Issue-Importer](https://github.com/DriftwoodJP/Backlog-Issue-Importer)
## 課題
他にいろいろやらなければならない・力尽きた・まとめないと光の速さで忘れてしまうので、今後やる(かもしれない)ことをとりあえず書いておく。
* テストがないので勉強してつける。
* config ファイルの持たせ方と読み込み方がよく分からないので他を参考に勉強する。
* assignerId が存在すれば、登録する機能があった方が便利かな。
* NKF.guess では、Shift_JIS の亜種、CP932 が判別できないのか。
* 件名が全角空白だけのデータがありえて、UTF-8内部変換で空になってエラー。
* バージョン、カテゴリー名、マイルストーンの複数選択時の登録に対応していない。
[/markdown]