Nikolaでブログ

# Nikolaってなに？

NikolaはPython製の静的サイトジェネレータです。

公式サイト: https://getnikola.com

静的サイトジェネレータはJekyllやHUGO、Hexo等がメジャーらしいです。
Python製ではPelicanが有名です。

今回Nikolaを取り上げた理由としてはこのようなものが挙げられます。

* Python製
* 開発が結構活発
* 様々な入力フォーマットに対応している
* cliが使いやすい

## Nikolaの入力フォーマット
デフォルトのreStructuredTextはSphinxユーザにとって馴染み深く、Jupyterで作成したNotebook(ipynb)をそのままブログとしてpostすることができます。Pythonistaやデータサイエンティストにとって親和性が高そうです。

デフォルトで対応しているフォーマット
* reStructuredText (default and pre-configured)
* Markdown
* Jupyter/IPython Notebook
* HTML
* PHP

Pluginて対応できるフォーマット
* AsciiDoc
* BBCode
* CommonMark
* IRC logs
* Markmin
* MediaWiki (smc.mw)
* Misaka
* ODT
* Emacs Org-Mode
* reST with HTML 5 output
* Textile
* txt2tags
* CreoleWiki
* WordPress posts

# インストール
[さまざまなインストール方法](https://getnikola.com/getting-started.html)がありますが、pipでインストールするのがよさそうです。

```bash
pip install Nikola
```

本記事では説明を省きますが、venvやvirtualenv等の仮想環境にインストールすることを推奨します。

# サイトの作成
初期化用のコマンドが用意されています。いくつかの質問に答えるとサイトが作成されます。
下記の `site_name` は任意のディレクトリ名です。指定した名前でディレクトリが作成されます。

```bash
nikola init site_name
```

```
Creating Nikola Site
====================

This is Nikola v7.8.8.  We will now ask you a few easy questions about your new site.
If you do not want to answer and want to go with the defaults instead, simply restart with the `-q` parameter.
--- Questions about the site ---
Site title [My Nikola Site]: 
```
サイトのタイトルを入力します。

```
Site author [Nikola Tesla]: 
```
名前を入力します。
```
Site author's e-mail [n.tesla@example.com]:
```
メールアドレスを入力します。
```
Site description [This is a demo site for Nikola.]:
```
サイトの説明を入力します。
```
Site URL [https://example.com/]: 
```
サイトのURLを入力します。
```
Enable pretty URLs (/page/ instead of /page.html) that don't need web server configuration? [Y/n]
```
pretty URLを有効にする場合は `Y` を入力します。

```
--- Questions about languages and locales ---
We will now ask you to provide the list of languages you want to use.
Please list all the desired languages, comma-separated, using ISO 639-1 codes.  The first language will be used as the default.
Type '?' (a question mark, sans quotes) to list available languages.
Language(s) to use [en]:
```
使用する言語を入力します。日本の場合は `ja` を入力します。

```
Please choose the correct time zone for your blog. Nikola uses the tz database.
You can find your time zone here:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Time zone [UTC]: 
```
タイムゾーンを入力します。日本時間の場合は `Asia/Tokyo` を入力します。
```
--- Questions about comments ---
You can configure comments now.  Type '?' (a question mark, sans quotes) to list available comment systems.  If you do not want any comments, just leave the field blank.
Comment system:
```
コメントシステムを使う場合は入力します。使わない場合にはブランクにします。2017/06/17時点では下記のものが使用できます。
* disqus
* facebook
* googleplus
* intensedebate
* isso
* livefyre
* muut

# 記事の投稿
下記のコマンドでテンプレートのテキストファイルが生成されます。

```bash
nikola new_post
```

```
Creating New Post
-----------------

Title: 
```
記事のタイトルを入力すると、 `post/タイトル名.rst` ファイルが生成されます。
このファイルをエディタで編集します。デフォルトではreStructuredText形式です。

```
.. title: {{記事のタイトルを入力します。}}
.. slug: {{記事のパス(ファイル名)を入力します。}}
.. date: {{投稿日時を入力します。日本時間の場合は末尾に UTC+09:00がつきます。}}
.. tags: {{タグを入力します。カンマ区切りで複数のタグを指定できます。}}
.. category: {{カテゴリを入力します。}}
.. link: {{参照元があればリンクを入力します。}}
.. description: {{descriptionメタタグを入力します。}}
.. type: text

{{ここに記事の内容を入力します。}}
```

Markdown形式で記事を作成する場合には `-f` オプションを用いて下記のように指定します。

```bash
nikola new_post -f markdown
```

```
Creating New Post
-----------------

Title:
```
記事のタイトルを入力すると、 `post/タイトル名.md` ファイルが生成されます。このファイルをエディタで編集します。

```
<!--
.. title: {{記事のタイトルを入力します。}}
.. slug: {{記事のパス(ファイル名)を入力します。}}
.. date: {{投稿日時を入力します。日本時間の場合は末尾に UTC+09:00がつきます。}}
.. tags: {{タグを入力します。カンマ区切りで複数のタグを指定できます。}}
.. category: {{カテゴリを入力します。}}
.. link: {{参照元があればリンクを入力します。}}
.. description: {{descriptionメタタグを入力します。}}
.. type: text
-->

{{ここに記事の内容を入力します。}}
```

# サイトのビルド
下記のコマンドで前述で投稿した記事をビルドします。

```bash
nikola build
```

# サイトの確認
下記のコマンドでhttpサーバが起動します。 `-b` オプションをつけることでブラウザが起動します。

```bash
nikola serve -b
```

このような感じでサイトが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22023/b3ca6b7d-54b0-23fd-a092-7daf3033801c.png)

[次回](http://qiita.com/driller/items/2f8a0dd66d4d8e59e05c) はJupyter Notebookのファイル(ipynb)をブログの記事として投稿する方法を紹介します。