LoginSignup
1
0

More than 5 years have passed since last update.

Yesodでコマンドライン引数や設定ファイルを扱う

Posted at

main関数内でコマンドライン引数を読んだとして、ハンドラからどうやってアクセスするのか悩んだので以下に方法を書いておきます。

tl;dr

ファウンデーション型のフィールドにデータを格納しgetYesodでアクセスする。

Initializing data in the foundation datatype :: Yesod Web Framework Book- Version 1.6

注:ファウンデーション型というのはYesodのインスタンスにするデータ型のことです。以下のコードではArgumentにあたります。

ハンドラからコマンドライン引数にアクセスする例

以下は、引数付きでWebアプリを起動すると、/にアクセスしたときそれらをhtml内で表示するという例です。
やっていることはtl;drにある通りです。

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
{-# LANGUAGE TemplateHaskell   #-}
{-# LANGUAGE TypeFamilies      #-}
import System.Environment (getArgs)
import Yesod

data Argument = Argument { args :: [String] }

mkYesod "Argument" [parseRoutes|
/ HomeR GET
|]
instance Yesod Argument

getHomeR :: Handler Html
getHomeR = do
    args <- args <$> getYesod
    defaultLayout $ do
        setTitle "Argument"
        [whamlet|
          $forall arg <- args
            <p>#{arg}
        |]

main :: IO ()
main = do
  args <- getArgs
  warp 3000 (Argument args)

関連技術

optparse-applicative - コマンドライン引数を扱うライブラリ
optparse-generic - 上と同じだがよりシンプル
RecordWildcards拡張 - レコードのフィールドを扱うのに便利。上で挙げたYesod Bookに使用例があります。

1
0
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
1
0