2003年4月27日
Leshade Entis
 

■ 初めに

 近年、コンピューターは多種多様な分野へ応用されており、プログラムの必要性はますます増大しています。
 このような状況の中で、非創造的なプログラミングに不満を抱いているプログラマーは多いのではないでしょうか?
 プログラムには「創造的」なものと「非創造的」なものがあります。プログラマーであればこの違いは明白だとは思いますが、そうではない人間にはこのこと を理解することは難しく、そのことでも不満を持っているのではないでしょうか?
 「非創造的」プログラムは、「創造的」プログラムがまさしく技術的な仕事であるのにしたいして、事務的な仕事であると言えるでしょう。
 事務的な仕事は、女性のほうが男性よりも得意だとも言われたりしますが、そんなことは何より、モチベーションがどんどん低下してしまうので、仕事の能率 も落ち、これをどれだけ維持するかと言うことは重要な問題です。
 そこで、この問題を解決するために私が提案したのが「ロリータ指向プログラミング」というプログラミング手法です。
 

■ ロリータ指向プログラミングの理念

 ロリータ指向プログラミングでは、仮にそれが「非創造的」で「事務的」なプログラムであったとしても、モチベーションを高く維 持し、仕事の能率を上げることを目的にしています。
 それでは、モチベーションを如何にして維持すればよいのでしょうか?
 「創造的」なプログラムであれば、それ自体が持っている高い志によってモチベーションを維持することが出来ます。しかし、「非創造的」なプログラムでは それは期待できません。
 問題は荒涼として無味乾燥、砂漠のようなプログラムにあるのです。
 この砂漠のようなプログラムに、水路を引きオアシスを作ればよいのです。
 このオアシスこそが「ロリータ」です。
 

■ 昔のロリータ

 では、どのようにすれば「ロリータ」を実現するこ とが出来るのでしょうか?
 例えば、一昔前では(今でも?)BASIC などのプログラムで、HEIKINGOKEI などという変数名が使われていました。最近では、avg、sum 等のように洒落た英表記を用いることが多いようですが、昔の HEIKIN などといった訓式ローマ字表記は、この古めかしさが大正浪漫を彷彿とさせ、鹿鳴館でコス プレを楽しむ女性の姿を連想させてくれます。
 このように、鹿鳴館でコスプレを楽しむ女性の図を連想すると、心の中に安らぎが生じ、潤いを与えます
 このように、心の潤い(萌え)を励起するプログラミングスタイルが、ここで語るロリータ指 向プログラミングとなります。
 以降では、C 言語、又は C++ 言語での典型的なロリータ指向プログラミングについて説明していきます。
 

■ 基本型

 C 言語には基本的なデータ型が複数用意されていますが、これをテキストマクロによって、萌えを励起する単語へ置き換えます。
 但し、あまりに元の意味からかけ離れるとプログラムの意味が分からなくなってしまうので、 十分に元の意味を失わない、又は連想可能な範囲に抑えることが要求されます。

◆ 萌え (int → moe)
 「萌え」と言う言葉が指す概念は、20世紀の日本に生まれた独特の情緒を表 すもので、16世紀に誕生した「わび」「さび」 に並ぶ日本独特の情緒を表す言葉です。
 この「萌え」という言葉は、これから先、それほどの時間を経ることなく、ま たは、一部では既に世界に紹介され、認知されていると言ってよいでしょう。
 そこで、コンピュータで自然な整数語の型(int 型)を moe とします。

(例) moe sakura = 0 ;
 
◆ ロリータ (long → lolita)
 ロリータとは、ロリータ指向プログラミングにおいては、「萌えを励起するも の」として定義されており、きわめて基本的な概念です。
 また、頭文字が同じ事もあり、32ビット以上の整数語の型(long 型)を lolita とします。
(例) lolita moe sakura = 0 ;
 
◆ ショート (short → short)
 ☆略☆

◆ カフス (char → cuffs)
 カフスとは手首を覆う衣服の部分の総称で、袖口の飾りを指します。
 カフスは衣服全体からするとほんの一部ですが、萌えという観点からはかなり重要な位置を占めているといってよいでしょう。
 頭文字が同じ事もあり、コンピュータで自然な文字の型(char 型)を cuffs とします。

(例) cuffs sakura[] = "はにゃ〜〜〜ん" ;
 
◆ フリル (float → frill)
 フリルとは衣服のひだ飾りの総称で、最近街中でこれが大量についた服装の女性などを見かけることが出来ます。
 ふわふわした感じで小数点が移動する様子を連想させるので(追求不要)、32ビット以上の実数型(float 型)を frill とします。
(例) frill sakura = 1.2F ;
 
◆ ラッフル (double → ruffle)
 ラッフルとは、基本的にはフリルと同じですが、布やレース地を波立たせたもので、フリルよりも波の幅が広く、ギャザーが荒いものを指すようです。
 そこで、frill よりも幅が広いので、64ビット以上の実数型(double 型)を ruffle とします。
 覚えにくければ、実数(real)の頭文字 r から連想するようにして覚えると良いでしょう。
(例) ruffle sakura = 1.2 ;
 
◆ ボイル (void → voile)
 ボイル(voile)とは薄手の織物のことで、肌地が透けて見えるのが萌えです。
 void と似ているので、型指定しない型の記述を voile とします。
(例) voile * sakura = NULL ;
 
◆ 黄昏 (unsigned → tasogare)
 何かが欠けた空虚感。
 草むらに腰を下ろし、麦わら帽子の下から赤く染まった空を、じっと見つめる白のワンピースの少女の瞳。
 とりあえず浸ってみてください。
 整数型を修飾し、符号無しを意味する構文を tasogare とします。
(例) tasogare lolita moe tomoyo = 12345UL ;
 

■ 記憶クラスの修飾

 基本型の置き換え同様、記憶クラスの中で、主だったものを萌えを励起する単語に置き換えます。

◆ カチューシャ (const → katyusha)
 カチューシャとは大正時代に松井須磨子が演じた「復活」の女性主人公の名前から、現在では、弧の形をしたヘアバンドのことを指して使います。
 20世紀末から日本で流行った和製メイドコスチュームの髪飾りは、大抵カチューシャです。
 髪を固定することから転じて、定数値、不変オブジェクトを指す修飾子(const)として katyusha を使います。

(例) katyusha moe sakura = 128 ;
 
◆ エプロン (volatile → apron)
 エプロンとは前掛けのことで、スタイルは様々です。
 江戸時代、とある茶屋で店員が前掛けを着用したところ、これを聞きつけた江戸の男衆がこぞって押しかけ、大繁盛したこともあったそうです。
 現代の日本でも、店員のコスチュームに趣向を凝らした飲食店が次々に開店し、各地でにぎわっています。
 エプロンは衣服の上から着用し、これを装飾しますが(本来の目的は装飾ではありませんが)、これを可変値、可変オブジェクトを指す修飾子 (volatile)として apron を使います。
(例) apron moe sakura = 128 ;
 
◆ プリーツ (static → pleats)
 プリーツとは布につけられた折り目のことで、スカートやブラウスなどに良く使われます。
 リンケージに対して名前の局所性を指定する、又はオブジェクトの静的記憶クラスを指定する修飾子(static)として pleats を使います。
 覚えにくいかもしれませんが、折り目→静的、などと無理やり覚えましょう。
(例) pleats katyusha ruffle pi = 3.14159 ;
 
◆ ファンシー (virtual → fancy)
 ファンシーとは、空想、とか幻想と言う意味で、また、派手な、装飾的なという意味も持ち、英語で fancy dress というと、日本で言えばコスプレ衣装のことだといってよいでしょう。
 ファンシーの一般的な意味(空想、幻想)から、(意味は異なりますが)仮想的な関数の修飾子(virtual)を fancy とします。
(例) fancy moe uguu( voile ) katyusha ;
 

■ 一時変数名

 プログラムで結構問題になるのが変数名です。
 変数名が問題なのではなく、変数名の命名が問題だと言うことはプログラマーであれば誰でも納得いただけることでしょう。
 困ったときの変数名には、foo や hoge などが用いられますが、ここでは、関数内部の局所的な一時変数の名前の規則を定め、変数名の命名のための労力消費によるモチベーション低下を抑制すること を目指します。
 局所的に一時変数が1つしか必要でない場合、これには各自好きなキャラクターの決め台詞を使いましょう。
 これは短くて分かりやすい方が望ましいのですが、基本的に何でもかまいません。
(例) moe uguu = 0 ;
 一方、一時変数が複数必要な場合には、一定の規則に従って命名します。
 規則にはいくつかありますが、簡単なものに以下のものがあります。
 nya   nyu   nyo
 hunya hunyu hunyo
 munya munyu munyo
 他には、タイトルを定めて登場人物の名前などを使う方法があります。
 sakuya tikage   karen   haruka  yotuba  aria
 kaho   sirayuki mamoru  rinrin  marie   hinako
 又、1月から12月までの大和名を使う方法も意外と良いと思います。
 mutuki kisaragi yayoi    uzuki      satuki   minazuki
 huzuki hazuki   nagatuki kaminazuki simotuki siwasu
 ローマ字表記の規則は好き勝手にやってもほぼ問題ありません。
 

■ 指標変数名

 プログラムでは古くからの慣習として、i 〜 n までのアルファベットを多くの場合、整数型として扱い、特に i 〜 k あたりの文字を指標(または反復処理のためのカウンタ)、n, m を総数などと決まった用途に用います。
 しかし、これではあまりにも無味乾燥です。
 そこで、これらの用途に用いる変数名をあらかじめ決めておきます。
 但し、十分に萌えの作用が大きい単語にする事と同時に、覚えやすくなければなりません。

◆ 指標・反復カウンタ
 指標や反復処理のためのカウンタには i が頻繁に用いられます。
 これを次の変数名に置き換えます。

 ai(亜衣) mai(麻衣) mei(萌衣) maino(麻衣乃)
 ai はアルファベット i の音から来ています。
 この4段活用は、おそらく中学の英語の時間に習っていると思うので簡単に覚えられるでしょ う。
 各変数名の後ろに付記した漢字表記は、各人、心の中に思い描いて、萌えを増幅させてください。

◆ 総数
 反復回数や、配列長などを表す変数には n などが用いられます。
 これを次の変数名に置き換えます。

 yuu(優) yua(優亜) yuna(優奈) yuasa(優亜沙)
 これらは指標・反復カウンタ変数名と対応しています。
 この4段活用は、おそらく中学の英語の時間に習っていると思うので簡単に覚えられるでしょ う。
 各変数名の後ろに付記した漢字表記は、各人、心の中に思い描いて、萌えを増幅させてください。
 

■ プログラム例

 ロリータ指向プログラミングのスタイルを適用した例として、EntisGLS(Entis Gothic Lolita System、別称「ゴスロリ系」(嘘です))のサンプルプログラム「RenderParam」(縦スクロール型シューティング)をロリータ指向プログラ ミングのスタイルで書き換えた「LolitaFrill」を挙げます。(注: ゲーム的に(内容的に)まったく同じですw)
 以下のリンクから、実行形式、及びソースコードをダウンロードできます。
 ≫ LolitaFrill 実行形式
 ≫ LolitaFrill ソースコード
 また、ロリータ指向プログラミング定義ファイルは以下のようになっています。(上記ソースコードにも含まれています)
 ≫ ロリータ指向プログラミング定義ファイル


 LolitaFrill のソースコードから一部引用してどのようなプログラミング風景になるのかを見て見ましょう。
 

RenderItem.h : 30行〜

 // 1フレーム進める
 fancy PostItemType AdvanceFrame( voile ) ;
 // 描画する
 fancy voile Draw( HEGL_RENDER_POLYGON hRender ) ;
 // 自機の弾との当たり判定半径を取得する
 fancy moe GetDamageRadius( voile ) ;
 // ダメージを受けたときの処理
 fancy PostItemType HasDamage( moe nDamage ) ;


 基底クラスの仮想関数を定義している部分ですが、fancy と moe が和ませてくれます。
 

RenderItem.cpp : 937行〜

for ( moe ai = 0; ai < 3; ai ++ )
{
    ruffle rRadius = 96 ;
    ruffle rAngle = m_rSpriteAngle + ai * 120 ;
    ruffle rDelta = 3 * rRadPIby180 ;
    ruffle r = rAngle * rRadPIby180 ;
    EGLPalette clrLast0( 0UL ) ;
    EGLPalette clrLast1( 0UL ) ;
    ruffle w0 = 3 ;
    //
    for ( moe mai = 0; mai < 20; mai ++ )
    {
        EGL_PALETTE clrNext0, clrNext1 ;
        ruffle w = 10 - 8 * mai / 20 ;
        ruffle r1 = r + rDelta ;


 反復処理をしている部分ですが、ruffle がひだひだ状の装飾であることを思い出せば、より一層楽しむことが出来ます。

 

■ まとめ

 以上で、ロリータ指向プログラミングの入門編は網羅したと言ってよいでしょう。
 他の予約語なども徹底的に別の単語に置き換え、更に全てのクラス名、関数名、変数名を置き換える…と言うことをやると誰も読めないプログラムになってし まうので、自分のロリータスキルと相談してプログラミングすることをお勧めします。
 尚、ここに書かれたプログラミングスタイルで実際にプログラムされた結果につきましては、当方は一切の責任を負いかねますので、あらかじめご了承くださ い。
 

■ 推薦図書

 最後にお勧めの書籍を紹介します。

◆ プログラミング言語C ANSI規格準拠
 とりあえず、C 言語によるプログラミングをはじめようかと思っている方は、まずこれをお読みください。

◆ コスチューム描き方図鑑
 意外と役に立ちます。
 様々なコスチュームの描き方が(と言うより単なる図鑑ですが)掲載されているのですが、それ以上に衣装の名称や、パーツの名称などを含め説明されていま すので、ロリータ指向プログラミングには持ってこいの一冊でしょう。
 因みに、似たような題名の本に「衣服の描き方 メイド・巫女篇」と言うものがありますが、この本は衣服の描き方ではなく、メイド&巫女さん ポーズ集だと思ったほうが良いと思います。
 ロリータ指向プログラミングには、「コスチューム描き方図鑑」です。お間違いのないよう…。

◆ 現代日本のアニメ 『AKIRA』から『千と千尋の神隠し』まで
 アメリカ人の日本文学研究家が書いた日本のアニメを研究、評論した本の邦訳です。
 ロリータ指向プログラミングとは直接関係ありませんが、大変興味深い内容ですのでお勧めします。
 因みに、様々な角度から日本のアニメについて分析する中で、宮崎アニメだけではなく、ポルノグラフィー・アニメについてもまったく同等に分析している姿 勢は、日本ではなかなかないことだとも悲しく思いましたが。(もっとも私は日本のポルノグラフィー・アニメを支持しているわけではありませんが)
 全体として日本人の感覚からすればいささか無理のある解釈のような気のする部分も多数あることも含め、興味深い内容です。

◆ 文明としての江戸システム
 上の「現代日本のアニメ」でも時々触れられているのですが、私は日本のオタク文化の原型は江戸時代に出来上がったと考えていますが(また、これは多くの 評論で見ることの出来る主張です)、その江戸時代をひとつの文明であるとして捉え評論している本です。
 オタク文化の解説を行っている本ではないのですが、江戸時代の日本の実像に興味のある方はどうぞ。
 学校で習う江戸時代像はあまりにもステレオタイプ化していて、正しい理解には遠いと言ってよいでしょう。この本を読めば、現代と江戸時代の距離が如何に 短いものかと言うことが実感として分かるのではないでしょうか?