Slide 1

Slide 1 text

#sansan_vs_cybozu GitHub Projectsを⾃動化する GitHub CLIテクニック S a n s a n v s サ イ ボ ウ ズ 開 発 ⽣ 産 性 T i p s 夏 祭 り ( 2 0 2 4 - 0 7 - 2 6 ) @ t a s s h i _ m e

Slide 2

Slide 2 text

#sansan_vs_cybozu ⾃ ⼰ 紹 介 • ⽥代雅治 (tasshi) • 所 属 • k i n t o n e 拡 張 基 盤 チ ー ム 🧩 • E M / P O • 出 ⾝ • ⿅ 児 島 → 福 岡 • 趣 味 • プ ロ グ ラ ミ ン グ • サ イ ク リ ン グ • ゲ ー ム @ t a s s h i _ m e

Slide 3

Slide 3 text

#sansan_vs_cybozu • ki n to n eの拡 張 機 能 ( プ ラ グイ ン ・ 連 携 サ ー ビス ) 開発 の 開 発 基 盤を 開発 ・保守 するチ ーム • APIなど の 整備 • S DK /CLIなど の OSS の 提 供 • k i n t o n e / j s - s d k • k i n t o n e J a va C l i e n t • c l i - k i n t o n e 🧩 kintone拡張基盤チーム 🧩

Slide 4

Slide 4 text

#sansan_vs_cybozu • G i tH u b公式 の プロ ジェ ク ト管 理ツー ル • 複 数 の Repo s i to r y を 横断 的 に 管 理で き る • 柔 軟 な ビュ ー設 定 • テ ー ブ ル / ボ ー ド / ロ ー ド マ ッ プ • カ ス タ ムフ ィー ルド • テ キ ス ト / 数 値 / ⽇ 付 / D r o p d o w n / 繰 り 返 し な ど GitHub Projects

Slide 5

Slide 5 text

#sansan_vs_cybozu • メインでプロダクトバックログ(PBI)を管理 • OSSリポジトリのIssue /PRもProjectsに集約 • Renovateのライブラリ更新PRもProjectsで管理 • それぞれ専⽤のビューを作成 🧩: 私たちのProjectsの使い⽅

Slide 6

Slide 6 text

#sansan_vs_cybozu 再利⽤しやすいように パッケージングする P r o j e c t s の ベ ス ト プ ラ ク テ ィ ス - G i t H u b D o c s

Slide 7

Slide 7 text

#sansan_vs_cybozu • 組み込みの⾃動化 • API/Actionsを使った⾃動化 Projectsを⾃動化する

Slide 8

Slide 8 text

#sansan_vs_cybozu • 基 本 的 な 操 作 が 揃 っ て い る • C l o s e し た ら D o n e に 移 動 • R e o p e n さ れ た ら I c e b o x に 移 動 • A p p r o v e さ れ た ら Te s t i n g に 移 動 な ど • よ く 使 う の は 以 下 の 3 つ • 「 I t e m a d d e d t o p r o j e c t 」 • 「 A u t o - a d d t o p r o j e c t 」 • こ れ だ け 複 製 で き る • 「 A u t o - a r c h i v e i t e m s 」 組み込みの⾃動化 (Workflows)

Slide 9

Slide 9 text

#sansan_vs_cybozu • A P I を 使 う プ ロ グ ラ ム を 書 い て A c t i o n s で 実 ⾏ • P r o j e c t s の 操 作 は G i t H u b A P I v 4 ( G r a p h Q L ) • v 3 ( R E S T A P I ) で は で き な い • G i t H u b A p p o r P AT で 認 証 • p r o j e c t ス コ ー プ の 権 限 が 必 要 • G i t H u b C L I を 使 う と 簡 単 • g h a p i g r a p h q l コ マ ン ド API/Actionsを使⽤した⾃動化

Slide 10

Slide 10 text

#sansan_vs_cybozu • 開 発 プ ロセ ス • 着 ⼿ し た P B I は 現 在 の ス プ リ ン ト を ⼊ ⼒ す る • ス プ リ ン ト を 跨 い だ P B I は ス プ リ ン ト を 更 新 す る • Ic e b o x / Re a d y に 戻 っ た P B I は ス プ リ ン ト を ク リ ア す る • み ん な めち ゃく ちゃ忘 れる( ⾃分 含めて ) => 開 発中の P B Iに ⾃動 で ス プ リン ト を ⼊⼒ した い ︕ 🧩: スプリントを⾃動更新する

Slide 11

Slide 11 text

#sansan_vs_cybozu 作成したスクリプト プロジェクトの 情報を取得 + Actionsで定期実⾏ スプリント フィールドの 情報を取得 プロジェクトの アイテムを取得 現在の スプリントを ⼊⼒ スプリントを クリア

Slide 12

Slide 12 text

#sansan_vs_cybozu カンバンの治安は守られた、、、

Slide 13

Slide 13 text

#sansan_vs_cybozu ︖「うちのチームでもやりたい︕」

Slide 14

Slide 14 text

#sansan_vs_cybozu 作成したスクリプト プロジェクトの 情報を取得 + Actionsで定期実⾏ スプリント フィールドの 情報を取得 プロジェクトの アイテムを取得 現在の スプリントを ⼊⼒ スプリントを クリア

Slide 15

Slide 15 text

#sansan_vs_cybozu • ⻑ す ぎ る シ ェ ル ス ク リ プ ト • ⼤ コ ピ ペ 運 ⽤ 時 代 • ⼤ 元 で コ ー ド 修 正 し て も 改 善 し て も コ ピ ー 先 が 追 従 し な い • チ ー ム ご と の 独 ⾃ の 改 修 が ⼊ っ て い て 追 従 で き な い • コ ピ ペ で 動 か し 始 め た け ど シ ェ ル ス ク リ プ ト よ く 分 か ら な い • 崩 壊 • ⾃ 動 化 の 保 守 コ ス ト ⾼ く な い ︖ と い う 意 ⾒ が 出 て ⼿ 作 業 に 戻 る • 後 か ら ⼊ っ た メ ン バ ー が ⾃ 動 化 し 始 め る ( → 最 初 に 戻 る ) 問題点: 他チームに展開しづらい

Slide 16

Slide 16 text

#sansan_vs_cybozu 再利⽤しやすいように パッケージングする

Slide 17

Slide 17 text

#sansan_vs_cybozu • G i tH u b CLIに独 ⾃ のコ マン ド を追 加でき る • ダ ッ シ ュ ボ ー ド と か 、 M a r k d o w n ビ ュ ー ワ ー と か • 「 gh - 」で 始 まる リポ ジ トリ 名で公 開 • 好 き な 開発 ⾔語 で開発 できる • 実 ⾏ フ ァ イ ル が ⽣ 成 で き れ ば な ん で も O K • G o だ と 公 式 の ラ イ ブ ラ リ が 利 ⽤ で き る GitHub CLI 拡張機能 (gh extensions)

Slide 18

Slide 18 text

#sansan_vs_cybozu • G i t H u b C L I の 引 数 が 画 ⾯ 上 の 名 前 で は な く I D の 場 合 が 割 と あ る • カ ス タ ム フ ィ ー ル ド を 編 集 す る に は フ ィ ー ル ド I D / イ テ レ ー シ ョ ン I D が 必 要 • フ ィ ー ル ド I D / イ テ レ ー シ ョ ン I D は A P I で 取 得 す る が A P I 実 ⾏ に は P r o j e c t I D ( ≠ P r o j e c t 番 号 ) も 必 要 • こ の 連 鎖 的 な 情 報 収 集 で コ ー ド 量 が 増 え て い る = > 「 ス プ リ ン ト 」 フ ィ ー ル ド を 「 現 在 の ス プ リ ン ト 」 に 設 定 み た い な 直 感 的 な 操 作 が や り た い そもそもなぜスクリプトが⻑いのか

Slide 19

Slide 19 text

#sansan_vs_cybozu gh-iteration G i t H u b P r o j e c t s の 繰 り 返 し フ ィ ー ル ド を 簡 単 に 操 作 す る た め の 拡 張 機 能 h t t p s : / / g i t h u b . c o m / t a s s h i - m e / g h - i t e r a t i o n

Slide 20

Slide 20 text

#sansan_vs_cybozu コマンド 機能 field-list 繰り返しフィールドの一覧を表示 field-view 繰り返しフィールドの設定を閲覧 item-edit プロジェクトアイテムを更新 item-view プロジェクトアイテムを閲覧 items-edit 複数のプロジェクトアイテムを一括更新 list 繰り返しフィールドのイテレーション一覧 を表示 gh-iteration: コマンド⼀覧 標 準 の g h p r o j e c t コ マ ン ド に ⽐ べ て 繰 り 返 し フ ィ ー ル ド を 扱 い や す く し た

Slide 21

Slide 21 text

#sansan_vs_cybozu • 複 数 の アイ テム のイテ レーシ ョン を⼀括 更新 • 対 象 ア イテ ムは クエリ で絞り 込む • 例 : ( I t e m . Ty p e = = “ I SS U E ” ) & & I t e m . Is A r c h i v e d • イ テ レ ーシ ョン は、現 在 ( - - c u rren t) /ク リ ア( - - c l ea r) /名前 ( - - i tera ti o n ) か ら指 定可能 gh-iteration: items-edit コマンド

Slide 22

Slide 22 text

#sansan_vs_cybozu ex pr- l a n g /ex pr 構 造 体 に 対 し て 、 柔 軟 な ク エ リ を 適 ⽤ す る こ と が で き る Z e n n で 紹 介 さ れ て い る の を ⾒ て 採 ⽤ し ま し た • クエリの例 • Item.Type == “ISSUE” • Item.Stor yPoint > 3 && Item.Stor yPoint < 7 • Item.Repositor y endsWith “demo”

Slide 23

Slide 23 text

#sansan_vs_cybozu スクリプトを置き換えていく

Slide 24

Slide 24 text

#sansan_vs_cybozu 包 括 的 な コ マ ン ド を 追 加 し て 置 き 換 え て い く f i e l d - v i e w を 追 加 i t e m - e d i t を 追 加 i t e m s - e d i t を 追 加

Slide 25

Slide 25 text

#sansan_vs_cybozu 最終的に 1 3 7 ⾏ ↓ 2 6 ⾏

Slide 26

Slide 26 text

#sansan_vs_cybozu スッキリ👍

Slide 27

Slide 27 text

#sansan_vs_cybozu • GitHub CLI+シェルスクリプトから移⾏しやすい • ミ ニマ ムだ とシ ェ ルス クリプ トか ら切り 出し て 引 数を 取れ るよ う にし ただけ でも リリー スで きる • 認証周りがghに依存できて楽 • expr-lang /exprで簡単にクエリ対応できた gh extensions: 良かったこと

Slide 28

Slide 28 text

#sansan_vs_cybozu • Ty p e S c r i p t で 仕 事 し て る か ら G o を 普 段 書 い て な い • G i t H u b A c t i o n s と 開 発 体 験 が ⼀ 貫 し て な い 感 じ が し た • コ ア 部 分 は ラ イ ブ ラ リ 化 し て g h e x t e n s i o n s と A c t i o n s の 両 ⽅ に 簡 単 に 配 布 し た い • G o で 書 く と A c t i o n s で a c t i o n s / t o o l k i t が 使 え な い • J a v a S c r i p t で 書 く と g h e x t e n s i o n s で g o - g h が 使 え な い • 実 ⾏ フ ァ イ ル の フ ァ イ ル サ イ ズ も ⼤ き く な り が ち gh extensions: 気になったこと

Slide 29

Slide 29 text

#sansan_vs_cybozu • GitHub CLIで簡単にプロセス⾃動化を始めよう • 配布したくなったらgh extensionsにする • (余⼒があったらActionsにするとなおよし) • gh-iterationぜひ使ってみてください︕ まとめ