Lektor 静的サイトジェネレータ

[Jinja2](http://jinja.pocoo.org/)や[Flask](http://flask.pocoo.org/)の作者、[mitsuhiko](https://github.com/mitsuhiko)さんが [Lektor](https://www.getlektor.com/)という、静的サイトジェネレータを少し前に[公開](http://lucumr.pocoo.org/2015/12/21/introducing-lektor/)していたので、少し調べてみました。

トップページのチャッチセールスは

```
A flexible and powerful static content management system for building complex and beautiful websites out of flat files — for people who do not want to make a compromise between a CMS and a static blog engine.

Getting your ideas implemented is as easy as making breakfast eggs.

CMSかブログエンジンの間で妥協したくない人のための、フラットファイルから複雑で、美しいWebサイトを作るための、柔軟で強力な静的コンテンツマネージメントシステム

朝食の卵料理を作るぐらい簡単に、アイデアを形にできます
```

[Moongiftさん](http://www.moongift.jp/2015/09/lektor-python%E8%A3%BD%E3%81%AE%E9%9D%99%E7%9A%84%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF/)でも以前紹介されていたようですが、開発がだいぶ進んでいるよう、見た目が良くなってます。

残念ながらpython3にはまだ対応していないようで(　~~　2.0で対応する予定らしい。~~　2.0には間に合わなかったようで、3.0になるみたいです。(2016-04-16))利用するにはPython2が必要です。



[インストール](https://www.getlektor.com/docs/installation/)自体はとても簡単で、シェルスクリプトを走らせるか、pipでインストールします。

インストールが完了したので、コマンドでヘルプを確認すると。

```
#lektor --help


Usage: lektor [OPTIONS] COMMAND [ARGS]...

  The lektor management application.

  This command can invoke lektor locally and serve up the website.  It's
  intended for local development of websites.

Options:
  --project PATH   The path to the lektor project to work with.
  --language TEXT  The UI language to use (overrides autodetection).
  --version        Show the version and exit.
  --help           Show this message and exit.

Commands:
  build              Builds the entire project into the final...
  clean              Cleans the entire build folder.
  content-file-info  Provides information for a set of lektor files.
  deploy             Deploy the website.
  dev                Development commands.
  plugins            Manages plugins.
  project-info       Shows the info about a project.
  quickstart         Starts a new empty project.
  server             Launch a local server.

```

オプションに、quickstartをつけると簡単んいプロジェクトが始められるみたいです。

```
# lektor quickstart

Lektor Quickstart
=================

This wizard will generate a new basic project with some sensible defaults for
getting started quickly.  We just need to go through a few questions so that
the project is set up correctly for you.

Step 1:
| A project needs a name.  The name is primarily used for the admin UI and
| some other places to refer to your project to not get confused if multiple
| projects exist.  You can change this at any later point.
> Project Name: "プロジェクトの名前を入力"

Step 2:
| Your name.  This is used in a few places in the default template to refer
| to in the default copyright messages.
> Author Name ["著者の名前"]:

Step 3:
| This is the path where the project will be located.  You can move a
| project around later if you do not like the path.  If you provide a
| relative path it will be relative to the working directory.
> Project Path ["プロジェクトのパス"]:

Step 4:
| Do you want to generate a basic blog module?  If you enable this the
| models for a very basic blog will be generated.
> Add Basic Blog [Y/n]: Y

That's all. Create project? [Y/n] Y
```

すぐにプロジェクトが作成され、作成されたフォルダにcdしてtreeコマンドを実行すると作成されたファイルが確認できました。

```
tree
.
├── プロジェクトの名前.lektorproject
├── assets
│   └── static
│       └── style.css
├── content
│   ├── about
│   │   └── contents.lr
│   ├── blog
│   │   ├── contents.lr
│   │   └── first-post
│   │       └── contents.lr
│   ├── contents.lr
│   └── projects
│       └── contents.lr
├── models
│   ├── blog-post.ini
│   ├── blog.ini
│   └── page.ini
└── templates
    ├── blog-post.html
    ├── blog.html
    ├── layout.html
    ├── macros
    │   ├── blog.html
    │   └── pagination.html
    └── page.html

10 directories, 16 files
```

ローカルサーバーを起動するには次のコマンドを実行します。
アクセスをするにはブラウザで、http://127.0.0.1:5000/ にアクセスします。

```
# lektor server

 * Project path: プロジェクトの名前.lektorproject
 * Output path: /Users/*****/Library/Caches/Lektor/builds/7f3059dbd1dd5855e861340204aabf2a
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Started source info update
Finished source info update in 0.03 sec
Started build
U index.html
U about/index.html
U projects/index.html
U blog/index.html
U static/style.css
U blog/first-post/index.html
Finished build in 0.10 sec
Started prune
Finished prune in 0.00 sec
```

設定を変更するには、http://127.0.0.1:5000/admin/ で管理ページにアクセスする。

あとは感覚で編集できそう。


setup.pyを確認すると、[mitsuhiko](https://github.com/mitsuhiko)さんが作っている色々なプロジェクトがベースになってることが、よくわかります、すごい人ですねぇ。



[Jinja2>=2.4](http://jinja.pocoo.org/)
  Jinja2 is a full featured template engine for Python. It has full unicode support, an optional integrated sandboxed execution environment, widely used and BSD licensed.

作者 [trmin Ronacher](http://lucumr.pocoo.org/about/)


[click>=6.0](http://click.pocoo.org/6/)
  Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It’s the “Command Line Interface Creation Kit”. It’s highly configurable but comes with sensible defaults out of the box.

  It aims to make the process of writing command line tools quick and fun while also preventing any frustration caused by the inability to implement an intended CLI API.

作者 [trmin Ronacher](http://lucumr.pocoo.org/about/)

[watchdog](https://pythonhosted.org/watchdog/)
  Python API library and shell utilities to monitor file system events.

[mistune](http://mistune.readthedocs.org/en/latest/)
  The fastest markdown parser in pure Python, inspired by marked.

[Flask](http://flask.pocoo.org/)
  Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions. And before you ask: It's BSD licensed!

作者 [trmin Ronacher](http://lucumr.pocoo.org/about/)


[EXIFRead](https://github.com/ianare/exif-py)
  Easy to use Python module to extract Exif metadata from tiff and jpeg files.

[inifile](https://pypi.python.org/pypi/inifile)
  A small INI library for Python.

作者 [trmin Ronacher](http://lucumr.pocoo.org/about/)


[Babel](http://babel.pocoo.org/en/latest/)
  Babel is an integrated collection of utilities that assist in internationalizing and localizing Python applications, with an emphasis on web-based applications.

[setuptools](https://pypi.python.org/pypi/setuptools)
  Easily download, build, install, upgrade, and uninstall Python packages

[pip](https://pypi.python.org/pypi/pip)
  The PyPA recommended tool for installing Python packages.

[requests](http://python-requests.org)
  Requests is the only Non-GMO HTTP library for Python, safe for human consumption.