月別アーカイブ: 2016年7月

北鎌倉、鎌倉山ポタリング

梅雨明け!

先週末に梅雨明けしたようだが、これからどんどん暑くなる。

真夏のサイクリングは朝早く始めて午前中に終わるに限る。今日も7時半前に家を出て約3時間ののポタリング。これくらいの時間だと北鎌倉から鎌倉山を巡るコースがちょうどいい。

ポタリングというにはちょっときつ過ぎる坂も3つくらいあっていい汗をかくことができる。(下の地図の赤い道は標高80mを超える。)

2016-07-31 北鎌倉-鎌倉山

急坂の前に朝飯

例によって何も食べずに水のペットボトルだけ持って出発したが、流石に燃料切れになりそうになったので、途中のローソンでサラダ巻き、コカ・コーラ、からあげクンそしてバナナを補給。

栄養補給

ツール・ド・フランスの中継でも選手たちは缶のコカ・コーラをよく飲んでいた。

この後、今泉団地の最初の坂を登り明月院まで一気に下る。

北鎌倉の路地裏

北鎌倉駅付近で路地裏に入る。鎌倉のこんな風景が大好きだ。

北鎌倉の路地裏

北鎌倉からまた坂を登り(下の2番目の山)、銭洗弁天の裏あたりが峠になる。ちょうどロードバイクの一団と遭遇し、スイスイ抜かれる。やはりブロンプトンでは敵わない。

2016-07-31 高度

いざ鎌倉山へ

いわゆる鎌倉山という地域は長谷の大仏の裏ではなくて、七里ガ浜の裏手の山になる。

上の高度チャートの3つ目の山にあたる。ここは長い坂が続いて体感的には一番きつい。特に下の写真の笛田公園下からはかなり激坂に感じる。足をつく誘惑と闘いながら登っていく。

笛田公園下

鎌倉山は別荘地のようだ

高級ローストビーフで有名な鎌倉山の本店が鎌倉山にあるが、湘南でありながらちょっとセレブ感が漂う軽井沢あたりに迷い込んでしまったかのような錯覚に陥るのが鎌倉山だ。

相模湾を一望できることもあり個人的には好きなポイントだ。

鎌倉山から相模湾を望む

片瀬山から江ノ島へ

鎌倉山を降りると湘南モノレールと並走するようになる。片瀬山を過ぎると江ノ島駅まで一気に下り坂だ。

片瀬山から江ノ島へ

いつもだったら、江ノ島から海岸線を通って引地川河口から川上に向かうのだが、今日は藤沢駅で用事があるのでそのまま向かう。

ポタリングというにはちょっとハードだったが、下り坂で感じる風が気持よく、充実のサイクリングだった。

Narrative Clip2で撮った写真はこちら

ポタリング気まま旅〜羽田空港編〜

藤沢駅から横浜方面へ

今日は全く目的地のあてがないままブロンプトンを電車に乗せて、とりあえず定期券で行くことができる横浜を目指した。
今朝の「がっちりマンデー」で京浜急行を取り上げていたので、横浜で京浜急行に乗り換えて京急蒲田あたりで降りてその辺を走り回ってみようと思ったからだ。

しかし、どうせ蒲田に行くのだったらそのまま東海道線で川崎まで行って、京浜東北線に乗り換えてもよいし、川崎を出発地点にしてもよいかと、横浜駅に着いたその時急に気が変わり、電車を降りずに隣の川崎駅に行くことにした。

期せずして出発点を武蔵小杉に変更

ところが、私の乗っていた電車が湘南新宿ラインだったのをすっかり失念していた。車内放送で次の停車駅が武蔵小杉ということを聞いてやっと気がついた。

武蔵小杉から南武線で川崎駅に戻ればよいとも思ったが、いやいやせっかく自転車を担いでいるのだから武蔵小杉で降りて多摩川サイクリングロードを川崎方面に向かえばよいと考え直し、11時過ぎに武蔵小杉から走り始めることにした。

多摩川サイクリングロードを川崎方面へ

7月下旬だというのにそれほど暑くなく非常に走りやすい。

多摩川サイクリングロードを走るのは初めてだったが思ったほど混んでおらず走っていて気持ちがいい。

2016-07-24 1 武蔵小杉-蒲田

昼食は蒲田・歓迎(ホアンヨン)で

武蔵小杉から蒲田まで回り道をして12.4km、ブロンプトンだと1時間弱だ。ちょうど昼時になったので家族でよく行く歓迎(ホアンヨン)の餃子を食べることにする。5個で300円というリーズナブルな値段だが10個頼んだ。

歓迎の羽根付き餃子

ここの餃子は生姜が効いていてさっぱりしているので、いくらでも食べられそうな気がする。

羽田空港を目指す

蒲田からは京浜急行で羽田まですぐというイメージがあったので、羽田空港まで飛行機を見に行くことにした。目的地を気軽に決められるのがポタリング(自転車散歩)のいいところだ。

2016-07-24 2 蒲田-羽田-川崎

蒲田から環八通りをまっすぐ進む。穴守橋を渡ると目の前は羽田空港だ。

自転車だからどんどん行ける → 行ってはいけない

普段は車か電車でターミナルビルに行くのだが、自転車で来るのは初めてだ。

どこをどう通ってよいのかわからなかったのだが、誘導路の真下をくぐるトンネルを見つけたので恐る恐る抜けてみる。

トンネルを抜けてしばらく走ると外柵にたどり着いた。向こうに新しく出来たD滑走路が見える。

※ 後から確認したのだが、この付近は本当は入ってはいけないエリアのようだ。自転車だから大目に見てもらえたのかもしれないが、今後は行かないように気をつけよう。(初回投稿時は関連写真を載せたがあまりよろしくないので削除した。)

それにしても羽田空港は広い!かなり走り回ったつもりだが、ほんの一部しか見ることができない。

政府専用機

環八方面へ戻る時に懐かしのジャンボ・ジェットが見えた。どこの航空会社かと思ったが政府専用機だった。「日本国」という字と垂直尾翼の日の丸がよく見える。帰宅してから防衛省ホームページを確認したが運行の予定はないようだ。訓練で飛来したのだろうか?

帰路は川崎駅へ

蒲田まで戻った後は、第1京浜を川崎方面へ。六郷橋を渡るとすぐ川崎駅だ。

合計で40km近く走ったし、雲が晴れてだんだん暑くなってきたので川崎駅から輪行で帰ることにした。

ブロンプトンは気軽に輪行ができるので、行き帰りの行程を気にせずに目的地を存分に楽しむことができるのがよい。

ロードバイクでももちろん輪行は可能だが、手軽さを考えるとちょっと躊躇してしまう。一人で気軽に行動するにはブロンプトンは最適な自転車だ。

今日はここまで。

USE_INVISIBLE_INDEXESヒントについて(続編)

不可視索引のその後

先日、不可視索引はUSE_INVISIBLE_INDEXESヒントと共に使おうという記事を書いたのだが、以下の記述に関してどうやら違う挙動となるらしいことがわかった。


INDEXヒント+USE_INVISIBLE_INDEXESヒント

基本的にUSE_INVISIBLE_INDEXESヒントを指定するだけでよいのだが、もし複数の不可視索引が定義されていたりする場合は、どのインデックスを使用するべきかをINDEXヒントで明確に指定することができる。


具体的には、複数の不可視索引が定義してある場合、INDEXヒントで明確に指定している不可視索引以外の不可視索引も使用されるようだ。

この部分を詳細に再検証してみたいと思う。

複数の不可視索引が存在する場合を検証する

検証環境

今回の検証で使用した環境は以下の通りである。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> show user
USER is "SH"

複数の索引を同時に使用するケースを考える

B*ツリー索引は、原則として1つの問合せブロックの中で1つだけ使用される。1つのSQL文の中で同時に2つ以上のB*ツリー索引を使うためには2つ以上の問合せブロックを組み合わせる必要がある。

今回の検証では、問合せ自体はなるべく簡単にしたいので、B*ツリー索引ではなくビットマップ索引を使用する。

SH.SALES表に定義してある(ビットマップ)索引の状況を確認すると以下のようになる。

SQL> select
  2   ui.TABLE_NAME
  3  ,ui.INDEX_NAME
  4  ,uic.COLUMN_NAME
  5  ,ui.INDEX_TYPE
  6  ,ui.VISIBILITY
  7  from
  8   USER_INDEXES     ui
  9  ,USER_IND_COLUMNS uic
 10  where ui.TABLE_NAME = 'SALES'
 11  and   ui.TABLE_NAME = uic.TABLE_NAME
 12  and   ui.INDEX_NAME = uic.INDEX_NAME
 13  order by
 14   ui.INDEX_NAME;

TABLE_NAME  INDEX_NAME         COLUMN_NAME  INDEX_TYPE  VISIBILIT
----------- ------------------ ------------ ----------- ---------
SALES       SALES_CHANNEL_BIX  CHANNEL_ID   BITMAP      VISIBLE
SALES       SALES_CUST_BIX     CUST_ID      BITMAP      VISIBLE
SALES       SALES_PROD_BIX     PROD_ID      BITMAP      VISIBLE
SALES       SALES_PROMO_BIX    PROMO_ID     BITMAP      VISIBLE
SALES       SALES_TIME_BIX     TIME_ID      BITMAP      VISIBLE

基本問合せ

基本となる問合せは以下のとおり。
2つの絞り込み条件により、SALES表にアクセスする。

SQL> select count(*) from SALES
  2  where CUST_ID    = 25939
  3  and   CHANNEL_ID = 3;

  COUNT(*)
----------
       159

Execution Plan
----------------------------------------------------------
Plan hash value: 228738440

-------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name              | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                   |     1 |     8 |    58   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE               |                   |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL         |                   |    33 |   264 |    58   (0)| 00:00:01 |     1 |    28 |
|   3 |    BITMAP CONVERSION COUNT    |                   |    33 |   264 |    58   (0)| 00:00:01 |       |       |
|   4 |     BITMAP AND                |                   |       |       |            |          |       |       |
|*  5 |      BITMAP INDEX SINGLE VALUE| SALES_CUST_BIX    |       |       |            |          |     1 |    28 |
|*  6 |      BITMAP INDEX SINGLE VALUE| SALES_CHANNEL_BIX |       |       |            |          |     1 |    28 |
-------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("CUST_ID"=25939)
   6 - access("CHANNEL_ID"=3)

2つのビットマップ索引を使い、それぞれ絞り込んだ結果を「BITMAP AND」操作(Id=4)により両方の条件を満たす集合を作り、件数に変換して結果を得ていることがわかる。(SALES表には一切アクセスしていない。)

索引SALES_CUST_BIXを不可視にする

次に、索引SALES_CUST_BIXを不可視に変更し、同じ問合せを行ってみよう。

SQL> alter index SALES_CUST_BIX invisible;

Index altered.

SQL> select count(*) from SALES
  2  where CUST_ID    = 25939
  3  and   CHANNEL_ID = 3;

  COUNT(*)
----------
       159

Execution Plan
----------------------------------------------------------
Plan hash value: 3519235612

----------------------------------------------------------------------------------------------
| Id  | Operation            | Name  | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |       |     1 |     8 |   489   (2)| 00:00:06 |       |       |
|   1 |  SORT AGGREGATE      |       |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL|       |    33 |   264 |   489   (2)| 00:00:06 |     1 |    28 |
|*  3 |    TABLE ACCESS FULL | SALES |    33 |   264 |   489   (2)| 00:00:06 |     1 |    28 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - filter("CUST_ID"=25939 AND "CHANNEL_ID"=3)

CUST_IDに比べ、CHANNEL_IDのカーディナリティが低いため、CUST_IDの絞り込みに索引が使えなくなった途端、実行計画はSALES表に対する全件検索へと変わっていることがわかる。

索引SALES_CHANNEL_BIXを不可視にする

引き続き、索引SALES_CHANNEL_BIXを不可視にする。

SQL> alter index SALES_CHANNEL_BIX invisible;

Index altered.

SQL> select count(*) from SALES
  2  where CUST_ID    = 25939
  3  and   CHANNEL_ID = 3;

  COUNT(*)
----------
       159

Execution Plan
----------------------------------------------------------
Plan hash value: 3519235612

----------------------------------------------------------------------------------------------
| Id  | Operation            | Name  | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |       |     1 |     8 |   489   (2)| 00:00:06 |       |       |
|   1 |  SORT AGGREGATE      |       |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL|       |    33 |   264 |   489   (2)| 00:00:06 |     1 |    28 |
|*  3 |    TABLE ACCESS FULL | SALES |    33 |   264 |   489   (2)| 00:00:06 |     1 |    28 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - filter("CUST_ID"=25939 AND "CHANNEL_ID"=3)

索引SALES_CUST_BIXが使用不可(不可視)となっていることで、既に実行計画は全件検索となっているので、実行計画に変化はない。

ここまでで、SALES表の索引のうち2つを不可視に変更したことになる。

SQL> select
  2   ui.TABLE_NAME
  3  ,ui.INDEX_NAME
  4  ,uic.COLUMN_NAME
  5  ,ui.INDEX_TYPE
  6  ,ui.VISIBILITY
  7  from
  8   USER_INDEXES     ui
  9  ,USER_IND_COLUMNS uic
 10  where ui.TABLE_NAME = 'SALES'
 11  and   ui.TABLE_NAME = uic.TABLE_NAME
 12  and   ui.INDEX_NAME = uic.INDEX_NAME
 13  order by
 14   ui.INDEX_NAME;

TABLE_NAME  INDEX_NAME         COLUMN_NAME  INDEX_TYPE  VISIBILIT
----------- ------------------ ------------ ----------- ---------
SALES       SALES_CHANNEL_BIX  CHANNEL_ID   BITMAP      INVISIBLE
SALES       SALES_CUST_BIX     CUST_ID      BITMAP      INVISIBLE
SALES       SALES_PROD_BIX     PROD_ID      BITMAP      VISIBLE
SALES       SALES_PROMO_BIX    PROMO_ID     BITMAP      VISIBLE
SALES       SALES_TIME_BIX     TIME_ID      BITMAP      VISIBLE

USE_INVISIBLE_INDEXESヒントを指定する(INDEXヒントは使用しない)

ここで、USE_INVISIBLE_INDEXESヒントを指定して問合せを実行してみる。
2つの不可視索引が使えるようになるので、最初と同じ実行計画となるはずである。

SQL> select /*+ USE_INVISIBLE_INDEXES */
  2   count(*) from SALES
  3  where CUST_ID    = 25939
  4  and   CHANNEL_ID = 3;

Execution Plan
----------------------------------------------------------
Plan hash value: 228738440

-------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name              | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                   |     1 |     8 |    58   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE               |                   |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL         |                   |    33 |   264 |    58   (0)| 00:00:01 |     1 |    28 |
|   3 |    BITMAP CONVERSION COUNT    |                   |    33 |   264 |    58   (0)| 00:00:01 |       |       |
|   4 |     BITMAP AND                |                   |       |       |            |          |       |       |
|*  5 |      BITMAP INDEX SINGLE VALUE| SALES_CUST_BIX    |       |       |            |          |     1 |    28 |
|*  6 |      BITMAP INDEX SINGLE VALUE| SALES_CHANNEL_BIX |       |       |            |          |     1 |    28 |
-------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("CUST_ID"=25939)
   6 - access("CHANNEL_ID"=3)

想定通りの結果となった。

USE_INVISIBLE_INDEXESヒントとINDEXヒントを明示的に指定する

次に、INDEXヒントでSALES SALES_CUST_BIXのみの使用を明示的に指定してみる。
INDEXヒントで使用される索引を限定することが出来るのであれば、実行計画は別のものになることが予想される。

SQL> select /*+ USE_INVISIBLE_INDEXES
  2             INDEX(SALES SALES_CUST_BIX) */
  3   count(*) from SALES
  4  where CUST_ID    = 25939
  5  and   CHANNEL_ID = 3;

Execution Plan
----------------------------------------------------------
Plan hash value: 228738440

-------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name              | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                   |     1 |     8 |    58   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE               |                   |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL         |                   |    33 |   264 |    58   (0)| 00:00:01 |     1 |    28 |
|   3 |    BITMAP CONVERSION COUNT    |                   |    33 |   264 |    58   (0)| 00:00:01 |       |       |
|   4 |     BITMAP AND                |                   |       |       |            |          |       |       |
|*  5 |      BITMAP INDEX SINGLE VALUE| SALES_CUST_BIX    |       |       |            |          |     1 |    28 |
|*  6 |      BITMAP INDEX SINGLE VALUE| SALES_CHANNEL_BIX |       |       |            |          |     1 |    28 |
-------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("CUST_ID"=25939)
   6 - access("CHANNEL_ID"=3)

INDEXヒントに指定した索引とは別の索引SALES_CHANNEL_BIXも使用されていることがわかる。

つまりINDEXヒントだけでは使用される索引を特定することが出来ないことがわかった。

使用しない索引をNO_INDEXヒントで明示する

使用したくない方の不可視索引を明示的に指定するには、以下のようにNO_INDEXヒントを使う。

SQL> select /*+ USE_INVISIBLE_INDEXES
  2             INDEX(SALES SALES_CUST_BIX)
  3             NO_INDEX(SALES SALES_CHANNEL_BIX) */
  4   count(*) from SALES
  5  where CUST_ID    = 25939
  6  and   CHANNEL_ID = 3;

Execution Plan
----------------------------------------------------------
Plan hash value: 2288362790

----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name           | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |                |     1 |     8 |    54   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE                     |                |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL               |                |    33 |   264 |    54   (0)| 00:00:01 |     1 |    28 |
|*  3 |    TABLE ACCESS BY LOCAL INDEX ROWID| SALES          |    33 |   264 |    54   (0)| 00:00:01 |     1 |    28 |
|   4 |     BITMAP CONVERSION TO ROWIDS     |                |       |       |            |          |       |       |
|*  5 |      BITMAP INDEX SINGLE VALUE      | SALES_CUST_BIX |       |       |            |          |     1 |    28 |
----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - filter("CHANNEL_ID"=3)
   5 - access("CUST_ID"=25939)

索引SALES_CUST_BIXのみを使用する実行計画となった。

索引SALES_CUST_BIXを可視に変更する

今まで不可視だった索引SALES_CUST_BIXを可視に変更して問合せを実行してみる。
この状態では索引SALES_CHANNEL_BIXのみが使用不可である。

SQL> alter index SALES_CUST_BIX visible;

Index altered.

SQL> select count(*) from SALES
  2  where CUST_ID    = 25939
  3  and   CHANNEL_ID = 3;

Execution Plan
----------------------------------------------------------
Plan hash value: 2288362790

----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name           | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |                |     1 |     8 |    54   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE                     |                |     1 |     8 |            |          |       |       |
|   2 |   PARTITION RANGE ALL               |                |    33 |   264 |    54   (0)| 00:00:01 |     1 |    28 |
|*  3 |    TABLE ACCESS BY LOCAL INDEX ROWID| SALES          |    33 |   264 |    54   (0)| 00:00:01 |     1 |    28 |
|   4 |     BITMAP CONVERSION TO ROWIDS     |                |       |       |            |          |       |       |
|*  5 |      BITMAP INDEX SINGLE VALUE      | SALES_CUST_BIX |       |       |            |          |     1 |    28 |
----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - filter("CHANNEL_ID"=3)
   5 - access("CUST_ID"=25939)

1つ前と同じ実行計画となっていることがわかる。

まとめ

  • USE_INVISIBLE_INDEXESヒントを指定するとSQL文単位で使える不可視索引が全てCBOの評価対象となるので、INDEXヒントで使用したい索引を特定しようとしても結果として無視される。
  • 複数の不可視索引を作成し順番にテストするような場合、使いたくない索引をNO_INDEXヒントで指定しないと意図したテストとならない可能性があるので注意が必要である。

これらは、マニュアルにもMy Oracle Supportにも記述されていなかったので、不可視索引を使いこなす場合に覚えておきたい事実である。

今回はここまで

緊急事態条項の前に決めることがある

日曜日は参議院議員選挙

次の日曜日は第24回参議院議員選挙が行われる。

選挙の争点にはなっていないようにも思えるが、連立与党で2/3以上の議席を獲得できた場合、安倍政権は緊急事態条項を突破口に改憲論議を進める可能性が高い。

憲法のあいまいな部分をそのままにしてきた日本人にとって、憲法について議論を深めることは非常に重要であると思うが、大多数の国民の関心がまだそれほど高くない状況での改憲はやはりどうかと思う。

危機管理を真面目に考えるのであれば緊急事態条項の前に決めることがあるのではないのか?という問題提議をしたい。

小渕首相、脳梗塞による昏睡状態に陥る(2000年4月)

小渕恵三元首相が急死してからもう16年も経ってしまった。

その際のバタバタはまさに日本の危機管理上の重大な問題を明らかにしたのだが、残念なことに現在に至るまでその教訓は生かされていない。

以下時系列で振り返ってみたい。

参考文献等:

2000年4月1日

  • 午後、記者団からの質問に対して小渕首相(以下肩書きはすべて当時)10秒前後の不自然な間。
    この時既に軽い脳梗塞が発症したがすぐに回復したと思われる。

4月2日

  • 午前1時頃、首相順天堂大学医学部附属順天堂医院に緊急入院。
  • 午前2時頃、古川首相政務秘書官から青木官房長官に首相入院の連絡。
  • 午前6時頃、主治医が青木官房長官を訪問。
  • 午後0時頃、緊急事態を受け、青木官房長官、森自民党幹事長、村上自民党参議院議員会長、野中自民党幹事長代理、亀井自民党政調会長の五人がホテルニューオータニ(赤坂プリンスホテルとの説もあり)で会合。首相臨時代理の設置や後継問題が動き出す。
  • 午後7時頃、官房長官順天堂医院を訪問し、病床の首相と一人で面会
  • 午後11時、官房長官が緊急記者会見。「小渕首相が体調不良で入院した」旨を正式に公表。

4月3日

  • 午前0時頃、青木、森、村上、野中、亀井の五人が同ホテルに集まり、青木官房長官が内閣総理大臣臨時代理、後継首相は森喜朗を決定、内閣総辞職、衆参本会議及び組閣日程を確認。
  • 午前6時過ぎ、保利自治大臣兼国家公安委員長(警察・消防という危機管理システムのトップ)が、新聞で首相入院を知った夫人から初めて事態を知らされる。(官僚からの報告はそれまでなし。)
  • 午前11時、定例記者会見で青木官房長官は、小渕首相は「脳梗塞」であると病名を初めて公表し、小渕首相の指定に基づいて自身が首相臨時代理に就任したと発表

4月4日

  • 午後7時、憲法第70条に基づき内閣総辞職。

4月5日

  • 午前、自民党両院議員総会で森総裁選出。
  • 午後、衆参両院本会議で森首相を指名、夜、森内閣が正式に発足。

5月14日

  • 午後4時7分、入院から43日後一度も意識を回復する事のないまま小渕首相死去。

五人組による密室談合政治との批判

当時、森首相決定に至るプロセスの不明確さや青木幹事長が昏睡状態と思われる小渕首相からどのように臨時代理指名を受けたのか等、この5人以外にはわからないことが多くあったので(もちろんこの5人にとっては墓場まで持っていく秘密なのであろう。)「五人組による密室談合政治」という批判が巻き起こったが、あいまいなまま終わってしまった。

しかし、総理大臣が臨時代理予定者を指名せずに職務不能に陥ることを避けるため、森内閣以降組閣時などに内閣総理大臣臨時代理の就任予定者5名をあらかじめ指定(官報掲載)するのがとなった。

アングロサクソンの危機管理に学べ

このように、首相が職務不能に陥った場合における臨時代理の指名という重要な問題にも関わらず、さらに政権交代を経験したというのに16年経った今でも、法制化されることなく慣例として対応しているというのは驚くべき政治の怠慢という他ない。

これに対し、アメリカでは万一大統領が職務不能に陥った場合の職務継承順位がなんと17位まで規定してある。アメリカ合衆国大統領の継承順位 (Wikipedia)

その他、上述の「危機管理の死角」には、あらゆる事態を想定したアメリカ合衆国政府の危機管理の現状を詳細に紹介してある。

その根底に流れるのは「ひとつのバスケットに卵を入れるな」という格言に表される「リスク分散」の思想である。

「危機管理の死角」の中で小川氏は首相の職務継承順位をアメリカ並みに13位まで拡大することを提案している。

日本にも皇位継承順位や日本相撲協会の海外巡業(必ず2機に分乗する)等リスク分散の思想は根付いているはずなのだが、「行政府の長」(立法府の長ではない)が職務不能となった場合の危機管理体制が不十分であるという危険性を放置したまま、国民の行動と権利を制限する緊急事態条項を憲法に盛り込むというのは順序が逆なのではないだろうか?