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

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

Joseph Mallord William Turner "Mortlake Terrace", 1827 | Courtesy National Gallery of Art, Washington

部屋に飾る絵画とブログの画像

僕は特別アートに詳しいわけでもないですが、たまに絵を見たくなることもあります。 そういうとき、思い切って美術館に行くこともあるにはあるんですが、基本的に出不精なのでネットで調べて満足してしまうことが大半です。 ただやっぱり画面の中で見るのはその一瞬だけですし、なんだか味気ないってのも正直あります。 この記事は、そんなときはパブリックドメインになっている絵画データを印刷するとなんかいいよってことを伝えたくて書きました。 こういう自由に利用可能な素材はブログの画像なんかにも使えるのもいいですよね。この記事のトップにもパブリックドメインの絵画をお借りして載せてみました。 パブリックドメインってなんぞや 高画質な絵画データでもパブリックドメインで無償でダウンロード可能になってるものが結構あったりします。 パブリックドメインとは、誰でも自由に利用可能(商用利用含む)な素材です。 パブリックドメインになっている素材は大きく分けて、 1. 著作権が切れたもの 2. 著作者がパブリックドメインにしたもの(CC0と表記されている) の2種類があるようです。 💡僕は

Ghostブログにタグ一覧ページを作る (Sourceテーマの場合)

Ghostブログにタグ一覧ページを作る (Sourceテーマの場合)

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