Haskell + Yesod + ElmでブログシステムHoubouを作ってみました

Houbouで初投稿…

自前のブログシステムでブログが急に書きたくなったので作ってみました、機能的には至ってシンプルでフレームとスタイルを設定したら、markdownか素のHTMLで適当に書いていけばいいだけというやつです。

markdownで書きたかったこと、あと私がこよなく愛する gentoo が1台クラウドに電源が入りっぱなしで放置されていたので有効活用しようと思ったこと、さらに Haskell を使いたかったことが、動機となって自分でブログシステムを作ってみました。

でも、WordPressのdockerでブログ作った方が断然いいと思います 笑….

気を取り直して、せっかくなので使ったものやよかったことなど、晒します。

Houbouで使ったもの

Houbouで利用したミドルウエアや開発言語、フレームワークなどをご参考程度に紹介します(いらないとは思いますが)

ミドルウエア

サーバーサイドで使っているもの

  • PostgreSQL-12
  • Nginx

個人的に、nginxとPostgreSQLが好きなので使いました、テーブル設計とかPostgreSQLが楽かなと思っています、MySQLのTEXTカラム10個問題とか MySQLと思ったらMariaDBだったとか(関係ないですね)、OracleDBのオブジェクト名30文字問題とか、あんまり考えたく無いので、最近PostgreSQLばかりつかってしまいます。 ER設計なんかも、 pgModeler とか綺麗なGUIもありますし(漢字入力できないのが悔しいですが)、ということです。 (MySQLやMariaDBが嫌いなわけではありません…ただ、OracleDBのORA-xxxxのエラー出力は嫌いです)

nginxについてはインフラやさんにとっては大変な武器になっていると思います、わたしもここ何年でapacheを使わなくなってしまいました。 設定とかも書きやすいし、設定にconditionとか書いて柔軟に設定できるし、LuaJITとか入れたりエグい機能が豊富なので頼もしいプロキシサーバーだなと思います。 もう一家に一台常備しておきたいですね。

Web Framework

Haskell Yesod

このフレームワークを使いたいというそれだけで使いました、が、私としては完璧に近いほど素晴らしいWeb Frameworkで コード書いてて楽しかったです。

私もHaskellを熟知しているわけではありませんが、現状の知識でそこそこ動くものが作れました、ということと、 コンパイラを通す という作業は面倒ですが、コンパイル通ればほぼまともに動きますよっていう、ランタイムエラーが無い 幸せを再認識しました。(実際はありますが、Javaのヌルポよりは遥に少ないです…)

さらに使い込んでいきたいなと感じています。

Front End

Elm

Elmは楽しかったですね、ほぼHaskellと構文が似ているので書くのも楽でした。

メディアアップロードで使いました、実際のコードは初めて書いたので寸足らずなところがあると思いますが多めにみてください。 Elm本とオンラインドキュメントの併用で何とか動くものを作れました。 ECMAとかReactとか色々頑張ってみたものの、私はElmが一番使いやすいと感じました、 「2021年 もっとも学ぶべき言語」 ではないでしょうか。

jquery

苦手です、でもほぼ優秀なjquererが書いてくださったものを、丁重にいただき利用させてもらっています。最近老眼になったことで、jqueryテイストで かかれたjavascriptコードが、perlのコードに見えてくる事があるので、眼科にいこうと思っています。

Yesod + Elm の組み合わせは、バランスがいいですね、Yesodで書いてると何でもサーバーサイドでやった方が楽に感じてくるのですが (私だけかも知れませんが…)、ElmがあるとJavascriptを書く敷居がだいぶ下がるので、導入しやすく感じました。(これも私だけかもしれませんが…)

Elmを使うと、javascriptの知識はほぼいらないという、ありがたいことに、Elmの作者には感謝です。

markdown

ひつこいと言われそうですが、 記事を markdown で基本的に書きたかったので、この記事もmarkdownで書いてあります、もちろんHTMLでの記事の作成も 可能にしてあります。 markdownは pandoc コンパイラを使って変換しています。

ginger

ブログの構成要素は、基本的にフレーム(HTML)と記事(Markdown or HTML)を組み合わせる形で、組み上げたものを出力しています、 利用価値があるかどうか分からないのですが、個人的に ginger を使って見た かったので、試しに組み込んで見ました、フレームについてはgingerを利用してタグ置換が可能です、が今のところシステム定義のタグのみに なってます。

hzenhan

自分が作ってhackageにも登録してあるライブラリです、誰も使ってくれそうにないので、無理やり使いました。

作ってみて感想

得に自分が使うことが目的だったので、人が利用することをまったく考慮していないので足りない機能満載ですが、今後ボチボチ追加 していこうと思っています。(既にプレビューないと面倒くさいと感じています)

とりあえず出力できたので、公開します、結構ノリで書いてしまったので、一部見苦しいところがあるかとは思いますが、 コードは github へ上げておきます、よろしければどうぞ。

参考文献

Haskell Yesod

もう有名ですね、今では和訳されたWebページもあるのでそちら方を見た方がストレスないかも、英語も読めないのですが買ってしまいました、なので、皆さんも買ってください。

Elm

Elmの文法から使い方まで基本的な事は網羅されていて、内容も読みやすかったです、この本とオンラインドキュメントがあれば普通に書けます。

製品ではないので、テストも適当ですが記事の出力は出ます、では、引き続き、ブログをつけていきたいと思います、みなさん今後もよろしくです。

Posted on 2020-10-04 12:58:33

はじめまして

静岡の極東の浜辺で何かをやっている人間です、基本的に季節を問わずBBQとオフロードをバイクで走るのがが大好きです、暇があれば何かを焼いているか走っています。どこかの浜で焼いている姿をみたら、gentooの話もで飲みながらしましょう...

Posted

Amazon

tags

日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php redmine Linux Oracle Map OMap omap map BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth yesod