ページの作成と編集
ページの URL 階層、作成、編集、移動、削除、公開範囲
Crowi のすべてのコンテンツは「ページ」です。ページは Markdown で書かれた
本文を持ち、その URL パスがそのまま階層構造 になります。フォルダのような
明示的なツリー構造はなく、/(スラッシュ)区切りのパスだけでページ同士の
親子関係が表現されます。
URL がそのまま階層になる
Crowi のページにはディレクトリという概念がありません。代わりに、ページの
path に含まれる / が階層の区切りとして扱われます。
| パス | 意味 |
|---|---|
/ | トップページ(ルートのポータル) |
/dev | 「dev」ページ |
/dev/setup | 「dev」配下の「setup」ページ |
/dev/setup/macos | さらにその配下のページ |
/dev のような中間パスは、ページとして存在していなくても構いません。
/dev/setup/macos だけを作成しても、/dev 配下のページ一覧画面では
/dev/setup/macos が子ページとして表示されます。
ポータルページ
末尾が / で終わるパス(例: /dev/)は ポータルページ と呼ばれる
特別なページです。
- ポータルページは、そのパス配下のページ一覧と一緒に表示されます。 「ディレクトリのトップに置く案内ページ」として使えます。
- ポータルページの公開範囲は常に Public に強制されます。配下の ページ一覧を見せる性質上、限定公開にはできません。
子ページはあるが ポータル本文 (ポータルドキュメント) が存在しない
パスを開いた場合、ページ一覧の見出しはフォルダアイコンと末尾の /
を伴って表示されます (例: 📁 awards /)。パンくず (Breadcrumb) で
パス全体が示されるため、サブタイトルでパスを重複表示することは
ありません。ポータル本文が存在する場合は、その本文が「Portal page」
カードに収められ、通常のページ操作付きで子ページ一覧の上に表示
されます。
Tip: チームやプロジェクトごとに
/team-a/のようなポータルページを 1 枚用意しておくと、新メンバーがそこを起点に関連ページをたどれます。
通常ページをポータルにする(ポータル化)
すでに /some-page(末尾スラッシュなし)に書いてしまったページを、その
フォルダのポータルにしたいことがあります。ページ右上の「⋮」メニューから
「ポータルにする」 を選ぶと、確認のうえで /some-page を /some-page/
へ移動し、ポータルとして表示されるようになります。
- 子ページ(
/some-page/...)はすでに正しい位置にあるため移動しません。 - ポータル化では元の URL にリダイレクトを残しません。
/some-pageは 空きパスになります(後述の「スラッシュ有無の二重作成」ガードにより、 そこへ別ページが作られて二重状態に戻ることはありません)。
また、/some-page(コンテンツ)が存在する状態で /some-page/ を開くと、
「Create Portal」ボタンの代わりに 「このパスにはコンテンツがあります。
ポータルにしますか?」 という案内が表示され、ワンクリックで同じポータル化を
実行できます。実行後は同じ URL がそのままポータル表示に切り替わります。
スラッシュ有無の二重作成はできない
/x(通常ページ)と /x/(ポータル)は別物ですが、両方を併存させると
混乱の元になります。そのため、片方が存在するときに対になるもう片方を
新規作成することはできません。
/xがあるとき/x/を、/x/があるとき/xを、エディタの新規作成・ API での作成・リネームのいずれでも作れません(エラーになります)。- 代わりに上記の ポータル化(
/x→/x/)を使ってください。自分自身を ポータル化する移動は許可されています。 - すでに存在する二重状態のデータはそのまま残ります(この制約は今後の 新規作成のみを対象とし、既存データを自動で整理することはありません)。
ページを作成する
空のページ一覧からも作成できます: 子ページが 0 件のフォルダや、 本文がまだないポータルを開いたときも、一覧に 「ページ作成」 ボタンが 表示されます(ゴミ箱・ルート・他ユーザーの領域では非表示)。押すと現在の パスがあらかじめ入力された作成画面が開きます。
新しいページは、存在しない URL にアクセスして作成するか、編集画面から パスを指定して作成します。本文を空のまま保存することもできます。
ページ名(パス)にはいくつかの予約・禁止ルールがあります。以下のような パスは作成できません。
/_で始まるパス(/_edit/_search/_history/_notificationsなど システムが使う予約パス)/admin/login/logout/register/me/trash/installer/files/commentsなどの予約語で始まるパス^$*+?#を含むパス.mdで終わるパス、/editで終わるパス//(連続スラッシュ)を含むパスhttp:///https://で始まるパス/user/<ユーザー名>/bookmarksのようなユーザーページ配下の予約パス
これらは内部ルートやファイルとの衝突を避けるための制約です。通常の ドキュメント用パスであればまず問題になりません。
下書き (draft) ページ
Crowi 2.x では、新しく作り始めたページは 下書き (draft) という状態で 始まります。下書きは「まだ公開していない、作成途中のページ」です。
- 「New page」などからページを作成すると、その時点で実体のあるページが
下書きとして作られます。下書きには本物の
pageIdが割り当たるため、 作成途中でも添付ファイルをアップロードできます。 - 下書きは 作成者本人にしか見えません。ページ一覧・検索・バックリンク からは他人の下書きが除外されます。リアルタイム共同編集の接続も作成者 以外は拒否されます。
- 編集画面で 「保存」 すると、ページは下書きから 公開 (published) へ切り替わり、閲覧権限を持つ全員に見えるようになります。
- この切り替えは 一方向 です。いったん公開したページを下書きへ戻す ことはできません。
Note: Crowi 1.x には「編集を始めると非公開ページを暗黙生成する」 仕組みがありましたが、v2 ではこの下書き状態がその役割を担います。 詳しくは RFC-0004 を参照してください。
同じパスへの競合
ある人が /docs/api に下書きを作っている間、別の人が同じパスへ新しい
ページを作ろうとすると、作成は拒否され「このページは ◯◯ さんが作成中
です」というメッセージが表示されます。
割り込みや強制的な引き取りの仕組みはありません。そのパスで作業したい 場合は、表示された作成者へ直接連絡して調整してください。元の作成者が 下書きをキャンセルするか公開すれば、競合は自然に解消されます。
Creating pages ビュー (/me/creating-pages)
自分が作成中の下書きは、Creating pages ビュー (/me/creating-pages)
で一覧できます。各下書きには作成開始時刻と、次の操作が表示されます。
- Edit — その下書きの編集画面へ移動し、続きを書けます。
- Cancel — 下書きを削除します(確認ダイアログあり)。削除すると そのパスが解放され、他の人がそのパスでページを作れるようになります。
下書きは自動削除されません。明示的に公開するかキャンセルするまで残り 続けるため、作りかけのページを失う心配はありません。逆に、不要な 下書きはこのビューから整理してください。
ページを編集する
ページの編集は /_edit?page_id=<ページID> の編集画面で行います。
Crowi 2.0 からこの編集画面は リアルタイム共同編集 に対応しており、
複数ユーザーが同時に同じページを編集できます。詳しくは
リアルタイム共同編集 を参照してください。
保存すると、その時点の本文が新しい Revision(履歴)として永続化されます。
ページ本体は常に最新リビジョンを指し、過去のリビジョンは
履歴とロールバック からたどれます。
ページ画面のヘッダー
Crowi 2.0 から、ページ閲覧画面のヘッダーが再構成されました。タイトルの 上下に 2 つの行が並び、「いま誰がこのページにいるか」と「これまで誰が このページに関わったか」を視覚的に分離して表示します。
ライブプレゼンス行(タイトルの上)
ページタイトルのすぐ上に、いまこのページを開いて見ている人 のアバターが リアルタイムで並びます。
- ページを開くと自動でプレゼンスチャネルに接続し、他の閲覧者のアバターが 数秒以内に表示されます。誰かが離脱するとアバターも消えます。
- 編集中の人 には、アバターの隅に
✏️バッジが付きます。これは その人がリアルタイム共同編集のエディタを開いて いることを示します。 - アバターは最大 5 人まで並び、それを超えると
[+N]に畳まれます。[+N]をクリックすると、現在の全閲覧者を一覧するポップオーバーが 開きます(自分には「(あなた)」ラベルが付きます)。 - 自分しかいないときは、この行ごと表示されません。 自分が見ていることは ブラウザのタブが示しているため、自分 1 人だけのアバターは出しません。
- 狭い画面(モバイルなど)では、この行は
[👁 N]のチップに畳まれ、 タップするとシートで閲覧者一覧が開きます。 - プレゼンスのリアルタイム接続に失敗した場合は、この行は静かに隠れます。 ページの他の部分(本文・メタ行・コメント)は通常どおり動作します。
Note: ライブプレゼンスは「いま見ている人」のシグナルです。過去に 閲覧した人の一覧は、下のメタ行の「閲覧」チップから確認できます。
メタチップ行(タイトルの下)
タイトルの下のメタ行は、作成者・更新時刻といった静的な情報と、 4 種類の クリックできるチップ で構成されます。
[作成者アバター] 作成者名 · ⏱ 5分前に更新 · [👍 1] いいね · [👁 2] 閲覧 · [💬 2] コメント · [🔗 3] バックリンク各チップは [アイコン][数][ラベル] の統一されたピル形式で、クリックすると
それぞれ次の動作をします。
| チップ | クリックすると | 内容 |
|---|---|---|
| いいね | 「いいねした人」モーダルが開く | このページにいいねしたユーザーの一覧 |
| 閲覧 | 「閲覧した人」モーダルが開く | このページをこれまでに開いたユーザーの一覧 |
| コメント | コメントセクションへスクロール | ページ下部のコメント欄へ移動 |
| バックリンク | バックリンク一覧へスクロール | ページフッターのバックリンク一覧へ移動 |
- 数が 0 のチップ はグレーで表示され、クリックできません。ホバーすると 「まだいいねがありません」などのツールチップが出ます。チップが消えずに 残るため、行のレイアウトはページの状態によらず安定します。
- いいねボタンを押すと、いいねチップの数はその場で更新されます。
Tip: コメント・バックリンクのチップは、長いページで該当セクションへ 素早く移動するためのショートカットです。スクロール後はその見出しに フォーカスが移るため、キーボード操作でもそのまま読み進められます。
v1.x の「閲覧者アバター行」はどこへ?
Crowi 1.x では、ページタイトルの下に「このページを閲覧した人」の アバターが重なって並ぶ行がありました。Crowi 2.0 ではこのアバター行は 廃止されました。
その役割は、メタチップ行の 「閲覧」チップ + モーダル に置き換わって います。閲覧チップをクリックすると、これまでにこのページを開いた ユーザーの一覧がモーダルで開きます。
この変更は意図的な整理です。タイトルの上に新設された ライブプレゼンス行 が「いま誰がいるか」の主シグナルになったため、「過去に誰が見たか」は コンパクトなチップに集約し、2 つのアバター列が紛らわしく並ぶのを 避けています。
設計の詳細は RFC-0005 を参照してください。
ページを移動する(リネーム)
ページの URL を変更する操作を「リネーム」と呼びます。リネームすると、 そのページに紐づくすべてのリビジョンのパスも一緒に書き換えられます。
リネーム時には以下の点に注意してください。
- 移動先のパスが既存ページと衝突する場合、その既存ページが「リダイレクト 専用ページ」であれば自動で削除して上書きできます。それ以外のページが 存在する場合はリネームが拒否されます。
- リダイレクトページの作成を選ぶと、元の古い URL に「新しい URL へ
転送する」だけのページが残ります。外部からの古いリンクが切れないように
したいときに有効です。ただし移動先がポータルページ(末尾
/)の場合は、 リダイレクトページは作成されません。
Tip: 親パスをまとめて移動したいとき(例:
/old-team/配下を/new-team/配下へ)は、サブツリー全体を一括リネームできます。 各ページの衝突チェックが事前に行われ、1 つでも衝突があれば全体が 中止されます。
ページを削除する
Crowi の削除には 2 段階あります。
- 論理削除(ゴミ箱へ移動): ページのステータスを「削除済み」に変更し、
パスを
/trash/配下へ移動します。元のパスにはリダイレクトページが 残ります。論理削除されたページは ゴミ箱 から復元できます。 - 完全削除: ページ本体・リビジョン・コメント・添付ファイル・ ブックマーク・アクティビティをすべて物理的に削除します。復元は できません。
なお、/user/<ユーザー名> 形式のユーザーページ本体は削除できません
(ユーザーに紐づく特別なページのため)。
公開範囲(grant)
各ページには公開範囲(grant)を設定できます。Crowi 2.x では次の 3 種類が 利用できます。
| 公開範囲 | 内部値 | 説明 |
|---|---|---|
| Public | 1 | すべてのログインユーザーが閲覧・編集できます。デフォルト。 |
| Anyone with the link | 2 | 限定公開。明示的に許可されたユーザーのみアクセスできます。 |
| Just me | 4 | 作成者のみがアクセスできます。 |
Note: コードベース上には
Specified users only(特定ユーザーのみ、 内部値3)という公開範囲の定義も残っていますが、現行の UI では 選択肢として有効化されていません。実際に選べるのは Public / Anyone with the link / Just me の 3 種類です。
公開範囲は次のように扱われます。
- 公開範囲が Public 以外のページは、閲覧・編集・コメント・履歴参照の いずれの操作でも grant チェックが行われます。
- アクセス権のないユーザーがページ ID を直接指定してアクセスしても、 ページの存在自体を伏せるため「ページが見つかりません」として 扱われます(権限の有無を外部に漏らさない設計です)。
- ポータルページ(末尾
/)は常に Public になります。
公開範囲はページ編集時に変更できます。Public から限定公開へ切り替えると、 操作したユーザーが許可ユーザーとして登録されます。
公開範囲の視覚シグナル
Public 以外の公開範囲が付いたページには、共有設定がひと目でわかる ように 2 つの視覚的なシグナルが添えられます。
- 画面ヘッダーのすぐ下に、4px の細い アクセントストリップ が 表示されます。限定公開 (リンクを知っている人のみ) は濃い紫、 Just me / Specified は濃いクールグレーに着色されます。Public は ストリップが出ません。
- ページタイトルの隣に小さな grant チップ が並び、アイコンと ラベル — Restricted は 🔗「Link only」、Owner / Specified は 🔒「Just me」/「Specified」— を表示します。チップのボーダーと 文字色は同じアクセント色を引き継ぎます。
両者は --page-grant-accent という同じトークンを参照しているため、
ストリップとチップの色が食い違うことはありません。Public ページに
意図的に視覚シグナルを付けていないのは、チーム内で読めるのが
標準的な状態であり、装飾を加える必要がないためです。
関連ページ
- Markdown 記法 — ページ本文で使える記法
- リアルタイム共同編集 — 同時編集の使い方
- 履歴とロールバック — リビジョンの確認と復元
- ゴミ箱 — 論理削除したページの復元