ghost updateをすると編集したテーマファイルが元に戻ってしまう問題の解決策

ghost updateをすると編集したテーマファイルが元に戻ってしまう問題の解決策
Photo by Paul Teysen / Unsplash

以前Sourceテーマのファイルを編集して、タグ一覧のページを作りました。

Ghostブログにタグ一覧ページを作る (Sourceテーマの場合)
記事を分類するのにタグをつけているのですが、いくらタグをつけたところで絞り込みに使えないのであれば何の意味もないですよね。 僕はSourceというGhostのデフォルトのテーマを使っているのですが、このテーマだと、それぞれのタグをそのままナビゲーションバーに設置することはできるんですが、ドロップダウンでタグを選んだり、タグの一覧を表示したりはすぐにはできないようです。 そこで今回は、Sourceテーマを使ってタグ一覧のページを作ってみましたという記事です。 Sourceテーマを使ってタグ絞り込みをしたいときにできること 上でも述べましたが、このテーマだと、ドロップダウンとか一覧ページはそのままだと出せません。 できるのは、それぞれのタグをナビゲーションバーに置くくらいです。 これは例えば、「ブログ」というタグをつけた記事があって、そのタグを持っている記事一覧を出せるようにしようと思ったら、ナビゲーションバーに「ブログ」という項目をわざわざ作らないといけないということです。 これだとタグが増えてくると全部を載せるのは不可能ですし、それ以前に記事のタグをメニューに

この時はこれで満足していたのですが、Ghostのアップデートをするとテーマが入っているディレクトリが上書きされて、せっかくカスタムした部分が丸ごと消えてしまいました。

この記事では、この問題の対処法を記録しておきます。

ghost updateでテーマのカスタム部分が消える?

Ghostを入れているフォルダに移動して定期的に

ghost update

をするんですが、これをするとthemeディレクトリの中身も書き換えられてしまうらしい。

一旦、Tagsページを作った時の処理を再度実行して、元に戻しました。

前回記事のTagsページを作るコードを再掲。クリックで開きます

Ghostの入っているディレクトリに移動して、

cd /current/content/themes/source
touch custom-tags.hbs
nano custom-tags.hbs
{{!< default}}
{{!-- The tag above means: insert everything in this file into the body of the default.hbs template --}}

{{#post}}

<main class="gh-main">
    <article class="gh-article {{post_class}}">
        <header class="gh-article-header gh-canvas">
            <h1 class="gh-article-title is-title">{{title}}</h1>
        </header>

        <section class="gh-content gh-canvas">
            {{#get 'tags' limit='all' include='count.posts' order='count.posts desc'}}
            {{#foreach tags}}
            <a href='{{ url }}'>
                <h2>{{ name }} <small>({{ count.posts }})</small></h2>
                <img src='{{ img_url feature_image }}' alt='{{ title }}' style="height:128px;"/>
            </a>
            {{/foreach}}
            {{/get}}
        </section>
        
    </article>
</main>

{{/post}}
ghost restart

さて、週に何回もupdateをするわけで、毎回こんなことをするのはなかなかめんどくさい。

対処法を調べました。

Official themeはghost updateで上書きされる

https://forum.ghost.org/t/updating-ghost-to-latest-version-overwrites-casper-theme-custom-changes/25867

上記リンクで言及されているように、Ghostのofficial themeはghost updateを実行すると上書きされるようです。

上記ではCasperの話をしていますが、僕が使っているSourceも同様。

対策

この対策は3つくらいありそう。

1. updateの度にカスタムした部分を再度対応する

これが今回やったこと。

現時点ではカスタムしている部分が1つのファイルを追加するだけなので、それほど労力はいらないが、もっとカスタムが増えてくるとあまり現実的じゃない

2. カスタムしたテーマフォルダを別名で保存して、カスタムテーマとしてアップロードする

リンク先で提案されている対応方法。

これだとGhostのupdateをしてもテーマ自体に変更は加えられないので、気にせずupdateできる(らしい。未確認です。今度ghost updateしたときにその結果を書きます → update後もカスタム部分は消えずに済みました、よかった!)。

ただし、テーマ自体にupdateがあった場合に、新しいバージョンを使いたいなら再度編集し直してカスタムテーマとしてアップロードする必要がある。

1.と比べるとめんどくさい頻度は減るが、めんどくさい度合いはちょっぴり増えます。

3. テーマをGitHubからforkして編集。テーマのアップデートがあればマージしてサーバーにアップロード

多分これが一番管理しやすい。

ただこの辺の話に詳しくない(フォークとかマージとかなんとなくしかわかってない)ので最初に取り組む際に時間がかかりそう。

あとはテーマのアップデートがどれくらい頻繁にあるのかわからないので、それ次第なところもあります。ほとんどアップデートないなら2のやり方で十分かな。

現時点での僕の対応

とりあえず1.はGhostのアップデートのたびに毎回やるのは流石にめんどくさいので、ひとまず2.で対応することにする。

並行して3.についても調べながら、ワークフローが理解できたら移行しようと思います。

以下には2.での対応方法についてまとめておきます

カスタムしたテーマを別名で保存して管理する方法

以下の手順でカスタムしたテーマをGhostにアップロードして、新しいテーマを有効にします。

テーマのダウンロード

SourceテーマはGitHubにあります。

GitHub - TryGhost/Source: The default theme for Ghost
The default theme for Ghost. Contribute to TryGhost/Source development by creating an account on GitHub.

ここからテーマをまるっとダウンロードします。

緑色のCodeと書いてあるボタンをクリックして、Download ZIPを押します。

必要な編集

ダウンロードできたら、以下の編集をします。

  • zipを展開してディレクトリ名の変更
  • テーマファイルをいじる(僕の場合はTagsページを作る)
  • zipする

Ghostにカスタムテーマとしてアップロード

テーマのアップロードは管理画面から可能です。

以下のように進んでいって、先ほど作ったzipファイルをアップロードします。

Settings -> Design & branding -> Change theme -> Upload theme

以下のリンクにもやり方が書いてありますので、必要に応じて参照してください。

Download and upload a Ghost theme
With a few clicks in Ghost Admin, you can download a local copy of a theme or upload an entirely new one. Follow our tutorial to learn the steps to take.

テーマの変更

最後にアップロードしたテーマをActivateすればOKです。

💡
ただし、テーマのDesignはBrandタブを除いてデフォルトに戻ってしまったので、元の設定を記録しておいた方が良さそうです。
大体の設定はなんとなく覚えているでしょうし、せっかくなのでいじってみてもっといい設定を見つけてもいいですが、Background colorだけはメモしておかないと感覚で戻すのは難しいです、というか多分むり。

おしまい

テーマのいじった部分が消えてしまったときはびっくりしましたが、あまりカスタムしてない状態でよかったです。

ブログ記事に変更部分をちゃんと書いてあったのも助かりました。

GhostのOfficial Themeをカスタムする際はお気をつけください。

Read more

GMKtec NucBox M7を買った

GMKtec NucBox M7を買った

先日K8 Plusを買うようなことを書いていたけど、結局トレード以外にWinマシンを使う予定がなさそうなので、そこまでスペック必要ないと判断してM7を買った。 ♦️この記事はアフィリエイトリンクを含みます 【18,000円OFFクーポン】GMKtec M7【AMD Ryzen 7 PRO 6850H 16GB 512GB】最大4.70GHz ミニPC Windows11Pro 4画面出力 2.5GbpsLAN WiFi6 HDMI 省エネ 小型パソコン オフィス ゲーミングpc 最大TDP70W ミニPC Ryzen みにpc OCuLink minipc 8K 最大18か月保証 レビュー特典付き 価格:64980円~ (2025/2/1 15:30時点) 感想(189件) ちなみにGMKtecのモデル名は、Kから始まるものが上位モデル、Mがミドルスペック、

トレードを始めてみようかと思っている

トレードを始めてみようかと思っている

気づいたらブログを放置して半年以上経っていた。当初は自分用のメモ+人に見てもらう記事みたいなのを考えていたものの、どうにも書くモチベーションがわかずにここまできてしまった。 メモとしてはこうして久しぶりにブログを書くときなんかに役立っているので、あまり人の役に立とうとか大袈裟なことを考えずに、都度考えたことなんかを記録するものに変えてみようと思った。 ということでトレードをしてみようと考えている話。 ♦️この記事はアフィリエイトリンクを含みます 何を取引するのか 条件は以下のような感じで考えた * 資金は全然ないので、少額でもできる * 多少リスクがあっても良いので短期的に増やしたい * アルゴリズムトレード(Python)もしてみたい そして候補として為替(FX, Forex)と暗号資産が出てきた。 国内だとレバレッジはFXが25倍まで、暗号資産は2倍までのようで、FXの方が戦略の自由度が高そうということで、まずはFXを始めようと思っている。 準備 とは言っても、ほとんど知識がない。トレードは完全な初心者なので、まずは勉強することにした。

Ghostでコードブロックや画像を折りたたむ方法

Ghostでコードブロックや画像を折りたたむ方法

GhostのエディタではCardsという機能を使って記事本文中に様々な要素を埋め込むことができます。 Editor cardsJump to a card * Images * Markdown * HTML * Gallery * Divider * Bookmark * Email content * Email call to action * Public preview * Button * Callout * GIF * Toggle * Audio * Video * File * Product * Header * Embeds * Signup Card The Ghost editor includes rich media objects called Cards, which can be inserted into your content to add

GhostにCode injectionでThree.jsの3Dモデルを埋め込んでみる

GhostにCode injectionでThree.jsの3Dモデルを埋め込んでみる

Three.jsを使って作られた3Dモデルをブログ記事の中にCode injectionを使って埋め込めるのかなとふと思ったので試してみました。 本文中でHTMLカードに<canvas>タグ、Code injectionのヘッダに<style>タグでCSSを、<script>タグでJavaScriptを貼り付けると、ちゃんと動かすことができました。 埋め込んだのはThree.jsのマニュアルにあった以下の例です。 three.js manual コードの中身は全く理解できていませんが、3Dって面白いですね。 Three.jsでは3Dモデルをインポートして使用することもできるようですが、以下のようなところから素材を使わせてもらうこともできるみたいですね。 OpenGameArt.orgというサイトで、ゲーム制作をしている人には有名なのかもしれませんが、僕は初めて知りました。 OpenGameArt.orgOpenGameArt.org 素材によってライセンス形態が異なるようですが、先日の記事で描いたCC0みたいなライセンスにしてある3D素材もあって、Three.j