自分の死後、各方面に適切な遺言書を届けるライフハック

こんばんは。
スイスはジュネーブの多国籍企業でAI Leadをやっている傍ら、CERNなどジュネーブ各所で機械学習の無償教育も行っている @lucas29liao です。
平日は機械学習エンジニアとしても食い扶持&子供の教育費を稼ぎつつ、しかしよりちゃんと自分の思うAIがやりたくて意識の創発や、創発的な知性の研究/Simulationを趣味でやっています。
今回の記事はそれとは全く関係ありません。

# 何を作ったか
自分の死後、適切な遺言が適切な人たちに届く仕組みを作りました。

本当に衝撃的なことですが、いつか私は死に、この意識は無くなります。
<img width="327" alt="IMG_2839.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108483/de85ad44-b7e3-8936-b72a-73c9494a7947.jpeg">
そして、突然の事故などに巻き込まれずとも、分子の塊が生命活動を維持していること自体がいつ終わってもおかしくない奇跡的なことだと思っています。

また、死後 届けたい人に必要な情報やメッセージをちゃんと届けられる人はとても少ないと聞きます。

私はあり得るリスクに備えて親愛する人の苦労を極力省いてあげたいし、大切な人に伝えたいメッセージを胸に生きている時間を大切にしたいなと思いました。

（平均的に私に残されているのは600ヶ月程らしいですが、600回来ると聞いたところで、ひと月ってのは経験上短いもんです。心底やりたい研究に時間を使いたいものです。）

# Disclaimer
以下、セキュリティ上の理由により重要箇所を意図的に記述していなかったり、システムの一部を存在ごと伏せたりしています。
あくまで大まかな流れや、仕組み自体を参考にしてください。

# TL;DR
1. 自分が生存していれば毎日検出されるはずのトリガーの動作記録を取っておきます。
    - IFTTTを通じてGoogle Sheetに記録すると大変簡易です。(本記事で例示します)
2. Google App Engineで検出記録を常時モニタし、一定時間(例えば25時間)検出記録がなければ信頼する6人の友人に自分の生存状況を確認してもらうようお願いするメッセージが送られるようにします。
    - ![dying-system-flowchart1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108483/24796b09-e5aa-a31f-e4aa-3cdfa868aa54.png)
3. Google Formsで彼/彼女らの回答を集計し、6名中3名が私の死亡を確認という回答をした時点で、適切な各方面の関係者に遺言が送信されます。
    - ![dying-system-flowchart2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108483/dbde6e14-3fe6-3c5e-f656-021abb42a250.png)

##どうやって自分の死を検知するか
この検知には、極力100%のPrecisionとRecallが求められます。誤検出によって生存しているのに遺言が送られてしまうのも堪りませんし、死亡したのにそれが検出されないということがあれば全ての準備が水の泡になってしまいます。（*実際はこのシステムに100%頼らず、物理的な遺言書も印刷、保管します）

これを実現するために、まずは自分がその動作を行わない日が通常考えられないという、検出可能な動作を選びます。
多くの人には、毎日行う何らかの形で検出可能な動作があると思います。
毎日開くSNSやToDoアプリ、あるいはIoTデバイスは無いでしょうか？

脈や呼吸などが良いと考える人もいると思いますが、その場合は一時的な意識不明時の検知が遅れる可能性があるため、生命活動とダイレクトに結びついたトリガーではない方が望ましいと思います。

そして、その動作記録が無い状態が一定時間以上続いた時点で、死亡の可能性があると判断します。
動作は複数選んでおくのが良いと思います。
(この動作記録には、ひとまず自分はIFTTTを使い、Google Spreadsheetの特定のセルに最終動作時間が記録されるようにしました。ただし、後述するようにアプリケーションの性質上、いくつか信頼できるサービスを複数組み合わせた方がいいと思います。)

ただ、この時点では翌日には回復の可能性がある一時的な意識不明状態かもしれませんし、事件・事故など何らかの予期せぬ事情によりしばらくオフラインになっているだけという可能性もあります。単にその動作を取ることを忘れていただけでピンピンしている可能性だってあります。
つまり、ここで直ちに遺言が送信されてしまうと、意識回復時やオンラインに戻った時に恥ずかしいことになる可能性があります。

そこで、詳しい状況を確認する必要があります。
どうすれば死亡、意識不明、行方不明、誤検知等を柔軟に確認できるでしょうか？
いろいろと考えてみたのですが、何らかのプログラムによる自動検出は難しく、ここでは信頼できる大切な友人の協力を乞うことにしました。

具体的には、絶大に信頼する6人の友人を選びます。
一定時間トリガーが検出されなかった場合、事前に登録したその6名に自分の安否確認をお願いするメッセージが送られるようにします。

こんな感じです。

```javascript
function addDate(e) { //Spreadsheetが(例えばIFTTTにより)変更されたらこれが走る。
  var ss = SpreadsheetApp.getActiveSheet();
  var lastDate = ss.getRange(1, 2)
  lastDate.setValue(new Date());
}

//最後のトリガー検出から20時間以上が経過した場合、毎時間自分にWarningを送る
function measure(e){ //毎時間これが走る
  var ss = SpreadsheetApp.getActiveSheet();
  var base = ss.getRange(1,2).getValue().getTime()
  var now = Date.now();
  var inactiveDuration = (now - base)/1000/60/60; //何時間経ったか
  if (inactiveDuration > 20 && inactiveDuration < 25){
    var address = '***@***'; // 自分のメールアドレス
    var subject = '重要なお知らせ'; // タイトル
    var message = 'あと'+Math.floor(25-inactiveDuration)+'時間で非常時メッセージが友人に送られます';
    MailApp.sendEmail(address, subject, message);
  }

//25時間以上が経った時、1度だけ6人の友人に非常時メッセージを送信する
function measure(e){ //毎時間走らせる
  var ss = SpreadsheetApp.getActiveSheet();
  var base = ss.getRange(1,2).getValue().getTime()
  var now = Date.now();
  var inactiveDuration = (now - base)/1000/60/60; //何時間経ったか
  if (inactiveDuration >= 25 && inactiveDuration < 26){
    var address = '送信先';
    var subject = 'タイトル';
    var message = 'メッセージ';
    MailApp.sendEmail(address, subject, message);
  }
  
}
```

> こんにちは、○○です。
如何お過ごしでしょうか。
あなたがこのメッセージを受け取っているということは、私の身に何かが起きた可能性があります。
このメッセージは、平常時に私が毎日複数回行っている動作が25時間検出されなかった時点で、信頼する友人に自動的に送られるようになっています。
単に25時間オフラインになっているだけという可能性もありますが、通常考えられないことです。
以下フォームを参照し、私の安否をご確認頂けないでしょうか。
https://docs.google.com/forms/*****
よろしくお願いします。

> Dear Friend,
If you've received this message, then something might have happened to me.
There is a system that monitors my activity. You are receiving this email as the system has picked up that I have been inactive for the past 25 hours.
It could be possible that I've been offline for 25 successive hours, but the chances are very slim.
Please can you verify my status through the following form?
https://docs.google.com/forms/*****
Thank you.

もちろん、友人たちには事前に「こういうことお願いしたいんだけど…」ときちんと依頼しておきます。

# Formで友人に回答をお願いすること
- 状況 (以下からラジオボタンで一つを選択
    - 死亡を確認
    - 生存を確認。ただし意識不明、または正常な判断力無し
    - 生存を確認。意識も明確 or 回復の余地あり
    - 各種連絡先をあたってみたが、行方/生死不明

合わせて、Formの上部に私自身の各種連絡先、会社と上司の連絡先、妻や親族の連絡先などを、それぞれ反応が早い順に書きました。

## 回答アカウントの認証
また、念のために指定した6名以外のアカウントからの回答を集計しないようにひと工夫します。
この辺りの詳細はセキュリティ上の理由により伏せますが、アカウントチェックと集計はGoogle SheetやGoogle App Engineを含むGoogleのエコシステムの、外部で行います。

# フォームの集計結果に応じて自動で行われる処理

### 死亡確認の回答が集計された時
- 適切な人に適切な遺言書を送る
    - 全文を妻に
    - 全文ではないものの、大部分を両親、兄弟姉妹、妻の両親と兄弟姉妹に
        - (妻や近しい家族も私と一緒に不幸な事故で…といった可能性を考慮した送信範囲)
        - 誰に何の執行をして欲しいといった希望や、死後の手続きのフロチャートも含む
    - 相続についての希望と金融資産の詳細を、メールアドレスを持つ(=小さな子供以外の)相続対象者全員に
    - 遺言書の実行監督のため、執行に関わる部分を事前に依頼した親族以外の第三者に
- 安否確認の依頼をした6名の友人全員に、「3名より死亡確認の連絡を受けました」というメッセージと、協力に対するお礼、生前の付き合いに対するお礼や伝えたいメッセージを送る

### 意識不明 or 正常な判断力無し、という回答が集計された時
- 延命治療についての希望と関連項目を妻、両親、兄弟姉妹、妻の両親と兄弟姉妹に送る
    - (上記と同じく、妻や近しい家族も私と一緒に不幸な事故で…といった可能性を考慮した送信範囲)
    - 加えて、私が死亡した時、完全な意識不明状態が2ヶ月経過した時、ないし正常な判断力が無い状態が1年経過した時はこの6人に連絡してくださいと友人連絡先を伝える (この辺は割り切りです)
- 安否確認の依頼をした6名の友人全員に、「3名より意識不明との連絡を受けました」というメッセージと、協力に対するお礼、これまでの友人関係に対するお礼や伝えたいメッセージを送る
    - 加えて、私が死亡した時、完全な意識不明状態が2ヶ月経過した時、ないし正常な判断力が無い状態が1年経過した時は、私の親族の依頼を受けてFormの回答を「死亡を確認」に編集してくださいと伝えるメッセージを送る

### 意識も明確で生存、という回答が集計された場合
- とりいそぎ「お騒がせしてすみませんでした。再発防止に努めます… なんかお詫びとお礼をさせてください… 」というメールを6人の友人に自動送信。
- その後、安否確認の連絡等で心配をかけた各方面に個別に連絡

### 行方/生死不明の場合
ここの処理はまだ作っていないのですが、ひとりでいる時に事故でオフラインとかそういうケースが多いと思うので家族や友人に以下を送ればいいかな？と思います

1. 最後にオンラインだった時刻とその時の位置情報
2. 最後に動作確認が取れた日のカレンダー上のスケジュール
3. 行方不明という回答が集計された時点から、毎時間の自分の位置情報

方法はいろいろあると思います。
そのうち作ります。

# 全体図
簡略化した全体図は以下のようになります。
![dying-system-flowchart3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108483/b7b4d3dd-2cc0-da60-22fb-e67f79cc3127.png)
*実際の集計部分はいろいろ理由があってGoogleのサービスの外部でやってたり、遺言書が送られる部分は別の仕組みも使ってたり、その他にも全体が落ちないように冗長な箇所を設けたりしてますが、わかりやすさ重視で。

もちろん上図の構成でも必要十分の機能はします。

# なぜ登録する友人の数が6人なのか? なぜ3人の回答を閾値とするのか?
閾値に設定した人数から回答が貰えなかった場合、遺言は送信されず、全ての準備が水の泡となります。そう考えると登録する友人の数は多いほど、そして閾値は低いほど確実です。
しかし、登録数が多く、かつ閾値が低い場合、1-2名の友人の誤解・誤報によって生存しているのに遺言が送られてしまうという可能性もあります。

また、大人数に安否確認依頼のメッセージが送られてしまうと、その全員が立て続けに家族や上司に電話をかける、ということがあり得ます。何もなかった場合は迷惑をかけてしまう範囲が広くなってしまいますし、何かあった場合は既に立て込んでいるところに不必要な仕事を増やしてしまいます。

ここは自分で決めるしかないのですが、6人中3人であれば確実かなぁと思いました。そんなに深く計算はしていません。
友達の顔を思い浮かべながら決めて下さい。

#なぜ友人に自動メッセージを送るのが25時間後なのか？
1. 24時間以上にはしたい
    - たまに長時間のフライトに乗ることもあり、閾値が15時間以内というのは死亡誤検出のリスクが高い。フライト前にトリガーを検出させるのを忘れるかもしれないですし、バッファを持たせて20時間以上にはしたいなと考えました。
    - また、以前IngressというPokémon GOの前身みたいなゲームをやっていた時、365日連続ハックチャレンジを相当意識して頑張っていたのに315日で止まってしまったという苦い経験があります。
        - <img src="https://i.imgur.com/5l00ogE.jpg" alt="Ingress" height="400px">
        - これはつまり、すごく意識していても24時間以上ハックできなかった期間があったということです。(ちなみに小さい子供ふたりを連れて日本-スイス間の長時間フライトがあったタイミングでした)
        - もちろん、特定の条件を満たす場所に行って能動的に行わなければならないIngressのハックと比べ、今回トリガーに使う動作は意識があればどこでも自然とやってしまうようなよっぽと簡単なものです。しかし、この24時間以内の連続ハック失敗という経験は参考になります。
2. 30時間以内にしたい
    - 安否確認をお願いするメッセージが友人に送られたとしても、3名以上からすぐに回答が得られる可能性はあまり高くありません。みんな忙しいし、安否確認作業自体にも時間がかかるでしょう。
    - 特に、自分が一人でいる時や、妻子供と旅行している時に事故で死亡したといった場合は安否が確認しにくい状態が続くでしょう。メッセージが6名に送られてから3名が死亡を確認し回答をするまでに40-50時間はかかる可能性があると考えました。
        - しかし、遺言には死亡後72時間以内に届いて欲しい情報がいくつか書かれています。
        - そこから逆算すると、安否確認メッセージの送信条件はトリガー未検出30時間以内が望ましいと思います。

以上2点を鑑み、24-30時間ということで、25時間を閾値としました。
運用してみて変えるかもしれませんが、ここ半年走らせてみてwarningすら発動していない＝20時間以上間が空いた回数は未だ0回なので丁度良さそうです。（動作自体のテストは当然してます）

# 遺言書の内容自体の完全性の保証について
遺言書の内容は全てgitでそれなりの頻度でバージョン管理をしているので、当たり前ですがデジタルファイルです。
そのため、執行時に遺言書の内容が何者かによって破壊/改ざんされていないかという点が問題になる可能性があります。手書きじゃない問題ですね。

この問題に対する解として、法的根拠として完全ではありませんが、重要なバージョンアップ時に遺言書ファイル全体にhashをかけ、hash値を自分のみが管理するTwitterアカウントで世界に向けてTweetします。
<img width="414" alt="Image from iOS.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108483/5a63cb3b-3105-e4e0-93af-f55d75c1731c.jpeg">
hashの方式は変更するかもしれません。

このTweetは私が個人で使っているSlackと、頻繁に見る別の場所にも自動で飛ばします。
また同時に、例によって学生の頃から仲良しのエンジニアを含む信頼する友人6名に加えて + 自分宛てにEmailで同じhash値を送るようにします。

TweetとEmailは、面倒ですがセキュリティ上の理由により自動化せず、手動で行います。
メジャーバージョンアップはせいぜい半年に1度くらいです。

これにより、遺言書の内容の改ざんを試みる人がいたとしても、hash値が変わってしまうので最新のTweetやEmail内容と比べれば簡単に改ざんが検出可能となります。
また、私が管理する当該Twitterアカウントに不正ログインし、改ざん後の遺言書のhash値をTweetしたとしても、私がTwitterやSlackなどを見るのでバレます。
私のTwitterアカウントを凍結/削除したとしても、複数の友人に送られたEmailが残ります。

また、例外のない原則として、最後に私の意識が確認された時から遡って30日以内に作られた遺言書の内容は破棄するものと定め、家族と遺言の執行者である第三者に伝えます。

この中で改ざんを成功させるには、

1. 私が生存している間に、私が遺言書を保管している場所に不正ログインした上で内容を改ざんする
2. hashをかけ、私のGoogleアカウントとTwitterアカウントに不正ログインしてTweet/Emailを送る。
3. 私に意識がありながら、そのことに私が気がつかないという状態を30日以上保つ
4. 30日以上が経ってから私自身をどうにかする

というステップを踏む必要があります。
運の要素も大きく、よほど狂気じみたモチベーションがないと不可能だと思います。

念のため、そういう攻撃の可能性があるとは思えませんし、心当たりも全くありません。
ただ、手書きでも公正証書でもないし、誰が改ざんしたかわかんないよねーと突っ込まれて遺言書の内容が破棄されるのを防ぎたいだけです。
こうしてhashを記録しておくことで、正式な法的効力はなくても、常識的に考えて完全性が保証された遺言書として無視はできなくなります。
関係者全員に同じものが送信されるしね。

# 感想 + 遺言書の内容について

だいたい書いてみたらわかると思うけど、正直遺言書なんてなかなか完成しないから毎月マイナーアップデートしてるし、いったん完成しても状況変わるから数ヶ月ごとにアップデートはあるだろうし、自筆とか公正証書とか馬鹿らし過ぎて120%やってらんない。
参考までに、以下に今のところの全文の章立てを記します。

1. 死後やることになる手続き等のフロチャート (必要書類リスト含む)
2. 自分自身の基本情報（公的書類のスキャン含む。過去の全戸籍の変遷も必要になります）
3. 銀行口座詳細
4. 契約中の、口座から自動引き落としで支払ってるサービスのリスト
5. 有価証券その他の金融資産詳細
5. 加入している保険について（条件、連絡先、受取人、期間、etc
6. 遺族年金について
7. Smartphone/Tablets/PC/Macなど情報端末について特別に処理方法の希望
7. その他の遺品処理についての希望
8. デジタル遺品の処分についての希望
9. Webサービスの登録情報やIDやら
10. 生活のこと（生活のなかで私しか知らないこと、私がいないと家族がどう対応すればわからないこと）
11. 家族一覧
12. 親族一覧
12. 私の死を伝えて欲しい友人・知人リスト
13. 葬儀についての希望
14. 延命治療についての事前指示書
15. 正常な判断力が失われた場合の、後見人指定や治療/介護等についての具体的な意思表明
16. 墓について
17. 遺言書の執行者について
18. 相続についての希望とメッセージ（相続分と遺産分割方法指定、付言事項、子供の後見人と監督人などの希望も）
19. これまでの人生の短い感想と、お世話になった各方面への短いメッセージ
20. いま取り組んでいる仕事や研究の引継ぎ
21. その他メモ
22. appendix: 尊厳死の宣言

僕からは以上！