5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Hi WRITE(Rust Headless CMS)に入門した

Last updated at Posted at 2023-01-06

Hi WRITE(Rust Headless CMS)に入門したぞー

晴れ時々エンジニアのいっくんです。
今日はHeadless CMSについて調べたことを共有しつつ、Rustで書かれたTECHFUND社のHi WRITE *1に入門した時のメモを共有します。
*1 ..プレスリリースご参照

Headless CMSとは?

Headless CMSは、ウェブサイトやアプリケーションのフロントエンドと、コンテンツを管理するバックエンドを切り離すように設計されたコンテンツ管理システムです。Headless CMSは、コンテンツを直接Webページにレンダリングする代わりに、APIを通じてコンテンツを公開し、あらゆる種類のフロントエンドやアプリケーションで表示することができます。

このアーキテクチャにより、ウェブサイト、モバイルアプリなど、異なるコンテキストで同じコンテンツを再利用することができ、それぞれのプラットフォームでコンテンツを再作成する必要がありません。また、サイトやアプリケーションのフロントエンドをバックエンドから独立して更新できるため、コンテンツをより柔軟に管理することができます。

人気のあるヘッドレスCMSとしては、ContentfulGraphCMSDirectusなどがあります。 これらのCMSは、コンテンツを管理するためのWebベースのインターフェイスと、コンテンツにアクセスし操作するためのAPIを提供します。

Headless CMSの利点は?

バックエンド(コンテンツの管理場所)とフロントエンド(コンテンツの表示方法)の分離されたアーキテクチャにより、サイトやアプリケーションのフロントエンドをバックエンドから独立して更新できるため、コンテンツの柔軟性と制御性が高くなっています。 
内容の更新のたびにエンジニアに頼んでHTMLの編集をしてもらう必要がなく、誰でも管理画面からWebサイトの内容を書き換えることができます。

再利用可能なコンテンツ。 ヘッドレスCMSは、APIを通じてコンテンツを公開するので、ウェブサイト、モバイルアプリなどあらゆるコンテキストでそのコンテンツを再利用することができます。

フロントエンドが選択可能。 ヘッドレスCMSは、HTTPリクエストを行い、JSONやXMLのレスポンスをパースできるフロントエンドやアプリケーションであれば、Rust、JavaScript、Pythonなど、あらゆるプログラミング言語やフレームワークで使用することができます。

パフォーマンスの向上。 ヘッドレスCMSは、レンダリングする必要がないため、従来のCMSよりも高速かつ効率的に動作することがあります。これは特にトラフィックの多いサイトやアプリケーションで有効です。

なぜRust製を選んだの?

TECHFUND社のプレスリリースからRust製のメリットを抜粋します。

・Rust言語の特徴である並列処理性能により、少ないサーバー構成でより多くのコンテンツを並列処理・管理することができるため、費用対効果が高い運用を可能。
導入が非常に簡単。 バイナリファイルをダウンロードし、実行するだけでCMSの運用開始できる。
・他のNode.jsやPHPベースのCMSよりも高速なレスポンスタイムを提供することが可能。

なぜHi WRITEを選んだの?

そこにHi WRITEがあったから(キリッ)。
たまたまみつけたから。
オープンソースだから。おそらく他にないのでは?

さあ、入門しますよー

ちなみに、私の環境は AppleのM1 MacBook Pro(2020)です。

事前準備

「Hi WRITE」Githubリポジトリからクローン

git clone https://github.com/TECHFUND/hiwrite

Rustのインストール

Homebrewを使う場合

brew install rust

rustupを使う場合

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

インストーラのダウンロードを行い、最新の安定版のRustがインストールされます。

RustのVersion確認

ターミナルを再起動して下記コマンドを発行する
rustc --version
このようにVersion名が出てくればインストール成功
rustc 1.66.0 (69f9c33d7 2022-12-12)

Postgresのインストール

公式ページから使用環境に応じた安定版をダウンロードし、インストールする。

diesel_cliのインストール

dieselというのはRustのObject Relational Mapping(ORM, データベースを扱うためのライブラリ)であり、diesel_cliというのはそのコマンドラインツールである。

cargo install diesel_cli --no-default-features --features postgres

以下のエラーが出た場合、

  = note: ld: library not found for -lpq
          clang: error: linker command failed with exit code 1 (use -v to see invocation)

libpqをインストールする。
brew install libpq

diesel –version でDieselとdiesel_cliのVersionが一致することを確認する

#diesel_cliのインスロール時のログ(後半のみ)
  Compiling heck v0.4.0
   Compiling migrations_internals v2.0.0
   Compiling migrations_macros v2.0.0
   Compiling diesel_migrations v2.0.0
   Compiling diesel_cli v2.0.1
    Finished release [optimized] target(s) in 22.14s
  Installing /Users/ikkun/.cargo/bin/diesel
   Installed package `diesel_cli v2.0.1` (executable `diesel`)

#dieselのバージョン確認
% diesel --version
diesel 2.0.1

hiwriteデータベースを作成する

psql -U postgresでPostgresSQLへ接続し、create database hiwriteでデータベースを作成する。

% psql -U postgres
psql (15.1)
Type "help" for help.

postgres=# create database hiwrite;
CREATE DATABASE

postgres=# \qで接続を解除する。

.envファイルの作成

リポジトリの.env.sampleを参考に.envファイルを作成する。

Hi WRITE起動

% cargo run -- migrate% cargo run -- serverでHi WRITEが起動する。

    Finished dev [unoptimized + debuginfo] target(s) in 0.28s
     Running `target/debug/hiwrite migrate`
Running migration 2022-11-1-101223_init
Ran migrations.
HiWrite Up!

コンテンツ管理

RESTful APIを使用してコンテンツの管理をします。
仕様はhttp://localhost:8000/api/docsを参照ください。

まとめ

Headless CMSからRust製のHi WRITEを取り上げて入門してみました。これから遊んでみます。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?