
目次
Notionのステータスから、使わなくなった選択肢を消したことはあるでしょうか。
「保留」を作ったけど結局使わなかった。「差し戻し」を「要修正」に統一したい。運用していれば、整理したくなる場面が出てきます。
このとき、その選択肢が入っていた行がどうなるかを確かめました。予想と違いました。しかも、セレクトとステータスで結果が逆になります。
消した選択肢の行は、空にならない
結論から書きます。
「完了」が「未着手」になりました
ステータスの列に「未着手」「進行中」「完了」の3つを用意して、それぞれの値が入った行を3つ作りました。そこから「完了」という選択肢だけを削除しました。
| 行 | 消す前 | 消したあと |
|---|---|---|
| 行1 | 未着手 | 未着手 |
| 行2 | 進行中 | 進行中 |
| 行3 | 完了 | 未着手 |
空欄になるだろう、と思っていました。実際には、先頭の選択肢に書き換わりました。
空欄より、こちらのほうが危ない
なぜ危ないのか。空欄なら、見れば分かるからです。値が入っていない行があれば、何かあったと気づきます。
別の値に化けていると、気づきません。終わっていた案件が、未着手として一覧に並びます。集計すれば、完了件数が減って未着手件数が増えます。
しかも、その数字はもっともらしく見えます。件数の合計は変わっていないので、検算しても引っかかりません。
誰の操作だったかも残りません
もう1つ厄介なのが、この書き換えは列の設定を変えた副作用として起きることです。行を編集したわけではありません。
その行の更新履歴を見ても、誰かが値を変えた記録としては残りにくい。あとから追いかけるのが難しくなります。
セレクトとステータスで、結果が逆になる
同じことをセレクトの列でも試しました。
セレクトは、きちんと空になる
セレクトの列に「A」「B」「C」を用意して、それぞれの値が入った行を3つ作り、「C」だけを削除しました。
| 列の種類 | 使われている選択肢を消すと |
|---|---|
| セレクト | その行は空欄になる |
| ステータス | その行は先頭の選択肢に変わる |
同じ操作なのに、結果が逆です。
理由は、たぶん「空を許すかどうか」
ステータスは、必ずどれか1つが選ばれている列です。新しい行を作ると、何も指定しなくても初期値が入ります。空という状態を持たない作りになっています。
だから、値の行き場がなくなったときに空にできない。どこかに寄せるしかなくて、先頭に寄せている。そう考えると筋は通ります。
セレクトは空を許すので、素直に空欄になります。
使い分けに跳ね返ります
以前、外からデータを入れると選択肢が勝手に増えるという話を書きました。そこでは、増えてほしくないものはステータスで持つほうが安全だと書いています。
それは今も変わりません。ただ、ステータスは選択肢を消すときの危険が高いという面も持っています。入れるときは厳しく、消すときは静かに書き換える。そういう性格だと理解しておくのがよさそうです。
図にすると、こうなります
選択肢を送ると、送らなかったものが消える
外から列の設定を書き換えるときに、もう1つ危ない挙動がありました。
一部だけ送ったら、残りが消えました
「A」「B」「C」の3つがあるセレクトの列に、「A」だけを指定して送りました。Aの設定を変えるつもりです。
結果、選択肢は「A」だけになりました。BとCが消えています。
つまり、選択肢の指定は「足す」ではなく「丸ごと置き換える」ということです。送らなかったものは、消したことになります。
これは事故になります
選択肢を1つ足したいとき、その1つだけを送りたくなります。素直な発想です。
それをやると、既存の選択肢が全部消えます。そして前の章のとおり、使われていた選択肢が消えれば、行の値も巻き込まれます。
セレクトなら空欄、ステータスなら先頭の値に。データベース全体で起きます。
正しいやり方
先に現在の選択肢を全部取得して、そこに新しいものを足した完全な一覧を送ります。既存のものは、識別子も一緒に送ると確実です。
手間は1ステップ増えるだけです。取得してから送る。これを飛ばさないでください。
グループは指定しても効かない
ステータスには、選択肢をまとめるグループがあります。未着手系、進行中系、完了系のような分類です。
新しい選択肢は、全部「未着手」系に入る
選択肢を足すと、グループを指定しなければ「To-do」に入りました。「保留」も「差し戻し」も、まとめてそこです。
完了系に入れたい選択肢があっても、自動では振り分けられません。
グループの指定は、受け取られて無視されます
では指定すればいいのかというと、ここが厄介でした。
グループの中身を指定して送ると、成功が返ってきます。それなのに、中身は変わっていません。試しに存在しないグループ名を送っても、同じく成功が返ってきました。
エラーにならないので、動いたと思ってしまいます。読み返して初めて、何も変わっていないことに気づきます。
効いた指定のしかた
1つだけ効く形がありました。グループの側から指定するのではなく、選択肢の側に「どのグループか」を書いて送ると、その選択肢が移動します。
ただしこの形は、選択肢の一覧を送ることになります。前の章のとおり、送らなかった選択肢は消えます。グループを直すときこそ、完全な一覧を送ってください。
「ステータスは外から作れない」はもう古い
最後に、情報の更新をひとつ。
作れました
ステータスの列は外から作れない、という説明をよく見かけます。今回試したところ、作れました。選択肢を後から追加することもできています。
作ると、「Not started」「In progress」「Done」の3つの選択肢と、それに対応する3つのグループが自動で付いてきます。
日本語の名前にしたいときは、作り直す
自動で付く選択肢は英語です。日本語にしたい場合は、選択肢の一覧を丸ごと日本語で送り直すことになります。
ここでも全置換なので、まだ行が入っていない段階でやるのが安全です。運用を始める前に整えておくと、あとが楽になります。
事故を起こさない手順
ここまでを踏まえた手順をまとめます。画面から操作する場合にも当てはまります。
1. 消す前に、使っている行を移す
いちばん大事なのがこれです。選択肢を消す前に、その選択肢が入っている行を絞り込んで、別の値に付け替えます。
付け替えてから消せば、巻き込まれる行がゼロになります。行が1つも使っていない選択肢なら、そのまま消して問題ありません。
絞り込んで件数がゼロであることを確認してから消す。この順番を守ってください。
2. 外から書き換えるなら、取得してから送る
選択肢の指定は全置換です。足したいときも、現在の一覧を取得して、そこに足した完全な形で送ります。
一部だけ送るのは、残りを消すのと同じ意味になります。
3. 列の設定を変える前に、行を控える
大きなデータベースで選択肢を整理するときは、作業の前に行の状態を書き出しておきます。
選択肢の書き換えは元に戻せますが、巻き込まれて書き換わった行の値は、自動では戻りません。控えがあれば、比べて直せます。
4. ステータスは、最初に整える
運用を始めてからステータスの選択肢を直すのは、ここまでのとおりリスクがあります。
使う種類と、その並び順を先に決めておく。並び順が大事なのは、何かあったときに寄せられる先が「先頭」だからです。先頭を「未着手」にしておけば、化けても不自然になりにくいと思います。
よくある質問(FAQ)
選択肢を消したあと、行の値を元に戻せますか。
選択肢を作り直しても、行の値は自動では戻りませんでした。書き換わった行を1つずつ直すことになります。消す前に、その選択肢を使っている行を控えておくと復旧が楽です。
どの選択肢に寄せられるかは決まっていますか。
今回の検証では、先頭の選択肢に寄りました。3つ目を消したときも先頭に戻っています。ただし並び順を変えた場合まで試せていないので、先頭が必ずそうなるとまでは言い切れません。
セレクトなら安全ということですか。
空欄になるので気づきやすい、という意味では安全です。ただし値が失われることに変わりはありません。どちらにしても、消す前に行を付け替えるのが確実です。
グループを分けたいのですが、うまくいきません。
グループの側から指定すると、成功が返るのに反映されませんでした。選択肢の側にどのグループかを書いて送ると移動します。その際は選択肢の完全な一覧を送ってください。一部だけ送ると残りが消えます。
ステータスの選択肢を日本語にしたいです。
作った直後は英語の選択肢が3つ入っています。日本語にする場合は、選択肢の一覧を丸ごと日本語で送り直すことになります。行が入る前にやっておくのが安全です。
画面から消す場合も同じことが起きますか。
今回確かめたのは外から操作した場合です。ただ、値の行き場がなくなるという状況は同じなので、消す前に行を付け替えておく手順はどちらでも有効だと思います。
消す前に、絞り込んで件数を見てください
その選択肢を使っている行が何件あるかを先に確かめて、別の値に付け替えてから消す。件数がゼロになっていれば、巻き込まれる行はありません。順番を変えるだけで防げます。