回答編集履歴
2
無理だったので冒頭に追記
answer
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
実際にGlitch上でNode.jsのプロジェクトを作成して、
|
2
|
+
`fs.writeFileSync`を試しましたが、ファイルは作られていませんね。
|
3
|
+
|
4
|
+
という訳で、そのレンタルサーバ内でファイルを作って更新することは無理です
|
5
|
+
誰か別の媒体に書き出す仕組みが必要になりますね。
|
6
|
+
|
7
|
+
一応下記、Discord.js等でローカルに持ち帰って使う事も考えられるので、
|
8
|
+
fsでファイルが書き出せる想定での回答は残しておきます。
|
9
|
+
|
10
|
+
---
|
11
|
+
|
1
12
|
ゴールを考えた場合その方法では無理なので少し微修正が必要になります。
|
2
13
|
|
3
14
|
JSONファイルは1ファイル内で1個の値しか所持出来ないというルールが存在します。
|
1
文章を微調整
answer
CHANGED
@@ -28,9 +28,10 @@
|
|
28
28
|
JSONファイルを書き出すということは
|
29
29
|
ファイルの1文字目は`{`、ファイルの末尾が`}`になるわけです。
|
30
30
|
これにどんな文字を追記しても不正JSONファイルになります。
|
31
|
+
(※空文字と改行コードだけなら妥当なJSONファイルであり続けますが、そんな屁理屈は言っちゃダメですよ?)
|
31
32
|
|
32
33
|
なので「追記」というアプローチでは絶対に前へ進めません。
|
33
|
-
全く同じファイル名のJSONファイルを消して作り直しというアプローチを取る
|
34
|
+
全く同じファイル名のJSONファイルを消して作り直しというアプローチを取ることになります。
|
34
35
|
[fs.writeFileSync](https://nodejs.org/api/fs.html#fswritefilesyncfile-data-options)を使いましょう。
|
35
36
|
|
36
37
|
質問文のコードを活かしたまま書き換えるならこんな感じ
|
@@ -63,18 +64,22 @@
|
|
63
64
|
---
|
64
65
|
|
65
66
|
まぁJSONを捨てちゃうというのは手ですね。
|
67
|
+
実際問題の現場ではMySQL等の高速なデータベース使うとか、
|
68
|
+
特定ディレクトリ配下に当日の日付のファイルを大量に作って都度書き出していくみたいなアプローチになると思います。
|
66
69
|
|
70
|
+
その中でも今回はJSONとほぼ変わらないYAMLを紹介しましょうか。
|
67
|
-
[YAML](https://ja.wikipedia.org/wiki/YAML)
|
71
|
+
[YAML](https://ja.wikipedia.org/wiki/YAML)はJSONより前から存在するファイルフォーマットです。
|
68
|
-
これも
|
72
|
+
これもJSONと同じく1ファイル管理型です。
|
69
73
|
|
70
|
-
ですが、YAMLはPythonみたいにインデントで親子を表現する
|
74
|
+
ですが、YAMLはPythonみたいにインデントで親子を表現するという特徴があります。
|
71
|
-
インデントさえ揃えてしまえばファイル末尾にしれっと書き足しても妥当なYAMLファイルを維持出来
|
75
|
+
インデントさえ揃えてしまえばファイル末尾にしれっと書き足しても妥当なYAMLファイルを維持出来るわけですね。
|
72
76
|
|
73
77
|
そもそもの記述がJSONよりイケてるので
|
74
|
-
JSON使うのか分からないレベルです。
|
78
|
+
なんでJSON使うのか分からないレベルです。
|
75
79
|
(Node.jsのrequireでJSONを呼び出すのは速度が出るので、ロード時間のみ考慮するならばJSONが有利ですが)
|
76
80
|
|
81
|
+
しかしJavaScriptはネイティブでJSONを読み書きする機能が備わっていますが、
|
77
|
-
YAML
|
82
|
+
YAMLを読み書きする機能はないので、読み書きする為のライブラリが別途必要になります。
|
78
83
|
npmのサイトで探した感じ、メンテされてて使えそうなのはこの2つですね。
|
79
84
|
|
80
85
|
- [yaml](https://www.npmjs.com/package/yaml)
|
@@ -107,7 +112,8 @@
|
|
107
112
|
}
|
108
113
|
```
|
109
114
|
|
115
|
+
確認してませんが、
|
110
|
-
こんな感じにデータが吐き出されるようになるはずです。
|
116
|
+
多分こんな感じにデータが吐き出されるようになるはずです。
|
111
117
|
|
112
118
|
```yaml
|
113
119
|
- id: aaa
|