<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
<dfn><ruby>Ridge<rt>りっじ</rt></ruby></dfn>
は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>
用の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WAF</anchor>
です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
平成20年代前半頃の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">株式会社はてな</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webサービス</anchor>の多くで採用されていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
当時の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">はてなインターン</anchor>の教材でも使われていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
変数 <dfn><code>$r</code></dfn>
から 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">API</anchor>
を呼び出すのが特徴的です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
初期は <code>mod_perl</code> と使う (または <dfn><code>server.pl</code></dfn> 
と呼ばれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ローカルサーバー</anchor>用の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> で書かれた <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>と使う) 設計でしたが、
後期は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Plack</anchor> ベースに改められていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>と組み合わせるかわりに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テストスクリプト</anchor>と接続する仕組みがあり、<dfn>内部テスト</dfn>
(<dfn>internal test</dfn>)
と呼ばれていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
<cite xml:lang="en">wakaba/perl-test-ridge-internal: Test: :Internal - Internal tests for Ridge</cite>, <time>2023-04-17T09:43:07.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/wakaba/perl-test-ridge-internal">https://github.com/wakaba/perl-test-ridge-internal</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内部テスト</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テストスクリプト</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP要求</anchor>オブジェクトを組み立てて
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP応答</anchor>オブジェクトを得て検査するのですが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>の 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> コードと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テストスクリプト</anchor>が同じプロセスで動作し<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">密結合</anchor>していました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
テストを書く上でこれはこれで便利なこともあって、
例えばテスト実行前の事前状態の設定のためにテストスクリプトから直接アプリケーション内の関数を呼び出したりデータベースにアクセスしたりできるのですが、
それが原因で実サーバーの動作とテストの動作が違うなどの弊害も多くありました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
そのため末期になると<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テストスクリプト</anchor>を別プロセスで実行し
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> だけで通信する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">外部テスト</anchor>へと志向していきました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ORM</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MoCo</anchor> と併用されるのが普通でした (が依存関係はありません)。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">Ridge (disambiguation) - Wikipedia, the free encyclopedia</cite>
(<time>2009-09-12 11:18:47 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://en.wikipedia.org/wiki/Ridge_(disambiguation)">http://en.wikipedia.org/wiki/Ridge_(disambiguation)</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<code>$r</code> の <code>r</code> はたぶん <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">R</strong>idge</anchor> の意味なのでしょうけど、
それだけでなく <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mod_perl</anchor> 的な慣習を引き継いでいるのかもしれません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<code>RIDGE_ENV</code></p></body></html>