コンテンツにスキップ

エントリーをまとめて書き換える・取り出す

管理画面で 1 件ずつ直すと時間のかかる作業を、hakocms-cli でまとめて行えます。このページの例では、スペースを blog、コンテンツタイプ ID を posts とします。

  • hakocms-cli でログインし、スペースを決めておきます(hakocms-cli spaces use blog。CLI でログインする)。決めていないときは、コマンドごとに --space blog を付けます
  • エントリーを編集・公開できるロール(オーナー、管理者、編集者)を持っています
  • まとめて行う前に、少ない件数で試します。消す操作は元に戻せません

一覧は既定で 30 件です。--all で全部のページをたどります。

ターミナルウィンドウ
hakocms-cli entries list -t posts --all
絞り方 フラグ 例
状態 --status --status draft(下書き)、--status published,closed(どれかに当てはまるもの)
言葉 --query --query お知らせ(全文検索)
並び --orders --orders -updatedAt(更新の新しい順。- で降順)
件数 --limit --limit 100

状態の値は draft(下書き)、published(公開中)、closed(公開終了)、reserved(予約公開の待ち)です。公開中のエントリーに下書きがあるときは、一覧の[STATUS]に published_with_draft と表示されます。

--jq で、JSON を jq の式で絞れます。jq を別に入れる必要はありません。

ターミナルウィンドウ
hakocms-cli entries list -t posts --status draft --all --jq '.[].id'

1 行に 1 つ、ID が表示されます。

wsa5cu2ittq5
9ngd93ymaerr
hfyrv6ip6ol0

下書きのエントリーを、すべて公開します。上で取り出した ID を 1 つずつ entries publish に渡します。

ターミナルウィンドウ
hakocms-cli entries list -t posts --status draft --all --jq '.[].id' |
while read -r id; do
hakocms-cli entries publish "$id" -t posts --jq '"\(.id) \(.status)"'
done

公開したエントリーごとに、ID と状態が表示されます。

wsa5cu2ittq5 published
9ngd93ymaerr published
hfyrv6ip6ol0 published

公開できないエントリー(必須のフィールドが空、など)があると、その行で理由が表示され、次のエントリーに進みます。--jq を付けているので、理由は JSON で表示されます。

{"error":{"status":400,"message":"title: is required"}}

同じ形で、entries unpublish(公開を終える)、entries delete(削除する)もまとめて行えます。削除するときは、1 件ごとに消してよいかを聞かれます。端末でないところ(パイプやスクリプト)では聞けないので、--force を付けます。

entries update は、今の値に --set の値を重ねて、下書きに保存します。指定しなかったフィールドは、そのまま残ります。

ターミナルウィンドウ
hakocms-cli entries update <エントリー ID> -t posts --set body=書き換えた本文
  • --set の値は、JSON として読めれば JSON として、読めなければ文字列として送られます。--set count=3 は数、--set featured=true は真偽値、--set tags='["news","tech"]' は配列、--set title=hello は文字列です
  • 文字列の 3 や true を入れたいときは、JSON の文字列にします(--set code='"3"')
  • 公開中のエントリーを書き換えると、公開版はそのままで、下書きができます(状態は published_with_draft)。すぐに公開するときは --publish を付けます

全部のエントリーの body の末尾に、同じ文を足す例です。

ターミナルウィンドウ
hakocms-cli entries list -t posts --all --jq '.[].id' |
while read -r id; do
body=$(hakocms-cli entries get "$id" -t posts \
--jq '(.draft // .published).body // ""')
hakocms-cli entries update "$id" -t posts \
--set "body=${body}(この記事は 2026 年 10 月に更新しました)" --jq .id
done

(.draft // .published) で、下書きがあれば下書き、なければ公開版の値を使います。

エントリーを JSON で取り出して、ほかの道具に渡せます。--json は Admin API の応答をそのまま出します(一覧は、エントリーの配列)。

ターミナルウィンドウ
hakocms-cli entries list -t posts --all --json > posts.json

必要な項目だけを、1 行に 1 件の JSON にするには、tojson を使います。

ターミナルウィンドウ
hakocms-cli entries list -t posts --all \
--jq '.[] | {id, title: .published.title} | tojson'
{"id":"hfyrv6ip6ol0","title":"お知らせ 1"}
{"id":"9ngd93ymaerr","title":"お知らせ 2"}
{"id":"wsa5cu2ittq5","title":"お知らせ 3"}

サイトに表示する形(参照の展開など)で取り出したいときは、CLI ではなく Content API を使います(エントリーを取り出す)。スペースを丸ごと別の環境に写すときは、hakocms-cli exports create と imports create を使います(CLI のコマンドのリファレンス:書き出し)。

値を JSON のファイルに書いて、--data @<ファイル> で渡します。標準入力から渡すときは --data - です。

{ "title": "ファイルから", "body": "JSON で渡しました" }
ターミナルウィンドウ
hakocms-cli entries create -t posts --data @post.json --publish

--publish を付けると、下書きにせず公開します。付けなければ下書きになります。

ほかの CMS から移すときは、1 件ずつのファイルにしてから、くり返し entries create に渡します。

ターミナルウィンドウ
for f in export/*.json; do
hakocms-cli entries create -t posts --data "@$f" --jq .id
done

フィールドの値の形(画像、参照、リッチテキストなど)は フィールドの種類と値の形 と リッチテキストの形 にあります。画像は先に上げて、その URL を {"url": "<URL>"} の形で値に入れます(CLI でメディアを上げる)。

entries edit は、エントリーの値を JSON のファイルにして、エディタで開きます。保存して閉じると、下書きに保存されます。

ターミナルウィンドウ
hakocms-cli entries edit <エントリー ID> -t posts

開くエディタは環境変数 VISUAL、なければ EDITOR で決まります(export EDITOR=vim)。

ターミナルウィンドウ
hakocms-cli entries schedule <エントリー ID> -t posts --publish-at 2026-11-01T09:00:00+09:00
  • 日時は RFC 3339 の形で、時差を付けて書きます(日本時間なら +09:00)

  • 公開を終える日時は --close-at です。どちらも今から 1 年以内です

  • 予約を取り消すときは、--data で null を渡します

    ターミナルウィンドウ
    hakocms-cli entries schedule <エントリー ID> -t posts --data '{"closeAt":null}'

管理画面で、コンテンツタイプのエントリーの一覧を開き、状態と値が変わっていることを確かめます。CLI からは、同じ絞り方で一覧にして、件数を数えます。

ターミナルウィンドウ
hakocms-cli entries list -t posts --status draft --all --jq 'length'