# Backlog pj
* [クラス図](https://app.diagrams.net/#G1h6j-GZjpse0f9TuyyiJIX3Aq0d-twY3O)
* [システム仕様書](https://n-contents.backlog.com/alias/wiki/571203)
* スケジュール
* 〜10/10(日):Backlog完了
* TODO:北浦さん validation
* 〜10/17(日):Module-Backlog完了・AWSデプロイ
* DBの進捗による
* AWS,terraform
---
# Backlog pj #11mtg
| 日付 | 2021/10/23(土) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 18:00 |
| 終了時刻 | 18:15 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 議題
### ポート番号
確認


### スケジュール
* 日程調整,コーディング(夜)
## 進捗報告
### 大鐘(担当:User,Project,Team,File,他)
* Dockerfileの作成 `ogane/docker`
* docker-compose build,upで実行
* .sshフォルダに秘密鍵をいれておき,Backlogをgit clone&pip install
* PR出しました
* Fileの作成 `ogane-file`
* PR出しておきました
* ogane/dockerを先にマージしたいです
* Backlogに追加
* /users/myself
* /users/:userid/icon
* Module-Backlog側で,実装中
### 北浦(担当:Issue,Webhook)
* PRの確認を行いました
* Dockerについてはこのあと確認します
* Issueの実装を行っていますが、少し難航しています
* パラメータの量が多く、実装に自信がないので1つだけ作成した状態でPRを提出したいと考えています。
### 平野(担当:Wiki)
* 自分のタスクは余り進められていません
---
# Backlog pj #10mtg
| 日付 | 2021/10/09(土) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 13:00 |
| 終了時刻 | 13:25 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 議題
### APIKey
* リクエストボディにAPIKeyを含めて,APIKeyを含めた場合はそのアカウントで課題やWikiの追加
* 良さそう,いろんな人が使える
* Module-Backlogでの実装に追加
### スケジュール
* 〜10/10(日):Backlog完了
* TODO:北浦さん validation
* 〜10/17(日):Module-Backlog完了・AWSデプロイ
* DBの進捗による
* AWS,terraform
## 進捗報告
### 大鐘(担当:User,Project,Team,File,他)
* BacklogのPR対応
* リクエストボディを
* Module-Backlog開発
* User,Project,Team
* Docstringを追加中
* File
* POSTに,uploadpath,downloadpath,mkdir,cp,mv
* リクエストボディのuploadpathを指定→アップロード処理
* 
* TODO:openapi
* CT_57(問い合わせ管理)に,infok(コンテンツ本部全体の問い合わせmail)の課題管理も含まれることになりました
* https://2019-9ra2094.slack.com/archives/C017P23SMPX/p1633691624055200
### 北浦(担当:Issue,Webhook)
* Backlog validation部分を修正
* ogane branch先にmerge
* 課題のカスタム属性が特殊→objectにした
### 平野(担当:Wiki)
* Backlogの修正とPR
---
# Backlog pj #9mtg
| 日付 | 2021/09/26(日) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 22:00 |
| 終了時刻 | 22:50 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 進捗報告
### 大鐘(担当:ユーザー他,Files)
* Backlog実装・PR対応
* 中井さんからのコメントをもとに、validatorモジュール作成

* Module-Backlog実装
* File
* {path}/contentを
* queryでinfo,downloadの分岐
* 方法をもっと調査
* URLが長い問題、files/files/{path}
* 処理
* ファイルかフォルダかの判定が難しそう?
* 最後に/あるかどうかで判断?
* 拡張子で?
* フォルダ検索→ファイル検索する
* BUチームのWSで、WebhookBot共有

* 全体WSで、課題期限切れ通知
* GASのプログラムは、out-of-projectへ
### 北浦(担当:課題, Webhook)
* Backlogのコード把握が遅れており、今日にPR提出が間に合いませんでした。申し訳ありません
* しかし、一通りコードを読めたので明日には提出できます
* Module-Backlogについても大鐘さんのPRをもとにコードの概要を把握できました
* WebhookはDBの利用が大前提になりそうなので、一旦実装見合わせが良いでしょうか?
### 平野(担当:Wiki)
* Backlogの方はWiki部分本体実装の完了
* 中井さんと相談してオブジェクトの設計中
* objects.py に書いている
* utils/objects/の下に書いていく
* methodの切り出し
* AIの方でも使うからそこまでの変更をしていいか気になる
* 利点
* AnyってなってるところをWikiにしたり
* APIから返ってくるjsonをobjectsに(validation)
* リファクタリングで、オブジェクト化する方針
* 試験種決定の@dataclassを使えば簡単にかけそう
* __init__かかなくてもよくなる
* Module_Backlogをラップするプロジェクトで、あるといい
---
# Backlog pj システム詳細設計確認mtg
| 日付 | 2021/09/22(水) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 20:30 |
| 終了時刻 | 21:10 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦、畑中、河野、武田、中井、阿部 |
## [openapi](https://n-contents.backlog.com/git/CT_48/Reference/blob/master/Module-Backlog/openapi.yml)
* Module-Backlogとして提供するAPIを記載
### Q&A
* WebDAVについての詳細
* Backlogのファイル部分は、WebDAVで提供
* webDAVのpythonクライアントを利用して実装
* File以外に公式エンドポイントが用意されていない実装はあるか?
* FileとWebhookのみ
* WebhookにSlackのメンション
* Module-Backlogの応用として考慮
## [システム仕様書](https://n-contents.backlog.com/alias/wiki/571203)
* BacklogとModule-Backlogの2つのリポジトリ
* Backlog:AIチームですでに開発されている部分
* 必要な機能を追記、公式APIの提供しているもののみ実装
* 森本さんにPRを確認してもらってマージ
* Module-Backlog:ITチームがRESTAPI(DRF)として提供する部分
* Backlogリポジトリをsubmoduleとして読み込み
* 機能の組み合わせやDBとやり取りする部分、DRF部分を実装
### Q&A
* submodule or pip install
* setup.py を書けば pip install
* requirements.txt に読み込む
* pip install で試してみる
## 今後について
* Backlog部分を優先して実装
* 9月中に実装完了をめざす
---
# Backlog pj #8mtg
| 日付 | 2021/09/15(水) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 13:00 |
| 終了時刻 | 13:30 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 議題
### [システム仕様書](https://hackmd.io/Gcgw8vrGRt6nvx1oq6s9Eg)の確認
* ディレクトリ構造
* DjangoRestFrameworkに沿った形で
* 良さそう
* GooglePJを参考に
* https://n-contents.backlog.com/alias/wiki/553545
* テスト
* test_urls.py (<- django.test.SimpleTestCase)
* test_selializer.py (<- django.test.SimpleTestCase)
* test_views.py (<- django.test.Client)
* Backlogは、unittest
* 本体設計の変数(引数)の書き方
* 変数名(型)
* Serializer
* 生のデータからPythonのデータ型に変換
* 時間がかかりそう?学習しながら進めていく
* 人員?
* 開発から入ってもらえたら、他pjが終わったら回してもらう
* 期限
* 日曜期限で、月曜確認mtgをめざして
## 進捗報告
### 大鐘(担当:ユーザー他)
* [システム仕様書](https://hackmd.io/Gcgw8vrGRt6nvx1oq6s9Eg)の作成
* BacklogへのI&A移行
* 数学が土曜から先行移行
* 急遽、科目・未対応になった際に通知するBot作成
* WebhookをGASに飛ばして、絞り込み、Slackに送る
* 将来的には、BacklogpjのWebhookに置き換える

### 北浦(担当:課題)
* Issues、File、Webhook部分のシステム仕様書を作成してみました
### 平野(担当:Wiki)
* システム仕様書(Wiki部分)の関数だけ記入してあります
* 引数は型or変数名?
* ViewのテストはDjango.TestClient?(https://codezine.jp/article/detail/10995)
* 今週末までに中身埋めます
### 西村(担当:ファイル)
* ITチームお休みに
* SharedFiles -> 大鐘に
---
# Backlog pj #7mtg
| 日付 | 2021/09/06(月) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 18:00 |
| 終了時刻 | 19:00 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦、中井 |
## 議題
### openapi最終確認
* https://n-contents.backlog.com/git/CT_48/Reference/blob/master/Module-Backlog/openapi.yml
## Webhook仕様の確認
* executionTime(crontab)は、Webhookぽくない
* DBの更新に合わせて通知するのがWebhook
* 期限日が変わる瞬間に通知?
* **期限日の何時に通知するかを指定**(期限日を迎えてから何時間後か)
* 課題のデータベースを構築し、Backlogの情報を反映していく
* 変更があった際にWebhookで通知可能に
## ユーザーとDBの紐付け方法について
* ハンドルネームを「403751 大鐘崇史」の形式で、最初6文字で教務研究員ID紐付け
* NulabIDの場合は、他のbacklogに参加している場合に影響してしまうので、コンテンツ本部内のBacklogの情報のみを変える形で
* 9/7の教務研究員リーダーmtgで、全科目に依頼

* **半角スペース->_に**
### [BUチームからの要望](https://2019-9ra2094.slack.com/archives/CH65ARS8G/p1630648900111600?thread_ts=1627777732.009000&cid=CH65ARS8G)
> タイトル自動制作機能があったら嬉しいです(これはダメ元です)。ICEでBUがたてているTODOを見ていただければわかると思いますが、Backlogで実際に入力する項目と同じようなものをタイトルに記載しています。そのため、Backlogの選択部分で入力したものが自動的にタイトルに反映されると楽だなぁと感じました。
* フォームを入力してもらって、タイトルを整形して`/issue`に POSTする形でいけそうですかね?
* 種別ごとの固定テンプレートは、標準機能で作成可能
* webhookで、課題追加したら反映
* **フロントエンドで対応できそう、Webアプリ上でサポート**
> 科目チームやskkチームからBUをメンションするときに誰をメンションするか。BUはシフト制でI&Aを処理しているので、必ずしもTODOを立てた人がその後の処理をするとは限りません。そのため、BU管理者的なアカウントを作って、そこをメンションすると自動的にBUのslackに通知が来るようなシステムがあるといいなと思いました。
* ITチームBotのようにBUチームBotを作って、BUSlackに通知を送るようにする(BacklogのWebhookでは担当者で分ける通知ができなさそうで、個人設定のメール通知させてそれをSlackに転送?)
* 「教務研究員 BUチーム」をメンションにすれば、BUメンバー全員に通知はいく(Slack通知はできなそう、メールからの紐付け?)
* `/webhook` を使うのは難しそう??
* **課題DBで担当者が変わったらWebhook通知する**
### 今後の流れ
* Webhook部分のopenapi,クラス図修正(@北浦さん)
* 修正後、全体に共有する
* 並行して、システム仕様書・ネットワーク構成図を詰めていく(各担当部分)
## 進捗報告
### 大鐘(担当:ユーザー他)
* BUチームとI&Aフローの確認・要望調査
* 明日のリーダーmtgで全体に確認
### 北浦(担当:課題)
* openapiの実装、おおよその形としては決定
### 平野(担当:Wiki)
* ドライブ・スプシPJで作成しているものを参考にシステム仕様書を進めました(https://hackmd.io/-ydNfX-XQ_KmNyq_yVslAA?edit)。
### 西村(担当:ファイル)
*
---
# Backlog pj #6mtg
| 日付 | 2021/08/28(土) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 10:00 |
| 終了時刻 | 10:45 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 議題
### openapi確認
* FileのWebDAVについて
* 他のpjからファイルを保存したいときに、必要性ありそう
* 案外いけそう?
* とりあえず作ってみて、週例MTGで確認
* 北浦さん→openapi作ってみる
* メリット:認証をスキップできる、GAS
* デメリット:工数
* ユーザーとDBの紐付け方法
* 案
* BacklogのuserIdを教務研究員IDに
* DBにアクセスしなくても、直接教務研究員IDでNulab側APIを叩けそう
* 運営側だけなら、守ってもらえそう
* Backlogのnameの先頭に教務研究員IDをつけてもらう
* BacklogのmailAddressで紐付け
* 教務研究員IDを指定して、DBに登録なければ戻す
* openapiに追加で、DBに登録の部分が必要
* 決定
* **BacklogのuniqueIdを教務研究員IDに**
* とりあえずこれで運用してみる
### Slack通知の仕様検討
* `POST /webhook/issues`
* webhookを設定する
```
req. body
{
webhook_url: https://...,
condition: (schema/Issue),
interval: 1(/day), // 時間帯指定をば
slack_encoded: false
}
res. body
{
webhook_id: abcde...,
enabled: true,
interval: 1(/day),
slack_encoded: false,
log: [
{
timestamp: 2021...,
response_code: 200,
request_body: {...}
}
]
}
```
* `GET /webhook/issues/{webhook_id}`
* 登録されたwebhookの条件を取得する
* `PATCH /webhook/issues/{webhook_id}`
* 登録されたwebhookの条件を変更する
* `DELETE /webhook/issues/{webhook_id}`
* 登録されたwebhookの条件を削除する
#### 仕様
* 条件に一致したIssueのリストを送付する
```
req. body
{
webhook_id: abcde...,
updated_timestamp: 2021...,
issue_list: [...]
}
```
* slack_encodedをtrueにした場合は、Slackのwebhookのpayloadに即した形に整形しておく
* n回(5回?)リクエストに失敗する(200番代以外)とwebhookは無効化される
* memo
* openapiに反映
* DBに格納、畑中さんに連絡
### クラス図確認
* https://app.diagrams.net/#G1h6j-GZjpse0f9TuyyiJIX3Aq0d-twY3O
*
### 詳細設計に向けた確認
* ソフトウェア方式設計:クラス図
* ソフトウェア詳細設計:システム仕様書
* HackMDに書き込んでいく
## 進捗報告
### 大鐘(担当:ユーザー他)
* 全科目にBacklog導入 (8/26)
* openapiのチェック
### 北浦(担当:課題)
* PR,openapi修正
* Webhook
### 平野(担当:Wiki)
* PR,oprnapiチェック
* クラス図を少し
### 西村(担当:ファイル)
*
---
# Backlog pj #5mtg
| 日付 | 2021/08/18(日) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 09:00 |
| 終了時刻 | 09:25 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、西村、北浦 |
## 議題
### openapiの修正
* エラーレスポンスの記載(前回MTGの内容)
* 平野さんの内容をベースに反映
* schema
* 包含関係で考えて、使うものごとに定義
* SharedFile
* Wiki部分とFile部分で、共通して使えるか確認
* 共通化できない場合は、SharedFileWiki
### シーケンス図・Module-BacklogとBacklogの切り分け
* https://app.diagrams.net/#G1h6j-GZjpse0f9TuyyiJIX3Aq0d-twY3O
* 確認OK
* Fileは、Module-Backlogにまとめる
### 今後の方針
* 今週中:openapi完成
* 今月中:詳細設計まで
## 進捗報告
### 大鐘(担当:ユーザー他)
* ICE TODOのBacklog移行⇨統括mtgで進藤さんに確認
* 期限オーバーをSlack通知したい
* 受付2日後、5日後(@進藤さん)を通知
* openapiを作成
### 北浦(担当:課題)
* openapiを作成、PRを提出しました
* backlog公式のapi部分
* 課題の一括登録
### 平野(担当:Wiki)
* 北浦さんのコメントを反映させてWiki部分のスキーマを修正しました。(マージ済み)
### 西村(担当:ファイル)
* あまり時間がとれず、本日中に修正します。申し訳ないです。
---
# Backlog pj #4mtg
| 日付 | 2021/08/06(日) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 13:00 |
| 終了時刻 | 14:50 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、西村、北浦 |
## 議題
### openapiの修正
* 成功レスポンス
* `200 OK` 成功
* `201 CREATED` 作成
* `204 NO CONTENT` 空
* エラーレスポンス
* `400 failed` リクエストが不正
* `401 authentication_error` 認証エラー
* drivepjのopenapi参考に
* `404 NotFound` 存在しない
* Wikiや課題が存在しない
* 科目コード、添削者IDがデータベースになかった場合に返す ※Backlog側に送る前に、エラーとして返す
* `429 too_many_requests` リクエスト制限
* Backlogの429エラー
* Oauth部分の記載は、一旦スルー
* 一般ユーザー(ITbot)ができる権限範囲で
* schemaの表記法を
* readonly,writeonlyで見れる範囲
* readonly レスポンス
* writeonly
* schemaの中は最小限で、組み合わせたものは外側に
* allOfを利用、継承のような形で
* Schemaを整理
* 429:実装後に増えていたら
* `202 Accepted` リクエスト受理
* 429応答で、1分後リクエスト再送、処理は継続
### [レート制限への対策](https://developer.nulab.com/ja/docs/backlog/rate-limit/#%E3%83%AC%E3%83%BC%E3%83%88%E5%88%B6%E9%99%90%E3%81%B8%E3%81%AE%E5%AF%BE%E7%AD%96)
* 公式からの提案
* 1つのソフトウェアから、同時に複数のリクエストを送信しない。1つのリクエストに対して応答が返されてから、次のリクエストを送信する。
* 大量の更新・検索リクエストを送信する必要がある場合は、リクエストの送信ごとに最低1秒の待ち時間をおく。
* 429 が返された場合は、1分経過後にリクエストを再送する。どうしても待ち時間を1分よりも短くしなければならない場合は、X-RateLimit-Resetの値をもとに待ち時間の長さを調節する。
* 案
* APIキー
* **ITbotのAPIキー**
* 各プロジェクトのメンバーのAPIキー
* リクエストをストック(順番待ち)しておいて、定時実行
* 順番待ちに登録しました、何分後実行予定かレスポンス
* 実装コスト
* 429応答を受信した、1分後にリクエストを再送
* レスポンスだけ先に返して、処理は継続
* 429エラーを返す
* リクエストのログ記録
* 結論
* **ITbotのAPIキー**
* **429エラーを返す**
* リクエストのログ記録
## 進捗報告
### 大鐘(担当:ユーザー他)
* ICE TODOのBacklog移行
### 北浦(担当:課題)
* open apiの作成
* 新たな(便利)apiの作成 -> 同じopen apiに追記
### 平野(担当:Wiki)
* 前回以降の進捗は特に無いです
### 西村(担当:ファイル)
* open apiの草稿記述
* pythonクライアントのサーベイ(コマンド操作できました!北浦さんありがとうございます! MITも[同じようなモジュール](https://wsgidav.readthedocs.io/en/latest/index.html)を作ってたので、そちらを使おうかと思ってます。権限関連をより詳しく調べていきたいと思ってます。)
---
# Backlog pj #3mtg
| 日付 | 2021/08/01(日) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 22:00 |
| 終了時刻 | 22:40 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、西村、北浦|
## MUST
★:週例MTGで相談案件
* 要件定義書の修正確認
* 親子課題の部分を追加
* 課題の期限が過ぎているものをリマインドする機能
* 期限で検索する機能はある
* Slackへメンション(データベースでID紐付け)
* Module-Backlogで実装、Slackのどこに送るかを要検討★
* 例、カスタム属性でWS/Chなどを指定
* カスタム属性でも検索がかけれるので、リマインドの有無も選択できる
* APIでの実装+定時処理(各科目でオプション設定可能)★
* どこまでが、BacklogPJですべきなのか?線引き、疎結合
* データベースに新たなテーブルを用意
* API仕様書(openapi.yml)の確認
* GitのReferenceリポジトリ
* [Swagger](https://editor.swagger.io/)にコピペすると、見やすくなる
## 議題
* openapi.ymlに記載するものについて
* Module-Backlogリポジトリが提供するAPIの内容を記述
* submoduleでBacklogリポジトリも読み込んでいるので、**公式APIの内容も含まれる**
* ITチームで開発するメリット
* APIキーを入力しなくて良い
* 科目や添削者に、Backlogの各IDが紐づけられる
* **openapi.ymlには、添削者IDや科目IDを入力する**想定
## 進捗報告
### 大鐘(担当:ユーザー他)
* [BU,SKKへのヒアリング作成](https://docs.google.com/document/d/1SSlulRUAjKIyyK7hqzeMovEcTXEE5r7xhlAaiRyPHP0/edit#)
* ICEのTODO機能を課題へ移行
* イメージとしての仮案を記載
* openapi.ymlの記述
* 平野さんが上げていただいたものに追記しました
* masterブランチにマージ済
### 北浦(担当:課題)
* openapiの学習が間に合わず、openapi.ymlへの記述は完成していません
* 記述しようとしているAPIは次の通りです
* 基本的な課題についてのBacklog公式APIはそのまま継承
* 課題の作成、検索、更新、添付ファイル操作
* 課題のコメント操作は保留か?
* (親子関係をもつ)課題の一括作成
* レート制限対策(Module-Backlog側で管理?)が必要か
### 平野(担当:Wiki)
* openapiの原型を、Backlogの公式リファレンスに則って作成しました。
* Wikiに関してはすべて公式のままにしています。(スキーマ定義などをする際に参考になるのでまずは公式のものを参照するのが良いと思いました)
* また、もう一度BacklogとModule-Backlogに関して以下のような棲み分けという認識ですがよろしいですか
| リポジトリ | 開発チーム | 内容 | リファレンス |
| --- | --- | --- | --- |
| Backlog | IT, AI(共同) | 公式APIをpythonで使えるようにラップしたサブモジュール。 | APIではないのでopenapiは作成しない。 |
| Module-Backlog | IT | 実際にプログラムで呼び出すAPI。他のPJは必ずこれを通してBacklogを操作する。公式をそのまま使うのと組み合わせるものの両方を実装。どちらにせよサブモジュールとしてModule-Backlogを呼び出す。 | Module-Backlogにopenapiを作成。 |
### 西村(担当:ファイル)
* ファイル操作の自動化について
webdavを導入することが出来れば、コマンドラインツールを使って、自動でファイル操作ができることを確認しました。よって、aws上でbacklogのwebdavにアクセスした上で、処理をスクリプトとしてまとめてしまえば、自動化は出来ると思いますが、正直使いたい方が自分のPCでwebdavを使って接続した方が利便性が高いと思います。
→問題点として、ITチームのbacklogに参加したメンバー全てが操作できてしまう事ですかね(現在もですが)
* pythonクライアントで出来るか試す
* https://github.com/ezhov-evgeny/webdav-client-python-3
* open apiの追記が間に合っていないです。申し訳ございません。
---
# Backlog pj #2mtg
| 日付 | 2021/07/26(月) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 19:00 |
| 終了時刻 | 19:50 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、西村、北浦|
## MUST
* システム要件定義の確認
## 議題
* submoduleの件について
* ①Backlogリポジトリ:pybacklogpy, AIが作っているものと同じレイヤー
* pybacklogpyを参考にしながら、AIが作ったものを修正
* Backlog側で実装されているAPIを実装
* ②Module-Backlogリポジトリ:①をサブモジュールとして読み込んでちょっと複雑な操作をする
* Backlogのリポジトリを組み合わせたものを実装
## 進捗報告
### 大鐘(担当:ユーザー他)
* BacklogAPIの中で、管理者権限でしか使えないものを除いて記載
* データベースpjとの連携部分について記載
* 下記機能を利用して、データベースに「科目とプロジェクトID・チームID」「添削者情報とユーザID」を紐づける
* プロジェクト一覧の取得
* チーム一覧の取得
* プロジェクトユーザー一覧の取得
### 北浦(担当:課題)
* apiとして公開されている部分をまとめる(まずは課題の操作のみ。機能としては課題のコメントの操作も用意されている)
* より具体的な実装(課題の一括登録など)は後ほどまとめる
### 平野(担当:Wiki)
* ②のレイヤーで追加したほうが良い処理はないかもしれません。あえてあげるならすべてのWikiに対してそれを編集した人のIDをオブジェクトとして返してくれるようなAPIとかですかね(粒度が大きいのでAPIとして用意するほどのものではないかもしれませんが)。
* 上述の事情で、現状WikiだけでいうとサブモジュールとITで作るAPIをかませる意味がなくなってしまう可能性があります。(あとあと柔軟な対応ができるというメリットはありますが)
→①だけに置くでも良い。今後用途が追加されるかもしれない。APIキーの管理とかをITチーム内でできるだけでもメリットはあるので、公式のAPIはどのみち使わない。
* Wikiに関してITが作るAPIのエンドポイント・メソッドの構成や入出力形式はすべて公式のものに合わせると良いと思います。OpenAPIを想定してbacklogの[学習資料](https://n-contents.backlog.com/alias/wiki/553778)にまとめてあります。
* 品質管理チームのヒアリング結果は[こちら](https://docs.google.com/document/d/11sPkLUVySKVaXn13FplpSFd34_1yUXxZUTECHBD6Dqo/edit)のドキュメントになります。導入したばかりというのもあり、なかなか意見が集まらない状況です。
### 西村(担当:ファイル)
* ファイル操作について、可能な内容をまとめて、内容ごとに整理。
* apiとして、公開されている操作についてまとめているため、こちらでこれらを組み合わせたapiを用意するべきかは用検討かなと思いました。
* 最も必要な共有ファイルについての操作を行うapiが存在していない
* WebDAVクライアントを用いて、共有フォルダの操作を自動化できないか? → 調査を行う
---
# Backlog pj #1mtg
| 日付 | 2021/07/18(日) |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | 13:00 |
| 終了時刻 | 14:00 |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦、西村、森本(AI)、武田|
## アジェンダ
* 自己紹介
* AIチームのBacklog APIについて
* AIとITでの開発の進め方
* 開発スケジュールと今後のTODOまとめ
## 自己紹介
* 大鐘(数学)
* ITチーム統括、リクルート・資料作成・メンバー管理などが中心
* BacklogのITチーム導入を色々試行錯誤していました
* よろしくお願いいたします!
* 北浦(化学)
* ITでは、試験種決定最適化pjの開発(Python)を行っています
* Web API系は趣味でかじっていたので、少し楽しみです!
* よろしくお願いいたします~
* 平野(数学)
* 数学科運営・品質管理チーム運営(こちらでもbacklog導入を進めているので、ITでのノウハウを還元できたらと思ってます)
* ITでは振り分けPJ(AllocationApp), gdrivePJ, kanriposPJ(adpal)に携わっています。
* 本業は化学なのでIT全然詳しくないですが、頑張ってキャッチアップしていきたいです
* 西村(英語)
* 英語科でbotの管理・修繕等を行ってます。slack apiをよく使ってます。
* ITでは、現在、工数分析PJ、試験種最適化PJに参加しています。
* ドライブPJでbacklog api部分の要件定義等を担当していました。今回backlogPJの立ち上げに伴い、こちらのPJに移籍させて頂きました。
## 情報共有
* AIの森本さんが、Backlog APIを既に開発
* 今後、AI+ITで開発を行うか、ITが引き受けるか要相談
* Git部分については、Backlogを使わないチームあり(AI,DS)
* この部分の実装は、不要そう
* 数学チームで、Backlogをテスト導入(7/15~)
## アイデア書き込み
以下の部分について、意見やアイデアなど自由に書き込んでいただきたいです。(適宜、項目追加していただいてOKです)
### プロジェクトの進め方について
* 短期間で終わらせるようにしていきたい(大鐘)
* 直近でやるべきこと
* AIチームのコードリーディング
* 資料作成:BacklogAPI
* システム要件定義:ファイル部分については既にドライブPJで作成
### スケジュール案
| 日程 | 内容 |
| --- | --- |
| ~7/18 | システム構想、憲章・スケジュール完成 |
| ~7/25 | システム要件定義・方式設計 |
| ~8/1 | ソフトウェア要件定義〜詳細設計 |
| ~8/15 | プログラミング |
* スケジュール案いかがでしょうか?忙しい時期などあれば教えてください!(大鐘)
* 8/17に院試です...。(平野)
* 〜7/27まで忙しい(西村)
### システム構想
* ヒアリング
* SS,SKKへのヒアリング
* ITチームでの使用感
* 数学科でのテスト導入のフィードバック
* アイデア
* REST APIをおいて、課題やWikiなどを一括登録など
* Ex.添削者評価の担当を課題に、評価PDFを課題に添付
### [Backlog API](https://developer.nulab.com/ja/docs/backlog/#)
* Git関連もあまりいらなさそう?
* 必要そうな部分
* 課題 @北浦
* Wiki @平野
* ファイル @西村
* 直接ファイル機能を操作できるAPIはない
* Wiki,課題,prの添付としてとしてのみAPIで操作可能
* AIチーム開発部分を参考
* チーム、ユーザー、プロジェクト @大鐘
* ユーザー追加やプロジェクト編集は社員管轄なので不要?
### DrivePJですでに設計していた部分
> @平野さん@西村さん 記入お願いいたします!
##### 西村
drivePJでは、ファイルのアップロード・ダウンロード・一覧取得・削除について、公開されているbacklog apiを使って出来ることをまとめています。
中身としては、一般公開されているbacklog apiのpythonラッパーを切り出したものになります。
- ダウンロード
- Wiki
- アップロード
- Wiki
- 課題
- プルリクエスト
- 共有ファイル
- 一覧取得
- Wiki
- 課題
- プルリクエスト
- 共有ファイル
- ファイル削除
- Wiki
- 課題
- プルリクエスト
[こちら](https://hackmd.io/@pauel/S1qci-0sO)に現在までの分をまとめた要件定義書があります。
### AIチーム作成のBacklog API
#### APIの概要
* https://developer.nulab.com/ja/docs/backlog/ を呼び出すためのPythonライブラリ
* 基本的にはrequestsライブラリを用いてAPIを叩くもの
* Exsitに置きました
* https://n-contents.backlog.com/git/CT_48/Exist/tree/master/ai/python-backlog-api
* AI教務研究員ですでに運用しているプログラム(を切り出したもの)なので、AI教務研究員でもITチームでもアクセス可能な場所に実際の開発するプログラムは置きたいです(=ITチームがコントロールしても良いが、AI側が完全に下になるようなフルコントロールは困る)
* 今回共有するファイルに含まれるものはBacklog APIを叩くためのファイルと、テストコード
* Backlog APIを叩いたあとに何かをするためのコードは別リポジトリで書く
* AI開発チームで運用中のプログラムはこんな感じになっています
* Ex. 特定のプロジェクトのファイルを取得するようなコード
* gitのsubmoduleを使うような前提
* 以下のように各メソッドを定義しています
* ファイルのダウンロードはhttp requestsを行うだけだと使いづらいので実際に保存処理まで書いてある
* jsonで返せるものはjsonで返す (response.json()を利用)
* テストコードはかなり薄いです、、、
* 一部、プロジェクト内の共有ファイルにテスト用のファイルを置いておりそれをダウンロードできるかをテストに用いているため、実際にテストコードを動かすためにはそのファイルのアップロードが必要です
* また、すべてのAPIを網羅しているわけではないです。なお、機能(エンドポイントのURL)ごとにざっくりとAPIのクラスを分けています
* APIを呼び出す前のPythonの段階でクエリパラメータなどが不正の場合にはなるべく検出している
* が、ここのテストコードを全然書いていない
* 開発にあたっては型ヒントをすべてにつけており、flake8とmypyは利用しています。また、docstringを記載しています
* .flake8と.mypy.iniを参照
* docstringはnumpyスタイルで記載してあります
* ドキュメントは正直あまりないです。
* ルートディレクトリにreadmeは置いてあります。ざっくり使い方はそれでわかると思います
* もしくは、テストコードを見ると分かると思います
#### AIチーム作成APIとの棲み分け
> @森本さん ITチームへの要望なども含めて記入お願いいたします。
* AIチームの人がリモートリポジトリにアクセスできなくなってしまうのを避けたい
* AIチームでもITチームでもアクセス可能な場所にリモートリポジトリを置きたいです。
* Ex. ITチームのリポジトリだと、AI教務研究員は入っていないことがある。また、AI教育開発部(!=CT本部)の社員さんが(ITチームのプロジェクトにわざわざ入れない限り)アクセスできなくなる。
* 教務研究員が誰でも入れるようなGitHubのOrginizationを作って管理するのも手ではないかと考えています(森本)
* https://github.com/nagaseengineer/ だとエンジニアチームの配下になるため好ましくはないと考えています(人を増やそうとすると勝倉さんに依頼しないといけなくなる)
* 管理場所はITチームとも話し合って検討したいです
* AIチームと共同で開発するか、ITチームが別で開発?
* BacklogのAPIを叩く部分については共同で開発、叩くモジュールを活用して`REST APIをおいて、課題やWikiなどを一括登録など`の機能を開発するのはITチームの独自開発、というのはいかがでしょうか?
* Gitのリポジトリは分ける。AI側が共有したものはsdkのようなイメージ
* ITチームのポリシーがわかっていないですが、どちらにせよこのような汎用的なモジュールはきちんと粗結合にしないと再利用性が落ちると思います
* ただし、現状AI教務研究員内の一部のチームが利用している部分については開発が終了しています
* どのように協力体制を敷くかは別途検討が必要です
* また、ITチームよりもAI側の方が必要になってから実装完了までにかける(かけられる)時間が短い可能性がありますが、ITチームの場合きちんと要件定義などをしていると思うので、ここのすり合わせは必要です
* AI側の体制だと必要になってから1日後にはコードが完成->翌日くらいにはレビューされる、みたいなことがザラ
* その他、AI教務研究員のAI開発チームは**CT本部ではなくAI教育開発部に縛られている**ため若干動き方に違いがあり、ご迷惑をおかけすることがあるかもしれませんがよろしくお願いいたします。
* DSチームはCT本部のみに縛られており、通常の教務研究員とほぼ変わりません
* 中井くんがファイルアップロードのなにかを作っていましたが、それもbacklog apiを叩く方のリポジトリに乗っけてしまいたいですね
* 厳密にはbacklog apiのPythonコードではなくなってしまいますが、、
## 議事録
### AIとITでの開発の進め方
* プログラムの管理体制案
* **AIチームのプログラム(API叩く部分)をsubmodule読み込む**
* 統一的に作る
* ~~ITチームで独自開発~~
* 時間の無駄になる
* API叩く部分はAI、それをwrapする部分をIT
* 公式に、BacklogAPIのwrapper
* 改訂が2年前で信用度が微妙
* PRも処理されていないようです
* BacklogのAPIを叩くだけのものを全員で共有して
* APIを活用する部分をITチーム独自で
* **結論**
* BacklogのAPIを叩く部分をAIチーム開発のものを利用
* AIチームで足りない機能を追加
* **ITチームのBacklog上に、リポジトリ**
* それを**submodule読み込んで、BacklogPJで活用**
* AI側も同様の運用にします(多分)
### 開発スケジュールと今後のTODOまとめ
* スケジュール
| 日程 | 内容 |
| --- | --- |
| ~7/18 | システム構想、憲章・スケジュール完成 |
| ~7/25 | システム要件定義・方式設計 |
| ~8/1 | ソフトウェア要件定義〜詳細設計 |
| ~8/15 | プログラミング |
* 共有する場所
* AIのGitどこに作るか?Backlog?GitHub?
* 教務研究員リーダー全員でアクセスできるプロジェクトに設置
* エンジニアにいれると、エンジニアがトップになってしまう
* 横並びで、AI,IT,エンジニア
* SKKもいずれ使うかも?(SKKは独自に開発チームがあります)
* 結論→ITチームのBacklogのGitで管理
* ITチームのBacklogに、AIメンバー招待
* 開発方針
* BacklogのAPIを叩く部分を、AIチーム開発のものを利用
* ITチームのBacklog上にリポジトリ
* AIチームからのPR
* それをsubmoduleで読み込んで、BacklogPJで活用
* pybacklogpyをベースに、要件定義〜開発
* 次回のMTGまでのTODO
* BacklogのPJに、AIメンバーを追加(チーム機能?) @大鐘
* ITチームのBacklog上に、Backlogリポジトリ作成 @大鐘
* 品質管理チームにヒアリング @平野
* Wikiに各担当のシステム要件定義
* 課題 @北浦
* Wiki @平野
* ファイル @西村
* チーム、ユーザー、プロジェクト @大鐘
###### tags: `ITチーム`
# Backlog pj #mtg
| 日付 | 2021//() |
| ------- | ---------------- |
| 主催 | 大鐘 |
| 開始時刻 | |
| 終了時刻 | |
| 場所 | Zoom |
| 参加者 | 大鐘、平野、北浦 |
## 議題
###
## 進捗報告
### 大鐘(担当:User,Project,Team,File,他)
*
### 北浦(担当:Issue,Webhook)
*
### 平野(担当:Wiki)
*
---