浅野直樹の学習日記

この画面は、簡易表示です

司法試験予備試験10年間の学習記録(1)時系列

私は2013年(平成25年)から予備試験を受け続け、2022年(令和4年)に合格しました。2023年(令和5年)の司法試験を受験する予定です。

 

時々お問い合わせを受けることもありますし、この時期に予備試験の学習記録をまとめておくのも悪くないと思い、筆を執りました。

 

1.全体像

以下のような連続投稿を予定しています。

  • 司法試験予備試験10年間の学習記録(1)時系列…本記事
  • 司法試験予備試験10年間の学習記録(2)基本書
  • 司法試験予備試験10年間の学習記録(3)判例集
  • 司法試験予備試験10年間の学習記録(4)過去問
  • 司法試験予備試験10年間の学習記録(5)条文
  • 司法試験予備試験10年間の学習記録(6)演習書
  • 司法試験予備試験10年間の学習記録(7)その他

 

2.この記事を読む前に

(1)雑感

司法試験も予備試験も相対評価であり、配点や出題形式、問題のめぐり合わせもあって、不確実要素が大きいと感じています。短答式試験は一般教養科目の配点割合が高く、その得意・不得意によって戦略が変わります。論文式試験は手応えと結果を一致させるのが難しいです。口述式試験は、一定の知識があることを前提として、臨機応変に対応できるか、試験委員の感触を把握して誘導に乗れるかなど、論文式試験とは異なる部分が問われるように感じました。

(2)私の特徴

  • 非法学部、非法科大学院の純粋未修者です
  • 予備校は基本的に利用していません(出版物と解答速報は利用しています)
  • 暗記が極度に苦手です(いまだに行政法の処分性や原告適格のテンプレート的な言い回しを完全に覚えられていません)
  • 読書は苦行ではなく、むしろ休憩だと感じます
  • いろいろな科目を教える塾講師を長くしていたこともあり、短答の一般教養科目は何も対策せずに安定して8〜9割取れます
  • 受験生との交流はほぼありません
  • 仕事の忙しさにムラがあり、勉強時間を計測していません
  • 日々の業務や活動で法律を使うことが少しあります

 

3.過去の成績

最新の結果へのリンクです。そのリンク先に過去の結果へのリンクもあります。

10年分となると結構なボリュームになりますから、表にまとめました。合計点(順位)です。

年度 短答 論文 口述
2022年(令和4年) 197(166) 256.06(467) 122(18)
2021年(令和3年) 194(327) 224.07(772)
2020年(令和2年) 166(1607) 211.45(812)
2019年(令和1年) 191(340) 174.93(1705)
2018年(平成30年) 182(839) 231.78(619)
2017年(平成29年) 177(801) 200.25(1270)
2016年(平成28年) 161(2703)
2015年(平成27年) 214(95) 221.69(673)
2014年(平成26年) 179(1288) 112.18(1810)
2013年(平成25年) 167(2196)

 

4.時系列

(1)1〜3年目

それなりの時間を確保して集中的に基本書や判例集を読んで知識をインプットするとともに、過去問にも取り組んで司法試験予備試験の感覚をつかもうとしました。

当時に書いた記事へのリンクを貼っておきます。

3年目くらいになると、何の話をしているのかわからないということはなくなったように感じました。

(2)4〜7年目

この時期には仕事が忙しくほとんど勉強時間を確保できない年もあり、受験しないでおこうかと考えたこともありましたが、毎年受験することだけは自分に課しました。

論文式試験の答案の書き方がわからず、試行錯誤を重ねました。その形跡の記事へのリンクも貼っておきます。

自分なりに論証集のようなものを作ろうとしたり、判例の原文を読み込んだり、旧司法試験の過去問をやってみたり、他の受験生の再現答案を見比べたりと、いろいろしてみました。

(3)8〜10年目

この時期になると、おぼろげながら、論文式試験の答案の書き方が見えてきたような気がしました。

比較的勉強時間を確保できたこともあり、演習書を読んだり、司法試験の論文式試験の過去問に取り組んだりしました。

AIではありませんが、司法試験の論文式試験に関して公開されている出題の趣旨と採点実感を大量に読んで、そこで学習したことを適用するのが最も有効な試験対策であるようにも思われます。

10年目には、個人で答案添削をされている方のサービスを利用しました。

 

この記事はこれで終わりです。具体的にどの本を読んだのかなどは、次回以降の記事で書いていくつもりです。



GASで宛先ごとに添付ファイルを差し込みメール送信する

タイトルそのままのことを実現します。

給与明細を各従業員に添付ファイルで送るために開発しました。

以前はThunderbirdのMail Mergeアドインでやっていました。

それも悪くはないのですが、毎回CSVファイルを書き換えるのが地味に面倒だと感じていました。

しかも今回は普段ウェブで使っているGmailから送るので、それならGASで実装するのが最も簡単だろうと思い立ち、やってみました。

PythonやPHPでやってもよいのですが、Gmailを操作するのがセキュリティの都合などでややこしかった記憶があり、GASを選びました。

それでは具体的な手順に入ります。

 

1.添付ファイルをアップロードし、名簿のスプレッドシートとメール本文のドキュメントのファイルを作成する

どこかに一意な名前(他のフォルダの名前と重複しない名前で、私の例では「GASブログ公開用」)で新しいフォルダを作成し、そのフォルダの直下に「添付ファイル」フォルダを作ってその中に添付ファイルをアップロードするとともに、名簿のスプレッドシートとメール本文のドキュメントのファイルを作成します。

このようなイメージです。

添付ファイルの名前は、人の名前や現在時刻などから機械的に生成できるようにしておくと後が楽です。

 

2.メール本文のドキュメントの準備

メール本文のテンプレートとなるドキュメントを準備します。

ドキュメントの本文だけを取り出すと、以下になります。

{名前} 様

日々の業務、お疲れさまでございます。

{勤務月}月勤務分の給与明細をお送りいたします。

ご不明点などがございましたら、このメールにご返信いただくか、○○○-○○○○-○○○○までお電話ください。

それでは今後ともどうぞよろしくお願いいたします。

浅野直樹

用途に応じて文面をご自分で作成してください。

人ごとに置き換えたり、プログラムで機械的に作成する部分は、「{名前}」や「{勤務月}」のように{}で囲むようにしておいてください。

ドキュメントの名前は「メール本文」にしてあります。後でこの名前をスクリプトで使います。

 

3.名簿のスプレッドシートの準備

GASには大きく分けてスタンドアロン型とコンテナバインド型があります。

今回はスプレッドシートから名前やメールアドレスといった情報を取得して利用するので、スプレッドシートと結びつけたコンテナバインド型にします。

よって、最初にスプレッドシートを準備します。

最低限、名前とメールアドレスを入力します。所属など、人ごとに置き換えたい部分があればC列以下に追加しておきます。

添付ファイル名を名前や現在時刻などから機械的に生成できない場合は、その人に送るべき添付ファイルの名前もC列以下のどこかに入力しておきます。

ファイル名は何でもよいですが、ここでは「名簿」としておきます。

 

4.スクリプトの記述

「拡張機能」→「Apps Script」を選び、スクリプトエディタを立ち上げます。

プロジェクトの名前は何でもよいですが、ここでは「メール送信」にしました。

用途が一つに定まっている小規模なスクリプトなので、関数名はデフォルトのmyFunctionのままにしています。

完成したコードは次の通りです。

function myFunction() {
  //定数の設定
  const SCRIPT_FOLDER_NAME = 'GASブログ公開用';
  const ATTACHMENT_FOLDER_NAME = '添付ファイル';
  const DOCUMENT_NAME = 'メール本文';

  //フォルダを取得する
  const scriptFolder = DriveApp.getFoldersByName(SCRIPT_FOLDER_NAME).next();
  const attachmentFolder = scriptFolder.getFoldersByName(ATTACHMENT_FOLDER_NAME).next();

  //ドキュメントからメール本文のテキスト(テンプレート)を取得する
  const docFile = scriptFolder.getFilesByName(DOCUMENT_NAME).next();
  const docId = docFile.getId();
  const doc = DocumentApp.openById(docId);
  const docText = doc.getBody().getText();

  //今年と今月と先月を取得し、全員で共通するメールの件名を作成する
  const today = new Date();
  const thisYear = today.getFullYear();
  const thisMonth = today.getMonth() + 1;
  const lastMonth = new Date(thisYear, thisMonth-2, 1).getMonth() + 1;
  const subject = lastMonth + '月勤務' + thisMonth + '月支給分給与明細';

  //スプレッドシートからデータを取得し見出し行を削除する
  const sheet = SpreadsheetApp.getActiveSheet();
  const values = sheet.getDataRange().getValues();
  values.shift();

  //上記データの行ごとにメールを送信する
  for (const value of values) {
    //データから名前とメールアドレスを取得する
    const employeeName = value[0]; 
    const employeeAddress = value[1];

    //メール本文のテキスト(テンプレート)を置換してメール本文を作成する
    const body = docText
      .replace('{名前}', employeeName)
      .replace('{勤務月}', lastMonth);

    //添付ファイルを取得する
    const attachmentFileName = thisYear + '' + thisMonth + '支給' + employeeName + '様給与明細.pdf';
    const attachmentFile = attachmentFolder.getFilesByName(attachmentFileName).next();

     //途中経過をログに出力する
    Logger.log(employeeName + 'さん(' + employeeAddress + ')に' + attachmentFileName + 'を添付したメールを送信します。');

    //メールを送信する(下書き保存する)
    GmailApp.sendEmail(employeeAddress, subject, body, {attachments: [attachmentFile]});
    //GmailApp.createDraft(employeeAddress, subject, body, {attachments: [attachmentFile]});
  }
}

スクリプトの初回実行時には権限の確認をされます。「権限を確認」→(アカウントをクリックして選び)→「詳細」→「メール送信(安全ではないページ)に移動」→「許可」の順番でクリックしてきます。

以下では一つずつ解説します。

  //定数の設定
  const SCRIPT_FOLDER_NAME = 'GASブログ公開用';
  const ATTACHMENT_FOLDER_NAME = '添付ファイル';
  const DOCUMENT_NAME = 'メール本文';

スクリプトを入れたフォルダの名前と添付ファイルを入れたフォルダの名前とメール本文のテンプレートを書いたドキュメントの名前を設定します。

  //フォルダを取得する
  const scriptFolder = DriveApp.getFoldersByName(SCRIPT_FOLDER_NAME).next();
  const attachmentFolder = scriptFolder.getFoldersByName(ATTACHMENT_FOLDER_NAME).next();

スクリプトを入れたフォルダを取得し、その直下の階層にある添付ファイルのフォルダを取得します。

  //ドキュメントからメール本文のテキスト(テンプレート)を取得する
  const docFile = scriptFolder.getFilesByName(DOCUMENT_NAME).next();
  const docId = docFile.getId();
  const doc = DocumentApp.openById(docId);
  const docText = doc.getBody().getText();

ドキュメントで用意したメール本文のテキスト(テンプレート)を取得します。

ドキュメントのファイル名から取得しようとすると、このような冗長なコードになります。

名前からの取得だとファイルのコレクションが返されるので、next()で1つのファイルを取得します。

IDやURLからだとこの部分のコードはシンプルになりますが、IDやURLを取得するのに余計な手間がかかりますし、IDやURLだと何のファイルを取得しているのかコードからわからなくなってしまうので、このようにしました。

  //今年と今月と先月を取得し、全員で共通するメールの件名を作成する
  const today = new Date();
  const thisYear = today.getFullYear();
  const thisMonth = today.getMonth() + 1;
  const lastMonth = new Date(thisYear, thisMonth-2, 1).getMonth() + 1;
  const subject = lastMonth + '月勤務' + thisMonth + '月支給分給与明細';

この部分はGASというより純粋なJavaScriptです。

毎月給与明細を送るという設定ですから、今年と今月と先月を取得しています。

今年の部分は後で添付ファイルの名前として使います。

getMonth()は1〜12ではなく0〜11が返されるので、月の処理は間違えやすいです。

  //スプレッドシートからデータを取得し見出し行を削除する
  const sheet = SpreadsheetApp.getActiveSheet();
  const values = sheet.getDataRange().getValues();
  values.shift();

このようにスプレッドシートから入力されているデータを2次元配列で一括取得し、見出し行を削除して、ループさせるための配列を準備するのがスマートです。

    //データから名前とメールアドレスを取得する
    const employeeName = value[0]; 
    const employeeAddress = value[1];

これが最低限のデータ取得です。所属や添付ファイル名などをスプレッドシートのC列以下に入力している場合は、const affiliation = value[2];のように適宜データを取得して変数に格納してください。

    //メール本文のテキスト(テンプレート)を置換してメール本文を作成する
    const body = docText
      .replace('{名前}', employeeName)
      .replace('{勤務月}', lastMonth);

ドキュメントから取得したメール本文のテキスト(テンプレート)の{}で囲んだ部分をその人ごとに置換してメール本文を作成します。

ここも.replace(‘{所属}’, affiliation)などのように、必要に応じて適宜追加してください。

    //添付ファイルを取得する
    const attachmentFileName = thisYear + '' + thisMonth + '支給' + employeeName + '様給与明細.pdf';
    const attachmentFile = attachmentFolder.getFilesByName(attachmentFileName).next();

添付ファイルの名前から添付ファイルを取得しています。

私の名前の付け方ですと、thisYearとthisMonthの間に空文字列を入れているのが少しわかりづらいですね。これがないと数字の足し算になってしまいます。

スプレッドシートの例えばD列に添付ファイル名を用意している場合は、const attachmentFileName = value[3];のように取得してください。

     //途中経過をログに出力する
    Logger.log(employeeName + 'さん(' + employeeAddress + ')に' + attachmentFileName + 'を添付したメールを送信します。');

このようにログの出力をすると途中経過がわかってよいです。もちろん、ログ出力はプログラムの動作に必須のものではありません。

    //メールを送信する(下書き保存する)
    GmailApp.sendEmail(employeeAddress, subject, body, {attachments: [attachmentFile]});
    //GmailApp.createDraft(employeeAddress, subject, body, {attachments: [attachmentFile]});

ここまでの準備がしっかりできていれば、メールを送信するのはこの一行だけです。

いきなりメールを送信するのが不安なら、sendEmailの行をコメントアウトして、その下のcreateDraftの行をコメントインして、下書き保存を試してみると安心できます。

 

5.参考資料など

Gmailを一斉送信するとき個別に添付ファイルを送りたい。GAS(Google Apps Script)|わきた #ICT教育|noteを主に参考にさせていただきました。

以下の本も大いに参照しました。


詳解!Google Apps Script完全入門 = Google Apps Script Perfect Guide Book! : Google Apps & G Suiteの最新プログラミングガイド


作 者: 高橋宣成 著

出版社: 秀和システム

発売日: 2018年02月07日

最初は少し大変ですが、このように一度GASを仕込んでおくと次回から簡単に添付ファイルを一括送信できるので、便利です。

 



令和4年司法試験予備試験成績通知(口述)

令和4年司法試験予備試験口述の成績通知を公開します。

口述試験後なるべく早く、以下のリンク先に再現しました。

合計で122点ということは、どちらも61点だったのでしょうか。

 



令和4年司法試験予備試験成績通知(論文)

令和4年司法試験予備試験論文の成績通知を公開します。過去の結果は以下のリンクにあります。

試験科目 順位ランク
憲法 C
行政法 A
民法 F
商法 C
民事訴訟法 D
刑法 D
刑事訴訟法 E
選択科目 B
法律実務基礎科目 B
合計点 256.06
順位 467

再現答案も過去の記事にありますので、ご参考になれば幸いです。

少しずつではありますが、手応えと結果が一致してきました。

刑事系がまだつかめていません。相対評価ですし、他の人たちのほうができているということなのでしょう。



令和4年司法試験予備試験成績通知(短答)

令和4年司法試験予備試験短答の成績通知を公開します。過去の結果は以下のリンクです。

試験科目 得点
憲法 28
行政法 18
民法 16
商法 10
民事訴訟法 26
刑法 26
刑事訴訟法 22
一般教養科目 51
合計点 197
順位 166

一般教養科目のおかげもあり、短答式の結果は安定してきたかもしれません。




top