Home > Dynamic Markdown
この記事では、MarkdownソースをあらかじめHTMLに変換してWebサーバにあげるのではなく、ソースのまましかるべき場所に置くだけで、インターネットからそのページをHTMLで見ることができるしくみについて考えてみます。
横浜工文社ではこのようなしくみをいくつか実現して利用・公開しています。 またそれ以外の新しいしくみについても研究・実験しています。 このためMarkdownやApacheを用いたCMS構築の支援を適切に行うことが可能です。 ご相談ください。
関連記事 → Qiita記事一覧
WebサーバあるいはWebサーバが読み取れる場所にMarkdownソースを置き、ページ要求があると、HTMLに変換してブラウザに送る方式を「ダイナミック」と呼びます。 いっぽう、変換ツールを用いてMarkdownのソースを自分のPC上でHTMLやPDFなど表示形式に変換する方式を「ローカル」と呼びます。
ダイナミック方式の例として、オープンソースソフトウェア公開サイトのGitHubでは、Markdownで書いたテキストファイルに拡張子md
を付けて登録すると、それをHTMLで表示してくれます。 横浜工文社がさきごろ運用開始したデータベースホスティングサービスでもデータベースのテーブルを参照するマクロを埋め込んだMarkdownソースをPandocという変換ツールでHTMLに変換してWebページを表示します。
このようなしかけはApacheやNginXなどWebサーバを動かせる人であれば簡単に構築できます。 逆にいうとApacheの設定が必要なため誰でも簡単に動かせるわけではありません。 しかし近年、作成済みのWebサービスや変換機能そのものをクラウドサービスにインストールして動作させることが可能になりました。
Dockerに代表されるコンテナサービスと、Web APIを入口とする関数サービスです。
以下、背景から説明します。
コンピュータプログラム実行のスタイルは次のように進化してきたと思います。
形態 | 説明 | 例 |
---|---|---|
物理マシンで直接実行 | 初期の原始的なプログラム実行方法 | 現在でも存在する。Non-OSのArduinoが好例。 |
タイムシェアリングOS | 複数プログラムを時間で切り替え見かけ上同時に動かす | UNIX, Windows, MacOS, etc. |
バーチャルマシン | 親亀子亀式に実マシンで複数の仮想マシンを動作させる | VMWare, VirtualBox, etc. |
コンテナ | アプリをパッケージしてそのまま実行 | Docker, BSD Jail, Solaris Container |
関数 | 通常プログラムの中で動作する関数を切り出して独立させて動作させる | Web API |
最初は一台のコンピュータで同時に動かせるプログラムはひとつでした。 続いて複数のプログラムを時間割で動かせるOSが登場しました。 Linux、Windows、MacOSなど現代のOSはみなそうです。 さらに一台の物理マシンで複数の仮想マシンを動かし、それぞれで異なるOSを動作させ複数のプログラムを実行します。 現在の賃貸し計算サービスであるレンタルサーバや計算クラウドはこのスタイルが主流です。 これは主に計算資源の有効利用のためで、おかげでレンタルサーバはとても安価になりました。
いっぽうアプリや関数を動作環境やほかの依存部分から切り出して独立して管理実行できる技術(DockerやWeb API)が普及した結果、ここ五年くらいの新しい流れとして、アプリをひとまとめにして投入したり(コンテナ)、アプリを小分けにして部分部分(関数)を投入できるクラウドサービスが登場しています。
次の表は、AmazonとGoogleが提供する主な賃貸しの計算サービスを、利用者が管理すべき範囲の多いものから並べたものです。
Type | Google GCP | Amazon AWS |
---|---|---|
IaaS | Compute Engine (GCE) | Elastic Compute Cloud (EC2), Lightsail |
PaaS | App Engine (GAE) | Beanstalk |
CaaS | Kubernetes Engine (GKE) | Elastic Container Service (ECS), ECS for Kubernetes (EKS), Fargate |
FaaS | Cloud Functions, KNative | Lambda |
仮想マシンを丸ごと借りるIaaS(Infrastructure as a Service)や、設定済みの動作基盤を借りるPaaS(Platform)の場合は、アプリの開発、必要ファイルのインストールや設定を利用者が行います。 主にDockerコンテナを収容するCaaS(Container)は、アプリや必要ファイルと動作環境をひとまとめにした既成のコンテナをぽんとクラウドに投げ込むと、すぐにリモートサービスとして動かせます。 さらに一歩すすんで、FaaS(Function as a Service)では、誰かが登録した変換関数をインターネットのどこからでも呼び出せるようにできます。
以下、横浜工文社が使用している、または実験したものを順不同で紹介します。
Dockerはアプリケーションを動かすのに必要なファイルをひとつにまとめたコンテナ型の実行環境です。
DockerコンテナにWebサーバ(たとえばApache)、Markdown→HTMLコンバータ(たとえばPandoc)を組み込み、あらかじめ環境設定をしておきます。 このような作成済みのDockerイメージを第三者が取得して、設定なし、あるいは簡単な設定のみでMarkdownのダイナミック変換を行うWebサイトを動作させることができます。
実験したDockerコンテナはGitHubとDockerHubで公開しています。
具体的には下記ページをごらんください。
→ 詳細
また作成の経緯は下記で紹介しました。
Amazon AWSにはDockerコンテナを収容してくれるサービスが現在三種類あります。
いずれもAWSクラウド側でDockerコンテナを実行してくれるサービスです。 ECSとFargateの違いはDockerコンテナの実行場所です。 ECSは従来の仮想サーバサービスであるEC2(Elastic Compute Cloud)上でコンテナを実行します。 ECS用に作成されたEC2インスタンスに利用者がログインすることもできます。 いっぽうFargateは、AWS内部ではなんらかのかたちでEC2インスタンスを使ってるのかもしれませんが、利用者からは見えません。 アマゾンが万事やってくれます。
ECSとEKSの違いはDockerコンテナの管理方法がAWS独自かGoogleのKubernetesを用いるかの違いがあります。 いずれもDockerコンテナの管理サービスである点は共通です。
AWSのコンテナサービスはDocker HubからDockerイメージを取得できるほかAWS固有のレポジトリサービス(ECR, Elastic Container Registry)もあります。
横浜工文社のエンジニアは、Markdownダイナミック変換Dockerコンテナを、Docker社が運営する公開レポジトリのDocker Hubに登録し、AWS ECS側からDockerイメージを取得して動作させる実験を行いました(実行環境はEC2インスタンス)。
関数ひとつでMarkdown変換を実現し、インターネットの様々な場所から呼び出すことを可能とするものです。
実現方法はさまざまあると思いますが、筆者はAmazone AWSが提供するLambdaを前提に次の実験を計画しています。
これまでLambdaに簡単な関数(文字列変換)を登録し、Web APIで呼び出すところまで確認済みです。 ファイル一個の関数であればAWSコンソールで比較的簡単に設定できます。 関数を構成するファイルが複数あると、AWSコンソールではなく、AWS CLIで設定する必要があります。 もっかこのあたりを実験中です。
Written 2020-Sep-19
Updated 2020-Sep-24