親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

AWSでのメール送信でタイムアウトが頻繁に発生

SpringBoot + EC2の構成で、メール送信エラーが頻発 SpringBoot + EC2のアプリケーションでメルマガ機能を作成していましたが、どうにもメール送信が途中で止まってしまうということで、ログを確認すると以下のようなエラーログが頻発していました。 要はタ…

MySQLで、先頭だけ大文字にしたい

先頭だけ大文字に MySQLのあるカラムについてアルファベットなどが登録されている場合に、先頭だけ大文字に変換して取得する方法です。 例えば英単語を保存しているカラムからデータを取得したい場合など、使う場面はまぁまぁあると思います。 UPPERとLOWER…

さくらのメールサーバの容量を個別にチェックして通知メールを送信

メールサーバの容量チェック 以前会社でさくらのメールサーバを運用していた時、1人で大量に容量を使いすぎないように、定期的にチェックして容量が大きい人は容量を空けてもらう依頼を出していた時がありました。 毎日目視でチェックするのはしんどかったの…

気になる技術は即実施せよ!

新技術が飛び交うエンジニア業界 Webの業界はとにかく進化が早く、エンジニア業界も次々と新しい技術が出てきますね。 私は情報収集をする場合に気をつけていることとして、ただひたすら数多く情報をインプットするということは避けるようにしています。触り…

computedを利用してVuexのstoreをwatch

storeの変更を検知したいパターン Vue.jsでは状態を管理するのに便利なVuexのstoreですが、storeの値が変更されたタイミングでイベントを実行したくなる場面はありませんか?例えば別なコンポーネントで、非同期で値を取得するAPIを実行し、その結果をstore…

@Columnのlengthやnullableでエラー検知してくれない

Spring Bootのバリデーション Spring Bootでは、フォームやエンティティクラスにおいて、アノテーションによる入力値チェックが可能なことはご存知でしょう。一応このブログ内でもフォームのバリデーションについては記しているので参考までにSpring BootでB…

はてなブログのAMPページで記事ごとに手動でAdsenseを設置!

はてなブログのAMPページ はてなブログでは、有料アカウントであるPROになるとページをAMPに対応させることができます。 AMPページは高速にページを表示することが可能で、ユーザにとってすぐに情報を見れるような仕組みでありSEOにも効果がある(対応しない…

Spring BootをIDEを使わずコマンドで実行

開発環境でのSpring Bootの実行 でも記載している通り、Spring Bootは開発環境だとIDEなどで簡単に設定することが可能です。 ちょっとの設定でいつでも停止や実行ができるので楽ですよね。 ブレークポイントで止めながらデバッグをしたい場合にも便利です。…

Tomcat+Nginx+Spring Bootで画像アップロードサイズを変更する方法

画像アップロード時には最大ファイルサイズが存在する ファイルアップでは、サーバにファイルを保存するわけですが、ファイルサイズに上限はあります。 アプリによっては容量の大きなファイルをアップロードする場面もありますので、その上限が小さいと不都…

object-fit-imagesをVue.jsで実装

object-fit 画像を綺麗にトリミングしてくれるcssのプロパティにobject-fitがありますよね。 大きさが均一ではない多くの画像を扱うサービスでは非常に有用なプロパティです。 そんなobject-fitですが、全てのブラウザに対応できていないことが欠点ですね。I…

SIerとして働くことの何が嫌だったのか…SIerを辞めた理由と私が経験した業界事情

今回は技術のお話ではありません! いつもは技術的なことをたらたらと記事にしているのですが、今回は技術のお話ではありません。 今回は私の過去のSIer時代の業務内容について、また、SIerを退職した話を書きたいと思います。なぜ過去の話を書きたくなった…

Tomcatのログファイルを整理せよ!

Tomcatのデフォルトのログ設定 タイトルの通りですが、今回はTomcatのログファイルに関する設定についてです。 Tomcatはデフォルトの設定のままでは多くのログファイルを出力します。 ただ、中には運用上不要なものが多く、ログを出しっぱなしだとファイル数…

Nginxでリバースプロキシ設定をしている場合のLet's Encrypt設定

リバースプロキシを設定している場合でも、サーバを停止させずに更新できる 以前以下の記事で、Nginxでリバースプロキシの設定をしている場合、一度リバースプロキシの設定箇所をコメントアウトする方法を書きましたが、ti-tomo-knowledge.hatenablog.comコ…

Vue.jsでビルド時にgzipファイルを出力する方法

出力ファイルは極力圧縮したい Webサービスにおいて、コンテンツ内容や機能面の充実度が重要であることは言うまでもありませんが、ページのパフォーマンスも重要ですよね。 当然遅いより早い方が良いに決まっています。今回はパフォーマンス改善策の1つであ…

Spring Data JPAでパラメータ以外でコロンを使いたい

RepositoryにSQLを直接記入 Spring Data JPAでORマッパーでは書けないようなSQLを実行したい場合、Repositoryに直接構文を書きますよね。 そんな時、パラメータで変数の値を渡したい時はコロンで変数を指定しますよね。 例えば以下のidのように @Query(value…

Spring Data JPA のfind+OrderByで、No property desc foundエラー時の対処法

Spring Data JPAでのOrderBy Spring Data JPAでエンティティクラスにfindして複数のレコードを取得する場合、OrderByをつければ並び順を変更できることはご存知でしょうか? findByNameOrderById(Spring name) などとすれば、nameで絞り込んだ上で、idの降順…

Vue.jsのv-ifやv-forで無駄にタグを増やしたくない時はtemplateで代用するのが便利

Vue.jsでの分岐やループ処理 Vue.jsでは分岐やループ処理で、動的にタグを描画したい場面がありますよね。 例えばリストを動的に増やしたい時は、liタグにv-forを付与したり、ある文言が特定の条件を満たした時のみ表示させる場合はpタグにv-ifを付けたりな…

Spring Bootで実行SQLのログを取得する方法

アプリケーション開発でのSQLログ アプリケーションの開発をしている時、実行されたSQLのログを参照したい場面がありますよね。 想定外のSQLが実行されていないか確認したり、ボトルネックとなっているSQLを確認したりなど。 Spring BootではそのようなSQLの…

Vue.jsでURLの#(シャープ)を取り除く方法

URLの#(シャープ) Vue-cliでvue.jsのセットアップを行った時、開発環境のURLを叩くと後ろに#(シャープ)が付いてしまいます。http://localhost:8080と入力しても、http://localhost:8080/#/ となってしまいます。これはhashモードという状態で付くものであり…

Spring BootでEntityオブジェクトのクローンをしてみる

Entityオブジェクトのクローン SpringBootで機能の実装をしている中で、Entityオブジェクトのクローンを作りたくなることはありませんか?例えばコピー機能などを想像してみてください。 いちいちオブジェクトをnewして、同じ値を全てsetして保存する...そん…

SpringBootでローカルjarファイルをMavenで管理

ローカルjarファイルはどんな時に使う? 普段SpringBootで外部ライブラリを使う時、Mavenの設定ファイルであるpom.xmlを使う人が多いのではないでしょうか。Mavenのリポジトリにあり、誰でもインストールして使えるライブラリだとそのやり方で問題ないのです…

ブロックチェーンってなんだ?

ビットコインを始めとした仮想通貨の登場により、名前を聞くことが多くなったブロックチェーン。 ブロックとは?チェーンとは?果たしてこれはどんな仕組みで動いているのでしょう? そして従来までのサーバ管理システムに比べて、どんなメリットがあるので…

safariでエンターによるformのイベントがうまく発火しない時の対処法

formのイベントをエンターで発火 Webサービスにおいて、入力した値を処理するためにformタグを使うことは多いでしょう。 <form> <input type="text"> <button>送信</button> </form> 基本的に上記のような構造で、buttonをクリックすることでイベントを発火させることになりますが、上記の構造の場合はinputタ…

XSSってどうやって仕込まれる?

XSSについて このページを閲覧している方ならご存知とは思いますが、まずはXSSについて超簡単に説明します。この事象は入力フォームがある画面が狙われるものですが、Javascriptのタグを攻撃者によって画面上に埋め込まれ、ユーザ情報やcookieのセッションが…

SPAサイトのCSRF対策

CSRF対策について CSRFとは? このページに来られた方ならもう理解している方も多いとは思いますが、CSRFについて簡単に説明します。 CSRFはリクエスト強要(CSRF:Cross-site Request Forgery)という意味で、クロスサイト(Cross-site)の名の通り、正規のサイ…

Spring Boot + MySQLで絵文字を保存する

絵文字を保存したい スマホが普及してから絵文字を文中に入れるのはもはや普通のことですよね。 掲示板などでも絵文字を入力できるものは増えていますよね。Webアプリの開発者の中には絵文字を入力できるフォームを作りたいという人もいるのではないでしょう…

ユーザにSFTPの特定ディレクトリのみ操作できる権限を付与

一般ユーザは、SFTPで特定のディレクトリのみしか触れないようにしたい サーバのファイル操作を複数人で行うようなことは、エンジニアの現場ではよく起きることです。 そのような場合、全員が管理者権限を持ってしまうと、みんなが自由にサーバの設定を変え…

Vue.jsで配列の値をAPIでPOSTする方法

値を配列でPOST フォームでPOSTする項目数が決まっていない時、配列にして値をPOSTしたい場面があると思います。 例えばチェックボックスなんかは1つのnameに対して値の数は決まっていないものです。 また、テキストフォームであっても、入力フォームを追加…

Spring BootのFormクラスでIntegerの項目にNULLはPOSTできない

NULLをPOSTした時点でStringとして認識されてしまう Spring Bootにおけるフォームから値をPOSTする際の挙動になりますが、Integer型の変数にNULLを送信すると以下のようなエラーが発生してしまいます。 Failed to convert property value of type 'java.lang…

amazletでAmazonアソシエイトリンクを簡単作成!

amazlet(アマズレット)とは amazletというツールは、Amazonアソシエイトリンクを簡単に作成できる便利ツールです。 普段アソシエイトのリンクを作る場合、Amazonアソシエイトの管理ページにログインし、商品を検索してから貼り付けフォーマットを選んでから…