技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

GolangでCasbin~アクセス制御ライブラリ~【Go】

What is Casbin オープンソースのアクセス制御ライブラリ。 GoやJava、Node.js、PHP、Pythonなどをサポート。 What Casbin does subject(主語)、object(目的語)、action(行動)をベースとして柔軟に「許可」「不許可」を定義することができる。 RBAC(…

UnixTimeStampのカラムから日付ごとに集計する【MySQL】

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 Functionsをデプロイする【Go】【GCP】

Cloud Pub/Sub Cloud Pub/Subは、GCPの環境を使って、手軽にPublisherとSubscriberを構成できる、Googleによるクラウドツールです。 概要については、こちらに記載していますのでご覧ください。 Cloud Functions Cloud Functionsは、GCPの環境を使って、手軽…

Cloud SQL Proxyで接続する【GCP】

Cloud SQL Proxyとは Cloud SQL へ接続するにはいくつか方法があります(公式)。 その中でもCloud SQL Proxyを使った接続は、簡単にセキュアな接続ができる便利な方法です。 パブリックIP接続を構成したり、SSL/TLSを構成する手間が省けます。 プロキシサー…

POSTなどの際、JSONの形式をチェックしつつも、bodyの指定は任意とする方法【Go】

Go

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によるサーバ接続【Linux】

SFTPとは FTPのSSHバージョンです。簡単に言えばセキュアなFTPということになります。 FTPはFile Transfer Protocolの略で、ファイルをやり取りする際の取り決めです。 SSHによって暗号化された通信路を使ってファイルをやり取りすることになるので、機密情…

Cloud SchedulerでHTTPエンドポイントを叩く【GCP】

GCP

Cloud Schedulerとは App Engin(GCP)、PubSub(GCP)、HTTPのエンドポイントを決められた時間に起動することができます。 スケジュールをJobと呼びますが、3つのJobまでならば無料です。 Jobを作成する GCPコンソール(画面)から行うか、gcloudコマンドを利用…

Docker on Google Compute Engine【GCP】

GCPを使って外部IPを立てる選択肢 外部IPを立てるにはいくつか選択肢があります。 Google Kubernetes Engine(GKE)を使う Google Compute Engine(GCE)を使う GKEを使う場合、Kubernetesを使うので外部IPが動的になります。 GCEを使う場合、IPを固定にする…

MySQLのインデックス

インデックスとは何か テーブルの中身を検索するときに、任意のカラムの値で検索しやすいようにしておくための機能です。 たとえばnameというカラムを持つメンバーリストのテーブルがあるとします。 それはid順では並んでいますが、name順では並んでいません…

SQLトランザクション【Go】

Goでのトランザクションの構築方法と、トランザクションの利用ケースについて触れます。 MySQLなどのデータベースにアクセスする際、Goではdatabaseパッケージを使うことができます。 databaseパッケージを用いてトランザクションを構築するには、Txを使いま…

実行時の関数名やファイルパス、行数を取得する【Go】

Go

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でメール送信機能を開発【Go】【GCP】【CI/CD】

概要 GoとCloud Functions、さらにSend Gridというメールサービスを使って、HTTPリクエストからメールを送信できる機能を開発します。 さらに、関数を記載したGithubリポジトリへmasterブランチへのマージがあれば、Cloud Funcitonsへデプロイして関数を更新…

validator【Go】

Go

ライブラリvalidatorを使って、structのバリデーションを行うことができます。 基本的な使い方は公式ドキュメントやQiitaの優良記事に譲るとして、ここでは備忘の意味も込めて、私が引っかかった点を紹介します。 ペアにしたフィールドのうち、全てが空にな…

Cloud Functions概要【GCP】

GCP

Cloud Functionsとは イベント駆動なサーバレス実行環境です。 指定したイベントの発生に呼応して、軽量な関数を、フルマネージド環境で実行させることができます。サーバのメンテナンスは不要です。 対応言語は、「Node.js(JavaScript)」「Python」「Go」…

Cloud Pub/Sub概要【GCP】

GCP

Cloud Pub/Subとは GCP上で構成するPublisher Subscriber機能です。 任意のTopicを作成し、そこに向けてPublish、またPublishされたメッセージをSubscribeします。 送信と受信を分けることで、処理を一度にする必要がなくなるので、実行時間を分散させること…

Cloud Build【GCP】

GCP

Cloud Buildとは Google Cloud上で、何らかのトリガーをキーにしてCI/CDを自動化することができるサービスです。 使い方 gcloudコマンド、APIを使用して手動で設定する方法と、 GCPのGUI上でトリガーを設定する方法があります。 まずは、CI/CDの自動化が目的…

Kubernetesの概要【Kubernetes】

Kubernetesとは Kubernetesは複数ホストでのコンテナを効率的に管理することを目的としたコンテナオーケストレーションツールの1つです。k8s(kとsの間が8文字)とも表記されます。 Google内のチームから発足したプロジェクトによって作られたものであり、GKE…

DockerfileのENTRYPOINTとCMD【Docker】

Dockerfileには、ENTRYPOINTとCMDという項目があります。 ENTRYPOINT 実行するプロセスを指定。 docker runコマンド実行時に、ENTRYPOINTに書いてあるプロセス以外を指定できない。 docker run時に指定できるのは、通常、引数だけ。 ただし、run --entrypoin…

アパレル業界の動向と将来性、ファッション・テックカンパニー

はじめに 私はファッション業界でエンジニアをしており、業界のことを知ろうと「2030年アパレルの未来 福田稔(東洋経済新報社)」を読みました。 業界のことが分かりやすく俯瞰的にまとめられていて、とても勉強になりました。 この記事に書かれていない内…

Modules【Go】

Go

Goのversion 1.12以降では、$GOPATH/src以下のパッケージ管理を改め、go.modによって依存関係を管理できるようになりました。 まずは、Goのversionを確認し、必要に応じて最新化します。 $ go version $ brew upgrade go Modulesを試すには、下記コマンドに…

Dockerfileの使い方【Docker】

使い方 Docker imageを自分で作成して使用する場合に利用するファイルです。 配置場所は、プロジェクト配下であればどこでも大丈夫です。 Dockerfileを構成するコマンドは公式で案内されているようにいくつかありますが、下記で一例を示します。 FROM golang…

Swaggerの使い方 - 分割と結合も紹介【Swagger】

Swaggerとは SwaggerはREST APIのドキュメントや、テストできるUIを提供してくれるツールです。 APIのドキュメントはこれまでスプレッドシートなどで書かれることが多かったかと思いますが、Swaggerであれば、リッチなWebサイトのようなUIを提供してくれるの…

日付の範囲指定、月指定など - GoのSquirrelでの方法も紹介【MySQL】

日付の範囲を指定したり、7月だけといったように指定する方法を紹介します。 日付の範囲 // min ~ max WHERE <カラム名> BETWEEN min AND max // min ~ maxではない範囲 WHERE <カラム名> NOT BETWEEN min AND max 年、月、日の指定 // 年月日の指定 WHERE D…

docker-composeでSwagger【Swagger】【Docker】

docker-compose経由でSwagger UIを起動する方法を紹介します。 docker-composeは.yamlにswaggerに関する命令を記述すれば大丈夫です。 services: ... swagger: image: swaggerapi/swagger-ui volumes: - ./api/src/docs/swagger.yaml:/swagger.yaml ports: -…

dep パッケージの依存関係管理ツール【Go】

Go

depはパッケージのバージョン・依存関係管理ツールで、Node.jsでいうところのnpmにあたるものです。 go getコマンドでインストールする場合と異なり、同じプロジェクト内で安全に同じバージョンのパッケージを使うよう管理することができます。チームで開発…

bashの環境設定 - .bashrcと.bash_profile【Linux】

.bashrcと.bash_profileは、bashの環境を設定するファイルです。 .bashrcに記述された内容は、シェルを起動するたびに1度実行されます。 .bash_profileに記述された内容は、ログイン時に1度だけ実行されます。 実行させたい内容によって使い分けるのが良いで…

command not foundと$PATH【Go】

パッケージをインストールして正しくcommandを入力しても実行できない場合、いわゆる「PATHが通っていない」状態かもしれません。 $ echo $GOPATH $ echo $PATH で、それぞれの環境変数を確認することができます。 $GOPATHはgoの作業ディレクトリです。ファ…

swaggoの導入【Go】【Swagger】

swaggoという外部パッケージを利用することで、Swaggerを使って作成済みのGoのソースコードからAPIドキュメントを作成できます。 install パッケージをインストールします。 $ go get github.com/swaggo/swag/cmd/swag APIに関する記述を規定のフォーマット…

ページング関連のクエリとUI設計【MySQL】

Limit Offsetは遅い MySQLを用いてページネーションを作成する際、はじめに遭遇するのが「Limit Offset」構文かもしれません。 MySQLに用意されている、ページングを実現するには便利な機能です。 SELECT * FROM tableA LIMIT 10 OFFSET 250 OFFSETに指定さ…

セレクトボックスの初期表示【Vue.js】

セレクトボックスの初期表示をする場合、hidden属性を持つoptionタグを最初に記載します。 pugとTypeScriptを使用しています。 <template lang="pug"> select(v-model="selectedPtn") option(value="" hidden) Choose // 初期状態で表示されるが、選択肢には表示されない option(v</template>…