質問するログイン新規登録

回答編集履歴

2

無理だったので冒頭に追記

2021/11/25 04:34

投稿

miyabi-sun
miyabi-sun

スコア21478

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

文章を微調整

2021/11/25 04:34

投稿

miyabi-sun
miyabi-sun

スコア21478

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)というJSONより前から存在するファイルフォーマットがあります。
71
+ [YAML](https://ja.wikipedia.org/wiki/YAML)JSONより前から存在するファイルフォーマットす。
68
- これもファイルの考え方はJSONと同じく1ファイル管理型です。
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