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