【 ライブラリ開発】Githubで認証付きライブラリを作成する方法

## 背景
- 自分が業務でよく利用する`code`をライブラリ化し`code`の共通化と業務効率化を図りたい。
- 業務で使用する`code`なので組織外の人間にはアクセスできないようにしたい。
- 上記の要件を満たすライブラリの作成方法を調査したので、その手順書である。
- いったん自分用として記載するため、いつもの投稿より文体やまとめ方が雑である。

## 目標
- [github-hosted-pypi](https://github.com/astariul/github-hosted-pypi?tab=readme-ov-file#get-started)を使用して、認証付きライブラリを作れるようになる。


## 認証付きライブラリのリポジトリの構築手順
- [github-hosted-pypi](https://github.com/astariul/github-hosted-pypi?tab=readme-ov-file#get-started)の「`USE THIS TEMPLATE`」をクリックする。
- 適当な`Repository name`を入力する。
- `Public`でリポジトリを作成する。（有料プランであれば、`Private`で`GitHub Pages`を公開することが可能）
- 作成されたリポジトリページで`Settings`に移動する。
- 左のサイドバーから`Pages`に移動する。
- `Branch`セクションで、`GitHub Pages`のソースとなるブランチを選択する。（基本は`main`の`「/(root)」`で良いと思われる。）
-  `「Save」`（保存）ボタンをクリックする。
-  `main`ブランチで適当に`push`する。
-  設定が適切であれば`Github Actions`が起動し、`GitHub Pages`の機能で`Web Page`が公開される。（`Github Actions`の完了まで少し時間がかかる。
-  公開された`Web Page`の`URL`は、先ほど`GitHub Pages`の設定をした場所（`Settings`→`Pages`）の上部に表示される。

## 認証付きライブラリのリポジトリの使い方
- ここから、作成した認証付きライブラリの公開・削除などの運用方法について記載する。
- 使用した[github-hosted-pypi](https://github.com/astariul/github-hosted-pypi?tab=readme-ov-file#get-started)の機能により、作成したリポジトリの`Actions`のタブに新しい`workflow`として (`register` / `update` / `delete`）の3つの`workflow`が追加される。
- この3つの`workflow`を使用し、ライブラリの公開・追加・削除・`update`などの運用操作を行っていく。
- これらの`workflow`の機能を正常に動かすために、`workflow`ができる操作の権限を`update`する。
- `Settings`からサイドバーの`Actions`を選択する。
- `Workflow permissions`セクションで、`Read and write permissions`に権限を変更する（ラジオボタンを選択する。）。
- また、`Allow GitHub Actions to create and approve pull requests`にもチェックボックスを入れ、`Save`をクリックする。
- 上記の設定で、(`register` / `update` / `delete`）を使用できるようになる。

## ライブラリの削除方法`delete Workflow`の使い方
- 試しに、`delete`を使用して、現在存在する`private-hello`ライブラリを削除してみる。
- `Actions`に移動する。
- サイドバーから`delete`を選択する。
- 右側の`Run workflow`をクリックし、`Package name`に`private-hello`を入力し、緑ボタンの`Run workflow`をクリックし、`delete Workflow`を実行する。
- 実行した`delete Workflow`が終了するまでしばらく待機する。（実行状況はサイドバーの`All workflows`から確認できる。）
- 正常に成功した場合、`Pull request`が作成されるので、`Pull requests`に移動する。
- 作成された`[🤖] Delete private-hello{ここは入力したPackage nameになる} from PyPi index`の`Pull request`に移動する。
- `Merge Pull request`と`confirm`をクリックし`delete Workflow`で作成された`Pull request`を`Merge`する。
- 適切に`Merge`されれば、`GitHub Pages`から該当の`Package name`が削除され、またリポジトリの`top`からも該当のライブラリのディレクトリが削除される。

## ライブラリの公開方法`register workflow`の使い方
- 次に作成したライブラリの公開方法を紹介する。
- ライブラリの公開には`register workflow`を使用する。
- 前提として、独自で作成したライブラリがあり、`private`リポジトリで作成されており、`tag`をつけた`commit`があることとする。（リポジトリは`public`でも良いと思われるがそれだと認証付きのライブラリの公開方法とはならないと思われる。）
- `Actions`のサイドバー`register`を選択し`Run workflow`をクリックすると以下の入力が求められる。
    - `Package name`：作成した独自ライブラリの名前を入力（ライブラリを入れたリポジトリ名で良いと思われる。）
    - `Version of the package(tag name)`：該当ライブラリで公開する`commit`の`tag`名を入力する。
    - `Author(s) of the package`：ライブラリの作成者名を入力する。通常は自分のはずだと思うので、無難に`github`の登録名を入力で良いと思われる。
    - `A short description of the package to show on the index`：ライブラリの簡単な説明を入力する。公開されている`Github Pages`のライブラリの概要に表示されることになる内容。
    - `Homepage of the package　(link to the github repository）`：公開するライブラリの`github`の`url`を入力する。
- 上記の情報を入力し、`Run workflow`をクリックし`Pull repuest`を作成する。
- 先ほどと同様の手順で作成された`Pull request`の`Merge`を行い、自作のライブラリを公開する。

## 認証付きのライブラリの`install`方法
- 別途追記予定


## 参考資料
https://github.com/astariul/github-hosted-pypi/tree/main

## 個人ブログ

https://takuma-tech.com

## 個人開発サイト
[ぐらふつくーる](https://graph.takuma-tech.com/)