fastpagesを使ってJupyter Notebookを簡単にブログに変換する


ディープラーニングの無料オンラインコースで有名なfastaiからfastpagesというブログ作成ツールが公開されたので、早速使ってみました。

初期設定の部分で多少面倒だと感じる人もいるかもしれないので、手順を日本語でまとめました。
英語の説明で問題ない人は、公式のreadmeを見てください。

対象読者

  • jupyter notebookをブログに変換するお手軽な方法を知りたい人
  • ブログを公開する場所がgithub pagesで問題ない人

注意

記事内容は、2020年02月29日時点でのものです。

今後、fastpages導入手順がより簡単になるかもしれないとのことです。
コメント欄にて@peaceirisさんから指摘いただきました。

本記事の内容をお試しになる際には、プルリクエストの文面を念のために確認してください。

fastpagesの特徴

fastpagesは、github pagesにて公開するブログをJupyter notebookから自動生成するためのツールです。
自動生成にはgithub actionsが使用されており、自分の手元のPCでnotebookからwebサイトをビルドする手間を省けます。

公式の説明によると、次のような特徴があります:

  • 記事の変更をgithubのmasterブランチにpushすると、自動でブログが生成される。
  • Jupyter Notebookをそのまま記事として投稿できる。
  • Jupyter Notebookのセルの表示・非表示の切り替えができる。
  • 画像、ツイッターカード、youtube動画を埋め込める

fastpagesを使うための初期設定

はじめにテンプレートを公式のリポジトリからコピーして使用します。
sshキーの設定が完了し、botからのプルリクエストをマージしたら、ブログの完成です。
以降は、記事を投稿・編集するたびに、masterブランチにpushしていきます。

リポジトリをテンプレートから新規作成

まず、fastpagesのリポジトリのテンプレートを使って、新規のリポジトリを作成します。
fastpagesのリポジトリにて、"Use this template"をクリックします。

適当に名前をつけてリポジトリを作ります。

リポジトリを作成してから1分程度待つと、自動的にリポジトリへのプルリクエストが届きます。
このプルリクエストの指示にしたがって設定を進めます。

秘密鍵と公開鍵を登録

プルリクエストの指示内容は以下のとおりです。

  • ssh key-pairを作る。ここで生成した公開鍵と秘密鍵を次のステップで登録する。
  • リポジトリのSecretsという設定項目で、SSH_DEPLOY_KEYという名前で秘密鍵を登録する。
  • リポジトリのDeploy keysという設定項目で、公開鍵を登録する

これらを済ませれば、masterブランチに変更をpushするたびに、webサイトのビルドが実行されます。

具体的には、次のようにします。

プルリクエストで示されている説明によると、8gwifiというツールを使うように勧められますが、手元で作成しても問題ありません。8gwifiは、オンラインで無料で利用できるssh-key pair生成ツールだそうです。

Select: RSA and 4096 and leave Passphrase blankとあるので、

ssh-keygen -t rsa -b 4096

で秘密鍵と公開鍵を生成します。

$ ls /Users/your_name/.ssh/ | grep id_rsa
id_rsa
id_rsa.pub

秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を、それぞれ、githubの設定項目にてコピー・アンド・ペーストします。

SSH_DEPLOY_KEYというNAMEは、この通りに入力します。

公開鍵のTitleは適当に決めてもいいです。Allow write accessにチェックを入れてください。

これで完了です。

プルリクエストをマージして、数分待つとgithub pagesにて初期状態のwebサイトにアクセスできる

ssh key-pairの登録が完了したら、最後にプルリクエストをマージします。

これでgithub pagesのurlにアクセスすると、webサイトを見ることができます。

ここまでの一連の流れをyoutube動画で確認できます。

How to create your Free Data Science Blog on Github with Fastpages from Fastai - YouTube