emacsからblog投稿ツールいくつ試しました、最近以下のツール組み合わせで落ち着いた。
- 静的コンテンツ生成エンジン
Octopress
: http://Octopress.org/ - コンテンツ公開サービス
Github Page
: https://pages.github.com/ - org-modesでOctopress記事を書く: https://github.com/yoshinari-nomura/org-Octopress
- 自動化スクリプト
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