setting.jsonに項目追加しデフォルト値をセットするようにした。

ブツ

インストール&実行

NAME='Electron.MyLog.20220905091742'
git clone https://github.com/ytyaru/$NAME
cd $NAME
npm install
npm start

準備

  1. GitHubアカウントを作成する
  2. repoスコープ権限をもったアクセストークンを作成する
  3. npm startでアプリ起動し終了する(db/setting.jsonファイルが自動作成される)
  4. db/setting.jsonに以下をセットしファイル保存する
    1. address:任意のモナコイン用アドレス
    2. username:任意のGitHubユーザ名(デフォルト値:git config --global user.name
    3. email:任意のGitHubメールアドレス(デフォルト値:git config --global user.email
    4. tokenrepoスコープ権限を持ったトークン
    5. repo.name:任意リポジトリ名(デフォルト値:ルートディレクトリ名+.Site
    6. 任意で以下もセットする
      1. repo.description: デフォルト値:著者のつぶやきサイトです。
      2. repo.homepage: (空なら自動でhttps://${username}.github.io/${repo.name}/
  5. dst/mytestrepo/.gitが存在しないことを確認する(あればdstごと削除する)
  6. GitHub上に同名リモートリポジトリが存在しないことを確認する(あれば削除するか別名にする)

実行

  1. npm startで起動またはアプリでCtrl+Shift+Rキーを押す(リロードする)
  2. db/setting.jsonファイルが作成される
  3. 画面UIにdb/setting.jsonの値が表示される
項目 デフォルト値 セットする時期 画面UI 意味
mona.address - setting.json生成時 暗号通貨モナコイン用アドレス
github.username git config --global user.name setting.json生成時 GitHub
github.email git config --global user.email setting.json生成時 GitHub
github.token - setting.json生成時 GitHub
github.repo.name {{ルートディレクトリ名}}.Site setting.json生成時 GitHub
github.repo.description 著者のつぶやきサイトです。 setting.json生成時 リポジトリ説明文
github.repo.homepage https://${username}.github.io/${repo.name}/ createRepo直前 リポジトリ関連URL
github.repo.topics ["website"] setting.json生成時 リポジトリのトピックス

今回はpushをコメントアウトしてある。詳しくはsrc/js/renderer.js参照。

今回やったこと

setting.jsonまわりをリファクタリングし、デフォルト値をセットするようにした。

項目追加

前回までは以下のとおりだった。

{
    "mona":{
        "address":""
    },
    "github":{
        "username":"",
        "email":"",
        "token":"",
        "repo":""
    }
}

それを以下のように追加した。

{
    "mona":{
        "address":""
    },
    "github":{
        "username":"",
        "email":"",
        "token":"",
        "repo":{
            "name":"",
            "description":"",
            "homepage":"",
            "topics":["", ""],
        }
    }
}

今回は以下の3項目を追加した。

デフォルト値を自動でセットするようにした

  • nameはデフォルト値を生成するようにした。ルートディレクトリ名+.Siteとする。
  • description
    • デフォルト値=著者のつぶやきサイトです。
    • README.mdにも同じテキストをセットする
  • homepage
    • 初回push時に空ならデフォルト値としてhttps://${username}.github.io/${repo.name}/セットする
    • README.mdにも同じテキストをセットする
  • topicsはAPIの実装をしていない。値をセットしても反映されない。将来の拡張用に用意しただけで実装するかは未定

さらに次の項目を初回時デフォルト値として自動取得する。

  • username: git config --global user.name
  • email: git config --global user.email

以下は手動でセットすること。

  • token: GitHubのsettingsページからアクセストークンを手動で作成し、その値をtokenにセットすればgit pushできる
  • address: モナコイン用アドレスを作成し、addressにセットすれば投げモナボタンが表示される

新しいWebAPIは極力使わずに実装する方針

topics, updateRepo, deleteRepo, authorizationのような新しいWebAPIの使用が必要になりそうな部分を一切やらず、徹底的に避けた。どれもGitHubのページで同じことができるはずなので、実装する必要性が低いのが理由。代わりが効くのでそこに力を割きたくなかった。

topics

べつに必須項目ではない。リポジトリを探すときに使えるかもしれないというだけ。一応JSONデータに用意したがcreateRepoとは別のAPIを叩かねばならない。GitHubで同じことができるので実装する必要なしと判断した。

authorization

トークン生成はauthorizationを使えば自動化できそうにみえるが、現在はWeb Application flowとやらを経由せねばならないらしい。コマンドで自動化するこはできず、ユーザが手動で操作せねばならない。それならGitHubのsettingsページで作成するのと大差ない。よって各自で作成してもらうことにした。本当は自動化したかった……。昔はできたのに……。

createRepo, updateRepo, deleteRepo

description, homepage, topicsも画面UIが必要かと思った。しかし、それらはリモートリポジトリのメタデータであり、変更するときはGitHub API updateRepoを使う必要がありそう。面倒なのでそれを実装せず、初回createRepo時のみセットすることとする。もし画面UIとして表示してしまったら、いつでも変更できるかのように期待されそうなので画面UIも作らないようにした。

さらにいえばrepo.nameを変更すると、dst/配下のディレクトリ名も変更しなおす必要がある。.git/config[remote "origin"]Urlのリポジトリ名部分も修正が必要。その後でgitコマンドがちゃんと実行できるか未知数。

リポジトリ削除deleteRepoもできたら便利だと思う。でもそのためにはdelete_repoスコープ権限をもつトークンが必要だし、新しいAPIを実行せねばならない。GitHubで同じことができるので実装する必要なし。