やる気がストロングZERO

やる気のストロングスタイル

2020-01-01から1年間の記事一覧

【Go】nilチェックは value == nilだとダメな場合がある

Goのnilチェックで躓いたのでメモ。 nilチェックは value == nilだとだめな場合がある こんな挙動になる type Nameable interface { GetName() string } type Human struct { name string } func (h *Human) GetName() string { return h.name } func IsNilH…

【テーブル設計】フルネームで保持しているカラムを後から「名字・名前」に分けたい時

フルネームで保持しているカラムを後から「名字・名前」に分けたい時、どうすればいいか考えてみた。 出来たと思うけど、脳内シミュレーションしただけで実際にシステムに対して行ったことがあるわけではないので、もしかしたら穴があるかも。 サンプルケー…

SynologyのNAS設定が楽しい

去年くらいにSynologyのNASを購入した。 【NASキット】Synology DiskStation DS218j [2ベイ / デュアルコアCPU搭載 / 512MBメモリ搭載] 多用途な初心者向け発売日: 2018/09/01メディア: Personal Computers GWに入って改めて設定を触ってて「便利だなー楽し…

scpコマンドの挙動でハマった(ちょっとだけGo)

Goを書いていてsshでファイル転送したかったが、Goでのいい感じのクライアントが見つからなかったので普通にscpコマンドを実行させることにしたが、 scpコマンドの挙動でハマった。 雑にメモ。 やりたいこと remoteの/var/data/ディレクトリの中身を localの…

【Go】gorpにdecimal型を認識させる

経緯 データベースライブラリにgorpを使ってみている。 gorpでは(gorpというより、database/sqlの範疇かも)Goのint型はDBのintと、GoのstringはDBのtextやvarcharと、みたいに自動的にマッピングされて意識しなくてもデータやり取りができる。 Goには標準…

読み解きづらいコード

自分が「読み解きづらいな」と思ったコードに対して、なぜ読み解きづらいと思ったのかを考察し、 また、そうならないようにどうしたいかを考えたので書いてみる。 個人的な考えだし、エンジニアレベルとか状況とかで変わると思うし、僕が見えてない事情とか…

Goのエラーハンドリングについて

したいこと なにかエラーが出た時に、ログから 「なにが発生したのか」 「どこで発生したのか?」 がわかるようにしたい。 Go標準のerrorはスタックトレース情報を持ってない errors.New("エラーメッセージ") これだとスタックトレース情報がない。 エラーが…

Goでdecimalを使う時に考えたこと(floatの精度について)

Goで金額計算するのでdecimal型を探したが、基本ライブラリには無いようなのでどうしようか悩んでいた。 基本ライブラリにmath.bigパッケージがあり、Floatの精度を自由に決められるようなものがあったのでそれで行けるかと思ってたけど(不必要に外部ライブ…

【Go】gorpを使ってDDDのRepositoryを書いた

goを使ったシステムにて、DBアクセス周りでgorpを使うことにしたので色々調査してDDDで言うところのrepositoryを書いた。 gorp GitHub - go-gorp/gorp: Go Relational Persistence - an ORM-ish library for Go gorpを選んだ理由 データ取得は「SQL文を直接…

【Go】インターフェースから具象型への型アサーション

インターフェースに依存させてコードを書いてると、テストで具象型として扱いたいケースが出てきたので方法を調べた。 参考) A Tour of Go value := <インターフェース型の変数>.(<具象型>) value, ok := <インターフェース型の変数>.(<具象型>) // この場合…

docker-compose.ymlをDRYに書く

参考) docker-compose で複数環境を構築するときの設定をなるべく DRY に書く - ikasama over technology ここに書かれてる「修羅の道」をやってしまってた。 DRYに書くには以下の様にするらしい。 共通docker-compose.yml(これだけで基本動く様にする) …

activeresource-responseを入れたら既存挙動が変わってバグった

経緯 activeresourceでデータ取得するロジックがあった。 user = User.find(1) data = user.some_data # apiアクセスを実行してデータを取得 dataがnilだったら〜〜という処理があった # data == nilのとき、resultには"データはありませんでした"が入る想定…

テーブル数が増えることを避けた末路(シミュレーション)

テーブルの正規化を理由にテーブルを増やす提案をしたら嫌がられた記憶がある。 「なるべくテーブルを増やしたくない。たぶんカオスになる」という考えっぽいけど、これは正しく設計されずに不要なテーブルを作成されまくってしまったケースの経験が元になっ…

VLOOKUPの使い方

何度か人が使っているのを見てて、なぜか何度説明されても理解できなかったのでちゃんと調べた。 メモっとく。 参考) ここの「VLOOKUP関数の使い方(実践)」をやってみてやっと理解できた。 ExcelのVLOOKUP関数の使い方|指定の列と同じ行にある値を返す |…

nekone.loveをkubernetesで動かしてみた

勉強とか実験とかのためにネコ画像集めてるサイトを運用してる。 https://nekone.love 元々普通のVM上でdocker-composeで運用してたが、これをGoogle Kubernetes Engine (GKE)に引っ越ししてみた。 やるまでは「docker-composeでいいじゃん」とか思ってたけ…

vimでyamlを書きやすくする:Vundle管理でvim-yamlプラグインを入れた

普段IDEを使ってるけど、プロジェクト外のyamlをちょっと編集したい時とかvimで編集することがある。 デフォルトだとインデントがいい感じにならないので設定した。 Vundle vimのプラグイン管理ツール。人気っぽいので深く考えず採用した。 GitHub - VundleV…

docker-compose.yamlのcommandで"&&"とか"&"をつかったコマンドを使いたい。

こんな感じでcommandを書くとコンテナ起動に失敗した。 version: "3" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 command: 'yarn install --check-files && bundle exec rails s & nginx -g "daemon off;"…

業務でTDDしにくいけどTDDしてみた

業務でもTDDをやるのは有用だと思ってる。 個人的には必須だと思ってる。 いままで数カ所の現場で働いてきたけど、なぜかTDDを導入しているところは無かった。 有用だと思う理由とか経験 実装完了し、コードレビューや開発内手動実行テストが通った後、最終…

【覚書】Ubuntuのシェルをfishにした

環境 Ubuntu 18.04.3 LTS デフォルトシェルをbashに戻した zshを使ってたけどとりあえず、bashに戻した。 fishをパッケージからインストール GitHub - fish-shell/fish-shell: The user-friendly command line shell. sudo apt-add-repository ppa:fish-shel…

処理の内部で現在時刻を取得したくない

内部で現在日時を取得してそれによってなにか判断したてたりするやつが好きではない。 結構よく見かける。 例えば以下のような年齢を求めるロジック。 class human() def age() today = Date.today() age =# (todayと生年月日で年齢を計算) return age end e…

DI(依存性の注入)の良いところ

ぼやっとは理解してたけど、この記事を見て知識が定着した気がする。 DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita この記事ではDIとDIコンテナとサービスロケータについて触れてたけど、 ここではDIについてだけ改めて自分でまとめてみる。 サンプ…