トップページ⇒php
1001コメント331KB

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0039nobodyさん02/11/24 15:57ID:???
if ($hoge){〜;} と if ($hoge ne '') {〜;}

上記の場合は、どちらを使うのが普通なのでしょうか?
0040 ◆hMJAPH9PWA 02/11/24 16:06ID:???
>>39
用途が違うからなんとも…。
例えば、変数の中身が'0'だと前者は偽、後者は真になるよ。
0041nobodyさん02/11/24 23:11ID:???
>>38
じゃ、refで分岐処理
00422302/11/25 00:00ID:???
>>23
自己レスです。

@data = (taro ,Jiro, Sabro);
@temp = ("\$b", $b ,$b);
foreach $b(@data){
foreach $c(@temp){
$d = $c;
$d =~s/\$(\w+)/${$1}/g;
print $d;
}
}

こうすれば、ちゃんとtaroJiroSabroになりました。
0043.3202/11/25 17:33ID:???
すみません、質問の仕方がトコトン悪かったようで

>>36
すみません、勉強不足なようでわかりません

>>38
CGI::Lite使ってまつ

>>41
Σ(´Д`;)そんな関数があたのか…

いろいろヒントいただきましたので、がんがってみます、ありがとうございました
00443802/11/26 00:49ID:???
>>32
CGI::Lite の使い方を最初から勉強しなおせ。
悪いことは言わないからさ。

そもそも、「%inにフォームのデータをしまって」あるのがわかっているなら、
いつ%inに格納したのかわかるだろうに。
0045nobodyさん02/11/26 16:45ID:Y+XqV5xb
これからperlを使ってデーターベースを構築しようと思うのですが、
これからやるならDBは何を使えばいいんでしょうか。
他のスレ読むと、PostgresSQL+Pg.pmよりもDBIを使えとかいろいろ書いてありましたが
初めてなのでよくわからないです。実際はPg.pmというのを使ってる人が多いみたいですし。
いい方向へ誘導してください。

追伸:InterBaseってどうなのですか?
0046nobodyさん02/11/26 17:25ID:???
Pg.pm はデータベースではない。
0047.3202/11/26 20:09ID:???
>>44
わかりますた、勉強しなおしまつ…
英語読めねぇよウワァァァァン
0048nobodyさん 02/11/26 21:48ID:???
perlで外部ファイルから変数を読み込むことができる
bashのsourceコマンドみたいなものってないのでしょうか?
0049nobodyさん02/11/26 21:53ID:???
>>48
require
0050nobodyさん02/11/26 22:24ID:kEoHEjhG
http://www.1-one-town.com/wakanavi/sptkan.cgi
ここみたいに、Enterキー押した時は認証しないのに
loginボタンをクリックした時は何故かCGIに認証しに行きます。

Enterキー押した時も認証しに行くようにするには
どうすればいいんでしょうか?
0051nobodyさん02/11/26 22:29ID:???
>>51
ボタンの値を見ておいてどうすれば?もないもんだ。
passの値だけで判断しろ。
00525002/11/26 22:33ID:kEoHEjhG
>>51
ボタンの値を見ておいて・・・というとどういう事ですか?
フォームタグではなくてCGI側の問題ですか?
0053アシトン?02/11/26 22:43ID:???
>>50
aciton=
0054nobodyさん02/11/26 22:54ID:???
アシトンワロタ
00555002/11/26 22:54ID:kEoHEjhG
>>53
た、たしかにスペルは間違ってますが、、、

でもクリックだと認証に飛びますけどね・・
0056nobodyさん02/11/26 23:03ID:???
>>55
それはブラウザ依存だ。
IEの場合、formタグのaction属性がない場合、action属性を自分自身に設定する。
だから、クリックだと自分自身に飛ぶ。
0057nobodyさん02/11/26 23:07ID:???
>>55
クリックすると、type="submit" のnameとvalueが渡される。Enterキーだと
それが渡されない。
だから、type="password" のほうのnameとvalueだけ見て処理しろと>>51は
言っている。
00585002/11/26 23:08ID:kEoHEjhG
>>57
なるほど、分かりました。
どうもすみません
0059nobodyさん02/11/26 23:11ID:???
>>45
Perlでデータベースを扱おうと思ったら、その仲立ちをするモジュールを使うのが楽でいい。
Pg.pmはPostgreSQLとの接続専用のモジュール。
だが、DBI.pmとPostgreSQL用のDBDの組み合わせでも同じことができる。
(細かいやり方は違うだろうが)

同じことをするのに二つのモジュールを使うのは無駄だと思うかも知れないが、
こうしておくと、将来別のデータベースを使わなければならなくなった時に、
DBDを差し替えて、スクリプトをちょっと(多分一行)だけ変更すれば、
そのまま動くようになると言う利点がある。

これからの生涯でずっとPostgreSQLしか使わないと言うのであれば構わないが、
そうでなければ、DBI.pmを使うことを勧める。

ま、どっちを選ぼうが自由なんだがな。
0060nobodyさん02/11/26 23:28ID:???
すんません、PalmOSで動くPerlってないですか?やっぱ
0061nobodyさん02/11/27 00:38ID:???
開発順調
http://palmperl.sourceforge.net/
00626002/11/27 01:46ID:???
>>61
全然順調じゃないじゃん




ぇゃ、ほんと有り難うございますた、なんかスゲェ質素なページでしたが(藁
検索しても引っかからなかったんですけどねぇ…
完成を心待ちにしときます
0063nobodyさん02/11/27 09:27ID:???
awk '$1 >=130 && $1 <=170 && $2 >=30 && $2 <=60 {print $0}' tmp1 > $ofile
か
perl -F" " -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1 > $ofile
か
perl -F" " -i.ofile -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1
はどれが一番速いのですか?


0064nobodyさん02/11/27 10:37ID:???
#!/bin/csh
set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]

foreach time ( 90621)
  ifile = hoge${time}.txt
  set gyou = `awk '$1 == '$time' {print NR}' date.txt`

  awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
  paste $ifile tmpA > tmpB
  awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
  set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`

  if ( $gyousu == 40 ) then
       set temae = 40
  else if ( $gyousu < 40 ) then
       set aaa = `awk '$5 < 0 {print NR}' tmpC | head -n 1`
       set temae = `awk 'NR < '$aaa' {print $0}' tmpC | wc -l`
  endif
  echo $temae
end
0065nobodyさん02/11/27 10:41ID:???

set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]
と
set gyou = `awk '$1 == '$time' {print NR}' date.txt`

awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
paste $ifile tmpA > tmpB
awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`

をそれぞれperlで書くとどのような感じになりますか?

いいかげんな感じでいいので、perlの構文教えてください。
調べてたら、卒論かけません。

本来のcshスクリプトでは
foreach time ( 90621 90609 90521 90509 83021 83009 81821 81809 81721 81709 81621 81609 81521 81509 80821 80809 80721 80709 80621 80609 80521 8050
9 80421 80409 80221 80209 72921 72909 72821 72809 72721 72709 72621 72609 62121 62109 61021 61009 60921 60909 60821 60809 52209 50521 50509 50421
50409 50321 50309 50221 50209 50121 50109 43021 )
となっており、このスクリプトでは遅すぎて、話しになりません

アフォですみません。
0066nobodyさん02/11/27 10:51ID:???
20021231
という、YYYYMMDDという日付データがあった場合に、
「今日からあと何日でその日が来るか」を算出するのにはどうしたらいいのでしょうか。
00676602/11/27 10:55ID:???
あと、
例えば、20020631という日付データがあって、
その日から3ヶ月後は何日か求めたい時はどうすればいいですか。
普通に20020931にしても、9月は31日が無いかもしれないですし、
うるう年とかで2月は28日だったり29日だったりしますよね。。
0068nobodyさん02/11/27 10:56ID:???
卒業しなくて良いよ。
0069nobodyさん02/11/27 11:04ID:???
>66
timelocal()を使うと楽。

>67
じゃあ、8月31日の3ヵ月後の11月31日が存在しなかった場合はどうするの?
なかった場合どうするかを先に決めないと何もできない。
00706602/11/27 11:24ID:???
>>69
11月31日が存在しなかったら次の日の12月1日になると思います。
0071nobodyさん02/11/27 11:30ID:???
>70
なると思いますじゃねーだろ。
どういう仕様にしたいか決めないと出来ないってんだよ。
0072nobodyさん02/11/27 11:32ID:???
んで、
>70は>66-67みたいな事がしたくて
それでどんな風にやってみて、
それだとどんなエラーが出て上手く行かなかった
んだ?

自分で何もせずにやり方聞いてるわけじゃないよな?
>1読め。
0073nobodyさん02/11/27 11:33ID:???
>>71
オマエのほうが勘違いしてないか? よく読め
0074nobodyさん02/11/27 12:01ID:???
掲示板から入力した文字データの文字数を数えて、
その文字数分、処理をループさせたいのですが、
これだと何も出来ませんでした…。

要するに、入力されたひらがな($tango)を、
ローマ字に変えてファイルに書き込みたいって事なんですが…。

$mojisu = length $tango;
while ( $x < $mojisu ){
$moji = substr($tango,$x,2);
if ($moji = "あ"){print $romaji "a"};
         ・
         ・
         ・
$x = $x+2;
}
0075nobodyさん02/11/27 12:16ID:???
>>74
文字コードは?
0076nobodyさん02/11/27 12:20ID:???
>74
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Split
これ参考にしてみ。
0077nobodyさん02/11/27 12:22ID:???
>>74
$tango =~ s/あ/a/g;
$tango =~ s/い/i/g;
ずら〜っとコレじゃダメですか?
でも、「っ」とかって大変そう・・・
後に来る文字で変わるでしょ・・・
0078nobodyさん02/11/27 12:24ID:???
>>74
($moji = "あ") じゃダメだろ
基礎から勉強しなおせ
0079nobodyさん02/11/27 16:24ID:???
>>74
それじゃ$mojiに"あ"を代入してから$mojiを評価してるぞ(よーするに真になる
0080nobodyさん02/11/27 17:38ID:37dF+px+
\x82\xb3\x82\xa0\x82\xc7\x82\xa4
って文字コードになってるファイルがあるんですが
コレを元の文字に置換するようなやつはどのように書けばいいんでしょうか?
0081nobodyさん02/11/27 17:46ID:???
ネタ
0082nobodyさん02/11/27 19:08ID:???
どいつもこいつも、教えんのは善意だぞ、聞く香具師が偉そうにスンナヴォケ!

一生独りでシコってろ!!
0083nobodyさん02/11/27 21:43ID:???

ドピュッ

0084nobodyさん02/11/27 22:06ID:Op374sN2
1296(10進表示)までの数値を、36進法のリストにして、参照できるようにしたいのですが、

$in = 500;   #10進法で入力された数値
for($i = 1;$i < 1297;$i++){
    $c[$i] = $h.$j++;
    if($j eq "10"){$j = "a";}
    elsif($j eq "aa"){$j = "0";
    $h++;
    if($h eq "10"){$h = "a";}
    }
}
$out = $c[$in];    #36進法で出力される数値

効率のいいコードはないでしょうか?
0085nobodyさん02/11/27 22:42ID:wgGugnNo
$in = 500;

$after = array('0','1','2','3','4','5'..........'z');
$a = floor($in /36);
$b = $in % 36;

$out = $after[$a].$after[$b];

echo $out;
00868502/11/27 22:45ID:wgGugnNo
ゴメン。Perlだったか。

$in = 500;
@after = qw(0 1 2 3 ... z);

$a = int($in / 36);
$b = $in % 36;

$out = $atter[$a].$after[$b];
00878402/11/27 22:54ID:???
>>85
なんとなくわかりました。Perlにしてやってみます。
00888402/11/27 22:56ID:???
>>86
あ、ありがとうございます!
考えてたら>>86が遅レスになってしまいました・・・
感謝です!!
0089nobodyさん02/11/27 23:01ID:XpHW8B1z
$in = 500;

$out = (0..9,a..z)[int($in/36)] . (0..9,a..z)[$in%36];
00908402/11/27 23:11ID:???
>>88
すいません日本語おかしいですね。
とにかく感謝です

>>89
ありがとうございます!!
すごく効率的ですね
0091nobodyさん02/11/27 23:17ID:???
効率的って。。。
0092nobodyさん02/11/27 23:28ID:???
codeがみじけぇってこったろ
0093nobodyさん02/11/28 00:49ID:???
(・∀・)タンショウ!!
0094nobodyさん02/11/28 07:22ID:???
(・∀・)ホケーイ!
00957402/11/28 11:13ID:???
皆さんのレスとても参考になりました。
今のところ全くの初心者なものでご迷惑をお掛けしました。
とりあえず>>77さんのやり方で出来ました。
「っ」や「ゅ」等については後で考えます。
皆さんありがとうございました。
0096nobodyさん02/11/28 12:20ID:AB88ovMQ
すいません。環境変数が存在するか無いかを判定したいのですが
どうしたら良いでしょうか?
if( $env(HTTP_REFERER) == NULL)
流石にこれじゃだめっすよね…
0097nobodyさん02/11/28 12:39ID:???
if ($ENV{'HTTP_REFERER'} eq '')
0098nobodyさん02/11/28 12:40ID:9pvjX8Vy
>>96
unless( $ENV{HTTP_REFERER} ) {
.
}
0099nobodyさん02/11/28 12:40ID:FjFqkJQz
if(exists $ENV{HTTP_REFFERER})
ではだめでつか?
0100nobodyさん02/11/28 12:46ID:???
>>99
存在していても、値がないかもしれん。。。

>>98
このばやいはそれでもいいが、値が 0 の環境変数には適さない。。。
0101nobodyさん02/11/28 13:00ID:???
>>97
値が''の環境変数には適さない。。。
0102nobodyさん02/11/28 13:06ID:???
>>101
?
0103nobodyさん02/11/28 13:17ID:n94VkAjj
if (defined %ENV) {...}
0104nobodyさん02/11/28 13:16ID:???
>>100
>環境変数が存在するか無いかを判定したいのですが
というお題なので、exists でいいんじゃないか?
0や''を検出するなら、まず仕様を決めてもらわんと。
01059602/11/28 13:22ID:cubtANrC
レスありがとうございます。
CGIを重複で利用したいので
フォームからアクセスしたときと表示するだけでアクセスした時
に分けたかったんです。
フォームからアクセスした時にはQUERYなりCONTENT?なりに
残るじゃないですか。
それを判別したかったんです。
いろいろ御意見ありがとです。。
0106nobodyさん02/11/28 13:24ID:???
ttp://xx.alpha-sv.com/vf4/cgi/update_ar.cgi
上のCGIが作りたいのですが、どうすればいいですか?
初心者なうえに知識がないんで…
教えてください。
0107nobodyさん02/11/28 13:41ID:n94VkAjj
>>106
該当するweb管理者にお問い合わせ下さい。
0108nobodyさん02/11/28 14:47ID:???
>107
業務口調ワラタ
0109nobodyさん02/11/29 02:18ID:???
>>106
初心者に掲示板の制作は無理だから諦めれ。

(余談だけど、初心者って掲示板の設置のことを「作り方」って聞くときがあるんだよなー)
0110nobodyさん02/11/29 11:03ID:YJ7YkLxM
お願いします。
文字列を一定の長さまで比較したいんですけど
標準関数ありますか?
Cでいえばstrncmpみたいなものです。
できれば、今後自力で調べる方法も教えて頂けないでしょうか。
0111nobodyさん02/11/29 12:26ID:???
if (substr($s1, 0, 1) eq substr($s2, 0, 1)){ hoge; }
0112nobodyさん02/11/29 17:54ID:nCXK5uR+
「DBI.pm」の「pm」って何??モジュール化されてるってこと?
メモリ上にロードされっぱなしになって速度が速くなったりするの?

あと、自分のperlソースをpmにすることはできますか?

webで調べたけど情報が無かったです。
0113nobodyさん02/11/29 18:04ID:???
>>112
> webで調べたけど情報が無かったです。
http://www.kt.rim.or.jp/~ekbk/perl5.005/perlmod.html
0114nobodyさん02/11/29 18:08ID:FGwKAXnr
例(1)
print <<HERE
テスト
HERE;

例(2)
print "テスト";

例(1)と例(2)ではどちらが表示が速いでしょうか?
0115nobodyさん02/11/29 18:28ID:???
winXP pro + activeperl build 633で実験
●ソース
use Benchmark;
timethese(1000000,{
'ex1'=>sub {
print "テスト\n";
},
'ex2'=>sub {
print << "EOM";
テスト
EOM
}
});
●結果
Benchmark: timing 1000000 iterations of ex1, ex2...
ex1: 40 wallclock secs ( 5.84 usr + 5.25 sys = 11.09 CPU) @ 90203.86/s (n=1000000)
ex2: 49 wallclock secs ( 6.26 usr + 5.56 sys = 11.82 CPU) @ 84631.01/s (n=1000000)
●結論
気にするほどの差はない
0116の02/11/29 20:42ID:vqpWO9fR
>>112
> 「DBI.pm」の「pm」って何??モジュール化されてるってこと?

単なるファイル名。use を使ったとき、名前+".pm" で読み込むくらいです。
普通中身はモジュールのための構造を持たせるけど、別に何か規定されてるわけじゃない。
---
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
0117nobodyさん02/11/29 22:23ID:JObUfqd/
現在実行中のコードの行番号を調べることってできますか?
0118nobodyさん02/11/29 22:23ID:lYLiGnC/
ABCADEAFGAHI
という文字列があったとして、
例えば3つ目のA以降の文字列を除去するにはどうすればいいでしょうか。
この文字列の場合、
ABCADEA
まで残したいのですが。。。(あるいはABCADEまで
0119nobodyさん02/11/29 22:40ID:???
>>118
s/(ABCADEA)FGAHI/$1/;
(w
0120nobodyさん02/11/29 23:00ID:JObUfqd/
/^([^A]*(?:A[^A]*){3})/ ? $1 : '';
012111702/11/29 23:06ID:JObUfqd/
hoge.plから&error;

とかすると、

sub error {
の中で、
error:line 333 in hoge.pl
とか出したいんですが。
&errorは、hoge.plからrequireします。
0122nobodyさん02/11/29 23:13ID:???
!user/local/bin/perl -C
とかで簡単にコンパイルできたらなぁ
0123nobodyさん02/11/29 23:13ID:???
&error(__LINE__);

sub error{
die "error: line $_[0] in $0";
}
0124nobodyさん02/11/29 23:55ID:???
>>121
KCatch.pmとかの併用をおすすめする。
0125nobodyさん02/11/30 00:52ID:???
googleのように、キーワードがあるとあるタグではさんで
テキスト内のどこにキーワードがあるか一見してわかるような
プログラムを作っているのですが、

jcode::convert(\$_, 'euc', "", "z");
jcode::convert(\$word, 'euc', "", "z");
$_ =~ s/$word/<XX>$word</XX>/; #(XXは任意のタグ)

とするとどうしてもうまく置き換えられずに化けてしまう
文字があります(主に全角のカナ)。
処理は入力をすべてEUCにコンバートしてから行っています。
化けてしまう原因が分かりません。
置き換え時の文字化けというのは避けられないのでしょうか?
0126nobodyさん02/11/30 00:55ID:???
文字コードの自動判別がうまくいってない?
0127nobodyさん02/11/30 00:58ID:???
>>125
情報すくなすぎ。
具体的に$_と$word それぞれがどういう入力のときにうまく
いかないのか。jcode::convertした時点で化けているのか、
置き換えたときに化けてしまうのか。
012812502/11/30 03:00ID:???
125です。お返事ありがとうございます。
jcode::でsjis→EUCコンバート時には
まだ化けていないようです。
さらにそのテキストをsjisに戻した場合は
化けてしまうものもあるようですが、今回は
sjisに戻しておりませんので無視しています。
現状としてはどうやら置き換えている時に
化けてしまっているようです。
どの文字がどのようなタイミングで化けるか調査して
もう一度書き込ませていただきます。
012912502/11/30 04:09ID:???
125です。
確認したところ、置き換え時に同一文字コードながら違う文字?
で置き換えが行われていて化けてしまっているようです。
例えば
$_ = "007シリーズの最新作「ダイ・アナザー・デイ」";
$word = "次';

としたときに以下のようになります

007シリーズの最新作「ダイ・アナザ。<XX>次</XX>Ε妊ぁ廚・

このように、"次"という文字は含まれていないのですが
文字コードが同一?のため中途半端な所で置き換えが
行われて以後の文章が化けてしまう、という現象に見えます。

このような動作を回避することは出来るのでしょうか?
0130nobodyさん02/11/30 05:16ID:???
>>121
Carp or caller
0131nobodyさん 02/11/30 05:39ID:???
>>129
そのperはeuc-jp対応版なの?

0132nobodyさん02/11/30 09:03ID:KwMUsAxf
素因数分解する物を作ったんですが、桁数の大きい物を入れると
うまくいきません。(例:40000000000とか) 何でですか?
$m = 2; $x = 0; $c = 0; ($nは元の数)

while ($h == 0){
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
else{
$m++;
if ($n % $m == 0){
$n = $n / $m;
@x[$x] = $m;
$x++;
}
}
if ($n < $m){$h = 1;}
}
0133nobodyさん02/11/30 09:36ID:???
>>132
素因数分解のアルゴリズムは置いておいて、
http://pc.2ch.net/test/read.cgi/php/1000191385/66-69
これか?
013413202/11/30 10:21ID:KwMUsAxf
>>133
よく分からないんですが、perlのバージョン?(仕様上?)に問題があるということですかね?
0135nobodyさん02/11/30 12:00ID:???
質問なのですが、
たとえば<txt></txt>で囲まれている間の文字のみを
s/</&lt;/g;
s/>/&gt;/g;

という風に変換したいのですが、
どうしたらいいか分かりません。下記の様にしたのですが、できませんでした。
ご教授して頂けませんか?

if ($val =~ /<txt>(.*?)<(.*[^>]*)>(.*?)<\/(.*?)>(.*?)<\/txt>/) {
$val =~ s/$1<$2>$3<\/$4>$5/ig;
}
#見にくくてスミマセン…
013613502/11/30 12:17ID:???
勘違いしてました・・・
上手くいきました、ご迷惑おかけしまスタ
0137nobodyさん02/11/30 13:59ID:/75slB4U
>>132
Math::Bigint 使ってください。
Perlで大きい整数はまともに扱えません。
使い方は perldoc Math::Bigint 読んでね。
0138nobodyさん02/11/30 14:04ID:???
>>129 =125
ttp://www.din.or.jp/~ohzaki/perl.htm
ここの「日本語を扱う 正しくパターンマッチさせる」を読んでくれ。
日本語処理はそう簡単には実装できない。
■ このスレッドは過去ログ倉庫に格納されています