英語のリスニングは難しい 日本人にとって英語のリスニングは難しい。 これは英語の語順とフランス語の語順、その下は英語の語順と日本語の語順を比べたもの。見ての通り、日本語は英語とは全く異なる語順になっている。 聞くときに日本語に翻訳しようとして…
きっかけ 現在勤めている会社が社員に英語力を求めているのがきっかけで勉強を始めた。TOEICの点数が求められている。 が、今はそれに関係なく英語の勉強を毎日、2年続けている。 英語の情報に触れていると、英語がわからないことは大きな損失だと感じたから…
What is Casbin オープンソースのアクセス制御ライブラリ。 GoやJava、Node.js、PHP、Pythonなどをサポート。 What Casbin does subject(主語)、object(目的語)、action(行動)をベースとして柔軟に「許可」「不許可」を定義することができる。 RBAC(…
UnixTimeStampで表現されているカラムを用いて、日付ごとに集計を行うクエリ。 SELECT DATE_FORMAT(FROM_UNIXTIME(c.confirmed_at),'%Y/%m/%d') AS confirm_date, COUNT(ci.id) AS quantity FROM carts AS o JOIN cart_items AS ci ON ci.cart_id = c.id WHE…
Cloud Pub/Sub Cloud Pub/Subは、GCPの環境を使って、手軽にPublisherとSubscriberを構成できる、Googleによるクラウドツールです。 概要については、こちらに記載していますのでご覧ください。 Cloud Functions Cloud Functionsは、GCPの環境を使って、手軽…
Cloud SQL Proxyとは Cloud SQL へ接続するにはいくつか方法があります(公式)。 その中でもCloud SQL Proxyを使った接続は、簡単にセキュアな接続ができる便利な方法です。 パブリックIP接続を構成したり、SSL/TLSを構成する手間が省けます。 プロキシサー…
POSTでbodyの入力を任意としたいけど、JSONの形式がちゃんとあっているかエラーハンドリングしたい場合。 func decodeJSON(r *http.Request, dst interface{}) error { dec := json.NewDecoder(r.Body) return dec.Decode(dst) } create(w http.ResponseWrit…
SFTPとは FTPのSSHバージョンです。簡単に言えばセキュアなFTPということになります。 FTPはFile Transfer Protocolの略で、ファイルをやり取りする際の取り決めです。 SSHによって暗号化された通信路を使ってファイルをやり取りすることになるので、機密情…
Cloud Schedulerとは App Engin(GCP)、PubSub(GCP)、HTTPのエンドポイントを決められた時間に起動することができます。 スケジュールをJobと呼びますが、3つのJobまでならば無料です。 Jobを作成する GCPコンソール(画面)から行うか、gcloudコマンドを利用…
GCPを使って外部IPを立てる選択肢 外部IPを立てるにはいくつか選択肢があります。 Google Kubernetes Engine(GKE)を使う Google Compute Engine(GCE)を使う GKEを使う場合、Kubernetesを使うので外部IPが動的になります。 GCEを使う場合、IPを固定にする…
インデックスとは何か テーブルの中身を検索するときに、任意のカラムの値で検索しやすいようにしておくための機能です。 たとえばnameというカラムを持つメンバーリストのテーブルがあるとします。 それはid順では並んでいますが、name順では並んでいません…
Goでのトランザクションの構築方法と、トランザクションの利用ケースについて触れます。 MySQLなどのデータベースにアクセスする際、Goではdatabaseパッケージを使うことができます。 databaseパッケージを用いてトランザクションを構築するには、Txを使いま…
runtimeパッケージのCallerを用いて取得することができます。 package main import ( "runtime" "fmt" ) func main() { pc, pwd, line, ok := runtime.Caller(0) fn := runtime.FuncForPC(pc) fmt.Println(pc, pwd, line, ok, fn.Name()) } runtime.Caller()…
概要 GoとCloud Functions、さらにSend Gridというメールサービスを使って、HTTPリクエストからメールを送信できる機能を開発します。 さらに、関数を記載したGithubリポジトリへmasterブランチへのマージがあれば、Cloud Funcitonsへデプロイして関数を更新…
ライブラリvalidatorを使って、structのバリデーションを行うことができます。 基本的な使い方は公式ドキュメントやQiitaの優良記事に譲るとして、ここでは備忘の意味も込めて、私が引っかかった点を紹介します。 ペアにしたフィールドのうち、全てが空にな…
Cloud Functionsとは イベント駆動なサーバレス実行環境です。 指定したイベントの発生に呼応して、軽量な関数を、フルマネージド環境で実行させることができます。サーバのメンテナンスは不要です。 対応言語は、「Node.js(JavaScript)」「Python」「Go」…
Cloud Pub/Subとは GCP上で構成するPublisher Subscriber機能です。 任意のTopicを作成し、そこに向けてPublish、またPublishされたメッセージをSubscribeします。 送信と受信を分けることで、処理を一度にする必要がなくなるので、実行時間を分散させること…
Cloud Buildとは Google Cloud上で、何らかのトリガーをキーにしてCI/CDを自動化することができるサービスです。 使い方 gcloudコマンド、APIを使用して手動で設定する方法と、 GCPのGUI上でトリガーを設定する方法があります。 まずは、CI/CDの自動化が目的…
Kubernetesとは Kubernetesは複数ホストでのコンテナを効率的に管理することを目的としたコンテナオーケストレーションツールの1つです。k8s(kとsの間が8文字)とも表記されます。 Google内のチームから発足したプロジェクトによって作られたものであり、GKE…
Dockerfileには、ENTRYPOINTとCMDという項目があります。 ENTRYPOINT 実行するプロセスを指定。 docker runコマンド実行時に、ENTRYPOINTに書いてあるプロセス以外を指定できない。 docker run時に指定できるのは、通常、引数だけ。 ただし、run --entrypoin…
はじめに 私はファッション業界でエンジニアをしており、業界のことを知ろうと「2030年アパレルの未来 福田稔(東洋経済新報社)」を読みました。 業界のことが分かりやすく俯瞰的にまとめられていて、とても勉強になりました。 この記事に書かれていない内…
Goのversion 1.12以降では、$GOPATH/src以下のパッケージ管理を改め、go.modによって依存関係を管理できるようになりました。 まずは、Goのversionを確認し、必要に応じて最新化します。 $ go version $ brew upgrade go Modulesを試すには、下記コマンドに…
使い方 Docker imageを自分で作成して使用する場合に利用するファイルです。 配置場所は、プロジェクト配下であればどこでも大丈夫です。 Dockerfileを構成するコマンドは公式で案内されているようにいくつかありますが、下記で一例を示します。 FROM golang…
Swaggerとは SwaggerはREST APIのドキュメントや、テストできるUIを提供してくれるツールです。 APIのドキュメントはこれまでスプレッドシートなどで書かれることが多かったかと思いますが、Swaggerであれば、リッチなWebサイトのようなUIを提供してくれるの…
日付の範囲を指定したり、7月だけといったように指定する方法を紹介します。 日付の範囲 // min ~ max WHERE <カラム名> BETWEEN min AND max // min ~ maxではない範囲 WHERE <カラム名> NOT BETWEEN min AND max 年、月、日の指定 // 年月日の指定 WHERE D…
docker-compose経由でSwagger UIを起動する方法を紹介します。 docker-composeは.yamlにswaggerに関する命令を記述すれば大丈夫です。 services: ... swagger: image: swaggerapi/swagger-ui volumes: - ./api/src/docs/swagger.yaml:/swagger.yaml ports: -…
depはパッケージのバージョン・依存関係管理ツールで、Node.jsでいうところのnpmにあたるものです。 go getコマンドでインストールする場合と異なり、同じプロジェクト内で安全に同じバージョンのパッケージを使うよう管理することができます。チームで開発…
.bashrcと.bash_profileは、bashの環境を設定するファイルです。 .bashrcに記述された内容は、シェルを起動するたびに1度実行されます。 .bash_profileに記述された内容は、ログイン時に1度だけ実行されます。 実行させたい内容によって使い分けるのが良いで…
パッケージをインストールして正しくcommandを入力しても実行できない場合、いわゆる「PATHが通っていない」状態かもしれません。 $ echo $GOPATH $ echo $PATH で、それぞれの環境変数を確認することができます。 $GOPATHはgoの作業ディレクトリです。ファ…
swaggoという外部パッケージを利用することで、Swaggerを使って作成済みのGoのソースコードからAPIドキュメントを作成できます。 install パッケージをインストールします。 $ go get github.com/swaggo/swag/cmd/swag APIに関する記述を規定のフォーマット…