やわらかしかっけい

なんでもすぐに忘れてしまう自分のために

今年からfreeeを使い始めたけど減価償却途中の物がある時

開業7年目の個人事業主

青色申告の65万円控除を受けたい!

けど、簿記ができない!

なので、2022年までは簡易簿記&10万円控除でしのいでいたが、

2023年からはfreeeをスタンダードプランで使い始めて、日々の記帳を頑張っている。

記帳さえしっかりやっていれば、
freee様がちゃんとした帳簿や貸借対照表を勝手に作ってくれるので、助かる。

2022年に買ったMacBook減価償却の引き継ぎをどうする問題

たとえば、

  • 2022年に12万円のノートパソコンを買った
  • 一括償却資産(3年)として、2022年は4万円を償却した
  • 2023年1月からfreeeを使い始めた

だとして。freeeにおいてやるべきことは2つある。

開始残高の設定

https://support.freee.co.jp/hc/ja/articles/18890958170905


「買った時は12万円だったけど、今8万円分の価値があるノートパソコン」を、
開始時の残高として登録する必要がある。

[設定] > [開始残高の設定] > (すでに設定がされている場合は)開始残高の編集 で、

工具器具備品:80000円

てな感じで入力し、

右側の「貸方」の「元入金」にも、80000円を足す。

固定資産台帳に登録する

https://support.freee.co.jp/hc/ja/articles/202847080

固定資産台帳に登録すると、減価償却を勝手に計算して帳簿につけてくれる。

[確定申告]>[固定資産台帳]を開き、[+固定資産を登録]ボタンをクリック

名前、取得日、取得金額、など必須項目を埋めていく。

今回は「一括償却資産」なので、
「償却情報」の欄では「一括償却資産」を選ぶ。

そして、
期首残高 に 80000円 と入力する。
!ここが大事!

そうすることで、今期80000円スタートで計算してくれて、

ちゃんと今期末に40000円分の減価償却を自動で記帳してくれる。

〜〜〜〜〜

自分としては「わかった!できた」と思ったのだが、

実際は素人なので、なにもわからない。おれたちは雰囲気で納税をやっている。

このやりかたで合ってると思いたい。

HTMLフォームをGoogleフォームを使って動かす

HTML手打ちのWebサイト(!)に、
手作りPHPのお問い合わせフォーム(!)を載っけた状態で
何年も使っていたんだけど

Recaptcha v2ではスパムが防ぎきれておらず、
Recaptcha v3に変えてみたら、挙動が不安定になってしまった。

そこで手作りPHPフォームを卒業することにしたのだが、
フォーム乗り換え先の第一候補であるGoogleフォームは安定性に優れているけど、
そのまま埋め込むと、見た目がダサい。
Googleフォームの仕組みだけを使って、見た目は自作フォームのままに出来たらな…

そんな都合の良いやり方が、ありました。

目次

自作HTMLフォームをGoogleフォームで動かす

Googleフォームの埋め込み方法2つ!サンプルも紹介 | formLab

↑この記事の「自作のフォームと連携してデザインを変える方法」を参考に。

  1. HTMLフォームを作成
  2. それと同じ項目を持つGoogleフォームを作成
  3. フォーム編集画面の「送信」ボタンからGoogleフォームの共有用リンクを取得し、そのURLのページを表示
  4. Chromeデベロッパーツールでコードを検索し、form action=”XXXX/formResponse“ の"〜"内をコピーする
  5. 自作フォームの form action="〜" にペーストする
  6. 再びGoogleフォームのコードをデベロッパーツールで検索、name=”entry.数字“ が複数並んでいる箇所を見つける
  7. 上から順にコピーして、自作フォームの input name="〜" やtextarea name="〜"にペーストしていく
  8. 自作フォームの見た目をCSSで整えて、完成

この段階では、こういう感じ

<form id="mailform" role="form" action="https://docs.google〜〜〜〜/formResponse" method="post">
<div class="form-group">
	<label>お名前 Your name</label>
	<input type="text" class="form-control" placeholder="Your name" name="entry.〜数字1〜" required>
	<label>メールアドレス Email</label>
	<input type="email" class="form-control" placeholder="Email" name="entry.〜数字2〜" required>
	<label>メッセージ Message</label>
	<textarea class="form-control" rows="8" name="entry.〜数字3〜" required></textarea>
</div>
<input type="submit" value="送信">
</form>

メール通知を良い感じにする

Googleフォームは、入力された時にメールで通知する機能はあるものの
その通知というのが「フォームに回答がありました」というだけで、
回答の中身をメール本文に載せてくれる機能は無い。

なので、Google Apps Scriptを使う。

参考:
Google フォームの回答送信を通知するいろんな方法|Teeda
ASCII.jp:Googleフォームで自動返信システムをサクッとつくる (3/4)

  1. まず、フォームの回答をスプレッドシートで表示させるよう設定する
  2. スプレッドシートの画面で、拡張機能 > Apps Script
  3. 以下のような感じでScriptを書き、保存
  function onFormSubmit(e) {
  let TimeStamp = e.namedValues["タイムスタンプ"][0];
  let YourName = e.namedValues["お名前 Your Name"][0];
  let Email = e.namedValues["メールアドレス Email"][0];
  let Message = e.namedValues["メッセージ Message"][0];  
  let Subject ="【Webサイトからのお問い合わせ】" + YourName;
  var options =
   {  
    replyTo:Email,
    name:YourName
   }
  let Body = TimeStamp + "\n" +
            "From: " + YourName + "\n" +
            "Email: " + Email + "\n" +
            "Message: " +  "\n" + Message +  "\n" ;
  GmailApp.sendEmail("〜〜自分のメールアドレス〜〜", Subject, Body, options);
}

※「お名前 Your Name」とか「メールアドレス Email」とかは、スプレッドシートの見出し行に表示されている文字列をコピペする。
※「〜〜自分のメールアドレス〜〜」のところに、自分のメールアドレス(通知の宛先)を入れる。

そしてトリガーの設定を「フォーム送信時」に設定するが、
ポップアップで「安全ではありません」みたいなやつが出て、先に進めなくなる場合がある。

そうなったら、小さい文字の「安全ではないサイトにアクセスする」みたいな選択肢を選んで進んでいく。

参考:
GAS実行時に「このアプリはGoogleで確認されていません」と出る原因と対処法 - bestcloud

これで、フォームへの入力内容が無事にメールで通知されるようになった。

送信完了画面をGoogleフォームから別のページに変更する

送信ボタンを押すと、
Googleフォームの「回答が記録されました。」のページに飛んでしまうので
せっかく隠していたGoogleフォーム感が丸出しになってしまう。

それでは残念すぎるので、送信後の遷移先を無理やり設定する。

参考:
無料で使えるGoogleフォームでお問合わせフォームを設置(設定方法とメリット) | 32Web(サニウェブ)

上記の参考記事では index.html に戻る仕様になっているが、
なんか上手くいかなかった(戻ってからもフォームにフォーカスがされたままで「必須項目を入力してください!」みたいな注意が出てしまってダサかった)ので、

thanks.html を新たに作成し、そちらに移るようにした。
indexに戻るより、そっち方がわかりやすくていい気もする。


formタグを

<form id="mailform" role="form" action="https://docs.google.com/forms/〜〜〜〜/formResponse" method="post" target="hidden_iframe" onsubmit="submitted=true;">

という感じにして、

form閉じタグの直後に

<script type="text/javascript">var submitted = false;</script>
<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;" onload="if(submitted){window.location='https://〜〜/thanks.html';}"></iframe>

というものを付け加える。

あとは thanks.html にお礼と「ホームに戻る」ボタンなどを設置して、
無事すべてが良い感じになった。

thanksページに飛ばす参考:
Google FormをHTML/CSSでデザインしたフォームで運用する方法

追記:Google reCAPTCHA v3をつける

上記のやり方だと、
迷惑メール(スパム)は普通に来た。
とはいえ2~3日に1通とかなので、無視かな…と思っていたが、
やっぱり気になるので、がんばって recaptcha v3を実装することにした。

めっちゃ参考:
Googleフォームをカスタマイズ+reCAPTCHAv3導入 | BLOG | フロントエンド・コーディングの受託/請負制作専門フリーランス JWS

ちょっと参考:
Google フォームを reCaptcha 付でブログに埋め込む – IMUZA.com

1. まず、Googleフォームの質問項目に「recaptcha」という項目を追加する

recaptcha って綴りが覚えられなくて、何度も間違えた。
気をつけよう、ではなくコピペしよう。
入力欄の種類は普通の短文テキストでOK。

2. HTMLの送信ボタンの後ろにrecaptcha用の input を追加

    <input
      id="recap"
      name="entry.0000000"
      type="hidden"
      value=""
      data-sitekey="yyyyyyyyyyyyyyyyyyyyyy"
    />

name="entry.0000000" ← 他の項目と同じようにGoogleフォームをデベロッパツールで見て数字コピペする
yyyyyyyyyyyyyyyyyyyyyyにはreCAPTCHAのサイトキーを入れる

3. HTMLのヘッダーでreCAPTCHAを読み込む

<script src="https://www.google.com/recaptcha/api.js?render=xxxxxxxxxxxx"></script>

xxxxxxxxxxxxにはreCAPTCHAのサイトキーを入れる

4. submitの挙動をJavascriptで制御する

<script>
const key = $('#recap').attr('data-sitekey'); // reCAPTCHAのsitekeyを取得
$('#mailform').on('submit', function (e) {
  e.preventDefault(); //sumitを止める
  grecaptcha.ready(function () {
    grecaptcha.execute(key, { action: 'submit' }).then(function (token) {
      //recapchaを実行
      $('#recap').val(token); //戻り値tokenを#recapに格納
      $('#mailform').unbind('submit').submit(); //formをsubmit
      $('.bl_form_message').show(); //送信後メッセージを表示
    });
  });
});
</script>

これは参考サイトをまるまるコピペさせていただいたのだが、
送信後の挙動が「thanksページに遷移」ではなく「お礼メッセージ表示」になっている。

そっちの方が良さそうと思ったので、そこも変更する。


寄り道 : thanksページ遷移ではなくお礼メッセージ表示に変更

送信ボタンの下をこうする

<iframe name="dummyIframe" style="display:none"></iframe>
<div class="bl_form_message">
	<p>ありがとうございました。メッセージは送信されました。</p>
	<p>数日以内に返信しますので、しばらくお待ちください。</p>
</div>

お礼メッセージは非表示にしておく

.bl_form_message{
	display: none;
}


formのtargetも "dummyIframe" に直しておく

<form id="mailform" role="form" action="https://docs.google.com/forms/u/0/d/e/~~~~~formResponse" method="post" target="dummyIframe">


5. GASでrecaptchaを確認、OKだったらメール送るようにする

参考サイトのGASは、Google Formに対して書かれている。

Google Formと、スプレッドシートでは、スクリプトの書き方が異なる。
参考サイトのコードをできるだけ丸写ししたかったので、
スプレッドシートのGASをやめにして、
Google Formの縦3点メニューにある「スクリプトエディタ」から新規にスクリプトを作成した。

// reCAPTCHAのシークレットキー
const secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';

function verifyCaptcha(arg) {
  const payload = { secret, response: arg }; // reCAPTCHAのシークレットキー
  const url = 'https://www.google.com/recaptcha/api/siteverify';
  const resp = UrlFetchApp.fetch(url, {
    payload,
    method: 'POST',
  }).getContentText();
  return JSON.parse(resp).success; //recapchaが成功したかboolで返す
}

function submitForm(e) {
  const itemResponses = e.response.getItemResponses();
  let userMail;
  let userName;
  let userMessage;
  let recaptcha;
  let body;
  let subject;

  // フォームの入力内容を格納
  for (let i = 0; i < itemResponses.length; i++) {
    const question = itemResponses[i].getItem().getTitle();
    const answer = itemResponses[i].getResponse();
    if (question === 'メールアドレス Email') userMail = answer;
    if (question === 'お名前 Your Name') userName = answer;
    if (question === 'メッセージ Message') userMessage = answer;
    if (question === 'recaptcha') recaptcha = answer;
  }

  const resp = verifyCaptcha(recaptcha); //recapchaの値をチェック

  //reCAPTCHAが成功した場合
  if (resp) {

    // 通知メール
    subject = '【Webサイトからのお問い合わせ】';
    body =
      'サイトからお問い合わせがありました。\n' +
      '受付内容' +
      '\n メールアドレス: ' +
      userMail +
      '\n お名前:' +
      userName +
      '\n メッセージ:\n' +
      userMessage;

    GmailApp.sendEmail('メールアドレス', subject, body, {
    replyTo:userMail,
    name:userName,
    });
  }
}

メールの細かな設定以外は、
ほとんど参考サイトを丸写しさせてもらった。

あとはトリガーを「フォーム送信時」に設定して、完了!
reCAPTCHAがOKな時だけメールが届き、
NGの時はスプレッドシートに記録されるだけ、という感じになり、快適になった。

6. reCAPTCHAバッジを非表示にする

Google公式にやり方が書いてあるので、それに従う。
よくある質問  |  reCAPTCHA  |  Google for Developers


できた〜〜〜〜

Googleマイマップの埋め込みで、縮尺を変えたい時

GoogleマイマップをWebサイトに埋め込みしている時に、

縮尺をちょうどよくしたいな〜という場合のやりかた

1. マイマップをブラウザで表示させる

この時に、ちょうどよい縮尺に調整しておく。
アドレスバーの中のURLはこんな感じになっている

https://www.google.com/maps/d/u/0/viewer?mid=ほにゃららほにゃらら&ll=35.64126208593459%2C139.75543863874333&z=10

2. URLの「&ll=」以降をコピーする

  • &ll= に続く座標が地図の中心
  • &z= が縮尺

3. マイマップ埋め込みコードのsrc末尾にペーストする

<iframe src="https://www.google.com/maps/d/embed?mid=ほにゃららほにゃらら&ehbc=2E312F&ll=35.64126208593459%2C139.75543863874333&z=10" width="640" height="480"></iframe>
参考

osusume55.com