設定ファイルと画面UI間の齟齬を吸収した。
ブツ
インストール&実行
NAME='Electron.MyLog.20220908121018'
git clone https://github.com/ytyaru/$NAME
cd $NAME
npm install
npm start
準備
- GitHubアカウントを作成する
repo
スコープ権限をもったアクセストークンを作成する- インストール&実行してアプリ終了する
db/setting.json
ファイルが自動作成される
db/setting.json
に以下をセットしファイル保存するusername
:任意のGitHubユーザ名email
:任意のGitHubメールアドレスtoken
:repo
スコープ権限を持ったトークンrepo
:任意リポジトリ名(mytestrepo
等)address
:任意モナコイン用アドレス(MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu
等)
dst/mytestrepo/.git
が存在しないことを確認する(あればdst
ごと削除する)- GitHub上に同名リモートリポジトリが存在しないことを確認する(あれば削除する)
実行
npm start
で起動またはアプリでCtrl+Shift+Rキーを押す(リロードする)git init
コマンドが実行されるrepo/リポジトリ名
ディレクトリが作成され、その配下に.git
ディレクトリが作成される
- createRepo実行後、リモートリポジトリが作成される
GitHub Pages デプロイ
アップロードされたファイルからサイトを作成する。
- アップロードしたユーザのリポジトリページにアクセスする(
https://github.com/ユーザ名/リポジトリ名
) - 設定ページにアクセスする(
https://github.com/ユーザ名/リポジトリ名/settings
) Pages
ページにアクセスする(https://github.com/ユーザ名/リポジトリ名/settings/pages
)Source
のコンボボックスがDeploy from a branch
になっていることを確認するBranch
をmaster
にし、ディレクトリを/(root)
にし、Saveボタンを押す- F5キーでリロードし、そのページに
https://ytyaru.github.io/リポジトリ名/
のリンクが表示されるまでくりかえす(数分かかる) https://ytyaru.github.io/リポジトリ名/
のリンクを参照する(デプロイ完了してないと404エラー)
すべて完了したリポジトリとそのサイトが以下。
やったこと
- コメントアウト削除
- ネットワーク通信系
https
,axios
パッケージ関係
- ネットワーク通信系
- 不要ファイル削除
- SQLite3ファイル関係
mylog-uploader.js
mylog-downloader.js
- SQLite3ファイル関係
- index.html
<h3><code>db/setting.json</code>ファイル</h3>
の</h3>
閉じタグスラッシュ忘れ環境
にバージョン表を追加した
- versions-to-html.js新規追加
- Electronの
process.versions
をHTML化する
- Electronの
つぶやく
,削除
ボタン- setting.jsonデータ存在チェック
- 真偽から
throw new Error()
に変更 - 呼出元
try catch
化
- 真偽から
- setting.jsonデータが存在しなければ例外発生
git
コマンドを回避する- createRepoを回避する
つぶやく
ボタン押下後のテキストエリア削除バグ修正(#post
→#content
)
- setting.jsonデータ存在チェック
- Toastify
- 改行コード表示
css/toastify.css
の.toastify
にwhite-space: break-spaces;
を追記した
- コンソール出力を修正した
util/toaster.js
のconsole.debug
をconsole.log
/console.error
にした
- 改行コード表示
- setting.jsonファイル/画面UI間の齟齬を吸収するようにした
気になってたこと
- setting.jsonのファイルと画面間の整合性
setting.jsonのファイルと画面間の整合性
保存ボタンを押すまでは画面/ファイル間で異なる値になり、以下のようなことができてしまう。
- 保存せず実行できてしまう(
git init
,git push
) - 保存せず終了できてしまう
保存せず実行できてしまう(git init
, git push
)
画面で表示している値でなく、setting.jsonファイルに保存された値で実行してしまう。UI的には正しい値なのにファイル値が不正なため実行時エラーになりうる。そうなればユーザは混乱するはず。
保存せず終了できてしまう
前回終了時はちゃんと動作するsetting.jsonの値だったのに、今回起動したら前回最後に保存ボタンを押したときの古い値であり動作しない。なんてことが起こりうる。
解決案
UI入力した値のうち、最後に成功した値を毎回自動保存するよう修正する。
- アプリ起動する
- setting.jsonを読み込む
- setting.jsonを画面UIにセットする
- 画面UIに任意の値を入力する
つぶやく
または削除
する- 画面UI値を渡す
git init
,git push
する- 成功し、かつ前回のファイル値と異なるなら上書き保存する(成功かつ変更されているときだけ保存する)
成功かつ変更されているときだけ保存するのがポイント。
- 成功判断:例外発生せず完了したとき
- 変更判断:
- ファイル値と画面値の2つもつ
- ファイル値と画面値を比較する
- 2つのjsonに差異があれば変更ありとみなす
変更判断するためにはObjectを比較する必要がある。
// いつも上書きされてしまう……
Object.is(setting, uiSetting)
// これならOK
const a = JSON.stringify(Object.entries(setting).sort())
const b = JSON.stringify(Object.entries(uiSetting).sort())
return a === b;
なぜかObject.is
だと常に偽だった。もしかするとユーザが直接セットしていないプロパティ(hasOwnProperty
)も比較しているのか?
よくわからないので一致するコードを書いた。
これでムダに保存ボタンを押さずに済むし、使えない値が自動で上書きされる心配もない。画面に表示されている値と違う値が使われて謎バグに悩まされることもない。
ただ、不正な値のとき保存ボタンを押すと保存されてしまう。それをやめさせたいなら保存ボタンをなくすのが簡単だと思う。が、アドレスなどアップロード関係でない値を任意のタイミングで保存したいケースもあると思うので残してある。