X に投稿したこちらのやつ
docker 版の #プリザンター いろいろ試し中(1.14.13)。ログインユーザーのタイムゾーンが未設定(テナントのタイムゾーンも未設定)だと、計算式(拡張)でエラーになるっぽい(使ったのは$CONCAT)。計算式(既定)だけなら大丈夫。タイムゾーン設定したら動いた。
— Junichi MORI (@junichim) 2025年4月5日
を改めて整理して、まとめておきます。
- Pleasanter 1.4.13.0, Docker 版
なお、 Docker コンテナのタイムゾーンはこちらの記事に書いたように、 postgres コンテナ / Pleasanter コンテナ / Service.json の DefaultTimeZone はすべて Asia/Tokyo を指すようにしています。
準備
まず、準備として、計算式(拡張)と計算式を設定したテーブルを用意しておきます。
サイトの新規作成で新規フォルダを追加し、その中に『記録テーブル』を追加します(フォルダのアクセス権は、全ユーザーが書込可としました)。これに対して、『テーブル管理』で、『エディタ』を選択して、『分類A』と『数値A』および『数値B』を追加します。また、これらの追加した項目の『詳細設定』を使って、
- 分類A:読み取り専用
- 数値A:表示名を『金額』
- 数値B:表示名を『計算結果』、かつ読み取り専用
としておきます。
次に、『計算式』タブをクリックし、『新規追加』を行います。
ひとつは、『金額』を10倍したものを『計算結果』に設定するもの
もうひとつは、計算方法として『拡張』を選び、『タイトル』に『です』と文字列を追加して、『分類A』に設定するもの
としておきます。
こんな感じですね。
あと、計算結果をすぐに確認したいので、『エディタ』で『タイトル』と『金額』に対して、詳細設定から『自動ポストバック』を有効にしておきます。
考えられる組み合わせ
さて、テストする前に落ち着いて考えてみると、以下の 2 つのパラメータが存在します。
- テナント設定のタイムゾーン
- ユーザー設定のタイムゾーン
各タイムゾーンの設定値は、『未設定』(空欄)と『 Japan Standard Time 』(以下、 JST と略します)の 2 種類とします。
なので、合計 4 パターンがありそうです。ということで、これでテストしてみます。
テスト:テナント設定のタイムゾーン:未設定
テストで利用するユーザーは、書籍『入門プリザンター』でインポートしたサンプルユーザーになります。これをテストに応じて、タイムゾーン設定を変更して利用しています。
ユーザー設定のタイムゾーン:JST
ユーザー設定のタイムゾーンとして JST を設定しているユーザーでログインします。
この状態で、先ほどのテーブルを開いて、レコードの『新規作成』を行います。『タイトル』と『金額』に適当な値を入力すると、
こんな感じに、『分類A』と『計算結果』に値が表示されます。
一応、このレコードを保存しておきます。
ユーザー設定のタイムゾーン:未設定
次に別のユーザーでログインします。このユーザーのタイムゾーン設定を空欄としておきます。
この状態でさきほどのテーブルを開いて、新規作成を行うとすると
となり、新規作成ができません。
ちなみに、さきほど作成に成功したレコードを開くと、
のように、開くことはできます。が、この状態から『金額』を変更しようとすると、さきほどと同様にエラーが表示されて、更新ができなくなってました。
計算式(拡張)を削除
次に、『テーブルの管理』権限を持つユーザーでログインしなおして、『計算式(拡張)』を削除します。
この状態で、先ほどのタイムゾーン未設定のユーザーログインしなおして、レコードの新規作成を行うと、問題なく開きます。同様に、値を入力すると
『分類A』は計算式を削除したので、空欄のままですが、『計算結果』のほうは正しく求められていることがわかります。もちろん、このままレコードを作成できました。
このことから、タイムゾーン設定が、計算式(拡張)に影響していることが推測されます。
テスト:テナント設定のタイムゾーン: JST
次に、計算式(拡張)を最初と同じ状態に戻しておきます。さらに、テナントの管理を開いて、タイムゾーンを JST に設定しておきます。
この状態にして、さきほどと同じテストを行います。
ユーザー設定のタイムゾーン:JST
これは、さきほどと同じく問題なく、レコードの追加ができました。
ユーザー設定のタイムゾーン:未設定
このケースですが、ユーザーのタイムゾーンが未設定だと、テナントのタイムゾーンが設定してあっても、やはりエラーとなりました。
おまけのテスト:ユーザーのタイムゾーン設定:不正な値
テナントのタイムゾーン設定が JST のまま、ユーザーのタイムゾーンが『? 東京(標準時)』となっている場合を試します。
なぜこのようなユーザーが存在しているかというと、テストの最初のところで書いたように、ユーザーは手作業で追加したのではなく、書籍『入門プリザンター』で利用できるサンプルデータをインポートしたものとなっていました。ユーザーのインポートに使った CSV データを見てみると、
のように、タイムゾーンが『東京(標準時)』となっています。
ここで Pleasanter では下記にあるように、タイムゾーン表記は動作している OS に依存しているようです。
FAQ:プリザンターでサポートしている言語とタイムゾーンのパラメータの設定値を知りたい | Pleasanter
このため、docker (Linux) 版の Pleasanter でこのユーザーデータをインポートすると、 Linux のタイムゾーンの選択肢にない値となるため、上記の画面のように、頭に『?』がついたデータとして表示されたのではないかと思われます。
推測ですが、たぶん、このサンプルデータは Windows 上で Pleasanter を動かすことを(暗黙かもしれませんが)想定しており、このためタイムゾーン表記も Windows 用になっているものだと思われます。
ということで、このユーザーでログインを行い、新規作成を行ってみると、やはり画面下部にエラーが表示されました。
まとめ
ということで、上記の結果をまとめると、少なくとも手元の環境では
- ユーザーのタイムゾーン設定が未設定または想定外の値だと、計算式(拡張)がエラーとなる
- ユーザーのタイムゾーン設定が未設定または想定外の値でも、計算式(既定)は正しく動作する
- 上記の挙動に、テナントのタイムゾーン設定は関係ない
ということになるかと思います。
まあ、ユーザー設定をちゃんとしろ、ってことなんですかね。ご参考までに。