Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[メモ]Otcopressコンテンツ投稿自動化

emacsからblog投稿ツールいくつ試しました、最近以下のツール組み合わせで落ち着いた。

1 Octopress + Github Page でブログ環境を構築する

同じ環境で複数Rubyバージョンを利用できるようにするためRbenvを導入する。

1.1 Rbenvのインストール

$ cd ~
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ source ~/.bashrc

rbenvでインストール可能なバージョンリストを確認する。 rbenv install -l

1.2 RbenvによるRubyバージョンの切り替え

$ rbenv install 1.9.3-p0
$ rbenv global 1.9.3-p0
$ rbenv rehash
$ rbenv global
$ ruby --version

1.3 Octopressのインストール

GithubからOctopressをダウンロードする

$ git clone git://github.com/imathis/Octopress.git Octopress
$ cd Octopress
$ ruby --version  # ruby バージョン確認

必要なrubyライブラリをインストールする

$ gem install bundler
$ rbenv rehash
$ bundle install

Octopressテーマの初期化

$ rake install

octostrap3 Themeへ変更

$ cd Octopress
$ git clone https://github.com/kAworu/octostrap3 .themes/octostrap3
$ rake 'install[octostrap3]'

静的コンテンツの生成

$ rake generate

1.4 Github Pageサイトの準備

ここでは省略します。

1.5 OctopressコンテンツをGithub Pageにコミットする

$rake setup_github_pages    # githubリポジトリのurlを入力する
$rake generate
$rake deploy

2 emacsから記事を書く道具の整備

elpa を通して、=org-mode= で記事を書くための org-ocotpress をインストールする。 org-ocotpressは MELPAに登録してあるので、 M-x package-install org-ocotpress で インストールする。 org-ocotpress から記事を管理するため、emacsの設定とOcotpress のpermalink設定を以下のように変える。

octopress/_config.yml

permalink: /blog/:year-:month-:day-:title.html

emacs設定

(require 'org-octopress)
(setq org-octopress-directory-top       (concat user-emacs-directory "blogs/octopress/source"))
(setq org-octopress-directory-posts     (concat user-emacs-directory "blogs/octopress/source/_posts"))
(setq org-octopress-directory-org-top   (concat user-emacs-directory "blogs/octopress/source"))
(setq org-octopress-directory-org-posts (concat user-emacs-directory "blogs/octopress/source/blog"))
(setq org-octopress-setup-file          (concat user-emacs-directory "blogs/octopress/setupfile.org"))

blogs/octopress/setupfile.org

#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:nil *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+OPTIONS: author:nil
#+OPTIONS: email:nil
#+OPTIONS: creator:nil
#+OPTIONS: timestamp:nil
#+MACRO: more @@html:<!-- more -->@@
#+MACRO: twitter [[http://twitter.com/$1][@$1]]
#+MACRO: github [[https://github.com/$1/$2][$2]]
#+PROPERTY: cache yes
#+STARTUP: odd
#+STARTUP: content

3 自動化スクリプト

コンテンツプレビュー自動化elispとshell script

(defvar org-octopress-top
  (concat user-emacs-directory "blogs/octopress/")
  "octopressブログテンプレートディレクトリ")

(defun org-octopress-preview ()
  "preview octopress content by call external shell script."
  (interactive)
  (message "preview octopress content ....")
  (lexical-let* ((default-directory org-octopress-top)
                 (preview-url "http://localhost:4000"))
    (deferred:$
      (deferred:process-shell "blog_preview.sh" org-octopress-top)
      (deferred:nextc it
        (lambda (x)
          (message "*** preview blog ***")
          (message x)
          (message "launch preview url %s" preview-url)
          (browse-url preview-url))))))

blog_preview.sh

#!/bin/sh
## Usage: blog_preview.sh
##
## Options: $1 octopressディレクトリの位置
##
## Comment: octopress配下にblog静的
##          コンテンツの生成とプレビュー
##################################################################### 

RUBY_VER="1.9.3-p0"
OCTOPRESS_DIR=$1

which rbenv
if [ $? = 0 ]; then
    # ruby バージョン切り替え処理
    rbenv global $RUBY_VER
    rbenv rehash
    global_ver=`rbenv global`
    if [ $global_ver = $RUBY_VER ]; then
        # blogコンテンツ生成とデプロイ
        echo "run rake with `ruby --version`"
        pushd $OCTOPRESS_DIR
        rake generate
        if [ -z "`netstat -nutl | grep 4000`" ] ; then
            echo ">>> Startup Preview"
            rake preview &
            sleep 2
        fi
        popd
    fi
fi

コンテンツをgithubへ自動同期化elispとshell script

(defun org-octopress-deploy ()
  "deploy octopress content to github page service."
  (interactive)
  (message "deploy octopress content ....")
  (lexical-let* ((default-directory org-octopress-top))
    (deferred:$
      (deferred:process-shell "blog_deploy.sh" org-octopress-top)
      (deferred:nextc it
        (lambda (x)
          (message "*** deploy blog ***")
          (message x))))))

blog_deploy.sh

#!/bin/sh
#!/bin/sh
## Usage: blog_deploy.sh
##
## Options: $1 octopressディレクトリの位置
##   
## Comment: octopress配下にblog静的
##          コンテンツの生成とデプロイ
##################################################################### 

RUBY_VER="1.9.3-p0"
OCTOPRESS_DIR=$1

which rbenv
if [ $? = 0 ]; then
    # ruby バージョン切り替え処理
    rbenv global $RUBY_VER
    rbenv rehash
    global_ver=`rbenv global`
    if [ $global_ver = $RUBY_VER ]; then
        # blogコンテンツ生成とデプロイ
        echo "run rake with `ruby --version`"
        pushd $OCTOPRESS_DIR
        rake generate
        rake deploy
        popd
    fi
fi

Comments