はじめに
JavascriptでGitHubのIssueを作成したい!
そんな事よくあると思います()
それを調べるのにかなり苦労したので、
備忘録として書くことにしました。
トークンの取得
GitHubをJavascript側から操作する為、
GitHubへのアクセストークンを取得する必要があります。
アクセストークンには様々な権限を付与する事ができますが、
詳しくは他の記事などを参照してくださいな....
アクセストークンの作成
GitHubアカウントを持っている。
ログインしている事が前提になります。
少し下がった所にあるDeveloper settingsに移動しましょう。

Personal access tokensの下にあるFine-grained tokensに移動します。
トークンを作成した時は画像の様にリストとして表示されます。
Generate new tokenをクリックして作成開始です!

各パラメータの説明
- Token name
- 作成するトークンの名前入力します
 
- Expiration
- このトークンの期限を入力します
- 期限は1週間, 1ヵ月, 2ヵ月, 3ヵ月, カスタムを選択できます
- 初めての場合は1週間でいいでしょう
 
- Description
- このトークンの説明を入力します
- 入力しなくてもOK
 
- Resource owner
- このトークンのオーナーを設定できます
- 基本的に変えなくてOK
 
Token nameは日本語も入力できるみたいですが、
念のため英語で決めた方がよさそうです。
権限の設定
- Repository access
- リポジトリへのアクセス権を設定できます
- 今回は"All repositories"か"Only select repositories"にします
- "Only select repositories"にした場合は、リポジトリも指定しましょう
 
- Permissions
- Repository permissions
- Repository accessを変更した時に表示されます
- ここで権限を設定する事ができます
- Issueを作るにはIssuesと書かれた権限を、
 "Read and write"にする必要があります
 
 
- Repository permissions
Generate tokenを押し、トークン作成完了です!
押した後に表示されるトークンIdはちゃんと保管しましょう。
調べてないのでわからないですが、再発行できない可能性があります。
JavascriptでIssueを作る!
さてIssueを作成していきましょう。
const user = 'GitHubユーザー名';
const repo = 'リポジトリ名';
const token = 'トークンId';
async function CreateIssue(title, body, labels) {
    const data = {
        title: title,
        body: body,
        labels: labels,
    };
    try {
        const response = await fetch(`https://api.github.com/repos/${user}/${repo}/issues`, {
            method: 'POST',
            body: JSON.stringify(data),
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${token}`
            }
        });
        
        if (response.status === 201) console.log('Issue created successfully!');
        else console.error(`Error creating issue: ${response.status} - ${await response.text()}`);
    }
    catch (error) {
        console.error('Error creating issue:', error);
    }
}
コードのテスト
コードのテストをしてみましょう!
以下のコードを実行してみると....
CreateIssue("Test issue", "これはテストで作成しているよ!", []);
最後に
初めて記事を作り勢いだけで書いたので、
拙い部分や読みにくい部分があるかと思います。
ご了承ください。
最後まで閲覧いただきありがとうございました!




