     (defun kui/helm-go ()
       (interactive)
       (helm :sources '(kui/helm-go-source) :buffer "*helm go*")))
-
   (defun kui/go-init ()
-    (set (make-variable-buffer-local 'tab-width) 4)
-    (set (make-variable-buffer-local 'whitespace-style)
-         '(face tab-mark tabs)))
-
-  (kui/after-loaded "go-mode"
-    (kui/with-pkg 'go-autocomplete)
-    (add-hook 'go-mode-hook 'kui/go-init)
-    (add-hook 'before-save-hook 'gofmt-before-save)
-    (define-key go-mode-map "\M-." 'godef-jump)
-    (define-key go-mode-map "\M-," 'pop-tag-mark))
-  )
-
-(kui/with-pkg 'markdown-mode
+    (setq-local tab-width 4)
+    (setq-local whitespace-style '(face tab-mark tabs)))
+  (add-hook 'go-mode-hook 'kui/go-init)
+  (add-hook 'before-save-hook 'gofmt-before-save)
+  )
+
+(use-package markdown-mode
+  :no-require t
+  :ensure t ;; *scratch* で使うため
+  :config
   (defun kui/markdown-init ()
-    ;; (set (make-variable-buffer-local 'indent-tabs-mode) nil)
-    (set (make-variable-buffer-local 'tab-width) 4)
-    (set (make-variable-buffer-local 'whitespace-style)
-         '(;; faceを使って視覚化する。
-           face
-           ;; タブ
-           tabs
-           tab-mark
-           ;; タブの前にあるスペース
-           space-before-tab
-           ;; タブの後にあるスペース
-           space-after-tab
-           ))
+    ;; (setq-local indent-tabs-mode nil)
+    (setq-local tab-width 4)
+    (setq-local whitespace-style
+                '(;; faceを使って視覚化する。
+                  face
+                  ;; タブ
+                  tabs
+                  tab-mark
+                  ;; タブの前にあるスペース
+                  space-before-tab
+                  ;; タブの後にあるスペース
+                  space-after-tab
+                  ))
     (electric-indent-local-mode -1))
   (add-hook 'markdown-mode-hook 'kui/markdown-init)
 

;; (global-auto-revert-mode 1)

;; 自動保存ファイルの保存先ディレクトリ
(defconst emacs-bk-dir
  (concat temporary-file-directory
          "emacs-bk-" (number-to-string (user-uid)) "/"))
(mkdir emacs-bk-dir t) ;; TODO do mkdir recursively

;; 自動保存機能
(setq auto-save-default t

  (setq whitespace-action '(auto-cleanup))
  (defun kui/whitespace-auto-cleanup-enable ()
    (interactive)
    (setq-local whitespace-action '(auto-cleanup)))
  (defun kui/whitespace-auto-cleanup-disable ()
    (interactive)
    (setq-local whitespace-action nil))
  )

;; ctag-update.el 自動で TAGS アップデートしてくれる
(use-package ctags-update
  :config
  (set 'ctags-update-command
       (kui/find-if-executable '("ctags-exuberant"
                                 "exuberant-ctags"
                                 "ctags")))
  )

;; 一度に複数のカーソルを操作
(use-package multiple-cursors
  :bind (("M-m n" . mc/mark-next-like-this)
         ("M-m p" . mc/mark-previous-like-this)
         ("M-m a" . mc/mark-all-like-this)
         ("M-m i" . mc/mark-more-like-this-extended))
  :init
  (multiple-cursors-mode)
  )

;; -------------------------------------------------------------------------
;; メジャーモードの設定や読み込み

;; メジャーモードのインストールはオプショナル
(setq use-package-always-ensure nil)

(use-package emacs-lisp-mode
  :no-require t
  :bind (:map emacs-lisp-mode-map
              ("C-c f f" . find-function)
              ("C-c f v" . find-variable)
              ("C-c f l" . find-library)
              ("C-c d f" . describe-function)
              ("C-c d v" . describe-variable))
  )

;; http://emacs-jp.github.io/programming/golang.html
(use-package go-mode
  :no-require t
  :bind (:map go-mode-map
              ("M-." . godef-jump)
              ("M-," . pop-tag-mark))
  :config
  (use-package go-autocomplete :ensure t)
  (use-package helm
    :config
    (defvar kui/helm-go-source
      '((name . "Helm Go")
        (candidates . (lambda ()
