バッチ処理を作るときに考えていること

バッチ処理を作る必要があるときに、考えているようなことをまとめておく。 はじめに バッチは機能の実現方式であって、機能そのものではないと思っている。 なので、バッチ処理は単独で考えるものではないというのが前提。 とはいえバッチという手段を選ん…

Mac に Virtual Box がインストールできない

概要 Macをクリーンインストールして、VirtualBoxを入れようとしたらエラーになってしまった。 brew でも、ダウンロードしたインストーラでもだめ。 installer: The install failed (エラーによってインストールできませんでした。ソフトウェアの製造元に問…

SSH トンネルしてみる

概要 SSH で ポートフォワードして、トンネル経由で接続する。 Example 踏み台経由サーバ経由で、リモートサーバの 3306 にアクセスする。 トンネルを掘るに当たり、入り口はローカルポートの 13306 としてみる。 説明 例 リモート remote.com 踏み台 fumida…

GitHub でサブチームを作ったらリポジトリの権限が剥がされた #GitHub

問題 GitHub のチーム機能を使ってサブチームを作ったら意図しない挙動になった。 サブチームを作ってリポジトリ Admin 権限を付与し、親チームは Write 権限にしようとしたところ、サブチームの権限が変更されてしまう事象が発生した。 GitHub のチーム機能…

Visual Studio Code の設定を管理する #VSCode

概要 会社と自宅とか、マシンの買い替えを考慮して、VSCode の設定を管理できるようにしておく。 azure.microsoft.com 基本的な設定 Settings Sync という拡張機能が便利そうだったので、それを使ってみることにした。 GitHub のトークンを使って、 Gist に…

「みんなのコンピュータサイエンス」を読んだ

みんなのコンピュータサイエンス作者: Wladston Ferreira Filho,小山裕司出版社/メーカー: 翔泳社発売日: 2019/01/15メディア: 単行本(ソフトカバー)この商品を含むブログを見る 文系学部卒で、ひょんなことからプログラマになった僕にとって、コンピュー…

大きなファイルを分割する

経緯 1GB 以上ある大きなファイルを見たい ログみたいなの grep 駆使とかではなくて何ならエディタで見たいようなとき もういっそファイルを分割して見ることにする split コマンドを使う split -a 3 -b 100m bigsize.log splited- -a suffix の桁数を指定 -…

pytest-mock を使ってみた #python

概要 Python のテストを Pytest で書いてみた Mock を使おうと思ったら pytest-mock という標準の薄いラッパーを使うのがいいらしい そもそも標準を知らないので少し苦労した なのでログとして残しておく テスト対象 HTTPリクエストして、レスポンスを返すよ…

DockerHub から image のタグ一覧を取得する

Docker Hub の image から tag を探そうと思ったときに、数が多いと中々目当てのものが見つからなかったりする。 API で取得するスクリプトを組んでる人がいたが、API のバージョンが古かったり、タグがたくさんあるとページングされたりするので、自分で書…

「サーバ/インフラを支える技術」を読んだ

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己出版社/メーカー: 技術評論社発売日: 2008/08/07メディア: 単…

Go で JSON を扱うユーティリティを作ってみた #golang

概要 Go で JSON を扱うときは構造体を用意して扱うのが一般的と思われる。 ただ外部の API 経由で取得する JSON なんかだと、フィールドが大量だったり、階層が深かったりして扱うのが大変だったりする。 一部の値だけ使いたいときにもっと手軽に扱えないか…

「なぜ、あなたの仕事は終わらないのか スピードは最強の武器である」を読んだ

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である作者: 中島聡出版社/メーカー: 文響社発売日: 2016/06/08メディア: Kindle版この商品を含むブログ (5件) を見る Amazon の Prime Reading で読めたので読んでみた。 スタートダッシュ方式によ…

#RSGT2019 に参加して考えたことなど

2019.scrumgatheringtokyo.org 今年も Regional Scrum Gathering Tokyo に参加してきた。 チケット取れずに行けないかなと思っていたけど、December チケットで滑り込み。 RSGT2019 をきっかけに自分が感じたり考えたことをまとめておく。 なので、セッショ…

「仕事は楽しいかね?」を読んだ

仕事は楽しいかね? (きこ書房)作者: デイル・ドーテン出版社/メーカー: きこ書房 発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (6件) を見る Prime Reading で無料だったので読んでみた。 悪くはないと思うのだが、それほど刺さるものでもな…

Gradleプラグインを作ってみた #groovy #gradle

概要 これまでMavenを中心に使ってきたんだけど、今のチームではGradleを採用している。 Gradle始めて使ってみてるので、試しにプラグインを作ってみた。 どんなプラグイン? github.com ざっくりいうとただ指定したディレクトリ配下にあるSQLファイルを実行…

JJUG CCC 2018 Fall で登壇してきました #jjug_ccc #ccc_e4

JJUG CCC 2018 Fall にて「複雑なドメインに泥臭く立ち向かう」というタイトルで登壇してきました。 JJUG CCC での登壇は1年ぶりです。 セッション概要 www.java-users.jp 当日の資料 speakerdeck.com 前回登壇したときのブログ su-kun1899.hatenablog.com …

Gopher道場卒業式でLTしてきました

mercari.connpass.com 11月から4回に渡ってメルペイさんの主催するGopher道場に参加して、12/3に卒業式でLTしてきた。 業務でやらない言語を実践的に学ぶ機会はなかなかないので、大変貴重でありがたかった。 課題に手が回りきらなかったのが悔やまれるが、…

CircleCIをローカルで動かす #CircleCI

概要 circleciのCLIをインストールするとローカルで動かせるようになります。 公式 を見ながらやってみた インストール Macだとbrewで入れられる。 $ brew update $ brew install circleci brewで入れるとUpdateコマンドは使えないらしい。 $ circleci updat…

テスト用のDBをdockerで立てるGradleタスクを作る #Gradle

概要 テストでDBを別立てするような場合に、CI上ではCI環境側で提供するデータベースを利用するが、ローカル開発時のテストDBの用意がめんどくさい。 なので、コンテナDBをテスト時に立ち上げるタスクを作ってみる。 build.gradle task setupTestDatabase(ty…

What's New in Kotlin 1.3をさらっと眺めてみた #kotlin

What's New in Kotlin 1.3 - Kotlin Programming Language ↑をサラッと読んだ contract構文ができた? スマートキャストが便利になったみたいだけどよく分からん。。 whenの条件で変数代入ができるようになった @JvmStatic と @JvmField がinterfaceのcompan…

データアクセスのUnitTestについて考える

問題 DBに登録したり、ファイルに書いたり、保存するような処理のテストについて考える。 インターフェースを抽象化すると、下記のような感じになる。 public interface ItemRepository { // itemを保存する void save(Item item); } この場合、saveのユニッ…

「決断力」を読んだ

決断力 (角川oneテーマ21)作者: 羽生善治出版社/メーカー: 角川書店発売日: 2005/07/01メディア: 新書購入: 44人 クリック: 297回この商品を含むブログ (562件) を見る 読んだきっかけ 将棋を指さない僕でも名前は知っている羽生さん。 読んだきっかけは↓のt…

MacにVagrantでAnsibleのお試し環境を用意する #vagrant #Ansible

VirtualBoxとVagrantを最新化 $ brew cask install virtualbox $ brew cask install vagrant VagrantでUbuntuの環境を作成 Ubuntu18.04のBoxを使う。 Vagrant box ubuntu/bionic64 - Vagrant Cloud Boxの追加 $ vagrant box add ubuntu/bionic64 追加の確認 …

pyenvを使って異なるバージョンのpythonを併用する #python

pythonの最新バージョンで動かないツールがあって、やむなく古いpythonを使うためにpyenvを入れてみた。 インストール Macなのでbrewで入れる。 $ brew install pyenv ~/.bash_profile で環境変数等を設定する。 #pyenv export PYENV_ROOT="$HOME/.pyenv" ex…

メソッドを持ったKotlinのEnumをGroovy(Spock)から参照する #groovy #spock #kotlin

概要 KotlinはJava同様Enumに振る舞い(メソッド)を持たせることができる Groovyから振る舞いを持ったEnum要素を直接参照するとエラーになる Direct field access operator(@)経由で参照すればOK EnumのValueOfでも参照できる 振る舞いを持たないEnumはうま…

MyBatisのMapKeyはValueがクラスじゃないといけないらしい #mybatis

MyBatisでリストで取得するのは簡単 @SelectProvider(type = HogeSqlBuilder::class, method = "selectList") override fun findAll(): List<Hoge> MapKey を使うとSelect結果をいい感じにMapにしてくれるMyBatis。 この場合、Hoge.id がKey、Valueが Hoge のMapに</hoge>…

KotlinでMyBatisのSqlProviderを使う #kotlin #mybatis

概要 MyBatisのSQLはXMLに書いたりアノテーションに文字列で渡す方法があるが、SqlProviderを使う方法を試してみた。 これが一番好きかもしれない。 ちなみにSpringBoot(mybatis-spring-boot-starter)を利用している。 SqlProviderの使い方 クエリの種類に…

Groovy(Spock)からKotlinのCompanion Objectを呼び出す #groovy #spock #kotlin

概要 最近はJavaではなくKotlinを書いていますが、Spockが好きすぎるのでテストはGroovyで書いたりします。 KotlinのCompanion Objectをテストするときに、Groovy側から呼び出す方法です。 Companion Object Kotlinではクラスに静的なメソッドを定義する時は…

Nuxtで画面に横断的にMiddlewareを適用する #nuxtjs #vuejs

概要 Nuxtにはミドルウェアという機構がある。 ミドルウェアを使うと、ページがレンダリングされる前に、実行されるカスタム関数を定義できる。 複数のページでミドルウェアを実行するには3つ方法がある。 nuxt.config.js でrouterに読み込ませる layoutでミ…

SpringBootで独自例外を作ってControllerAdviceでハンドリングする

概要 独自RuntimeExceptionを作る 独自例外はControllerAdviceで横断的にハンドリングする テストを書く 前提 Kotlin RestControllerを想定 ゆえにRestControllerAdviceを使う テストはSpock 独自例外の作成 RuntimeExceptionを作成 コンストラクタ引数はnul…