-
Go + Echo で WithInternal/SetInternal を使うとエラーレスポンスのカスタマイズがうまくいかないことがある
Go 言語の Web アプリケーションフレームワークである Echo に関する小ネタです。 執筆時点 (2024/10/01) での Echo フレームワークのバージョンは v4.12.0 です。将来のバージョンでは挙動が変わる可能性があるのでご了承ください。 先にまとめ 前提知識1:NewHTTPError() 関数によるエラーレスポンスの返却 Echo では echo.NewHTTPError() 関数を用いてエラーレスポンスを返却することができます。 echo.NewHTTPError() 関数の第二引数に “エラーメッセージ” のような文字列を渡した場合、デフォルトでは {“message”: “エラーメッセージ”} というようなレスポンスボディが返却されます。 文字列の代わりに構造体を渡すことで、レスポンスボディを自由にカスタマイズすることも可能です。 echo.NewHTTPError() 関数の戻り値の型は *echo.HTTPError で、この型は error インターフェースを実装しています。そのため error 型の変数や戻り値として扱うことができます。 前提知識2:WithInternal()/SetInternal() メソッドによる内部エラー情報の設定 *echo.HTTPError.WithInternal()/SetInternal() メソッドを用いることで、echo.NewHTTPError() 関数などで作成した *echo.HTTPError に内部で発生したエラー情報を付与することができます。 この内部エラー情報はレスポンスボディには含まれませんが、サーバーのエラーログ等に出力させることができます。 前提知識3:Bind() メソッドによるリクエストのバインド echo.Context.Bind() メソッドを用いることで、リクエストのクエリ/パスパラメータ、ヘッダー、リクエストボディを構造体にバインドすることができます。 本題 ここからが本題です。 以上のようなコードで作成したサーバーに対して、以下のようにリクエストを送信するとどのようなレスポンスが返却されるでしょうか。 リクエストボディは意図的に不正な形式(”age” が数字でない)にしています。 実際に送信してみると以下のようなレスポンスが返却されます。 {“error_code”:1,”reason”:”リクエストが不正です”}…
-
GORM + PostgreSQL で double precision を使う場合は float8 を指定すると良さそう
GORM で PostgreSQL を利用する場合の小ネタです。 執筆時点 (2024/04/06) での GORM のバージョンは v1.25.9、GORM PostgreSQL Driver のバージョンは v1.5.7 です。将来のバージョンでは挙動が変わる可能性があるのでご了承ください。 先にまとめ 準備 以下のような compose.yaml ファイルを用意して、Docker Compose で PostgreSQL を起動できるようにしておきます。 本題 GORM で float64 型のフィールドを持つモデルを定義して AutoMigrate すると、PostgreSQL 上では decimal (numeric) 型のカラムを持ったテーブルが作成されます。 実行してみます。 ログを見ると、確かに decimal 型のカラムを持ったテーブルが作成されていることがわかります。 しかし、場合によっては decimal ではなく PostgreSQL の倍精度浮動小数点データ型 (double precision) で格納したいこともあると思います。 そこで、gorm:”type:double precision” を指定してみます。 ログを見ると、今度は double precision 型のカラムを持ったテーブルが作成されていることがわかります。 しかし、この状態でもう一度…
-
【雑談】 マツタケが栽培できない理由
会津ラボの阿部です。普段はバックエンドエンジニアをしています。今回はソフトウェアには全く関係のない、マツタケに関する雑談です。 出典: 森林総合研究所 九州支所/菌根の話 https://www.ffpri.affrc.go.jp/kys/business/tatuta/kinoko/kinkon.html はじめに 日本におけるマツタケの歴史は古く、縄文時代にはすでに食べられており、平安貴族はマツタケ狩りを楽しみ、江戸時代には大衆向けにマツタケの料理本が発行されていたようです。日本では高級な食用キノコとされる一方で、海外では不快な臭いとみなされて人気は今ひとつのようです。近年では国内市場に流通するほとんどが輸入品で占められ、国産品は貴重な存在です。海外では見向きもされないキノコですが日本では高級品ですので、まさに金のなる木ならぬ金のなるキノコですね。 ここからが本題です。他のキノコのように人口栽培できればみんな嬉しいところですが、マツタケは人口栽培が難しいキノコとされます。一体何が原因で難しいのでしょうか。 シイタケとの違い 同じ食材キノコであるシイタケとの違いを考えてみます。シイタケは枯れ木を養分にして成長するタイプのキノコ(木材腐朽菌)です。自然環境では枯れ木や倒木に根を張って成長します。木や草を腐らせて土に還す、よく知られる自然の分解者です。シイタケ栽培のホダ木はこれを人工的に再現したものですね。 一方でマツタケは樹木の根と一体化し、樹木に土中の水分やリン酸や窒素を渡す代わりに、樹木が光合成で作った養分をもらって成長するタイプのキノコ(菌根菌)です。樹木と共生関係にあり、樹木の成長を促す役割を持ちます。キノコの本体は木の根では届かない、土中の狭い隙間に入り込むことができます。 このようにキノコは、枯れ木に生えるキノコ(シイタケ)と地面に生えるキノコ(マツタケ)の2種類に大別されます。 マツタケは人口栽培が難しい このようにマツタケは樹木と共生関係にあり、生きた樹木がないと成長できません。これが、マツタケの人口栽培を難しくしています。 まず、栽培するスペース的な問題があります。マツタケと一緒に樹木も育てる必要がありますから、シイタケのようにホダ木を並べるわけにはいきません。また、樹木と一緒に成長するため成長速度もゆっくりです。樹木の光合成に依存するため、肥料をあげて直接マツタケの成長を促すことはできません。まるごと温室に入れて成長を加速させることは、あまり現実的ではないでしょう。さらに、キノコを作り出すためのトリガーなど、よくわかっていないことも多くあります。気温や降雨量が影響しているようですが、根本的にそれらをコントロールするのは難しいという問題があります。 マツタケの収穫量はその年によって大きく変動するそうですが、それは天候の影響を強く受けるからなんですね。 TIPS菌類のうち、いわゆる「キノコ」(子実体)を作るようなものがキノコと呼ばれ、それ以外のものはカビと呼ばれます。目に見えるキノコの部分は、繁殖のために胞子を散布するための器官です。つまり植物に例えれば花の部分になります。キノコの本体は枯れ木や地面の中にあるため、あまり目にすることはないでしょう。語源的には、「木+の+子」でキノコだそうです。わかりやすいですね。実際は植物と菌類で全くの別物ですが、シイタケもマツタケも樹木と密接な関係にあります。 おわりに 今回はキノコに関する雑談でした。次回は(あるとすれば)毒キノコに関する話題を取り上げたいと思います。
-
【C#】 System.Span とパフォーマンスの話
みなさんはじめまして、会津ラボの阿部です。普段はバックエンドエンジニアをしています。 今回は C# の啓蒙活動を行おうと思います。 はじめに C# もとい .NET Framework(v1.0、2002年1月) は .NET(v1.0、2016年6月) に名前が変わりました。よりアグレッシブに機能追加するよう舵切りがなされ、特にパフォーマンスが改善されています。今回は .NET のパフォーマンス改善の目玉である System.Span<T> に関する四方山話です。 Note四方山話(よもやまばなし)種々雑多な話。 世間話。 雑談。 よもの話。 C# は生産性を重視した言語であり、パフォーマンス改善の優先度はそれほど高くありませんでした。しかし C# コンパイラが C++ から C# で書かれるようになりパフォーマンスが重視されるようになります。つまり C# におけるパフォーマンス改善の流れは C# 開発チームの内需だったわけです。その他、昨今のクラウドコンピューティングの隆盛によってパフォーマンスがよくないと開発言語として選ばれにくいという側面もあります(最近だと AOT も盛んです)。 Span<T> とは、要は配列 Span<T> は連続したメモリを表します。読み取り専用の ReadOnlySpan<T> もセットで存在します。配列の使いにくかった部分を改善した型です。 後述のとおり Span<T> はパフォーマンス改善に繋がります。しかしながら、リストやシーケンスを使う場面では System.Collections.Generic.IEnumerable<T> を使ったほうがクエリ、並列処理、イテレーターなど自由度が高く、共変性もあります。結論として、Span<T> を使うのはライブラリ作成者が主体になりそうです。一方でライブラリ利用者は、Span<T> を意識せずパフォーマンス改善の恩恵を受けられます。 文字列を例に考える Span<T> によるパフォーマンス改善の例として、文字列を見ていきましょう。 C# の文字列型(string)は不変な参照型です。詳細は省きますが、かなり特殊な型で内部的には読み取り専用の文字配列(char[])のようになっています。これは参照先で書き換えられることがないためコピーを渡す必要がないこと、コードを簡潔にできることが利点としてありますが、意図しないオブジェクトの生成が起こりやすい欠点もあります。 この問題は System.Text.StringBuilder を使うことで回避できます。…
-
HTML + JavaScript でテトリスもどきを作る
HTML + JavaScript でテトリスもどきを作ってみると意外と簡単にできて結構楽しい
-
LaravelでService層とRepository層を取り入れる
Laravelを使用したプロジェクトでServiceとRepositoryというLaravelの機能を使用する機会があったので、備忘録の意味も含めて紹介したい。 対象読者 Service、Repository、Controller、Modelの関係性 今回は下記の流れになる Controller →Service →Repository →Model 【Controller】①ControllerからServiceをインスタンス化し、メソッドを呼び出す❻Serviceから返ってきた整形されたデータをフロントに渡す 【Service】②Repositoryのメソッドを呼び、Controllerから受け取ったIDなどのデータを渡したりする❺Repositoryから返ってきたデータを整形し、Controllerに返す 【Repository】③クエリを記述してDBからデータを取得する❹Modelから取得したデータをServiceに返す Service層とRepository層を取り入れるメリット、デメリット メリット ・DB操作をControllerで行わない事によりControllerのコード数が増える、いわゆるファットコントローラーになる事を回避できる。 ・処理を分担する事により、可読性、保守性が向上する。 デメリット ・中〜大規模プロジェクト向けという事もあり、小規模プロジェクトでは処理を分ける事に煩わしさを感じる可能性がある 実際にやってみる 実行環境 テーブル構成はのようにしてみる id name created_at updated_at deleted_at 1 りんご 2022-01-01 2022-01-01 null 2 バナナ 2022-01-02 2022-01-02 null 3 ぶどう 2022-01-03 2022-01-03 2022-01-03 ディレクトリ構造 Controllerを作成 Serviceクラスを作成 Repositoryを作成 Modelを作成 実行結果 まとめ 以上がService層とRepository層を取り入れた実装方法となる。 今回は基礎的な処理のみの為、恩恵は感じ辛いかも知れないが実際に取り入れて頂ければ可読性、保守性の高さを実感して頂けると思う。 今後のプロジェクトでLaravelを使用する機会があった際には、積極的に採用していきたい。
-
HasuraCon’22にてHASURAwards受賞しました!
まえがき この度、会津ラボはHasuraを用いた高齢者向け医療用アプリを開発し、毎年開催されているHasuraCon’22においてHasuraを用いた素晴らしいプロジェクトに贈られる”Open Source Hero”賞を受賞しました。 HasuraCon’22についてはこちら 定期的に開催される無料のオンラインカンファレンスで、Hasuraが世界でどのような使われ方をしているか、またHasuraを用いたチーム開発ではどのような構築がされているか等を発表するイベントです。 Hasuraとは 正式名称はHasura GraphQL Engineであり、DB(Postgres)をもとにGraphQL APIを構築するオープンソースです。 PostgreSQLサーバーを建てるだけでHasura内でテーブルの作成やリレーションの設定等も可能です。 また、公式がHasura用のDockerを用意していて、起動してすぐローカル環境でHasuraが使えるようになります。 Hasuraを使った感想 GraphQLを使用することでフロント内で完結する作業が増え、バックエンドの負担を軽くすることができます。クエリを作ってすぐに実行できたり、テーブルの設定もHasuraから行えるのでシームレスに運用ができます。 また、外部APIが必要になったとしてもHasura Actionsという外部APIと連携できる機能があります。エンドポイントはあくまでGraphQLのエンドポイントだけでいいので、すっきりとした実装が可能になります。 そして、Hasuraは認証周りがしっかりしており、ユーザーレベルでの制御が容易です。JWTを読み込み取得してくる値に制限をかけるといった動作を実装できます。 Hasuraは新進気鋭の技術ということもあり、日本ではあまり情報が出回っていませんが、上記の機能を魅力的に感じたのであれば検討する価値はあると思いました。
-
無料Wi-Fiを使うと危険?安全に使うために知っておきたいVPNとは
オフィスに行かないスタイルが一般的になっていくなか、自宅では集中できない、気分転換ついでに外で仕事がしたい、出先のちょっとした時間も逃したくない、そんな様々な理由からカフェなどの無料Wi-Fiを利用して働く方が増えています。コロナ禍においては、無料Wi-Fiが使える個室をビジネス向けに貸し出すサービスなども誕生しました。 とくにWeb制作やデザイン系のお仕事では、それほどオフィスに行く必要がない場合も多く、フリーランスとして活動する方も少なくありません。そんな方たちにとって、無料Wi-Fiはとっても便利な存在です。 しかし、実はこの無料Wi-Fi、危険が潜んでいることをご存じでしょうか。今回は無料Wi-Fiを使用する際の危険性と気を付けるべきポイントについてご説明します。 便利な無料Wi-Fiにも危険が潜んでいる 最近ではカフェなどの飲食店や駅、コンビニなど、どこでも利用できる無料Wi-Fi。とっても便利ですし、パソコンを使って外で仕事をする方にとって、もはやなくてはならないものでもあります。ですが、やはりそこは『無料』。セキュリティ面で不安がないと言えば嘘になります。どのような危険が潜んでいるのか、しっかり頭に入れておきましょう。 通信内容が外に漏れる可能性がある 無料Wi-Fiのメリットと言えば、誰もがいつでも気軽に使えるという点です。だからこそ、あえてパスワードを設定していないパターンもよくあります。確かに外出中、スマホで無料Wi-Fiに接続するとき、パスワードの入力を求められることはほとんどないですよね。 手軽さというのはとても大切ですが、その反面誰もが同じWi-Fiにアクセスできるということになります。もしその中に悪意のある人がいれば、簡単に自分と誰かのやり取りや、自分が扱うデータの内容を盗み見られる可能性が出てくるのです。重大な情報漏洩のリスクがあることを忘れてはいけません。 なりすましで情報を取られてしまうことも パスワードが不要、さらに暗号化されていない無料Wi-Fiに接続しているなか、メールやネットバンクなどにログインするためのパスワードを入力するのは非常に危険です。 ここ10年間、インターネット上では悪質なサイバー犯罪が増加し無料Wi-Fi接続中のパスワードの個人情報盗難が相次いでいます。 犯罪者などの手によって個人情報が盗まれると、銀行口座などの金融情報や、盗んだ複数の個人IDを組み合わせて架空の人物を作り、他人になりすますといった犯罪行為へと発展します。 一番多く盗まれたのがクレジットカード情報で、2020年の個人情報の盗難数は、約27万件にも上り、盗まれた個人情報全体の41%といった発表もされています。また、日本クレジット協会によると、2021年のクレジットカード不正利用被害額はなんと330億円となっています。人気のフリマアプリであるメルカリでは、不正に入手したクレジットカード情報で商品を購入される被害が拡大しており、今年4月には、16億円規模の不正利用があったと報告がありました。 先にもあったように、アクセスする大勢のなかに悪い思惑を抱えた人間がいないとは限りません。自分しか知らないはずのパスワードを他人に知られてしまえば、そこから不正アクセスといった被害にあう可能性だって考えられます。さらにデータの改ざんなど、思いがけないトラブルに巻き込まれる可能性も否定できません。 有名な無料Wi-Fiの落とし穴 きちんとパスワードが設定されているし、アカウントも登録制だから大丈夫。大手通信会社が提供する無料Wi-Fiのなかには、しっかりセキュリティ対策が取られたものもあります。しかしそれを逆手にとって、安全なものに似たWi-Fiを作り出す悪い人もいるものです。うっかりアクセスしてしまえば、情報を盗まれてしまったり、データの損失・改ざんに繋がることもあるでしょう。 こちらは安全だと思っていることや、何かしら被害にあってもすぐ気づけない場合があることから、このタイプの危険にはとくに注意が必要です。 安全に使うために気を付けたいポイント 無料Wi-Fiには危険がある。とはいえ、正しい知識を身に付ければ、もちろん安全に使うことだってできます。どのようなところに気を付ければよいのか、重要なポイントを見ていきましょう。 重要な情報は扱わない いろいろなポイントがあるなかでも、とにかく一番大切なのは「ほかの人に知られてはいけない情報は扱わない」、それに尽きます。顧客についてや契約内容など、特段重要な情報はセキュリティ対策をしっかり行った社内や自宅で取り扱うようにすると安心です。 パスワード不要のWi-Fiは要注意 ここまで何度か出たように、パスワード不要=誰もが気軽にアクセスできるということです。不特定多数の人がアクセスできて、しかもこちらは誰がアクセスできるか分からない。そんな無料Wi-Fiで仕事に関するやり取りをするのはいいことだと言えません。 今はしっかりパスワードを使用している貸しオフィスなどもありますから、ネット上のやり取りが発生する仕事は場所を選んで行うようにしましょう。 Wi-FiのON・OFFをしっかり管理する 受信できる範囲内に無料Wi-Fiがあれば、自動で接続するよう設定が行える機器があります。知らないうちにWi-Fiに接続することで、無意識のうちに不正アクセスなどの被害にあってしまうことも考えられるのです。機器側の設定もきちんと把握、管理しておいてくださいね。 セキュリティ対策ソフトを導入する とくに仕事で使うPCであれば、できる限りのセキュリティ対策は行っているかと思いますが、やはり市販のソフトというのはとても優秀なものです。うっかり入り込もうとする悪いものをはじき返してくれます。悪人側の手口も巧妙になっているので完全にとは言えませんが、それでもソフトを使わないよりはずっと安心です。 おすすめは「VPN」の使用 「VPN」とは、「Virtual Private Network(バーチャル プライベート ネットワーク)」の略称で仮想的な専用線(トンネル)を構築してインターネット接続を行う仕組みです。自分のIPアドレスを隠すことで、第三者からの介入を防ぎ、安全性を高めてくれます。VPNを使用すると、安全に無料Wi-Fiに接続できるため、テレワークや旅行先など、外出先でも安心してインターネットを利用することができます。 VPN接続によってIPアドレスを変更することで、オンラインゲームやストリーミング、オンラインショッピング、動画視聴など、オンライン上のあらゆる行動の追跡が困難になります。よって、外出先に限らず、自宅で仕事をする時でも、プライベート時にも活躍するツールと言えます。 また、海外から日本のドラマや映画を視聴したい場合に、日本にいながら世界中のVPNサーバーを自由に選択し、使用することで、国や地域制限に囚われない動画視聴を楽しむことができます。 VPNはソフトやアプリを利用すれば簡単に使えるので、よく無料Wi-Fiを使用して仕事をする機会のある方は是非導入してみてください。なかでも会社のサーバーと繋いでデザインデータをやり取りする、クライアントにテストサイトを見てもらう作業が発生するなど、外部とのやり取りが多い職種の方にはおすすめです。 まとめ カフェで仕事をすると捗る、そんな方も少なくありません。しかし、みなさんがお気に入りの場所で接続する無料Wi-Fiには、さまざまな危険が潜んでいることが分りましたね。 今回の記事ではいくつかのポイントをご紹介しましたが、そのなかでもVPNは一番確実で安全な方法です。あまり馴染みがないと難しいことに感じられるかも知れませんが、使い方は難しくありませんし、ちょっと調べれば情報がたくさん出てきます。 自分のセキュリティ対策や知識に自信がないという方は、今回の内容を参考に、VPNを使用した無料Wi-Fiの接続に挑戦してみてはいかがでしょうか。
-
華麗なる Gatsby + WordPress のメールフォーム実装方法 – Contact Form 7 活用例
Gatsby + WordPress 構成の場合におけるメールフォームは、どのように実装すればいいだろうか? このエントリーでは、Gatsby のメールフォームから Contact Form 7(WP プラグイン)にアクセスしてメール送信する方法を共有したい。 はじめに Netlify にホスティングするならば Netlify Forms を選ぶだろうし、それ以外では、ホスティング先に関わらず静的サイトからアクセスできるフォームサービスも、いくつか選択肢がある。その、いずれもリーズナブルで活用できるし、専用の Web API エンドポイントとアクセスキーを設定するだけ、という簡単なものだ。 ただ、メールのフォーマットに不自由さがあったり、利用回数による課金の可能性を考えると不満がないなんてことにはならない。できるならば制約を抱えたくない。そもそも Headless CMS 枠に WordPress を用いているなら、そこでどうにかしたい。 まず候補に上がるのが、Contact Form 7 だ。WordPress のメールフォーム実装で普遍的な知名度を誇る WP プラグインである。WordPress を Headless 化していることで、各種機能やデータに REST API を介してアクセスできるようになっているわけだから、Contact Form 7 も使えるに違いないというわけだ。 動作環境について WordPress 側の準備 まず WordPress 側の準備をしよう。 以下が、メールフォームの実装に関わる WordPress プラグイン一覧だ。適宜インストールして有効化しておいてほしい。 必要なプラグイン Step 1 wp-config.php に定数を定義する。これは…
-
VSCode の配色テーマを Monokai Pro から GitHub Theme に変更した話
VSCode のテーマを Monokai Pro から GitHub Theme に変更したことを報告する。 「VSCode のテーマなにがいいだろ…」だったり「ソースコードが見ずらいような気がする…」など配色テーマに満足していないなら、このエントリーが一助となるかもしれない。 はじめに そもそも VSCode のテーマである Monokai Pro に不満はない。むしろ使い続けたいほどだ。なのに、なぜ長らく採用していた Monokai Pro を変更しようと思い至ったのかについて、まずは話しておこう。 Monokai Pro とは Monokai Pro は、従来からの Monokai 配色を VSCode 用に再設計したカラースキームで、ソースコードの配色はもちろんのこと外観テーマやアイコンセットまで及ぶ妥協のない配色テーマになっている。 また Monokai 配色の生みの親(Wimer Hazenberg 氏)によるオリジナル製で “Monokai” を冠したカラースキームにおける本家本元として人気を博している。さまざまなコードエディタで Monokai の配色テーマを含まないものはないほどだ。 そもそも、Monokai の火付け役となったのが、Sublime Text (コードエディタ)にデフォルトテーマとして実装されたことから始まる。それまでのエディタと比べても、明らかなモダンぶりに魅了されたエンジニアは少なくないと思う。 わたし自身、Sublime Text 以降のエディタ遍歴のいずれにおいても Monokai 配色を頑なに採用してきた。 配色テーマを変更した動機 さて、そんな長い付き合いの Monokai を変更しようとした事由としては、OS側の外観モードとミスマッチではないかと感じたことに端を発する。 Mac、Windows に関わらずライトモードを採用していて、モニターの中の景色は白を基調として総じて明るい。そんななかコードエディタだけダーク風味であることに「あれっ?」となったわけだ。いまさら感の強い話ではあるけれど、気になってしまったらどうしようもない。 最近、目が霞むのも、こういった影響が有るのだろうか?…