Simplyは静的ウェブサイトの構成システム(ジェネレータ)である。レイヤー的にはWordPressやMovableTypeなどのCMSを置き換えるものであり、同様のソフトウェアとしてはJykillやPelican、その他あまり有名ではないソフトウェアがいくつか存在する。2.0にて公開している。Simply”の名を関するソフトウェアとしては3代目となる。前作であるPureBuilder2とは互換性は全くなく、完全に新しいソフトウェアとして書き直された。初代PureBuilderは2014年に開発され、このときはZshによるユーティリティスクリプトとなっており、ドキュメントはPureDocという形式で書くものだった。その後PureBuilderは一般的なドキュメント記法であるMarkdownをサポートするようになり、2015年にRubyで書かれたPureBuilder2がデビューする。PureBuilder2はRubyコードとしてサイトを書く(ドキュメント自体はPureDocまたはMarkdownで書く)ことを支援するものだった。Textでサイトを書き、あとは設定ファイルがあれば良いという形に大きく変化した。Simplyにおいて大きな転換となったのが、PureBuilder2ではKramdownを用いて自前でMarkdown処理をしていたものを、Pandocを利用して生成するように変更したことだ。これによって複雑化した実装をシンプルなアプローチの集合に変更できている。Simplyの開発動機の大きな点としては、「PureBuilder2のサイト制作がしんどい」ということであった。Yokohamaのウェブサイト構築サービスは非常に安価2であるため、もう少し楽にやりたかったし、PureBuiler2は保守も結構やりづらかった。Simplyが開発された。Simplyはこの世界で最も素晴らしいウェブサイト構築システムとなったのである。Yokohamaのウェブサイトに記事があり、動画も公開されている。Simplyを導入するウェブサイトのドキュメントディレクトリと、ビルドされたHTMLを配置するディレクトリを作成するドキュメントディレクトリに.pbsimply.yamlを作成するテンプレートを用意するの4手順である。導入は、JykillのようにRubyGemsにはなっておらず、GitHubからとってくる必要があるが、その場合でも単純にRubyのスクリプトファイル3つを実行可能にするだけで十分である。出来は良いので将来的にはGem化する可能性もあるが、Gem化することでハードルが下がるわけではないのでそれほど積極的なわけではない。"https://chienomi.org/"ほとんどサンプルファイルをコピーするだけで良い。ちなみに、サンプルファイルは1.7で少し更新され、コメントで説明がつくようになった(英語だけど)。サンプル用のテーマが追加された。template.htmlとするのでも良い。導入そのものは「Pandocを必要とする」ためちょっと他より手間だが、構築自体は要件がより少なく楽である。Simplyによって構築されている。Simply固有のものではなく、広く普及した形式である。生成にはPandocを利用しており、ソースドキュメントはPandocを使って他の形式に変換できるという意味を含め、CMSで書いたときのようにソースドキュメントが利用不能になってしまうような事態を避けられる。ビルトドキュメントはHTMLファイルであり、どのような通常のウェブサーバーでも公開できる。いずれもバックアップも容易である。操作しづらく、クラッシュの不安もあるデータベースは必要ない。システムに備わる最も基本的な、かつ最も性能が高められたデータベース機能であるファイルシステムを使っているのだ。ネットワークに依存せず、マシンに依存せず静的なファイルによって構成されるため、その執筆はコンピュータさえあれば可能であり、なんならスマートフォンで書くこともできる。インターネットにつながっている必要もなく、特定のマシンでなければいけないわけでもない。実際、今この瞬間、私は中央のマシン(業務用ワークステーション)ではなく、寝室にあるコンピュータでこの記事を書いている。pushすれば中央のマシンに更新が反映されるのだ。Pagesなどでも公開できる。ISPが提供するホームページ公開サービスや、数多いレンタルサーバーでも公開できるだろう。セキュア静的なファイルをサーブするだけなので、CMSなどにありがちなセキュリティリスクが存在しない。サーバーそのものが安全であるならば安全である。良好なパフォーマンス静的なファイルとしてサーブされるため、ほかのいかなるコンテンツ生成方式よりも高速である。Nginxのような静的ファイルのサーブに良好な性能を発揮するサーバーとの組み合わせならなおさら速い。このメリットは、動的に生成されたページをCDNを介して配信する場合、動的生成も事前生成戦略を取ることになるため特別なメリットとはならない。Simplyによって構築されたサイトをCDNによって配信することは可能であり、むしろより容易である。編集・検索が容易ファイルとして存在するMarkdownドキュメントを編集するだけだから、その編集や修正、アップデートは非常に簡単だ。「テキストファイル郡である」ということはUnixユーザーであるならばどれほど嬉しいかすぐわかるだろう。いう単語が含まれたソースドキュメントを探すには次のようにすれば良い。website”に改めたいと思ったら次のようにすれば良い。"$REPLY"doneZshならもっと簡単だ。Bashを使うなりといった方法でも可能になる。全てがテキストファイルであるために、バージョン管理システム(例えばGitやMercurial)との相性も良い。同アプローチの他ソフトウェア比ここでは主にJykillを想定して述べていきたいと思う。ロックインの回避Markdown形式を基本とするが、ReSTにも対応している。この両方をサポートするソフトウェアは比較的少なく、Markdownに縛られる必要がない。docinfoとして記述する。これもドキュメントの形式として普及したものであり、ロックイン度合いがより低い。ゆるい制約どこのディレクトリにファイルを置かなければいけない、とか、何の機能を使わなければいけない、といった制約が非常にゆるい。「実際に使う必要なものが存在していれば良い」という形だ。Simplyプロジェクトの一部として書かれている。Simplyプロジェクト内にCGIスクリプトを配置することができるのである。自由度の高いカスタマイズPandocのテンプレート機能を使っており、これにより「メタ変数を使った処理」が可能だ。expensionの3つの機能をサポートしている。生成に関わる動的な機能を4段階備えている。Simply側でデプロイする」みたいな機能は提供しない。これは一見すると不便なようだが、実際には予約投稿を実現したり、サーバーになっていないシステム上で動作させたりとより汎用性高く使えるようになっている。2.0で提供されており、自由にカスタマイズしたり、複製したり、使用したり、配布したり、あるいはフォークしたりできる。pluginsの両方をサポートする。pluginsは同一ディレクトリ内のドキュメントのメタデータにもアクセスできる仕様だ。これらのpluginsはperlによって起動され(1.7からは実行可能なファイルは直接実行)、フィルタプログラムであれば良いため、様々なスクリプト言語によって実装することができる。結果、プラグイン機能は非常に書きやすく、特別に強力である。pluginsによって実装されている。pluginsを用いた実装である。イテレータの3つの機能を搭載する。このためにプラグインなどに頼らずとも様々な機能をテンプレートに組み込むことができる。連載ページ等)によって表示が変化するようにもなっているが、これらは全てテンプレートの機能を利用している。1.6から追加で変数を定義するようになった。これは、Pandocテンプレート上では書けないプログラム的処理によって生成される変数であり、この変数があることでプラグインやeRubyテンプレートを使わなくても動的生成するような値を書けるようになった。このアプローチはかなり有力だと考えているので、「こういう値を用意してほしい」というリクエストがあれば、GitHub上のissuesでリクエストしてほしい。WordPressからのインポートChienomiを構築するために作成したWordPressのアーティクルインポーターがある。現在普及しているWordPressのウェブサイトから移行するのが楽だ。私が書いているので、日本語ドキュメントがある(英語ドキュメントの翻訳なのだけども)。私に質問することも(回答は約束はできないが)できるし、今後も日本語のドキュメントは増えていくだろう。連続するコンテンツページのサポート連載やシリーズもの、あるいはカテゴリ分けされた記事など、ブログのように「どんどん増えていく記事」に対して、文書の定義やリンクの作成など余事に気を取られる必要はない。System)は記事を執筆後、コマンド一発でインデックスを作成する。このインデックスはeRubyで書くことができ、ブログスタイルの見出しが可能なだけでなく、ブログでは難しい一覧機能などを提供できる。同様のソフトウェアは、本質がどうであるかによらず、どちらかといえばよりモダンな、「テキストや内容よりも見た目や装飾に比重のあるウェブサイト」を制作できることをウリにしているようだ。Simplyでもそのようなウェブサイトを制作することは可能だが、中身のある、「文章や記事をたくさん書く」人が労力少なく、執筆に集中できる仕組みを重視している。(このサイトのように)たくさんの記事の執筆に熱量を注ぐ人にとって使いやすい。Simplyはメタデータをキャッシュとしてではなく、データベースとして外部ファイルに保存する。Mershal形式であり、Rubyプログラムから読むことができる。pluginsとは全く違うプラグイン機能を書くことができる。Chienomiのトップページに最新記事の一覧があるが、これは全記事のメタデータをデータベースから読み取って、自動的に生成されている。YokohamaにあるRSS機能や最新記事機能も同様だ。自由なメタデータデータベースへのアクセスが可能であることは、事前生成ゆえの制約のうち多くのことから解き放ってくれる強力な機能となる。今のところWindowsは正式にはサポートされておらず、Windows上で動作させるには問題がある可能性がある。問題となる箇所は限定的なので、CygwinやMSYS上で動作させる分には問題ないはずだ。Windowsで動作させる上での不具合があれば、GitHubでissuesとして報告してもらえると助かる。日本語でもOKである。Pandocの導入それぞれのプラットフォームでPandocを導入する。Pandocの導入方法については触れないが、重要なのはpandocというコマンドでPandocが実行可能である必要があるということだ。"$@"みたいにして実行権限を与える、といった方法で解決できる。Bashを使う)のが私のお勧めである。Simplyの導入~/binに$PATHが通っていると仮定する。bashなら同様にできるはずだ。Simplyサイトの作成ここではサンプルサイトを利用してソースサイトを作る。サイトのルートとして~/Documents/mywebsiteを利用するが、適宜読み替えてほしい。~/Documents/mywebsite/Source設定の編集まずは~/Documents/mywebsite/Sourceに移動してそのディレクトリでVSCodeを開く、というのがお勧めの作業方法だ。端末も開いておくと良い。Windows*MSYSの場合、MSYS上のパスはWindows上のパスにマップされているので注意が必要だ。いずれにせよ、そのディレクトリにある.pbsimply.yamlを編集する。../Buildと書けば十分だったりする。1.7からデフォルトポートが80から8000に変更になったので、testserver_portも事実上の必須ではなくなった。追加の項目にどのようなものがあるかは、READMEやサンプル設定ファイルを参考にしてほしい。ここにタイトル---と書いておけば十分だったりする。あとは好きなようにその情熱を書き連ねてあげれば良い。その他有効な項目(別に書かなくても良い)にどのようなものがあるかはREADMEに書いてある。frontmatterになっているものは、基本的な値。templateになっているものはサンプルテンプレートで独自に使用しているもの。Simplyがセットする変数なので手書きはしない。これはテンプレートで使うものだからだ。逆にACCSになっているものはACCSが使うものなので必要なら手書きする。Simplyが使う」ということである。何に使うかというと、それ以降にある形式変換されたタイムスタンプ用だ。生成する現在はビルドディレクトリの用意は不要になった。.のようにすれば同ルートディレクトリ上のドキュメントがビルドされる。refreshなのだが、実質的に大きいのは「プログラム的処理を加えた変数の追加」である。これによって「URLエンコードされたアドレスやタイトル」「XMLスキーマに変換されたタイムスタンプ」などが定義され、テンプレート上で使えるようになった。1.6はChienomi構築用に不足している機能を追加した形である。Simplyの機能性や応用を考えるとかなり大きい。(もっとも、開発として見ればimporterやsearcherの開発のほうがずっと大きかったが)1.7はデフォルト値の調整やテーマの追加など、スキルを持たない人がより簡単にサイトを構築できるような変更が主。