Chienomi

ReasonSet サイト構築システム PureBuilder

有用なユーティリティコード

PureBuilderは以前から何度か登場し、完全にやり直し、と繰り返している。今回は、「本体スクリプト」というものがない状態で登場し、ついに実用となった。

まず下地となるPureBuilderだが、かなり更新され、GitHubにも既に反映されている。まずこれがベースになる。

そして、「PureDocを使った翻訳を自動化する」というのがPureBuilderの基本的なところだ。PureBuilderのGitHubにあるpurebuild-puredoc.zshがその根幹となるスクリプトである。

はっきり言ってGitHubにある設定ファイルのサンプルとREADMEを読むのが一番早いと思うのだが、つまりこのスクリプトは.purebuild-puredoc.rc, .up_*, .rebuild-rulesファイルに従って実行するための補助ユーティリティでしかない。だが、設定ファイルを適切に書くことでほぼ全面的な自動化を実現している。サンプルをみれば分かるように、メニューを動的生成していたりする(eRubyを使っている)ため、サイトでユーザーからのアクションが自動的に反映されるような仕組みを持たないドキュメントに関してはこの方法で動的に静的ドキュメントを生成することができる。これは、著しいオーバーヘッド削減につながる。

参考までに、ReasonSetのサイトのメニューの構築を行うテンプレートは次のようなものだ。

<% menu = [ [ ["ReasonSet / Help", "//reasonset.net/", "ReasonSet全体の情報"], (ENV["SITETYPE"] == "REASONSET"), [["Profile", "//reasonset.net/profile.html", "正木はるか(柊美亜紀)のプロフィール"]] ], [ ["HARUKA Sound", nil, "音楽プロダクション/プロジェクト HARUKA Soundの公式ページ(お仕事)"], nil, [] ], [ ["Aki's palace", nil, "正木はるか(柊美亜紀)に関するウェブサイト。本人について、意見など"], (ENV["SITETYPE"] == "AKI"), [ ["Talkin' about", nil, "様々なテーマに対しそのフィルタを通して語る" ] ] ], [ ["ちぇのみ-Chienomi-", nil, "コンピュータ"] , (ENV["SITETYPE"] == "CHIENOMI"), ["COLUMN", nil, "コラム" ], ["+Play programming with JavaScript", nil, "JavaScriptでプログラミングを遊ぶ"] ["+Easy step programming with Perl", nil, "Perlではじめるプログラミング入門"], ["+Easy step object oriented programming with Ruby", nil, "Rubyではじめるオブジェクト指向入門"] , ["Live with Linux", "http://reasonset.net/journal/archives/category/livewithlinux", "Linux日記" ] ], [ ["Feel the Earth", nil, "バイク"], (ENV["SITETYPE"] == "MOTO"), [["Impression",nil,"所有車両のインプレッション"], ["Impression:HONDA VT250J SPADA", nil], ["Impression: SUZUKI SV400S", nil], ["Impression:YAMAHA MT-09", nil], ["Column", nil, "コラム"] ] ], [ ["Blogs", "//reasonset.net/blog.html", "ブログ"], (ENV["SITETYPE"] == "BLOG") , [["journal de Aki", "http://reasonset.net/journal/", "本来のブログ"], ["Ameblo", "http://ameblo.jp/reasonset", "くだらないブログ"]] ], [ ["SI Service", "http://reasonset.net/si/", "コンピュータの技術を供与するサービスについて(お仕事)"], nil, [] ] ] %> <div id="ReasonsetMenu"> % menu.each do | name, cond, items | % if name[1] <div class="menu_title"><a href="<%= name[1] %>" title="<%= name[2] %>"><%= name[0] %></a></div> % else <div class="menu_title"><span title="<%= name[2] %>"><%= name[0] %></span></div> % end % items.each do |i| % if i[1] <div class="menu_item"><a href="<%= i[1] %>" title="<%= i[2] %>"><%= i[0] %></a></div> % else <div class="menu_item"><span title="<%= i[2] %>"><%= i[0] %></span></div> % end % end if cond % end </div>

さらに、よりプロフィールに関してはプロフィール自体がRuby scriptとなっており、それを実行することでPureDocを拡張した形式で書かれたプロフィールを展開する。

もっとも、プロフィールを含むスクリプトはあくまで出力するだけであり、実際にアップロードする処理は.up_profileというスクリプトを書いて実行している。

全体には伝播する環境変数をうまくつかった仕組みになっていると思う。