トップページ⇒tech
1001コメント286KB

C++相談室 part98

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/08/25(土) 00:46:04.23
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part97
http://toro.2ch.net/test/read.cgi/tech/1343559275/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
01531482012/09/04(火) 00:17:39.30
>>152
ありがとうございます。
そうなると、配列を含むクラスのコンストラクタを constexpr にするには他の方法を使わないといけませんね。
0154デフォルトの名無しさん2012/09/04(火) 04:09:38.27
>>153
std::array でいいんじゃないの?
0155デフォルトの名無しさん2012/09/04(火) 13:43:47.09
CopyFile関数でファイルを10個ほどコピーしています
すると10個のファイル転送が終わるまで処理が止まってしまいます。
コピーしろって命令だけ出した状態で直ぐに関数を終わりたいのですが
そのような関数はありますか?CopyFileExというのを見つけましたが
これはコピー中の経過が見えるだけで関数が待つという点で同じみたいです
出来れば別スレッドでコピーを実行とか難しいので非同期にコピーしてくれる関数がしりたいです
よろしくお願いします。

サンプルソース

for(i=0;i<10;i++)
{
CopyFile(src[i], dst[i]); //ここを非同期Copyにすり替えたい
}
0156デフォルトの名無しさん2012/09/04(火) 13:58:44.05
hoge.batファイルにcopyコマンド10個書き込んで
system("hoge.bat");ではいかんのか?
0157デフォルトの名無しさん2012/09/04(火) 14:01:16.30
>>156
hogeとか書いてる基地害はさっさと失せろ
お前マジで頭おかしいよ
自覚ないみたいだけど
0158デフォルトの名無しさん2012/09/04(火) 14:07:14.04
まーたhoge厨かw












hogeだってよwwwww
ヴァカじゃねwwwwwwwwwwwwwww
0159デフォルトの名無しさん2012/09/04(火) 14:14:09.23
出来ませんので別スレッドでやってください
0160デフォルトの名無しさん2012/09/04(火) 14:15:40.36
非同期コピーありそうでないんですね
素直に別スレッドでやることにします
0161デフォルトの名無しさん2012/09/04(火) 14:24:29.97
C++のスレでバッチファイルの話をする池沼>>156。
Hoge使ってる奴の池沼率は異常に高い。
今回も例外ではなかった。
0162デフォルトの名無しさん2012/09/04(火) 14:32:34.94
具体的な対案示さずに批判とな?
0163デフォルトの名無しさん2012/09/04(火) 14:43:07.17
>>162
hoge使わなくてもcopyfileとかcopyasynchronousとかいくらでもあるだろ
思考停止してんのかこいつ
0164デフォルトの名無しさん2012/09/04(火) 14:44:43.16
ハッシュ関数って奴のオススメの関数教えてください。
0165デフォルトの名無しさん2012/09/04(火) 14:49:42.16
>>162,>>163
copyfileonbackgroundのほうがよくね?
0166デフォルトの名無しさん2012/09/04(火) 15:04:47.49
どうでもいいよ無能ども
0167デフォルトの名無しさん2012/09/04(火) 15:06:39.02
>>166=無能
0168デフォルトの名無しさん2012/09/04(火) 15:10:23.44
>>156
hoge厨キメぇ
0169デフォルトの名無しさん2012/09/04(火) 15:10:58.90
hogeを見ると発狂するアンタッチャブルが住み着いてることは分かった
0170デフォルトの名無しさん2012/09/04(火) 16:48:23.72
>>169
>アンタッチャブル
それってむしろスルー力高すぎる奴じゃね? TCG的に考えて
0171デフォルトの名無しさん2012/09/04(火) 16:52:38.65
またhogeに憎悪を抱くキチが湧いてるのか
0172デフォルトの名無しさん2012/09/04(火) 19:55:05.61
.NETではそれなりのファイルコピーが用意されてるっぽいね

ユーザーインターフェイスを表示するためにUIOption.AllDialogsを指定し(デフォルトでは表示されない)、
ユーザーがキャンセルしても例外(IOException)をスローしないようにUICancelOption.DoNothingを指定し(デフォルトでは、例外がスローされる)

//参照にMicrosoft.VisualBasic.dllが追加されている必要がある
Microsoft.VisualBasic.FileIO.FileSystem.CopyFile(
"C:\test.txt", "C:\test1.txt",
FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing);

ttp://dobon.net/vb/dotnet/file/filecopy.html
0173デフォルトの名無しさん2012/09/05(水) 01:00:28.74
>>172
此処はC++
0174デフォルトの名無しさん2012/09/05(水) 05:06:25.85
SHFileOperationはどうだろうか
ttp://www.crimson-systems.com/tips/t001r.htm
0175デフォルトの名無しさん2012/09/05(水) 09:28:53.38
>>174
これで試したら非同期コピーできたよ
簡単だし、途中でキャンセルできたり上書き確認もあったりで至れり尽くせり
0176デフォルトの名無しさん2012/09/05(水) 23:21:52.92
CreateProcessを用いてEXEファイルを実行し、EXEファイルの標準出力を取得したいと思っています。
以下のようにReadFileを使うと取得することはできますが、unicode対応
できません(リンクのbuf をwcharにすると文字化けしてしまう)。
http://www.usamimi.info/~hellfather/win32api/API_CreatePipe.xml

unicodeとして取得したい場合どのようにするのが一般的でしょうか?
0177デフォルトの名無しさん2012/09/05(水) 23:23:17.76
>>176
ですが、popenは使いません。
CreateProcessを使うやり方でお願いします。
よろしくお願い致します。
0178デフォルトの名無しさん2012/09/05(水) 23:28:03.37
>>177
CreateProcessはファイルアクセスには無関係だろ。
単にファイルをunicodeで読み出せばいい。
0179デフォルトの名無しさん2012/09/05(水) 23:42:40.65
>>178
え?
知りたいのはc++プログラムから外部のexeを実行して標準出力を取得する方法です。
ファイル開いて中身を読むのではありません。
0180デフォルトの名無しさん2012/09/06(木) 05:10:29.95
単純に考えて
1.外部exeをUnicode出力するようにする
2.一旦sjisで受け取り、mbtowc()などでUnicodeに変換する
0181デフォルトの名無しさん2012/09/06(木) 08:26:49.93
外部exeのUnicode出力は、自分のプログラム側でなんらかのメソッドを使うことにより可能になるのですか?イメージがわかないのでサンプルか参考ページかあると助かります。
0182デフォルトの名無しさん2012/09/06(木) 08:33:29.63
外部exeが自作でなければ1の方法は使えない
0183デフォルトの名無しさん2012/09/06(木) 08:43:29.13
2の方法は、一旦ReadFileでマルチバイトで受け取り、その後Unicodeに変換するということですよね?Unicodeに変換する際に情報が足りず文字化けするということはないですか?
0184デフォルトの名無しさん2012/09/06(木) 08:57:53.74
Unicode→sjisは変換不可能な文字はあるが
sjis→Unicodeは問題ないんじゃないかな。実際にやってみないと分からんけど
気をつけるのはsetlocale(LC_CTYPE, "")しとくくらいか
0185デフォルトの名無しさん2012/09/06(木) 09:43:42.68
GC以外に循環参照をうまく扱えるイディオムてないですか
複数のノードが無向グラフを組むように互いに参照しあっています
外部からどれか一つでも参照されるノードがあればグラフ全体が生きて
全てのノードが参照されなくなったら即メモリなどのリソースを開放しなければなりません
0186デフォルトの名無しさん2012/09/06(木) 10:27:59.62
weak_ptrは?
0187デフォルトの名無しさん2012/09/06(木) 10:38:49.97
>>186
いろいろ試しましたがうまくいきませんでした
0188デフォルトの名無しさん2012/09/06(木) 12:23:50.11
Windowsはワイド文字変換のAPIがあったよね
C++標準のとどう違うのかは知らないけど
0189デフォルトの名無しさん2012/09/06(木) 12:28:41.52
ロケーション
文字コード
ワイド文字

この辺の扱いが難しい
とくにロケーション
0190デフォルトの名無しさん2012/09/06(木) 15:29:07.85
>>185
循環参照関連で面倒なら、GCに頼った方がいいんじゃね

アプリ全体の言語変えるのがアレなら
割と高速なGC持ち言語を(Lua, V8/JavaScript)を
組み込んで使うのも手
0191デフォルトの名無しさん2012/09/06(木) 19:17:39.37
>>184
wave sign 問題とか minus sign 問題とか
0192デフォルトの名無しさん2012/09/06(木) 19:29:16.24
以下のコードでエラーが出て困っています。
http://codepad.org/IDIXMH8z

エラーの内容は以下の通りです。

1>Landform.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall GameObject::SetBody(class b2Body *)" (?SetBody@GameObject@@QAEXPAVb2Body@@@Z) が
関数 "public: __thiscall Landform::Landform(class b2Body *,struct b2Color const &)" (??0Landform@@QAE@PAVb2Body@@ABUb2Color@@@Z) で参照されました。
1>C:\workspace\C++\VC++\Practice\Debug\Practice.exe : fatal error LNK1120: 外部参照 1 が未解決です。

Box2D.hはhttp://box2d.org/のものですが、あまり関係ないような気がします。

こちらVC++2008、マルチバイト文字セット使用です。
vc++に強く関わる問題ならそちらのスレで聞きます。
0193デフォルトの名無しさん2012/09/06(木) 19:43:40.23
inline関数をcppで定義すな
0194デフォルトの名無しさん2012/09/06(木) 19:47:13.62
とりあえずinlineを外しましたがエラー内容は変わりませんでした。
0195デフォルトの名無しさん2012/09/06(木) 20:01:30.09
ツリーに使える再帰イテレータ ってどうやって
0196デフォルトの名無しさん2012/09/06(木) 20:11:19.27
>>192
ライブラリをリンクしてないだけじゃない?
0197デフォルトの名無しさん2012/09/06(木) 20:22:07.88
>>196
どのライブラリが必要なのでしょう?
Box2Dならstdafx.hに

#ifdef _DEBUG

#pragma comment(lib, "Box2D_d.lib")

#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")

#else

#pragma comment(lib,"Box2D.lib")

#pragma comment(linker, "/NODEFAULTLIB:MSVCRT.lib")

#endif

と記述し、stdafx.hは全てのファイルでインクルードする設定になっています。
GameObject.cppとLandform.cppなら静的ライブラリ化していません。
0198デフォルトの名無しさん2012/09/06(木) 20:28:55.06
197です。
stdafx.hの
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")
をコメントアウトした所リンクに成功しました。
お騒がせしました。
0199デフォルトの名無しさん2012/09/06(木) 22:10:09.52
可変長ビット配列を効率よく扱える純粋なC++用ライブラリは無いでしょうか。

無ければ自作しますが、今やってる作業はできるだけ中断したくないので、
できれば既存のライブラリを使いたいです。

求めている機能・性能は下記のものです(括弧内は例です)。

・2進数を表現した文字列による初期化(Bits bs("1011001001101"))
・インデックスによる1ビット単位の高速リードアクセス(if (bits[3] == 1) )

この2つが満たされれば、他の機能・性能は特に要りません。
初期化以降リードオンリーでも、リサイズが非効率でもかまいません。
0200デフォルトの名無しさん2012/09/06(木) 22:16:48.40
ブーストでええやん
0201デフォルトの名無しさん2012/09/07(金) 00:01:52.26
文字列からの変換は自作してstd::vector<bool>を注意深く使うとか
0202デフォルトの名無しさん2012/09/07(金) 00:07:45.14
>>199
標準では、無いから自作しな。
0203デフォルトの名無しさん2012/09/07(金) 00:08:48.24
>>199
boost::dynamic_bitset

これ以上の物を見た事がない
0204デフォルトの名無しさん2012/09/07(金) 00:10:11.59
libcのstd::tr2に入れられてるし次期標準になるのかもね
0205デフォルトの名無しさん2012/09/07(金) 00:40:59.77
んなくだらないサポートは要らんからはよLINQサポートしろや糞標準委員
0206デフォルトの名無しさん2012/09/07(金) 00:47:17.55
threadじゃだめなん(´・ω・`)
0207デフォルトの名無しさん2012/09/07(金) 00:49:59.72
threadは低レベル過ぎて使いにくいよ

http://d.hatena.ne.jp/fjnl/20111206/1323159773
02081992012/09/07(金) 07:12:39.15
アドバイスや提案ありがとうございます。

用件を全て満たし、かつ使いやすそうだという事で、
>>203 の boost::dynamic_bitset を採用することにします。
0209デフォルトの名無しさん2012/09/07(金) 12:11:55.97
イテレーターカテゴリの話なんですけど
デリファレンスでコンテナの中身への参照をそのまま返すのではなく
なにか他の型のテンポラリオブジェクトを返すようなイテレーターって
ランダムアクセスできようがなんだろうがカテゴリはoutput_iteratorでいいんですか?

例えば
template <class Proxy> class MyIterator {
std::vector<MyClass>::iterator i_;
public:
Proxy operator * (void) const { return Proxy(*i_); }
// ry
};

std::vector<MyClass> vec;
MyIterator<Hoge> i = vec.begin(), j = vec.end();
while(i != j) {
*i = MyClass(); // コンパイルされるがテンポラリへの代入なので意味ない。あるいは型によってはコンパイルエラー
++i;
}


02102092012/09/07(金) 12:15:20.22
すいませんoutputではなくinputに置き換えて読んでください
0211デフォルトの名無しさん2012/09/07(金) 13:37:15.76
const vectorのイテレータはconst random_access_iteratorだっけ
ランダム可能なら読み専でもrandom_access_iteratorでいいんじゃないの

こういう話もあるし
http://d.hatena.ne.jp/faith_and_brave/20100305/1267779325
>直交した2つの問題(横断と、値へのアクセス)を扱う場合、単一の階層構造しか持っていない
>標準のイテレータコンセプトとその要件には欠陥がある。
0212デフォルトの名無しさん2012/09/07(金) 17:43:25.84
int a = 1; と int a; a = 1; で意味が異なるのはどうすれば直せますか?
0213デフォルトの名無しさん2012/09/07(金) 17:45:15.86
int a(1);
0214デフォルトの名無しさん2012/09/07(金) 17:46:10.33
意味不明
0215デフォルトの名無しさん2012/09/07(金) 17:51:18.89
意味が異なるってどういうことだ?
0216デフォルトの名無しさん2012/09/07(金) 18:08:43.56
初期化と代入ってことじゃね
0217デフォルトの名無しさん2012/09/07(金) 18:11:53.21
>>211
なるほど
もしやと思ってたんですがやっぱり標準に問題があったんですね

0218 ◆QZaw55cn4c 2012/09/07(金) 18:43:01.19
初期化と代入で究極的に生成コードに差異があるとでも?
意味論は読み手の問題では?
0219デフォルトの名無しさん2012/09/07(金) 18:51:47.80
最悪コンパイルエラーなるやろ
重要やで
0220デフォルトの名無しさん2012/09/07(金) 18:53:28.51
#define int MyIntClass
0221デフォルトの名無しさん2012/09/07(金) 19:46:12.05
>>218
可能性はある。
実装はともかく。
0222デフォルトの名無しさん2012/09/07(金) 19:50:33.71
>>221
kwskwktk
0223デフォルトの名無しさん2012/09/07(金) 20:15:10.30
VC++2010 でヘッダファイル作って適当にコード書いたら、
class という文字のところに波線が表示されて、次のエラーメッセージが出た。
(エラー一覧ウィンドウに警告ではなくエラーとして表示された)

「Intellisense: PCH 警告: ヘッダーの停止はマクロまたは #if ブロックには配置できません。
Intellisense PCH ファイルは生成されませんでした。」

後半の Intellisense PCH ってのはよく分からんけど、
たぶんそんなファイルは必要ないだろうから、どうでも良い。
(今まで使った記憶が無い)

ただ、前半のヘッダーの停止の意味がよく分からない。
ヘッダーの停止って何? 停止も何も、初めから動かないと思うが。
ヘッダーって内部的には、コンパイル時に #include <...> が
ヘッダーファイル内の文字列に置換されるだけなんじゃないの?

書いたコードは次のもの。

#ifndef TEST_H
#define TEST_H
class Container
{};
#endif

たったこれだけ。
0224デフォルトの名無しさん2012/09/07(金) 20:20:06.62
>>218
RAIIの意味が理解できないロートル乙
0225デフォルトの名無しさん2012/09/07(金) 20:39:04.55
>>209
Hogeとか使ってる精神異常は失せろ
ゴミが
0226デフォルトの名無しさん2012/09/07(金) 20:53:43.73
ゴミじゃないよ>>209はゴミ未満だよ
0227デフォルトの名無しさん2012/09/07(金) 21:01:21.37
>>223
インクルードしてる側のコードも晒して。
0228デフォルトの名無しさん2012/09/07(金) 21:02:10.44
C++にはガベージコレクションないからなあ
0229デフォルトの名無しさん2012/09/07(金) 21:25:14.90
自分の書いたコード以外で勝手に動かれると何か気持ち悪い…
0230デフォルトの名無しさん2012/09/07(金) 21:25:17.14
>>227
いや、まだどこにもインクルードされていない。

Win32 コンソールアプリのプロジェクトを新規作成して、
test.h ファイルを新規作成して、>>223 のコードを書いたらこうなった。
(正確に言えば、コードにはもう少し空行があるが、ここに載せるために縮めた)

ちなみに、#ifndef #endif のペアじゃなく、#pragma once を使ったら、
このエラーは発生しなかった。

じゃあ #pragma once でいいじゃんと言うことだが、納得いかない。
0231デフォルトの名無しさん2012/09/07(金) 21:39:43.73
>>229
デストラクタ否定派ですか?
0232デフォルトの名無しさん2012/09/07(金) 22:14:35.42
>>218
初期化と代入はいくら区別してもしすぎることはないんじゃわー
一般にaへのbの代入は初期化済みのaが存在するからこそ成立するし、
aが保持するリソースの適切な処置(開放等)を伴う

究極的には初期化が無ければプログラミングは成立しないが
代入は無くてもプログラミングが成立し得るという違いがある
0233デフォルトの名無しさん2012/09/07(金) 22:19:25.81
>>230
ヒント: stdafx.h
0234デフォルトの名無しさん2012/09/07(金) 22:24:42.82
>>233
私のプロジェクトには stdafx.h などというファイルは存在しないが、
stdafx.h を作れという意味?
0235デフォルトの名無しさん2012/09/07(金) 22:37:12.95
環境に依存しない言語仕様の問題の質問だと思うのですが、
ある関数が呼び出されたとき、その関数を呼び出したのが「誰」かによって
動作を変更することは可能でしょうか?
0236デフォルトの名無しさん2012/09/07(金) 22:38:42.28
呼び出した人を引数で渡せばイイよ
0237デフォルトの名無しさん2012/09/07(金) 22:40:58.78
なんか、セックスしたら逆に尿道異物挿入されたみたいで気持ち悪いなそれ・・・・・
0238 ◆QZaw55cn4c 2012/09/07(金) 22:41:14.23
>>232
>代入は無くてもプログラミングが成立し得る
関数型の考え方ですね。いまちょっと苦闘中‥‥
0239 ◆QZaw55cn4c 2012/09/07(金) 22:43:08.82
>>235
呼び出し先Aにしてほしいことをサブ関数にまとめて、そのサブ関数のポインタを呼び出し先Aに渡す、というのはよくみる光景かと。
0240デフォルトの名無しさん2012/09/07(金) 22:57:46.46
コールバックか

なる
0241デフォルトの名無しさん2012/09/07(金) 23:02:08.98
> 代入は無くてもプログラミングが成立し得る

メモリマップド I/O をどうやって成立させるんだよ
アセンブラに逃げるという答えは聞こえねえぞ

I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
代入の変形でしかない初期化だけで満足してるようならおめでたいぜ
0242デフォルトの名無しさん2012/09/07(金) 23:51:07.82
>>241
外界は移ろい行く世界であるから破壊的代入の世界なんじゃわー
したがって、I/Oまで非破壊的代入で通すことはとうぜん無理が大きい
しかしそんなことはプログラミングする上では瑣末な事柄であって
代入を含むアルゴリズムが皆初期化だけでも書けることが重要なんじゃわー

代入のかわりに初期化を使うと何がうれしいかと言うと、マルチスレッドがメチャ安全に実現できる
0243デフォルトの名無しさん2012/09/08(土) 00:00:54.31
言い忘れたがっていうか捕捉するが、
>I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
チューリングマシンはチューリングマシンを模倣する能力があり、
かつチューリングマシンとチャーチのモデルは等価なんじゃわー
したがってプログラミングする上ではどっちでもおk
外界やメモリや無限の長さの磁気テープが破壊的代入の産物であることは
事実ではあるが、漏れが初期化だけで満足することを全く妨げない
0244デフォルトの名無しさん2012/09/08(土) 00:02:01.18
TCB が初期化だけで書けるか?
operator new ですら初期化だけでは無理なのに
0245デフォルトの名無しさん2012/09/08(土) 00:03:52.83
>>17
一ヶ月ぶりに来たけど、まだあって安心した。
0246デフォルトの名無しさん2012/09/08(土) 00:21:47.79
テンプレート引数を特定のクラステンプレートに制限することはできますか?

例えば

template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };

これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。

つまり、

typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー

このようになってほしいです。
できるでしょうか。
0247デフォルトの名無しさん2012/09/08(土) 00:25:07.26
>>244
そんなことは知らんが(普通はTCBなしくみの上に非破壊代入のみの世界を作る・・・(1)
書こうと思えば書けるまずTCBはつまるところタスク間の同期管理のしくみである同期しなくて良いなら
単にシングルスレッドなプログラムがタスクの本数分、ということでタスクの初期化(生成)だけで済むことは自明

で、破壊的代入なプログラミングで書かれたタスクA、Bの同期というのはAとBの状態が揃ったとき
先に進むということに他ならない
そうした言語では1行1行の実行が無限長の磁気テープか有限状態制御部の状態遷移を伴うからである
これの非破壊代入版への単純な翻訳ではそれが全てタスクの部分に相当するプログラムの新規生成となる
生成に要する引数が揃わねば次のプログラムを生成できないのであるから、理論上そこで同期せざるを得ない
(まあ徹底的に非破壊代入にそろえるとこうなってしまい、マルチスレッドの概念からして覆ってしまう
 >242の最後の行はここまですることは意図していない(1)のケースにおけるメリットを述べたもの
0248デフォルトの名無しさん2012/09/08(土) 00:25:44.62
できるよ
0249デフォルトの名無しさん2012/09/08(土) 00:29:56.25
非破壊とは const のことか?
unko& unko::operator = (unko&&) const { return *this; }
0250デフォルトの名無しさん2012/09/08(土) 00:38:00.28
>>248
どのように記述すれば良いのでしょうか。
0251デフォルトの名無しさん2012/09/08(土) 00:47:15.31
>>250
質問に答えが返ってきてから後出し質問するなよゴミ
どんな教育受けてきだんだ
お前の親はマジで人間のクズだな
0252デフォルトの名無しさん2012/09/08(土) 00:55:39.60
>>251
クズ呼ばわりされては親に申し訳ないので新規に質問します。
>>246 は忘れてくださるとありがたいです。

テンプレート引数を特定のクラステンプレートに制限する方法が知りたいです。

例えば

template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };

これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。

つまり、

typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー

このようになってほしいです。
記述方法を教えていただけないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています