会社員の控除対象の経費はどの程度で計算されているか

  • 2021年3月3日 4:34 AM
  • 雑記

個人事業主は、仕事にかかった経費のレシートを経費として保存しておき、確定申告のときに経費を帳簿に記載してその分は控除の対象になります。

一方で、会社員の場合はそのようなめんどうなことはする必要がないですが、スーツを買ったり、靴を買ったり事務用品を買ったり、あるいは勉強用の本を買ったりなど、仕事で必要な消費は個人事業主と同じように発生しますので、計算をもとにざっくりと試算されています。

給与などの収入額給与所得控除額年額月額
162万5,000円以下55万円55万円4.6万円
162万5,000円超〜180万円以下収入金額 × 40% -10万55万〜62万4.6万〜5.2万
180万円超〜360万円以下収入金額 × 30% + 8万円62万〜116万5.2万〜9.6万
360万円超〜660万円以下収入金額 × 20% + 44万円116万〜176万9.6万〜14.7万
660万円超〜850万円以下収入金額 × 10% + 110万円176万〜195万14.7万〜16.25万
850万円超195万円195万円16.2万円

こうしてみると、所得税の観点でみると、会社員はけっこうな金額を仕事で使う経費として控除の対象になっていることがわかります。

私個人がフリーランスでやっていた感覚だと、仕事でかかる経費も、仕事内容によってピンきりでしょうが、私の場合年間50万〜100万くらい(年収300〜500くらいで)だったので、経費がかからない仕事の場合、所得控除の観点で見ても個人事業主よりも会社員のほうが優遇されているかもしれないですね。

さらにいいのは、いちいちレシートを取って帳簿につけて、それを確定申告する手間がかからないことですが…。

副業に対してどれだけ税金、保険料がかかるのか

  • 2021年2月28日 8:55 AM
  • 雑記

世の中で副業解禁の流れがありますが、副業で稼いだお金に対して負担することになる税金や保険料はどの程度になるのでしょうか。

そのあたりが詳しくないので調べてみました

申告が不要な副業の収入金額

確定申告の対象となる期間で、所得(収入-経費)が20万円以下の場合は確定申告は不要ということです。

例えばブログの収入が30万円で、経費が11万円という場合、確定申告をする必要はありません。

しかし、収入が本業の収入だけでなく、アルバイトなどの本業以外の給与所得も含まれている場合は確定申告はする必要があるということです。

所得税は、副業で確定申告した金額によって決定する

副業で稼いだお金を確定申告した場合、確定申告には、給与で支払われた給与額と、源泉徴収額を記入します。

副業のお金は、給与かそれ以外かで変わりますが、雑所得として記入します。

給与所得は源泉徴収されているので確定申告で支払う所得税に影響はありますが、副業の雑所得であればそこからまだ税金が差し引かれてないため、確定申告をした利益の分が課税対象になります。

住民税は、副業で収入が増えると増える

税金のうちで、住民税は、副業が増えるとそれに応じて増えるようになっています。

住民税は住んでいる地域にもよりますが、およそ総所得の10%程度である場合が多いと思いますので、副業での収入から経費を引いたものの10%近く、払う税金が払うイメージです。

住民税は、普通徴収か特別徴収を選ぶことができ、特別徴収を選ぶと会社に通知が届くようなので、バレたくない方は、確定申告をするときに、普通徴収を選ぶようにするといいみたいです。

ただ、最近はそれができなくなってきているんだとか…。

健康保険は副業で収入が増えても関係なし

会社で正社員になることで入る健康保険は、会社員の給与ベースに対して金額が決まる仕組みになっているので、副業で収入が増えても変化することはありません。これは安心ですね。

ただし、副業が雑所得でなく給与所得の場合で、副業の勤務先でも社会保険の加入がある場合、二重で社会保険を支払うようになってしまい、損するケースもあるようです。

源泉徴収とは

源泉徴収とは何か、以前から言葉の意味がわかりにくいと思っていたので調べてみました。

源泉徴収とは、給与を支払う側が、給与を受け取る側が支払うべき所得税を、あらかじめ天引きした金額のことです。

実際の支払う所得税額は、給与受け取り者の所得総額によって変わるので、実際に確定申告をした際に変動します。

例として、例えば個人事業主の人がどこかでバイトをしていて、源泉徴収済みの給与が100万円あったとします。そこからは、源泉徴収額として10万円近くが引かれた形で支払われます。

しかし、その個人事業主が、青色申告で確定申告をして、課税対象の所得が0だったとします。

課税対象所得(売上-経費-各控除)に対して所得税がかかるので、実際はそのバイトで支払ってもらった給与を売上に含めても、課税対象の所得が0という状態であったとします。

この場合、確定申告での所得税は0円となるので、そのバイトで源泉徴収で天引きされていた10万円は戻ってくるということになります。

ただし、源泉徴収は、引かれているのはあくまで「所得税のみ」なので、確定申告で還付があったとしても、例えば個人事業主であれば、それ以外にも住民税や、国民健康保険料も売上にその金額によって変動します。

例えば、売上360万円(利益260万円) + 源泉徴収済みの給与100万円があったとして、これを確定申告した場合、所得税はその時点で増えることはないですが、翌年度に自治体から連絡がある住民税は増えることになります。

また個人事業主の場合、翌年度の国民健康保険料も増えることになります(会社員の場合、健康保険料は関係ないです)

なぜ源泉徴収の仕組みがあるか

なぜ源泉徴収の仕組みがあるかというと、税金を効率的に徴収するためということです。

源泉徴収がなく個人が確定申告時に払うということになると、申告漏れや、所得税を支払う日時になって、お金がないので所得税を払えない人などが出てきます。

そのため、給与を払う側が予め天引きして支払うような仕組みになっているということですね。

フリーになる前に会社員時代にブログで稼いでいた副収入

  • 2021年2月27日 9:16 PM
  • 雑記

フリーランスになる前に、会社員時代にコツコツとブログを書いて稼いでいたんだけど、当時どのくらい稼いでたんだろーと思って調べてみた。

もう今から8〜9年前の話になってしまうんだけども、年間で52万円ほど稼いでいた。一ヶ月にすると平均で4万円くらい。

会社員の小遣い稼ぎとしては、まあそこそこというかんじではないだろうか。

当時勤めてた会社がほぼ残業代が出ない会社だったので、そこそこありがたかったのではという。

ちなみに、去年のもろもろのサイト収入が73万円ほどだったので、それほど差がある感じではないけれども。

去年は、ブログ以外の本業の収入が当時と比べると倍近くあったので、トータルの収入は、当時のそれとは比較にならないですが。

フリーになる前の会社員時代は、ブログ記事だけで、合計300記事近く一年で書いてたので、1記事あたりにすると2000円くらいだと思うけど、1記事書いて2000円ってのはすごいと思う。

今ではおそらくほぼ無理な数字な気がする。

それに対して去年のホームページ運営の収入は、ほぼ放置で70万と考えるとなかなか素晴らしい。

見られているサイトはゲーム関係が多いので、おそらくコロナで外出自粛が続いている関係で、伸びてる部分もあると思う。

コロナがなかったら半分くらいかも。

もうサイト運営してない関係で放置で70万ももらえるのはありがたい限り。

まあ税金で結局だいぶそこから引かれるわけですけど。

個人事業主が会社員になった場合の廃業届出提出について

今年度で、これまでフリーランスになっていたのが会社員になることになり、そのための手続きのメモ。

個人事業主から会社員になって個人事業主を廃業する場合は、税務署に「個人事業の開業届出・廃業届出等手続」を提出する。

書類は税務署に持参するか、郵送でも可能。

書類は以下の国税庁のサイトからからダウンロードできる。

個人事業の開業届出・廃業届出等手続

提出するのは、廃業してから一ヶ月以内だが、別に期限内に出さなくてもペナルティは特にないそう

なぜ、会社員になった場合に、個人事業主主の廃業届の手続きが必要なのか

廃業届けを提出しない場合、毎年確定申告の書類が送られてきて、確定申告を行う必要があります。

廃業届けを提出した場合、例えばそれが会社員になった場合、給与以外の所得がない場合、廃業届けの提出の必要はありません。

廃業届けを出さずに個人事業主を継続することが可能か

会社員でも、廃業届けを提出せず、個人事業主を継続することも可能です。

いわゆる二足わらじというやつです。

会社員になっても個人事業主を継続するメリット

青色申告をすることができる

給与以外の所得がある場合、個人事業主を継続することで、確定申告の際に青色申告を行うことができます。

白色申告で受けられる基礎控除は48万円ですが、青色申告の控除はそれに加えて65万円となっています。

給与所得以外の課税対象所得(売上ー経費)が48万円を超える見込みがある方は、青色申告で提出したほうが税金的な有利があると言えます。

会社員になって個人事業主を継続するデメリット

失業保険が受けられなくなる

会社員になっても個人事業主を継続することでのデメリットは、一番に挙げられるのは、会社員を何らかの理由で失業した場合に失業保険を受けられなくなることです。

失業保険を受けられる期間は、被保険者の期間によって決定するため、失業保険を受ける可能性がある場合、早めに個人事業主を廃業しておいたほうがよいといえるでしょう。

失業手当の基本金額は年齢によって異なりますが、6500円〜8500円までの日額を、90日〜最大で330日(675000円〜250万程度)受けることができます。

失業して仕事がない期間が発生するケースを想定すると、これは大きいと思います。

個人事業主から会社員(正社員)になった場合、翌年の健康保険料はどうなるか

  • 2021年2月26日 8:34 PM
  • 雑記

個人事業主から会社員(正社員)になった場合の健康保険料がどうなるかについて、調べてみました。

理由としては、自分がそうなる機会があったからです。

個人事業主が入っている保険は、国民健康保険です。

会社員が入っている保険は、会社の健康保険です。

それぞれ金額が決まる仕組みが微妙に違います。

個人事業主の健康保険は、前年度に確定申告した所得によって変動します。

前年の所得が多いほど、翌年度に支払う健康保険料が高くなります。

会社員の保険料は、前年度の収入ではなく、社員の給与額によって決まっています。

また、会社と折半し、会社が半分を負担し、半分を社員の給与から天引きする仕組みになっています。

なので、個人事業主の方の給与が低い年の翌年に会社員になって給与が上がった場合は、社員になった年の健康保険料は、個人事業主を続けた場合に払うはずだった保険料より高くなります。

また逆に、個人事業主のときの給与のほうが会社員になった場合よりも高かった場合、社員になった年に支払うことになる健康保険料は、そのまま個人事業主を続けているよりも安くなります。

また、前述したように、会社員の場合は、会社が折半して半分負担してくれるので、実質的な負担は会社員になったときのほうが低く見えると思います(実質的に会社と社員として合わせて支払う額はあまり変わらないですが)

また、会社員になった時点で国民健康保険は(手続きの必要はありますが)解約となりますので、国民健康保険は、再び会社を退職しない限りは支払う必要はありません。

余分に支払った国民健康保険料は、後ほど自治体から書類が届いて、還付されるような仕組みになっています。

個人事業主から会社員になった場合の社会保険の手続き

今年度から、個人事業主から会社員になり、そのための社会保険関係の手続きが面倒だったのでまとめ

1.国民年金

個人的な手続きは不要。

会社が厚生年金の加入を申請してくれるので、それでOK。

ただし、しばらく引き落とされたりするが、申請することで後で返還される・・・みたい。

2.国民健康保険

役所に行っての脱退手続きが必要。

余計に払った分は、後で役所から内訳が届いて還付されるような仕組みになっている。

3・国民年金基金

停止するための書類提出が必要。

しばらく支払われ続けているが、差額はいつ払い戻されるのか。

4・iDeCo

加入資格があるかどうかのチェックが毎月行われているらしく、加入資格がなくなった時点で自動的に停止が行われる。

とのことだが、しばらく引き落とされ続けていた。その金額はどうなるのか…。

新型コロナウイルスのワクチン情報まとめ

新型コロナウイルスのワクチンに関する情報について、まとめました。

※ なお、内容は本記事執筆時点(2021/2/20前後)の記事情報を参考にしているものであることを留意ください。

会社名ワクチン名称有効性保存温度価格種類変異種副反応
ファイザーアメリカ95%-70度4100円メッセンジャーRNA
シノヴァクコロナヴァク中国50%摂氏2~8度非活性化
モデルナアメリカ94.1%-20度3400円メッセンジャーRNA
シノファーム中国79〜86%効果あるが弱め
オックスフォード560円
アストラゼネカイギリス76%225円1.5%3ヶ月

Laravel7をインストールした記録

Laravel7をインストールするのに、エラーが出たりして微妙に苦労したのでメモ。

環境

CentOS

php7

以前別のプロジェクトで同じサーバにLaravelを入れていた(5系)

まずは、手順に従って、Laravelをインストールしようとした

composer global require laravel/installer

するとエラーが

SHA384 is not supported by your openssl extension, could not verify the phar file integrity

調べてみると、composerのバージョンが古いためにLaravel7系の場合は合わないらしい。

composerの最新のバージョンは1系、Laravelは7系。

これが駄目ってことか。

というわけで、composerのバージョンを最新版の2系にバージョンアップ。

この記事を参考にcomposerの再インストールを実施しました。

composerのダウンロードとインストールは、公式の記事を参考にしたらいいと思います。

結果、composerのバージョンは最新の2系になりました。

composer -V

Composer version 2.0.9

そして、再度Laravelのインストールコマンドを実行

すると、今度はまた別のエラーが

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

エラーの内容は、最初見てよくわからなかったのですが、最終的に分かったこととしては、今回実行しようとしている

composer global require laravel/installer

というコマンドは、Laravelのインストーラーを作成するコマンドであって、それが同じサーバにすでに作成していたLaravelのプロジェクト(5系)の作成時にすでに設置していたLaravelのインストーラーがあり、その設定ファイルのcomposer.jsonとcomposer.lockと内容が競合しているというような意味だったみたいです。

上記の過去プロジェクトはもうすでに更新してないサイトだったのもあり、過去に作成したインストーラーを、一旦リネーム(削除するのは何か怖かったのでリネーム)することで、上手く設置することができました。

Laravelのインストーラーは、サーバの設定により異なりますが、自分の環境の場合は

/home/.config/

以下がそうだった(それ以下にLaravelのインストーラーが入っていた)ので、上記フォルダをリネーム後にサイド実行することで、上記ディレクトリが新しく作成され、そこにLarvel7に必要だったcomposer.json、composer.lockも新しく作られました。

そして、Laravelのインストールを実行

laravel new プロジェクト名

しかし、以下のエラーが・・・

bash: laravel: コマンドが見つかりません

調べてみると、Laravelのインストーラーへのパスが通ってないみたいで、ホームディレクトリの.bash_profileにパスを設定しないといけないらしい。

しかし、確認するとすでにパスの記述がある・・・。だとするとなぜ?

source .bash_profile

をすることで読み込まれたみたいで、無事Laravelのプロジェクトを作成することができました。

Laravelのドキュメントルートにアクセスするとエラーが

The stream or file “/storage/logs/laravel.log” could not be opened in append mode: failed to open stream: Permission denied

調べるとアクセス権がないとかうことみたいで、

chmod -R 777 storage

で解決。755でいけるとか書いてたけどどうにもならず、777にしたらいけました。

iPhoneのAppleから届くダンボールのビニールの梱包方法

中古のiPhoneをヤフオクで売ろうと思い、新しいiPhoneが届くときに使われていたダンボールを、梱包のためにそのまま使うおうとしたのだが、梱包方法がよくわからなかったのでメモ

どうやって、ビニールを固定していたのっていう・・・

最初の状態
こんなかんじで、ビニールにiPhoneを挟んで
ビニールの部分を折り込むように外に回すイメージ

【ロマサガRS】推しポイントとGrade変更について

推しポイントとは

ロマサガRSでは、2020年8月のアップデートで、「推しポイント」のシステムが新しく追加されました。

推しポイントとは、戦闘にキャラクターを参加させることで戦闘が終わるたびにキャラごとに溜まっていきます。

推しポイントを溜めることで、キャラのGradeを変更し、見た目が変化していきます。

Gradeの変更方法

Gradeの変更方法は、ホーム画面の右上のメニュー→キャラ一覧から、Gradeを変更したいキャラを選択し、「Grade変更」を選択することで、変更することができます。

Gradeは、メニュー→キャラ一覧→Gradeを変更したいキャラから変更可能。デフォルトでは自動的に一番上のGradeになるようになっている。

Gradeは、500→2500→1万→3万→15万と、最大でGradeが6まであります。

一番上のGradeまでいくには15万というのはかなり大変ですね。

なお、デフォルトで、キャラごとに「最上位のGradeに設定」という設定になっているので、Gradeが一定ポイント貯まると自動的にGradeが上がるようになっています。

この設定はキャラごとに上記の画面で変更が可能なので、もし特定のGradeに戻したければ変更可能です。

AppleのHomepodでYoutubeが再生できないトラブルの対処法

  • 2020年8月9日 5:56 PM
  • apple

AppleのHomepodで、Youtubeから音楽を再生しようとしたときに、iPhoneからだとうまく再生できない問題がありました。

以前はできていて、Apple Musicは問題なく再生できるのに、Youtubeは何故?という。

解決方法

結論からいうと、Youtubeを再生しようとしているiPhoneが接続しているWi-Fiのネットワークと、Homepodが接続しているネットワークが異なるために発生している問題でした。

接続しているネットワークを同じに変更することで、問題なく再生できました。

ラストオブアス2(Last of Us2)のFEDRAの意味

ラストオブアス2では、ゲーム中に「WLF」と「FEDRA」という組織名が度々登場します。

WLFは「ワシントン解放戦線」ということで意味が分かるのですが「FEDRA」って何?と進めてもよく分からなかったので調べてみました。

下記の解説にもある通り、アウトブレイクが発生してからのアメリカを軍の力によって強制的に統治しようとしている政府組織に近いイメージです。

それに対して反抗しているのが本作で登場するWLFや、その他の様々な小反乱集団というかんじですね…。

FEDRAとは?

The Federal Disaster Response Agency(日本語的には連邦災害対応局)(FE.DRA)は、The Last of Usで取り上げられ、The Last of UsパートIIで言及されている敵対的な背景派閥です。FEDRAは、隔離地域の統治機関として軍隊と多かれ少なかれ合併しているようです。

実際のFEDRAの戦闘員はゲーム中に遭遇することはありませんが、兵士や起草された民間人労働者など、彼らの援助のもとで働いているさまざまな個人が見られます。FEDRA は、アウトブレイク前の残党、国防や、疾病コントロールセンターなどのアメリカ政府最後の残りの一つです。

歴史

アウトブレイク発生後

2013年9月に冬虫夏草の脳感染症(CBI)が発生した後、連邦災害対応局(FEDRA)が軍を統治し、戒厳令を宣言し、官僚を権力から排除しました。真菌を封じ込めるため、FEDRAボストンやピッツバーグなどの主要都市内の大規模な検疫ゾーンにすべての感染していない民間人を軍に移動させた。

FEDRAのもとでの米国は警察国家となり、ゾーンに対する絶対的な権力を行使して、民兵のファイアフライの誕生を促した。 ファイアフライは、FEDRAを倒し、発生前の政府を回復させ、病気の治療法を見つけることに専念するグループ。

「ラストオブアス」のイベントに至るまでの数年間、FEDRAと米軍は、食料不足の増加、Fireflyの攻撃、およびさらなるCBIの発生により、さまざまな隔離ゾーンの管理を維持するのに苦労しました。

ファイアフライは、より良い社会を確立するためにFEDRAからいくつかの隔離地域の制御に取り組みましたが、この結果はめったに達成されませんでした。たとえば、ピッツバーグでのファイアフライ主導の反乱は最初は成功しましたが、その住民は最終的にハンターになりました。もう1つの例はボストンで、ファイアフライは米軍によって単に打ち負かされ、最終的に強制退去させられました。都市戦争と時折のテロ攻撃に従事した反政府勢力のほとんどが小集団です。

発生から20年後の2033年までに、FEDRAと軍は検疫地帯のほとんどすべてを放棄し、彼らは鉄のグリップで握っていたボストンなど全国のほんの一握りに残った。

特にボストンは、あらゆるレベルの兵士と検問所、監視塔とサーチライトを備えた高さ30フィートのコンクリートの壁など、非常に高いレベルのセキュリティを備えていました。これは、鉄格子と一握りのコンクリートの壁だけが上にあるように見えるピッツバーグゾーンとは対照的です。 FEDRAによって制御されていない残りの無傷地帯は、ホタル、ハンター、および独立した民間人の混合物によって制御されました。

FEDRAは、隔年で、検疫地域の内部と外部の両方で職務を遂行するように民間人を起草します。おそらく、検疫ゾーン内に居住する民間人は、その数を強化するために軍に徴兵される可能性があります。FEDRAは、軍事搭乗も維持しています。幼い頃に子供たちが兵士になるように訓練されている学校。発生の早い段階で、住民によって書かれた手紙が隔離ゾーンの間に届けられる可能性がある。これが続くかどうかは不明。

ラスト・オブ・アスのイベント

ラストオブアスの時代までに、FEDRAはまだボストンを支配しており、ファイアフライとの戦いで優位に立っているようです。少数のゾーンしか支配していませんが、強力であり、残党を支配していますボストン検疫地帯を脱出し、国会議事堂に到着しようとするときに、ジョエル、エリー、テスを追跡するために後者を派遣します。FEDRAは、ジョエルが見ることができるさまざまなチラシと有益な文書を作成します。ボストンの多くの居住者はFEDRAのルールを嫌い、彼らを侮辱するグラフィティの量とそのポリシーから判断しています。

ラスト・オブ・アス:パートIIのイベント

2038年までに、FEDRAはシアトル検疫地帯を放棄して久しくなりました。第2作目ではFEDRAの生存メンバーに遭遇しませんでしたが、他の生存者が残した遺物で頻繁に参照されています。さらに、FEDRAと軍はニューメキシコ、「レイヴンズ」と呼ばれる反乱組織との戦い。

トリビア

  • FEDRAという名前は、実際の連邦緊急事態管理局(FEMA)に似ています。
  • FEDRA関係者についての情報はほとんどありません。ゲームのイントロでFEDRAのスポークスパーソンが「官僚は権力を失っていた」と語っています。米国連邦検事総長はFEDRAに所属している可能性もあり、新聞の切り抜きで言及されています。
  • FEDRAは、ミリタリーパンフレットでの感染の4つの段階を特定し、他の情報とともに、感染者に関する詳細を軍に提供します。
  • また、FEDRAはCEDAの左4死者とは正反対のように見えることも注目に値します。それぞれのゲームでは、両方とも、発生を阻止しようとしている政府機関の役割を果たします。左4死者では、CEDAの平和主義により政策は、アウトブレイクを封じ込めるのに非常に非効率的であることが示されています、それは軍が彼らの作戦を引き継ぐことにつながります。これは、FEDRAが非常に攻撃的で比較的効果的である組織(少なくとも最初は)であるThe Last of Usと対照的です。 20年後も、軍の全面的な支援を受けています。

[Cakephp3】validationとbuildRulesの違いや使い分けについて

Cakephp3のValidationとBuildRulesについての記事です。

Cakephp3ではフォームのバリデーション(エラーチェック)はモデルで行われますが、エラーチェックの方法に、validationと、BuildRulesの2パターンがあります。

この違いについて解説したいと思います。

まずvalidationについてですが、基本的にmodelのvalidationDefaultメソッドの定義していきます。一般的なエラーチェックはこちらに定義していくパターンが多いと思います。

BuildRulesは、validationメソッドとは別に定義していきます。

通常のvalidationとは記述方法が微妙に違うので、そこは公式サイトを見て確認してください。

それで、この2つの何が違うのかについてですが、バリデーションが実行されるタイミングです。

通常のvalidationは、Controller側でnewEntityやpatchEntityを実行するタイミングで行われます。

これに対して、BuildRulesは、モデルからsaveメソッドを実行するタイミングで行われます。

この2つのどう使い分けるかというと微妙なところがあって私も完全には理解してないのですが、例えば日付を比較するようなエラーチェックを入れる場合、Build Rulesのほうに追加すると便利です。

なぜなら、日付を比較するようなエラーチェックの場合、そもそも入力値が日付でなかったりする場合、エラーチェックの処理の途中で日付でないのでエラーになってしまったりして、データが「日付である」という前提を担保することが難しいわけです。

これを、Validationのほうに日付のエラーチェックを定義しておいて、日付データの比較はBuiled Rulesのほうに定義しておけば、日付でない場合はpatchEntityのタイミングでエラーになってsave時のBuild Rulesまで処理が進まないので、内部的な処理で日付がどうこうみたいな処理を書く必要がなくなります。

他にもあるかもしれませんが、私の理解ではそんなところです。

PostgresSQLのTriggerで、insertする値をINSERT BEFOREで計算する

関わっていた案件で、PostgresSQLのTriggerを使って、Insertする特定のカラム値を、TriggerのInsert Beforeを使って計算して挿入するというケースがありました。

Qiitaの以下の記事がわかりやすかったです。

PostgreSQLでトリガを作成し、同一テーブル内に値を追加する

https://qiita.com/grassfield/items/60fad9c1d4a8d205bff3

CREATE OR REPLACE FUNCTION culc_totalworktime() RETURNS trigger AS $BODY$
BEGIN
  NEW.勤務時間 := NEW.終了時刻-NEW.開始時刻-NEW.休憩時間; -- 解説
  RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION culc_totalworktime() OWNER TO postgres;

上記のようなかんじで値を返すトリガを作成して

CREATE TRIGGER totalworktime_trg
BEFORE INSERT OR UPDATE ON 勤務実績
FOR EACH ROW EXECUTE PROCEDURE culc_totalworktime();

上記のようにINSERT BEFOREでトリガを呼び出してやれば、カラムに計算された値が挿入されました。

kusanagi+nginxでall-in-one wp migrationのインポートが100%で止まる対処法

kusanagiのWordPress実行環境で、all-in-one wp migrationを使ってサイトのインポートをしていたところ、100%まで進んだところで止まってしまい、それ以上進まなくなるという状況になってしまいました。

原因について調べてみたのですが、まずはサーバのエラーログを見てみたところ、以下のようなエラーが出ていました

client intended to send too large body: 65213411 bytes, client

これは、postしたデータサイズが設定を超えていたのではじかれているという内容みたいです。

サーバはnginxを使っていたので、以下のように設定を変更しました

該当のサーバのnginxの設定ファイル〇〇.confを編集します

client_max_body_size 16M;

調べたところ、デフォルトでは自分が使っているサーバでは上記の設定だったので、ひっかかってエラーになっていたみたいです。

client_max_body_size 100M;

上記のように上限を変更し、nginxを再起動することで無事インポートできるようになりました。

2019年10月1日の消費税増税対応メモ

  • 2019年10月1日 8:25 PM
  • 雑記

2019年10月1日の消費税関連の対応で、今後また消費税増税になったときのためにメモしておく。(何年後になるか分からないけど・・・)

やった作業

item Robot、EC-CUBE、楽天、Yahooショップとして稼働しているECサイトの消費税対応。

当日の作業

Yahooは勝手に変わってくれるとのことだったので、item Robot、楽天、EC-CUBEのサイトの更新。

item Robotの更新は楽。一括更新というのがあったので、税込みで一括で対応が終わった。

EC-CUBEも楽。SQLを準備しておいて実行するだけ。5分で終わったが、SQLの失敗が怖かったので、事前に十分にテストしておきつつ、データベースのバックアップは重要。

問題は楽天だった・・。

まず、item Robotから価格更新用CSVというのをダウンロードしてアップしてみると・・・。

エラーがでまくり。ろくに更新できない。

これには焦った・・・。「価格更新用CSV」って何なのよ。エラーが出て更新できないじゃん。何のための価格更新用CSVなのよ。

そして、item Robotのほうで色々試行錯誤してみて、必要な形式のCSVをCSVダウンロード項目設定から設定して何とかダウンロードすることに成功。

アップロードして、これで勝つる・・・!!

やっぱりけっこうエラーが出て撃沈・・・。

何なのよ楽天。エラーチェックが面倒すぎるんだよ。価格更新するだけなのになんで関係ない変なところでエラーがかかるのよ。いや、8割方は変更できたけど、2割くらいいろんなエラーが出て失敗してるし。

そこで作戦を変更。

事前に楽天の価格更新用のCSVをバックアップとしてRMSからダウンロードしておいたので、それを編集して更新をかけにいくことに。

しかし、またエラーと格闘。

しかも、商品件数が多いのもあってか、CSVをアップして結果が帰ってくるのに1時間以上かかる。

エラーが出てリトライするのに1時間半かかるとは。

そうやって格闘しているうちに朝になる。すでに消費税対応作業開始から6時間以上が経過。

困った、、、このままでは会社行くまでに終わらないよ!!

しかし、神が手を差し伸べてくれたのか、家を出るぎりぎり直前で30件を除いてアップ完了。その30件だけはお客さんに報告し、作業完了。

楽天がこんなに苦労するとは思いませんでした。

しかし、後で気がついたこととしては、そもそもお客さんサイトではitem Robotと楽天の価格が違う商品もあったので、最初からitem Robotから楽天にアップする流れは間違えていた。最初から楽天からダウンロードした価格変更用CSVをダウンロードし、それを上書きする作戦でいけばよかった。

今回の反省

  • 楽天のめんどくささをなめてた。
  • CSVは楽天からダウンロードして楽天にアップ
  • アップできるCSVフォーマットの検証はテスト商品で試してみて事前に要検証。

CakePHPのFlashComponentについて

CakePHPのFlashComponentについての解説です。

公式サイトでは以下のページに解説があります。

フラッシュ

公式サイトの解説が分かりにくいので、自分流の解釈ですが、FlashComponentは、特定のメッセージをサイトで表示するのに使います。

Sessionに表示するデータを保存して、画面遷移後に表示することが可能です。

普通にエラーメッセージを表示する場合と比較すると、表示するメッセージを保存して、画面遷移後の表示に使う事ができる特徴があります。

使い方

Controllerで以下の定義

public function initialize() {

parent::initialize();
$this->loadComponent(‘Flash’); // Include the FlashComponent

}

表示したいデータを以下のように使う。

//成功した場合出力。リダイレクト後のページで表示される

successやerrorなどのテンプレートは、/sec/Template/Element/Flash以下にあるので追加や編集も可能。

$this->Flash->success(__(‘Your article has been saved.’));

$this->Flash->error(__(‘Unable to add your article.’));

テンプレートの以下の記述の場所にFlashメッセージが表示される

<?= $this->Flash->render() ?>

CakePHPのLoadComponentについて

CakePHPのLoadComponentについての解説です。

LoadComponentメソッドは、Controller内で実行することができ、あらかじめCakePHPの準備されているComponentを呼び出すことができます。

Componentとは、機能のようなもので、メソッドのかたまりのようなものです。

一般的なプログラムでのライブラリ読み込みのようなものと考えればよいでしょう。

Componentをコントローラで使用する場合は、initializeメソッドの中でLoadComponentを使って該当のComponentを呼び出します。

読み込むことができるComponentには以下の種類があるので、詳細は以下のそれぞれの記事を参照とのことです。

CakePHPのaddBehaviorについて

CakePHPのaddBehaviorメソッドについての解説です。

CakePHPのチュートリアルを進めていると、Tableクラスで以下のような記述があります。

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
    }
}

上記の意味がわからなかったのですが、調べてみると以下のような記述がありました。

デフォルトの設定は以下のようになっています:

  • 新しく Entity を保存するとき、 created と modified に現在の日時を設定します。
  • Entity を更新したとき、 modified に現在の日時を設定します。

上記のように宣言することで、対象のテーブルの項目「created」と「modified」が、データが作成されたときにタイムスタンプが更新されるようになる他、データが更新されたときにmodifiedの項目が自動で更新されるようになるということです。

AWSで何も使ってないのに課金される問題に対処

AWSの試用期間中で無料期間中にいろいろと試しているのですが、インスタンスを使用後に削除したのに、請求で料金がチャージされているのが謎でした。

ダッシュボードで利用状況を確認しても、利用しているEC2インスタンスは存在していないのに、EC2インスタンスに対して料金がチャージされていっているのです。

原因について調べていたところ、原因が判明しました。

AWSのダッシュボードの右上で、AWSのロケーション(米国東部とかいろいろある)を変更できますが、現在のロケーションでなく、別のロケーションに存在していました。

そのため、現在のダッシュボードに利用しているリソースが存在していないけど料金がチャージされているという場合、ロケーションを1つずつ変更しつつチェックして確認することで見つかる場合もあると思います。

Laravelとcakephpの違い

phpのフレームワークであるLaravelとcakephpの違いについてのメモです。

共通点

MVCアーキテクチャ(Model-View-Controller)

違い

テンプレート記法

Laravelはbladeテンプレートで、cakephpは.ctpとなっていて、テンプレートの記法が異なっています。

Laravelのほうが独自な記法なかんじで、cakephpは普通のphpの構文に近い(htmlとphpのミックス)感じです。

コマンドラインインターフェース(CLI)

コマンドラインインターフェースが、Laravelはartisan、cakephpはbakeとなっていて、コマンドが違います。意味としてはほとんど同じです。

URL規則、ルーティング

Laravelは、サイトのURLとそれに対応して実行されるコントローラーはroute.phpで管理されますが、Cakephpは基本的には命名規則で決定され、ルーティングはおまけといったかんじです。

Vue.jsで、v-forディレクティブの:keyの意味

Vue.jsで、Vueオブジェクトのデータをループさせるときに、v-forディレクティブを使用します。

<li :v-for=”変数 in Vueオブジェクトのデータ名”>{{ 変数.データ名 }}</li>

上記のような感じで使いますが、いろいろなサイトでコードのサンプルを見ていて、上記のような書き方だけのときもあれば

<li :v-for=”変数 in Vueオブジェクトのデータ名” :key=”変数.id”>{{ 変数.データ名 }}</li>

のように、:keyがついている場合とついていない場合があります。

何のために :key がついているのか調べてみたのですが、Vueの機能でDOMを書き換えた時に、keyを指定していないと、順番が変わってしまうことがあるそうで、つけておくことで並び順を保持できるそうです。

ajaxについての勉強メモ

ajaxについての勉強メモです。

ajaxとは

ajaxとは、javascritを使って、ページを非同期に更新する仕組みのことです。

とはいえ、ajaxという言葉を使わなくても、javascriptは、普通にスクリプトを実行することで、イベント発生時(マウスオーバーやクリック時など)、ページの内容を書き換えることは可能です。

では、ajaxとはその通常のjavascriptの仕組みと何が違うのでしょうか。

それは、ウェブページから、動的に現在のページでない他のページからのリソースを要求し、その結果をページに反映できるという点です。

たとえば特定の要素をマウスでクリックしたときに、ajaxの仕組みを使って、phpファイルを実行し、その帰ってきた結果を解析してページ内に反映させることができます。

この仕組みを実現するためにjavascirptに実装されているAPIの機能がajaxです。

そのことを、例えばフォームをサブミットしたりページをリロードしたりせずに実行できる仕組みと考えればよいでしょう。

javascriptの$(function(){})の意味について解説

javascriptのソースコードを見ていると、よく以下のような記述があります。

$(function(){})

これを、javascript初心者の人が見ると

???

となりますが、この意味について解説したいと思います。

まず、javascriptでは、関数をオブジェクトとして定義することができ、そのまま関数名を定義せずに変数に代入してオブジェクトにすることができる。

この事は知っている人が多いと思います。

また、javascriptは、即時関数という機能があって、定義した関数をその場ですぐに実行することができます。

これは、

(function() { 実行内容 } ())

このような書き方をします。

上記のような書き方をすることで、実行内容をその場で実行することができるわけです。

しかし、 タイトルにある

$(function(){ 実行内容 })

は、上記の記述とも微妙に違います。

これは、jQueryを使用している場合の記述です。

ページのDOMツリーの読み込みが完了した後に、実行内容を実行するということで、javascirptの通常の即時関数と似ていますが、JQuery使用時固有のものです。

Airbnbのホストをしてみた感想

  • 2019年5月25日 5:58 PM
  • 雑記

最近、Airbnbのホストをやってみています。

開始して一ヶ月ほど経ったので、注意が必要な点や感想など、気がついた点について書いてみます。

これからAirbnbのホストをやってみようという方の参考になれば幸いです。

注意が必要な点

初期コストはかなりかかる

空き家があれば、すぐに誰でもAirbnbのホストができる・・・

軽く考えがちですが、初期投資としてのコストは思った以上に多くかかります。

まず、宿泊所としての条件を満たすために、防火、防犯など最低限の設備が整っていないといけません。

特に防火対策は、部屋ごとに火災検知器を設置したり、家屋の改修が必要となるので、工事費用として、家の規模にもよりますが、数十万必要になる場合があります。

場合によっては、50万から100万を超える場合もあるでしょう。

この初期投資で断念する方も多いのではないかと思います。

他にも、ただの空き家でなく宿泊所の条件を満たそうと思った場合にはいろいろなアメニティや電気製品、家具なども設置したり、壊れている場所を改修する必要があるので、諸々を入れると100万以上はかかる場合が多いのではないかと思います。

ちなみにうちの場合は250万ほど初期投資でかかりました・・・。

民泊が可能な場所かあらかじめ確認しておく

民泊を開始するには、必要な改修工事を行う必要がありますが、それらの準備を開始する前に、自治体に該当の家屋で民泊が可能かどうかを確認しておくとよいでしょう。

場所によっては、法律によって民泊ができなかったり、制限されている区域もあるので、まず最初に家屋のある自治体に確認しておくとよいでしょう。

民泊をしていてよかった点

国際交流ができる

民泊を利用する方には、旅行の宿泊先を求めている人が多いので、外国人観光客が多いです。

特にアジア系の中国人や台湾の観光客が多いので、グローバルな国際交流の体験をすることができます。

立地はそこまでよくないが、思ったより予約が多い

開始する前は、お客が来るかどうか不安も多かったのですが、いざ蓋を開けてみるとお客さんが非常に多かったです。

当方の民泊は、最寄り駅がローカル線の駅で、そこから徒歩で20分ほどかかる場所になります。

そのため、そんな場所にお客さんが来るかどうか不安もあったのですが、蓋を開けてみると結構なペースで予約が入っています。

駐車場があるので、車で運転する人は日本人であればそのままこれますし、外国人の観光客の場合、送迎すると言っておけば駅まで来てくれる人が多いです。

これは、ふたを開ける前は立地の面で不安があったのですが、開業してみると安心した点です。

Laravelでマスタデータ(key-valueデータ)をどう管理するか

Laravelで、フォームを作る時に、例えば選択ボックスがあって、そこから値を取り出したい場合があります。

例えば、性別[男、女]とか、都道府県[北海道〜沖縄]とか、カテゴリ[〜、〜]とか色々と考えられます。

それらのデータは、しょっちゅう変更があるもので、複雑なものであればデータベースにテーブルを作ってそこから引っ張ってくる方法もあるのですが、例えば男、女のような小さいデータセットであれば、わざわざそれをするほどでもないというか、いちいちテーブルを追加してデータをセットするというのが、Laravelの場合マイグレーションを通さないといけなかったりと色々と面倒です。

その場合に便利なやり方ですが、configに追加するのが楽です。

以下のページにやり方が書いてありました。

Laravelで都道府県のプルダウンメニューを作ってみる

一応手順についてメモしておきます

1.config以下に好きなファイル名で作成

都道府県であれば、per.phpのようなファイル名をconfig以下に作成して保存します。

return array(
  '1' => '北海道', 
  '2' => '青森県', 
省略
  '46' => '鹿児島県', 
  '47' => '沖縄県'
);

ちなみに、configのキャッシュが残っていると反映されないので、ファイルアップ後は以下のコマンドが実行必要です。

php artisan config:cache

上記の例では、pref.phpには一つしか配列が定義されていないですが、
複数定義したい場合は以下のように多次元配列でも設定が可能です。

return [
    "sex" => [
        "1" => "男",
        "2" => "女",
    ]
];

上記のように設定しても、後で問題なくアクセスできます。

コントローラーで取得→テンプレートに表示、または直接bladeに表示

作成したファイルは、config(ファイル名)で、いつでも参照して取得可能です。

コントローラーで取得してからテンプレートに表示する方法

public function sample() {
  $prefs = config('pref');
  return view('sample')->with(['prefs' => $prefs]);
}

直接テンプレートに記述する

以下のように直接取得することも可能です。

<select name="_pref">
  @foreach(config('pref') as $index => $name)
    <option value="{{ $index }}" @if(old('_pref') == $index) selected @endif>$name</option>
  @endforeach
</select>

多次元配列の場合は以下のようなかんじです。

例えば、config/common.phpに

return [
    "sex" => [
        "1" => "男",
        "2" => "女",
    ]
];

上記のような定義を例えばcommon.phpにした場合、以下のように記述できます。

<select name="sex">
    @foreach(config('common.sex') as $index => $value)
        <option value='{{ $index }}' @if(old('sex') == $index) selected @endif >{{ $value }}</option>
    @endforeach
</select>

 

Javascriptのクロージャについて解説

Javascriptのクロージャについての解説です。

Javascirptのクロージャとは何か

Javascriptのクロージャとは何か。

私の理解では

関数の中で関数を定義したもの

という理解です。
(あくまで私の理解です)

まず、基本的なところで

・ 関数を定義すると、関数内で定義した変数は関数外部から参照できない

という性質があります。
これはほとんどの人が知っていると思います。

例えば

function func() {
  var value = 1;
  console.log(value);
}
func(); // 1
console.log(value); // undefined

上記のようなプログラムの場合、関数を実行した場合、実行結果は
1になりますが、関数内の変数を出力した場合、
参照できていません。

function func() {
  var value = 1;

  function innerFunc() {
    value++;
  }
  innerFunc();
  console.log(value); // 2
}
func();

上記のようなプログラムの場合、関数の内部でinnerFuncという関数を定義して関数内で実行しています。
このinnerFUncをクロージャといいます。

innerFunc内では、外側の関数(エンクロージャ)で定義している
変数valueを呼び出していますが、その値を参照できているだけでなく、
更新することができます。

つまり、javascriptでは、関数の中で定義された関数の仕様は通常の
関数と、その外側の領域と違い、その関数内部で変数を参照したり、更新
したりできるのです。

このような仕組みを利用して、関数を定義する際に使用することがありますので、
性質として覚えておくと良いでしょう。

どのようなときに使うのか?

上記のクロージャの仕組みを使うと、関数内の変数の値を維持したまま、
その関数内の値を更新するプログラムをかけたりします。

例えば、関数内で定義した変数を、その関数内の関数を定義して返すような
関数にすることで、関数の外で変数を定義して更新したりしなくても、
関数を実行する度に関数を実行できたりするわけです。

書き方によってはクロージャを使わなくても実装できる場合もありますが、
コードがよりシンプルになったり、便利なケースがあるようです。
(未だにそういう場面に遭遇したことがないので分からない・・・)

JavascriptのSymbolについて解説

JavascrotのSymbol機能は、もともとJavascriptに存在していた機能ではありません。

ECMAScript6 (ES6, ES2015) で導入された機能です。

使い方

var a = Symbol();

このように使うことができます。

こうすることで、aには他の値を被らない値(具体的な数値ではない)が、自動生成されて代入されます。

例えば

var a = Symbol();
var b = Symbol();

上記のように定義しても、aとbの値は異なった値になります。

値の型はtypeofをすると「symbol」と表示される、独自の型となっています。

何のために存在しているのか

何故このような機能が追加されたのかというと、
自分でユニークな値を設定したつもりでも、他の値と予期しない形で衝突することが
あるため、そのような状況を防ぐためです。

PHPの無名関数(クロージャ)について

PHPの無名関数(クロージャ)についてのまとめです。

無名関数とは

無名関数とは、関数規則に沿って命名を必要とせず定義できる関数です。

function(引数) {
処理内容;
}

といった形で使用できます。

例えば

$func = function(引数) {
処理内容
}

といった形で定義した場合、この$funcは、ラムダ関数とも呼ばれます。

$a = $func(引数);

このような形式で、使用する場所で呼んで使用できます。

無名関数を使用するメリット

無名関数は概念的には関数と同じなので、無名関数にせず関数として定義して呼び出しても同じなのですが、
普通の関数を定義無名関数を使用することにより、その場限りで呼び出す処理の場合は、関数名を他の関数名と衝突しないで済む、プログラム全体が複雑にならないといったメリットがあります。

無名関数内の処理に外部の変数を使用したい場合

プログラムによっては、無名関数の中で使用するプログラムに、無名関数の外の変数を使用したい場合があります。

無名関数は関数なので、引数にしている変数以外の外部の変数は内部の処理には適用されません。

しかし、use文を使うことでその問題は解決できます。

$func = function(引数A) use(変数B) {
処理内容;
}

このように無名関数を使用することで、処理内容で引数Aだけでなく外部の変数Bも使用できます。

ホーム

フィード

ページの上部に戻る