diff --git a/envy-extensible.cabal b/envy-extensible.cabal
--- a/envy-extensible.cabal
+++ b/envy-extensible.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                envy-extensible
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Provides FromEnv in envy instance for Record of extensible.
 -- description:
 homepage:            https://github.com/igrep/envy-extensible#readme
@@ -23,6 +23,7 @@
   import:              shared
   hs-source-dirs:      src
   exposed-modules:     Data.Extensible.Envy
+                       Data.Extensible.Envy.Instances
 
 test-suite envy-extensible-test
   import:              shared
diff --git a/src/Data/Extensible/Envy.hs b/src/Data/Extensible/Envy.hs
--- a/src/Data/Extensible/Envy.hs
+++ b/src/Data/Extensible/Envy.hs
@@ -16,11 +16,13 @@
 -- Maintainer: YAMAMOTO Yuji <yuji-yamamoto@iij.ad.jp>
 -- Stability : Experimental
 --
--- Provides 'Env.FromEnv' instance for 'Ex.Record' and functions to
--- create 'Ex.Record' from environment variable using 'Env.Parser'.
+-- Provides functions to create 'Ex.Record' from environment variable
+-- using 'Env.Parser'.
 --------------------------------------------------------------------------------
+
 module Data.Extensible.Envy
   ( recordFromEnvWith
+  , recordFromEnvWithDefault
   , recordFromEnv
   , FieldLabelToEnvName
   , defaultFieldLabelToEnvName
@@ -28,6 +30,7 @@
   ) where
 
 
+import           Control.Applicative   ((<|>))
 import qualified Data.Char             as C
 import           Data.Extensible       (Forall, Instance1)
 import qualified Data.Extensible       as Ex
@@ -97,16 +100,28 @@
 {-# INLINE recordFromEnvWith #-}
 
 
--- | Returns 'recordFromEnv' when the first argument of 'Env.fromEnv' is @Nothing@.
-instance Forall (Ex.KeyTargetAre KnownSymbol (Instance1 Env.Var h)) xs
-  => Env.FromEnv (Ex.RecordOf (h :: Type -> Type) xs)
+-- | 'Env.Parser' for 'Ex.Record'.
+-- This is necessary to implement the instance of 'Env.FromEnv' for
+-- 'Ex.Record' correctly.
+recordFromEnvWithDefault
+  :: forall (xs :: [Ex.Assoc Symbol Type]) h
+   . Forall (Ex.KeyTargetAre KnownSymbol (Instance1 Env.Var h)) xs
+  => Ex.RecordOf h xs
+  -> FieldLabelToEnvName
+  -> Env.Parser (Ex.RecordOf h xs)
+recordFromEnvWithDefault def fl2en =
+  Ex.hgenerateFor
+    (Proxy :: Proxy (Ex.KeyTargetAre KnownSymbol (Instance1 Env.Var h))) f
  where
-  fromEnv (Just r) = pure r
-  fromEnv Nothing  = recordFromEnv
-  {-# INLINE fromEnv #-}
+  f membership =
+    ( Ex.Field <$> Env.env (fl2en $ Ex.stringKeyOf membership)
+    ) <|> pure (Ex.hlookup membership def)
+{-# INLINE recordFromEnvWithDefault #-}
 
 
--- | Necessary to make 'Ex.Record' an instance of 'Env.FromEnv'
+-- | Necessary to make a 'Env.Parser' for 'Ex.Record'.
+--
+-- TODO: Remove this after <https://github.com/dmjio/envy/pull/31> is released.
 instance Env.Var a => Env.Var (Identity a) where
   toVar = Env.toVar . runIdentity
   {-# INLINE toVar #-}
diff --git a/src/Data/Extensible/Envy/Instances.hs b/src/Data/Extensible/Envy/Instances.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Extensible/Envy/Instances.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE DataKinds            #-}
+{-# LANGUAGE FlexibleContexts     #-}
+{-# LANGUAGE FlexibleInstances    #-}
+{-# LANGUAGE KindSignatures       #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+--------------------------------------------------------------------------------
+-- |
+-- Module    : Data.Extensible.Envy
+-- Copyright : (c) 2020 IIJ Innovation Institute, Inc.
+-- License   : BSD3
+-- Maintainer: YAMAMOTO Yuji <yuji-yamamoto@iij.ad.jp>
+-- Stability : Experimental
+--
+-- Provides 'Env.FromEnv' instance for 'Ex.Record'.
+--------------------------------------------------------------------------------
+
+module Data.Extensible.Envy.Instances where
+
+
+import           Data.Extensible      (Forall, Instance1)
+import qualified Data.Extensible      as Ex
+import           Data.Extensible.Envy
+import           Data.Kind            (Type)
+import           GHC.TypeLits         (KnownSymbol)
+import qualified System.Envy          as Env
+
+
+-- | Returns 'recordFromEnv' when the first argument of 'Env.fromEnv' is @Nothing@.
+instance Forall (Ex.KeyTargetAre KnownSymbol (Instance1 Env.Var h)) xs
+  => Env.FromEnv (Ex.RecordOf (h :: Type -> Type) xs)
+ where
+  fromEnv (Just r) = recordFromEnvWithDefault r (defaultFieldLabelToEnvName "")
+  fromEnv Nothing  = recordFromEnv
+  {-# INLINE fromEnv #-}
