現在を生きる(京都新聞掲載)
家庭裁判所の調停委員を引き受けるようになって,もう何年になるでしょうか。
この間は裁判所所長から永年勤続の表彰状をいただきました。
民事事件は減少傾向にありますが,家事事件に減少する気配はないようです。
調停委員としての担当事件数も,高止まりとなっています。
調停委員はいわば「公務員」ですので,すっぽかしたら大変です。
きちんと期日管理をしないといけません。
当然ですが,スケジュール帳には期日を間違いなく書き込んでいきます。
でも,スケジュールに書き込むだけだと,現在どれだけの事件を受け持っていて,漏れなくスケジュールに書き込めているのか,全体を見渡してチェックすることができません。
なので,事件ごとに次の期日はいつ,という表をスケジュール帳とは別に作っていました。
そしてこの表とスケジュール帳とを見比べて,書き漏れがないか確認していました。
そんな中,コロナ禍で緊急事態宣言が発令され,期日が飛ぶという事態が起きました。
これに対する対策として,次の期日だけでなく,次の次の期日まで指定しておくというのが裁判所の方針となりました。
そのため,手帳とスケジュール帳とを見比べるのがとても煩雑になりました。
煩雑になるというのは,すなわち間違いを生じやすくなるということです。
調停が成立して終了したとき,1か月2か月先に入れておいた次々回期日を消すのを忘れてしまい,不要な予定がスケジュール帳を占有しているという事態も発生しました。
この問題を解決するには,事件一覧表とスケジュールとを連携させる必要があります。
しかし,これをやってくれるうまいアプリケーションはなかなか見つかりませんでした。
そこで,これをgoogle apps script(GAS)を使ってやってみることにしました。
さいわい,GASについてはネット検索すれば情報がいっぱい入手できます。
私はBASIC,C言語などの浅い経験はありますが,プログラミングの深いところは知りません。
そんなレベルでも十分に使いこなせると思います。
空き時間だけを利用しても,3日ほどでひと通り思っていたようなものができました。
できてみると,他の通常の弁護士業務にも活用できるのでは,という発見もありました。
googleスプレッドシートとgoogleカレンダーを使うだけですので,費用はまったくかかっていません。
さっそくやってみます。
まず、スプレッドシートで期日一覧表を作ります。
カレンダーの予定では、「タイトル」「開始日時」「終了日時」「場所」「説明」を使っています。
そこで、これらを列に配置して、1行ずつ期日を書いていきます。
まず、1行目に,列の左から「件名」「日付」「開始時間」「終了時間」「場所」「説明」を順番に指定します。
そして、2行目からデータを入れいきます。
「日付」は、日付の列を選択して、データ>データの入力規則>条件:日付:有効な日付、「保存」とすれば、セルのダブルクリックでカレンダーが出てくるようになります。
出てきたカレンダーをクリックして「有効な日付」が入力できますので、これが間違いがなくていいでしょう。
「開始時間」「終了時間」は,「15:00」みたいな形式で書くようにします。
変なデータを入力してエラーにならないように、さっきのデータの入力規則で「条件:リストを直接指定」にして、あらかじめ時間のリストを書いておくと、ドロップダウンリストから選択できるようになるから間違いがなくなります。
これを「期日管理」っていうファイルの「テスト」というシートにしました。
A B C D E F
1件名 日付 開始時間 終了時間 場所 説明
2あの件 20-12-07 10:00 11:00 京都地裁 楽勝
3この件 20-12-16 15:00 17:00 京都家裁 本人同伴
4その件 20-12-25 13:00 14:00 大阪高裁 行きたくない
それでは今作った一覧表からデータを読み取りましょう。
spread sheetのセルからのデータの取得は、基本的に、[アクティブなシート].[データを取得するセルの範囲].[セルの値の取得]でできます。
ですので、まずアクティブなシートを取得する必要があります。
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
「.」は、「~の」のように考えれば大丈夫です。
「スプレッドシート」アプリケーションの、現在アクティブな「期日管理」ファイルの「テスト」シートを取得して、それを定数sheetに格納する、つまり、sheet が今開いているアクティブなシートを意味している、くらいの理解でよいと思います。
次に、「テスト」シートのセルの範囲を指定して,その範囲のデータを取得します。
セルの範囲の指定は、(最初の行,最初の列,行数,列数)で指定できますので、
const topRow = ‘データを書き込んだ範囲の最初の行番号’
const topCol = ‘データを書き込んだ範囲の最初の列番号’
const rowNum = ‘データを書き込んだ範囲の行数’
const colNum = ‘データを書き込んだ範囲の列数’
と定義して、
const contents = sheet.getRange(topRow, topCol, rowNum, colNum).getValues();
で、アクティブなシートの指定範囲から取得したデータを定数contentsに格納できます。
一番上の行に表題を書いて、上の6つの内容を含んだ事件を3つ入力しましたので、書き込んだデータは2行目のA列から、4行目のF列までになります。
ですから,
const topRow = 2;
const topCol = 1;
const rowNum = 3;
const colNum = 6;
とすればいいですね。
そして、「テスト」シートの、この範囲の、値を取得して、contentsに格納する、ということになります。
この場合だと、contents[0][0]からcontents[2][5]までに、セルの内容が格納されることになります。
consの定数宣言をしただけですが、この場合、contentsは2次元の配列になります。
で、その配列は[0][0]から始まります。
次に、contentsからデータを取り出して予定を作成します。
まず、日付情報を扱うときには形式のルールを決めておく必要があります。
そうでないと、どの数字が分なのか時なのか日なのか、分からないですから。
GASで日付情報は、Dateクラスを使って生成したオブジェクトとして扱います。
これは、Dateクラスで決められたルールに従う、くらいでいいと思います。
実際に日付を変数dayとして扱うときは,次のようにします。
let day = new Date(’値’);
ということは,
let startDate = new Date(contents[1][1]);
とすれば,セルB2から読み込んだ値(「日付」)を、GASの日付情報として変数startDateに格納できます。
でも予定は「開始日時」「終了日時」だから、「日」だけでなくて「開始時間」と「終了時間」も必要です。
contents[1][2]から「開始時間」、たとえば「10:00」を取得してstartTimeに格納されているとすると、ここから「時」と「分」とを取り出して、stratDateにセットします。
let startTime = contents[1][2];
startDate.setHours(startTime.getHours());
startDate.setMinutes(startTime.getMinutes());
終了日時は「日付」と「終了時間」とで,同じようにすればいいわけです。
let endDate = new Date(contents[1][1]);
let endTime = contents[1][3];
endDate.setHours(endTime.getHours());
endDate.setMinutes(endTime.getMinutes());
「タイトル」はcontentsから取り出したままでいいので、これで予定にセットする「タイトル」「開始時間」「終了時間」が準備できたということになります。
let title = contents[1][0];
カレンダーに書き込む関数は、createEvent();です。
「タイトル」「開始時間」「終了時間」「場所と説明」を引数にします。
「場所と説明」は、{location: ‘場所’, discription: ’説明’} のような1次元配列で指定します。
ですので、,ここの’場所’と’説明’とに、contentsの内容を入れておきます。
let options = {location: contents[1][4], description: contents[1][5]};
書き込むカレンダーの指定のために、書き込みたいカレンダーのIDを取得します。
googleカレンダーの画面左端に,表示するカレンダーをチェックするリストがあります。
その右端に現れる縦3点をクリックして、さらに「設定と共有」をクリックします。
そして「カレンダーの統合」というところへ行くと、一番上に「カレンダーID」っていうのがありますから、これをコピーします。
おなじようにして、追加したカレンダーでもできます。
このIDを,
CalendarApp.getCalendarById(‘ID’);
の’ID’のところに入れると、書き込むカレンダーにアクセスします。
たとえば、このIDを変数gAccountに格納したとすると,
let gAccount = xxxxxxx@xxxxxxx.xxxx
let calender = CalendarApp.getCalendarById(gAccount);
calender.createEvent(title,startDate,endDate,options);
で,ねらったカレンダーに予定が作成できます。
これを骨組みにして、完成です!