my story blog

JavaScriptとかRubyの技術的なことを書きたい

jekyllをheroku(w/unicorn)で動かす

himynameisjonas/jekyll-heroku-unicorn を参考に設定します。

バージョンは ruby 2.0.0 jekyll 1.4.2 です。

Gemのインストール

ruby '2.0.0' #herokuでruby 2.0を利用にするために設定

gem 'jekyll'
gem 'rack-jekyll', github: 'adaoraul/rack-jekyll', ref: '6a4b832c5b2350c8c1263b534ebf02135deb6363'
gem 'unicorn'

unicorn.rbの作成

unicornの設定ファイルを作成します。(細かい説明は端折ります)

worker_processes 1 
timeout 30   
preload_app true

config.ruの作成

config.ruを作成します。

require "bundler/setup"
Bundler.require(:default)

run Rack::Jekyll.new(:destination => '_site')

_config.ymlの設定

jekyllの_config.ymlファイルに以下のように (サイトに必要のない)不要なファイルを表示します。

exclude: ["vendor",".rbenv-version", ".gitignore", "README.md", "Gemfile", "Gemfile.lock", "Procfile", "unicorn.rb", "config.ru"]

vendorを入れないと、herekuでサーバを立ち上げる時に 「Post 0000-00-00-welcome-to-jekyll.markdown.erb does not have a valid date. (Jekyll::FatalException)」のエラーが発生します。

Procfileの作成

herokuで起動するためにProcfileを作成します。

web: bundle exec unicorn -p $PORT -c ./unicorn.rb

$ foreman startで起動することが確認できればOK

$ foreman start                                                                                                                                                                                             
01:07:26 web.1     | started with pid 83446
01:07:27 web.1     | I, [2013-12-29T01:07:27.402502 #83447]  INFO -- : Refreshing Gem list
01:07:28 web.1     | Configuration file: /***/****/_config.yml
01:07:28 web.1     | I, [2013-12-29T01:07:28.181070 #83447]  INFO -- : listening on addr=0.0.0.0:5000 fd=9
01:07:28 web.1     | I, [2013-12-29T01:07:28.181171 #83447]  INFO -- : worker=0 spawning...
01:07:28 web.1     | I, [2013-12-29T01:07:28.183126 #83447]  INFO -- : master process ready
01:07:28 web.1     | I, [2013-12-29T01:07:28.184675 #83582]  INFO -- : worker=0 spawned pid=83582
01:07:28 web.1     | I, [2013-12-29T01:07:28.189126 #83582]  INFO -- : worker=0 ready

herokuの作成と開始

ここからはいつものherokuの開始と同じ。

$ git init 
$ git add .
$ git commit -m ‘first commit’
$ heroku create 
$ git push heroku master
$ heroku open

で、うまく行けばxxxx.herokuapp.comで表示できるかと思います。

qiitaの記事はこちら

jekyllのmarkdownにカスタムタグを定義する

jekyllのmarkdownで独自の記法を定義して、特定のhtmlを出力したい。

処理概要

Jekyll::Converters::Markdown::***Parserクラスのconvertメソッドを拡張し、 convertをかける前に、特定の記法を変換する。

pluginの作成

_plugin/extendMd.rbというファイルを作り、以下の様なコードを記述します。 ※この例ではRedcarpetParserの拡張になっていますが、別のparserを使う場合はそのクラスを指定して下さい

module Jekyll
  module Converters
    class Markdown
      class RedcarpetParser
        alias :old_convert :convert
        def convert(content)

          # ここにコンバート処理を記述

          old_convert(content)
        end
      end
    end
  end
end

変換処理ケース1: smallタグを出力したい

--(ハイフン2つ)をsmallタグとして出力。 —-small text<small>small text</small>

def convert(content)

  # small word
  content.gsub! /(^|\s)(--\w+)/ do
    "#{$1}<small>#{$2}</span>"
  end

  old_convert(content)
end

変換処理ケース2:Twitterの埋め込みを出力したい

[tweet:https://twitter.com/kt_Biz/status/414717821034041344]
という形式の記法の出力をTwitterの埋め込みとして表示する場合。

def convert(content)

  # parse embed tweet
  content.gsub! /(\[tweet:https:\/\/twitter\.com\/\w+\/status\/[[:digit:]]+\])/ do
    "<blockquote class=\"twitter-tweet\" lang=\"en\"><a href=\"#{$1}\"></a></blockquote><script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>"
  end

  old_convert(content)
end

カスタマイズしたい場合はこちらを参考 → 埋め込みツイート | Twitter Developers


という感じで、markdownに独自の記法を追加することができます。お試しあれ。

qiitaの記事はこちら

jekyllでslimを使う

rubyでできた、ブログ、静的ページ生成ツールjekyll(ジキル)でテンプレートエンジンslimを使う方法。

jekyll-slimのインストール

gem 'jekyll-slim' 

bundle install

プラグインの読み込み

rootディレクトリに_plugins/bundler.rbを作成し、内容を以下のようにする。

require 'rubygems'
require 'bundler/setup'
Bundler.require(:default)

htmlファイルをslimに置き換える

_layouts/default.html等を.slimにリネームし、マークアップをslim形式に変更する。

参考: Slim - A Fast, Lightweight Template Engine for Ruby

テンプレートを読み込む

_includesディレクトリにあるテンプレートを読み込みたい場合は通常のincludeの部分をslimに置き換えます

#footer
  | {% slim footer.slim %}

hamlでやる場合もだいたい同じ。

Qiitaの記事はこちら

Yahoo!の日本語形態素解析APIのgemを作ってみた

前回のキーフレーズ抽出のgemに続き、 Yahoo!が提供している 日本語形態素解析APIのgemを作りました。

kyohei8/yahoo_parse_api · GitHub

yahoo_parse_api | RubyGems.org | your community gem host

インストール

Gemfileに以下を追加

gem 'yahoo_parse_api'

そして bundle install

またはgemを直接インストール

$ gem install yahoo_parse_api

 

設定

アプリケーションIDをYahooから取得して、 以下の用に設定

require 'yahoo_parse_api'

YahooParseApi::Config.app_id = [application_ID]

 

使い方

YahooParseApi::Parseをnewして、parseメソッドを呼び出します。

  • 第一引数に解析したい文字列、
  • 第二引数にリクエストパラメータをハッシュ形式で指定します。(リクエストパラメータについてはこちらをご参考下さい)
  • 第三引数にはリクエスト方法(:GET:POST)を指定します。指定しない場合はGETリクエストになります。
  • 戻り値はXML形式のレスポンスをハッシュにして返しています。
parse_api = YahooParseApi::Parse.new

# GET Request
result = parse_api.parse('庭には二羽ニワトリがいる。', {
            results: 'ma,uniq',
            uniq_filter: '9|10'
         })
# => {"ResultSet"=>{
#        "ma_result"=>{
#          "total_count"=>"8",
#          "filtered_count"=>"8",
#          "word_list"=>{"word"=>[{"surface"=>"庭", "reading"=>"にわ", "pos"=>"名詞"},
#                                 {"surface"=>"に", "reading"=>"に", "pos"=>"助詞"},
#                                 {"surface"=>"は", "reading"=>"は", "pos"=>"助詞"},
#                                 {"surface"=>"二羽", "reading"=>"にわ", "pos"=>"名詞"},
#                                 {"surface"=>"ニワトリ", "reading"=>"にわとり", "pos"=>"名詞"},
#                                 {"surface"=>"が", "reading"=>"が", "pos"=>"助詞"},
#                                 {"surface"=>"いる", "reading"=>"いる", "pos"=>"動詞"},
#                                 {"surface"=>"。", "reading"=>"。", "pos"=>"特殊"}]}},
#        "uniq_result"=>{
#           "total_count"=>"8",
#           "filtered_count"=>"4",
#           "word_list"=>{"word"=>[{"count"=>"1", "surface"=>"いる", "reading"=>nil, "pos"=>"動詞"},
#                                  {"count"=>"1", "surface"=>"ニワトリ", "reading"=>nil, "pos"=>"名詞"},
#                                  {"count"=>"1", "surface"=>"二羽", "reading"=>nil, "pos"=>"名詞"},
#                                  {"count"=>"1", "surface"=>"庭", "reading"=>nil, "pos"=>"名詞"}]}},
#     "schemaLocation"=>"urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"}}


# POSTリクエストの場合
result = yp.parse('庭には二羽ニワトリがいる。', { results: 'ma,uniq', uniq_filter: '9|10' }, :POST)
# => {"ResultSet"=>...


# リクエストパラメータのサンプル
result = yp.parse('庭には二羽ニワトリがいる。', {
                      results: 'ma',
                      ma_response: 'surface',
                      ma_response: '2|5'
                  })

 

リクエストする文字数について

渡す文字列ですが、公式の仕様にはリクエストは100KBまでと書いてあるが実際には13,000文字(38KB)くらいで 制限に引っかかってしまいます。(このへんがどういう計算なのかわからない・・・)。

rubyでサクッと形態素解析をしたい場合は、便利かなと思うのでもしよければ使ってみて下さい。