読者です 読者をやめる 読者になる 読者になる

【将棋】nginxで返す新しいマークダウン

AdventCalendar2016 nginx ruby 将棋

この記事はカヤックアドベントカレンダー2016の16日目の記事です。

目次

  • はじめに
  • 新しいマークダウン
  • mrubyとは
  • ngx_mrubyとは
  • ビルド
  • 設定
  • コード
  • 展望
  • 終わりに

はじめに

皆様こんにちは、いかがお過ごしでしょうか。CL事業部サーバーサイドの @goki727 です。

2016年も沢山のことがありましたね、聖の青春が映画化されたり、14歳のプロ棋士が誕生したり、加藤一二三先生の弱点がモスグリーン色のスーツだと判明したり、これからも将棋から全く目が離せませんよね。

ところで、今回は皆さんがいつも困っているであろう問題を解決するマークダウンを考えました。

新しいマークダウン

みなさん、将棋の記事を書いたりメモしたりする時にいつも困りませんか?

そうですよね!いちいち局面図作成ソフトを使って画像を生成してアップロードしてリンク貼り付けてというように毎回やるのって面倒くさいですよね!

ということで、マークダウンと将棋を組み合わせたフォーマットをつくりました。

その名もsmd、ShogiMarkDownです。とても分かりやすいですね!

どんなものか早速見ていきましょう。

こちらがsmdファイルです。

ドキュメントルートにyokofu.smdとして保存しました。

# 横歩取り
角を打ち込みちょんちょんしながら後手が積極的に攻める。

-- 君塚 (FU)
P1-KY-KE-GI-KI-OU * -GI-KE-KY
P2 *  *  *  *  *  * -KI *  * 
P3-FU * -FU-FU-FU-FU *  * -FU
P4 *  *  *  *  *  * +HI *  * 
P5 *  *  *  *  * -KA *  *  * 
P6 * -HI+FU *  *  *  *  *  * 
P7+FU *  * +FU+FU+FU+FU * +FU
P8 * +GI+KI *  *  *  * +GI * 
P9+KY+KE *  * +OU+KI * +KE+KY
++ 森 (KA)(FU)四

## 次の一手考察

- 2四飛
- 7七角

### 2四飛

(+)2四飛(-)6七角成(+)同金(-)8八飛成(+)2一飛成
・・・・・・・

### 7七角

(+)7七角(-)8八飛成(+)同角(-)3四角
・・・・・・・

/yokofu.smdにアクセスするとこうなります。

f:id:nitamago_monster:20161216012914p:plain:w350

文章部分の記法はマークダウンと同じで(現状まだマークダウン機能全てを実装できていません)棋譜の表現方法はCSAの棋譜部分と同じです。

smd独特の表現は

  • ☗/☖のマークが(+)/(-)で表現できる
  • ++/–から始めると棋譜の横に付く先手後手の持ち駒などの情報を棋譜画像内に表現できる
  • (FU)とかを歩に変換できる(香とか辞書に登録してないと入力面倒くさいんですよね)

さらに棋譜は画像としても保存できます。

mrubyとは

mrubyとは、組み込み機器やアプリ組み込みに最適化された軽量スクリプト言語です。記述方法は既存のRubyのように書くことができます。

引用:http://blog.matsumoto-r.jp/?p=3310

ということで、これを利用したnginxのモジュールが作られているので、それを組み込んで複雑な処理ができるようになります。

ngx_mrubyとは

mrubyをnginxで使えるようにしたモジュールです。今回これを使ってsmdファイルをレンダリングして返すようにします。

ビルド

環境

Vagrant / CentOS 6.5

ngx_mrubyのビルド

cd ~
sudo yum install bison
git clone git://github.com/matsumoto-r/ngx_mruby.git
cd ngx_mruby/
git submodule init
git submodule update

./configure --with-ngx-src-root=/home/vagrant/nginx-1.9.9

make build_mruby
make generate_gems_config

nginxのビルド

sd ~
sudo yum install pcre-devel zlib-devel -y
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar zxvf nginx-1.9.9.tar.gz
cd nginx-1.9.9
./configure --add-module=/home/vagrant/ngx_mruby --add-module=/home/vagrant/ngx_mruby/dependence/
ngx_devel_kit
make
sudo make install

設定

nginx.confのserverディレクティブにこんな感じで設定すると.smdファイルをレンダリングして返せるようになります。

location ~ \.smd$ {
      mruby_content_handler /usr/local/nginx/smd/smd.mrb cache;
}

cacheを設定すると最初にコンパイルして以降コンパイルしたものを使用するのではやくなります。

参照:http://blog.matsumoto-r.jp/?p=3974

コード

/usr/local/nginx/smd/以下にこちらのコードを配置すれば動きます。

マークダウンを将棋用に拡張したフォーマットのngx_mruby版 · GitHub

まだ検証不足ですがerbのmrbgemsを入れるとうまくnginxが動かなかったのでhtmlを複数に分割してmrubyで結合しています。 あと、requireやloadが使えなかったので、クラスを別ファイルにしたりできず結構見づらくなってしまったので方法を知りたいです。

展望

  • mrbgemsに入れたい
  • rubygemsにも入れたい
  • 羽生先生の秘密を探りたい

最後に

  • 明日はアラガさんのxxxxの話!? 楽しみです!
  • カヤックでは将棋好きのエンジニアも将棋に興味がないエンジニアも大歓迎です!

では、将棋ライフを楽しんで!