ブログのサイト設定はすべて数個の JSONC ファイルの中にあります。トップページのモジュール、ナビゲーション、About、サブスクリプション、サービス……フィールドは数百個、その多くが多言語対応。ファイルを直接編集するのは間違いのもとですし、変えた結果がどう見えるかも分かりません。astro-blog-admin の変数エディタは、この設定をカードフォームとして描画します。目に入るのは JSON のキー名ではなく、「サブタイトル」「リンク URL」のような人間のためのラベルです。
エディタの見た目
カード式フォーム
設定は構造に沿って自動でカードに分かれます。オブジェクトごとに 1 枚のカード、配列は展開できる項目の列、文字列は入力欄、真偽値はスイッチ、色はテキスト欄とスウォッチの二重入力。新規項目の追加では、空の行を先に入れるのではなく、まずダイアログで名前を入力させます。アイコングリッド系のリスト(カルーセルのロゴなど)には専用の編集ダイアログがあります。
画像フィールドにはプレビュー
画像 URL のフィールドはすべて、ラベルの上にプレビューを表示します。入力に合わせてリアルタイムに更新され、読み込みに失敗すれば自動で隠れます。アイコンとアバターのプレビューは 1:1 の正方形に全体を収めて切り取らず、通常の画像は横長のプレビューです。差し替える前に絵が見えるので、URL の貼り間違いは一目で分かります。
多言語フィールドの編集方法
編集言語カプセル
多くのフィールドの値は 1 文ではなく、5 言語分の文言です。エディタ上部には「編集言語」カプセルがあり、記事エディタとまったく同じコンポーネントです。タップで切替、長押しでドラッグして言語を選べます。選んだ言語に合わせて、ページ上のすべての多言語フィールドはその言語だけを表示・編集し、他の言語の訳文を上書きすることは決してありません。
切替でリフレッシュも揺れもなし
言語切替はフィールドの値をその場で差し替えるだけ——ページの再構築もスクロールの飛びもありません。保存も同じです。新しいファイルバージョンを記録するだけでページ自体は一切リフレッシュされず、結果は画面内の小さなトーストで成功・失敗を知らせます。管理画面のどこにも、「OK」を押させるネイティブダイアログは存在しません。
保存のルール
エディタはリポジトリのソースファイルを読み、保存時は API 経由でバージョン(sha)を検証して書き戻します。ファイルが別の場所で変更されていれば、黙って上書きせず、再読み込みを促して保存を止めます。1 つ正直に言うべきトレードオフもあります。ビジュアル保存では JSONC ファイル内のコメントが失われるため、コメントが必要なときのために「生テキスト」タブを残し、手編集に戻れるようにしています。
次回はこの管理画面のもう半分——画像ホスティングと、1 つのコードベースを 2 つのプラットフォームで動かすデプロイ方式です。
