diff --git a/qlfile b/qlfile
index 259ee71..2f0ba9c 100644
--- a/qlfile
+++ b/qlfile
@@ -8,3 +8,4 @@ ql cl-dotenv
 ql clack-errors
 git microcms https://github.com/skyizwhite/microcms-lisp-sdk
 ql local-time
+ql function-cache
diff --git a/qlfile.lock b/qlfile.lock
index ef9d5da..f41858f 100644
--- a/qlfile.lock
+++ b/qlfile.lock
@@ -42,3 +42,7 @@
  (:class qlot/source/ql:source-ql
   :initargs (:%version :latest)
   :version "ql-2024-10-12"))
+("function-cache" .
+ (:class qlot/source/ql:source-ql
+  :initargs (:%version :latest)
+  :version "ql-2023-10-21"))
diff --git a/src/lib/cms.lisp b/src/lib/cms.lisp
index 75b7354..e61aa08 100644
--- a/src/lib/cms.lisp
+++ b/src/lib/cms.lisp
@@ -3,18 +3,33 @@
   (:import-from #:microcms
                 #:define-list-client
                 #:define-object-client)
+  (:import-from #:function-cache
+                #:defcached)
   (:import-from #:website/lib/env
                 #:microcms-service-domain
                 #:microcms-api-key)
-  (:export #:get-blog-list
-           #:get-blog-detail
-           #:get-about
-           #:get-work))
+  (:export #:get-about
+           #:get-work
+           #:get-blog-list
+           #:get-blog-detail))
 (in-package #:website/lib/cms)
 
 (setf microcms:*service-domain* (microcms-service-domain))
 (setf microcms:*api-key* (microcms-api-key))
 
+(defmacro memorize (name timeout)
+  (let ((origin (gensym)))
+    `(progn
+       (setf (fdefinition ',origin) (fdefinition ',name))
+       (defcached (,name :timeout ,timeout) (&key query)
+         (,origin :query query)))))
+
 (define-object-client about)
+(memorize get-about 60)
+
 (define-object-client work)
+(memorize get-work 60)
+
 (define-list-client blog)
+(memorize get-blog-list 60)
+(memorize get-blog-detail 60)