タグ

ブックマーク / qiita.com/jabaraster (11)

  • servant+persistentを利用する - Qiita

    Haskell Advent Calendar 2017 その3(!)、7日目の記事です。 HaskellでRESTサーバを書くライブラリはいくつかあるようですが、私が気に入っているのはservantです。対抗馬としてはScottyがあると思いますが、servantはより型に安全なそうなのと、APIのあり方が好きです。 servantはごく薄い機能しか提供していないので、格的なRESTサーバに必須のDB連携を自分で書く必要があるのですが、巷にはこのサンプルが少ない気がしています。 また高レベルなDBアクセスフレームワークとしてはpersistentが有名だと思うのですが、servantと組み合わせた例がGitHubにあるにはあるのですが、persistentのバージョンが古くインターフェイスが変わっているのでコンパイルに通らなかったりするし、コネクションプーリングを使っていないので実

    servant+persistentを利用する - Qiita
    igrep
    igrep 2017/12/07
    "「一通り実戦で使えるであろう」というレベルのサンプル"
  • Yesodのmodelsに独自定義した型を使いたいときには - Qiita

    Yesod Advent Calendar 2016|18日目です。 Yesodは型安全を追求した実にHaskellらしいWebアプリケーションフレームワークですが、DBアクセスにも型安全が徹底されています。 DBに格納するモデルを定義するのが config/models ファイルです。 stackのテンプレートを使って作った models ファイルは次のようになっています。 User ident Text password Text Maybe UniqueUser ident deriving Typeable Email email Text userId UserId Maybe verkey Text Maybe UniqueEmail email Comment json -- Adding "json" causes ToJSON and FromJSON instances

    Yesodのmodelsに独自定義した型を使いたいときには - Qiita
    igrep
    igrep 2016/12/28
  • Yesodのセッションあれこれ - Qiita

    makeSessionBackend _ = Just <$> defaultClientSessionBackend 120 -- timeout in minutes "config/client_session_key.aes" 上記は120分になっています。 なお、値を 0 するとセッションが一瞬たりとも維持されなくなるので、事実上セッション管理がされなくなります。タイムアウトしなくなるわけでないのでご注意を。 セッション管理を行わないようにする 場合によってはYesodのセッション管理を使いたくない場合があると思います。 この場合、Foundation.hsのmakeSessionBackendでNothingを返すようにします。 修正前

    Yesodのセッションあれこれ - Qiita
    igrep
    igrep 2016/12/28
  • Yesodの設定ファイルconfig/settings.ymlに設定を追加する - Qiita

    stackのテンプレートから生成したYesodアプリは、設定ファイル群が config ディレクトリに格納されています。 その中に settings.yml というファイルがあり、これは環境変数から値を取ったり、直接値を書いたりできる設定ファイルです。 今回はこのファイルに設定を追加する方法を紹介します。 config/settings.ymlの内容 デフォルトではsettings.ymlの内容は次のようになっています(DBSqliteを使う場合。コメントは省いてあります)。 static-dir: "_env:STATIC_DIR:static" host: "_env:HOST:*4" # any IPv4 host port: "_env:PORT:3000" # NB: The port `yesod devel` uses is distinct from this value

    Yesodの設定ファイルconfig/settings.ymlに設定を追加する - Qiita
    igrep
    igrep 2016/12/26
    うーむ、独自仕様感あふれるな…
  • YesodのHandler関数からJSONを返す方法 - Qiita

    Yesod Advent Calendar 2016を通してたくさんの知見が得られたことを嬉しく思います。 Yesodは素晴らしいフレームワークです。Haskellらしい厳密さに対するこだわりに満ちていて、Webアプリ内でのリンク切れは起きません。DBアクセスにも型安全にこだわり抜かれていて、常に、「何かに守られている」感覚でプログラムすることが出来ます。 しかし・・・型安全を捨てねばならない時もあります。昨今のクライアント側はReactで構築することが多く、この場合、WebサーバはAPIのみを提供すれば充分。型安全なHTMLの出番はなくなります。 この場合、Yesodの旨味はかなり無くなりますが、それでもそれなりに意味はあって、私がリリースしたWebアプリの場合、データ量が多いページを非力なスマホで表示する際に、Reactでは遅すぎて辛かった時に、hamletでHTMLを組み立てる方針に

    YesodのHandler関数からJSONを返す方法 - Qiita
    igrep
    igrep 2016/12/25
  • Yesodで作るWebアプリの起動時にDBに対して処理を行う - Qiita

    Yesod Advent Calendar 2016|14日目の投稿です。 Webサーバ起動時にDBに対して処理を行いたいことがあります。 例えば設定値テーブルにデフォルト値を突っ込んだり、システム管理者を登録したり・・・ Yesodでこのような処理を行う場所は、Application.hsの中のmakeFoundation 関数が良さそうです。 書き方 Yesodのテンプレートで作成したmakeFoundation関数の中には次のような処理があります。 -- Perform database migration using our application's logging settings. runLoggingT (runSqlPool (runMigration migrateAll) pool) logFunc

    Yesodで作るWebアプリの起動時にDBに対して処理を行う - Qiita
    igrep
    igrep 2016/12/23
  • Yesodで作ったWebアプリをketerでデプロイする - Qiita

    stackが出現してYesod開発が飛躍的に安定するようになり、Webアプリ作成が現実的な選択肢になりました。実際、私も仕事で1つ、Webアプリをリリースした経験があります(ごく小規模ではありますが)。 Webアプリは作っただけでは当然使うことができず、サーバにデプロイする必要があります。 今回はHaskell製のデプロイツールであるketerをご紹介します。 keterとは keterはYesodの作者(の一人?)であるMichael Snoyman氏が開発している、デプロイを支援するツールです。Haskellで作られています。 恐らくYesodで作られたWebアプリをデプロイすることを念頭に置かれているとは思いますが、それに縛られるものではありません。 ソースはGitHubで公開されています。 keterの機能 家のREADME.mdから抜粋すると・・・ 80番ポートにバインドし、リ

    Yesodで作ったWebアプリをketerでデプロイする - Qiita
  • 特定のリソースに対してCSRFチェックを行わないようにする - Qiita

    YesodはCSRF対策のサーバ側処理としてdefaultCsrfMiddleware というYesod Middlewareを提供している、ということはYesod Advent Calendar 2016|9日目に書きました。 ただ、CSRF対策はサーバ側だけでは当然ながら不充分で、クライアント側にも対処が必要です。ところが困ったことにこのクライアント側で対処がなされていない処理が見あたります。 中でも困るのがログアウト処理で、単純にdefaultCsrfMiddlewareを使うとログアウト処理(=/auth/logoutへのアクセス)でCSRFチェックでNGとなってしまい、ログアウトに失敗してしまいます。 これに対処する1つの方法として、特定パスへのアクセス時にCSRF対策を行わないようにするMiddlewareを作り、defaultCsrfMiddlewareの代わりに使うようにし

    特定のリソースに対してCSRFチェックを行わないようにする - Qiita
    igrep
    igrep 2016/12/11
    やっぱり普通の関数として合成しやすいのは魅力だなぁ。潰しが利く。
  • YesodでリクエストをフックするにはYesod Middlewareを使う - Qiita

    Yesod Advent Calendar 2016の2日目の記事です。Yesodに関する有用な記事が集まってきて、嬉しい限りです! さて JavaのServletAPIにはFilterという便利な機能があります。 これは特定のパターンのURLへのリクエストをフックし、来の処理の前後に処理を挟んだり、場合によっては来の処理を行わずに別の処理を実施したります。 これにより、業務的なロジックとWeb的なロジックを分離し、それぞれの処理をスッキリ実装することが出来るようになります。 Yesodでもこの機能はあり、Yesod Middleware ・・・と呼ぶようです。 (syocyさんからのご指摘で Middleware → Yesod Middlewareと改めました) ただ、URLのパターンを指定することは出来ないようで、その辺りは自分で実装する必要があるようです。 Middleware

    YesodでリクエストをフックするにはYesod Middlewareを使う - Qiita
    igrep
    igrep 2016/12/09
    適用される順番も明示的なのはよいね。
  • Yesodのテンプレートから生成されるファイルの役割 - Qiita

    Yesodを使ってWebアプリケーションを作るとき、よほどのことがなければYesodのベストプラクティスが詰まったテンプレートをベースに開発するのが、無難な選択です。 HaskellのビルドツールであるstackにはYesodのテンプレートが提供されています。 このエントリではテンプレートが生成するファイルの中でも、特に重要なものを解説します。 各ファイルの役割を知ることで、独自のカスタマイズや拡張を施したいときに、どうすればいいか当たりが付けやすくなります。 stackでYesodプロジェクトを作る 例えば、データベースがPostgreSQLのYesodプロジェクトをテンプレートから生成するコマンドは次のようになります。

    Yesodのテンプレートから生成されるファイルの役割 - Qiita
    igrep
    igrep 2016/12/03
    yesod使う日が来るか知らんけど
  • Haskellの関数合成が苦手に感じるわけを考察してみた - Qiita

    最初に断っておきますが、当エントリは実用的ではありません。 Haskell初心者が挫折しがち(と思われる)関数合成について、思いを共有出来ればいいなと思っています。 関数合成を書くのって、何だか難しい Haskell初心者の鬼門、関数合成。 なんかかっこいいから使ってみたい。letを使ったら負け、$を使った負け・・・という思いで頑張ってみるものの、なかなかうまく書けない・・・ なぜ私はこんなに関数合成を苦手に感じるのか。整理して解決への糸口を探してみることにしました。 関数合成は思考と記述の順番が逆 私が感じるに、関数合成が分かりにくいのは 後ろから 関数が適用されるのに違和感があるからです。 例として複数行から成る文字列の各行の先頭に行番号を付けるプログラムを書いてみます。 f = unlines . map (\(f, s) -> f ++ s) . zip (map show [1.

    Haskellの関数合成が苦手に感じるわけを考察してみた - Qiita
    igrep
    igrep 2014/12/10
    無理に使わんでも。。。
  • 1