モブプロに魔法感あった #mobProgramming #ちら裏

概要 もう最近はずっと、チームの作業は基本的にモブプログラミングになってる。(今は6人体制) ちょっと印象に残る出来事があったので残しておく。 きっかけ 今進めている実装で、一部モヤモヤすることところがあった。 ちょっとテストがめんどくさかった…

ネストしたオブジェクトのマッピングする #MyBatis

MyBatisでネストしたオブジェクトマッピングするサンプルあんまり見かけないので、残しておく。 例えばこんなデータを person id name address_id 1 yamada 11 2 sato 11 address id city 11 tokyo book id title 21 hoge 22 fuga 23 piyo person_book perso…

すでに存在するデータベースにFlywayを適用する(その2) #flyway

概要 下記記事の続き。 今度はbaselineの設定を活用して、SQLとFlywayの足並みを調整する。 su-kun1899.hatenablog.com テスト用のデータベースを作る create database if not exists flyway_sample character set utf8 flyway管理外のテーブルを追加する my…

すでに存在するデータベースにFlywayを適用する #flyway

概要 Baselineを使って、MySQL+Mavenで、FlywayによるDB構成管理を既に存在するデータベースに適用する。 Flyway by Boxfuse • Database Migrations Made Easy. テスト用のデータベースを作る create database if not exists flyway_sample character set ut…

SonarQubeを使ってみた #sonarqube

概要 Javaで作ってるリポジトリにSonarQubeを適用してみました。 SonarQubeとは? SonarQubeは、ソースコードの静的解析ツールです。 www.sonarqube.org 今回はオープンソースであれば無料で使えるSonarQube.comを利用します。 about.sonarqube.com アカウン…

GitHubのAPIを使って、Releaseコンテンツを取得する

概要 GitHubのAPIも触らないまま大人になってしまった。 せっかくなのでモブプロにお世話になっているMobsterをAPI経由でダウンロードしてみます。 Releaseコンテンツ リリースページからDownloadできるやつらのことです。 APIの表現だとassetsというようで…

nodebrewでNode.jsをインストールしてHello World

nodebrewのインストール インストール。 $ curl -L git.io/nodebrew | perl - setup bash_profileにPATHを追加 export PATH=$HOME/.nodebrew/current/bin:$PATH $ source .bash_profile Node.jsのインストール 7.9.0をインストール $ MAKE_OPTS="-j 2" nodeb…

ローカルで作成したブランチがリモート追跡されない #git

Git

ローカルで新規にブランチを作成してpush git push origin [ブランチ名] リモートのブランチを追跡してくれない。 git branch -vv しても追跡ブランチが出てこない。 set-upstream-toを使う git git branch --set-upstream-to=origin/[ブランチ名] これで gi…

Javaで期間の日数を計算する #java

概要 2016年1月7日から2017年4月27日みたいな期間の日数を数える方法。 Period…惜しい 日付の期間を扱うには java.time.Period クラスがあるが、悲しいことに日数をカウントするAPIがない。 getDays() は日付だけで計算をするため、月をまたいだ日数のカウン…

CircleCIでjacocoのカバレッジレポートをとる #circleCi #jacoco #java

概要 SpringBoot + Spock + maven で開発をしているんだけれど、せっかくテストも書いているのでカバレッジレポートをCI時に取得するようにする。 pom.xmlにjacocoプラグインを追加 ... <build> ... <plugins> ... <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.9</version> <executions> <execution> <id>prepare-agent</id> </execution></executions></plugin></plugins></build>

flywayで差し込みバージョンを適用する #flyway

こんな感じの時、間に差し込みバージョンを作る。 +------------+-----------------+---------------------+---------+ | Version | Description | Installed on | State | +------------+-----------------+---------------------+---------+ | 1.0 | init …

IntelliJ IDEAでフォーマットを一部無効にする #IntelliJIdea

コードのフォーマットは基本IDEAにおまかせなのですが、どうしても一部フォーマットをカスタマイズしたいことはあると思います。 JavaのStreamでごりごりやる時とか、Spockのwhereブロックとか。 んで、せっかくキレイにしたのにうっかりファイルにフォーマ…

Eachの中でassertするときは明記する必要がある #spock

Spockでは通常、thenブロックの中はbool値を返すようにしておけば勝手にアサーションしてくれる。 then: actual == expect ただし、イテレーションの中はアサーションしてくれない then: actualArray.each { it.getName == expectName // falseでもテストNG…

Mavenで特定のクラスのテストだけ実行する #maven #java

特定のテストだけ mvn test -Dtest=red.sukun1899.SampleSpec クラス名が一意になるなら、パッケージは省略できる mvn test -Dtest=SampleSpec 複数の場合はカンマでつなぐ mvn test -Dtest=HogeSpec,FugaSpec 特定のメソッドだけ実行する場合シャープでつな…

TDDっぽくモブプログラミングしてみた #MobProgramming

最近はまっていることがあるんですけど。。と同僚に言ったら「モブプログラミングですか?」と聞かれる程度にはハシャいでおります。 先日はTDDな感じでやってみました。 (結果的にそうなったけれど、そうしようとして始めた感じではなかったかも) ちょっ…

データ抽出のテストにはモブプログラミングを使うといいかも #MobProgramming

モブプログラミングとは? この記事では複数人で行われるプログラミングの意です。 ペアプロの延長線上だと考えて下さい。 正確な定義とは異なるかもしれません。 参考までに以前書いた記事です。 su-kun1899.hatenablog.com データ抽出のテストって? 何ら…

最良の日だったかもしれない #ちら裏 #ポエム

転職して、一年ちょっとが経ったにもかかわらず、モヤモヤしながらもがき苦しんでるわけですが、今日は入社してから一番いい日だったかもしれない。 何があった とあるモジュールがSVNで構成管理をしているんだけれど、GitHubに移行することになった。 自分…

ネストしたオブジェクトでAutoMappingを使う #mybatis

MybatisのネストしたresultMapの自動マッピングはデフォルトPARTIALになっている。 つまり、ネストしたオブジェクトのauto-mappingは効かないということ。 これだといちいちマッピングを定義してやらなきゃいけないのでとてもつらいのだが、設定を変えなくて…

意見 #ちら裏 #ポエム

自分を信じよう 自分の知識・経験をフル稼働させて出した答えを信じ、大切にしたほうがよい。 他人の方が優秀かもしれないが、自分ではない。 もっとも信頼できるのは自分自身であるべきだ。 自分を疑おう 自分の出した答えを疑ったほうがよい。 世の中には…

IntelliJ IDEAで括り放題 #intellijidea

職場の同僚に教えてもらったのだが、Surround selection on typing quote or brace を有効にするといいかもしれない。 括弧やクォートで括り放題になる。 括っている文字の置き換えもIDEAさんがいい感じにやってくれる。 どういうことかというと。。 これを…

モブプログラミングやってみたら最高だった #MobProgramming

今日チームでモブプログラミングを初めてやってみたのだけれど、最高だったのでテンションのままにブログを書く。 きっかけ ふりかえりでたまたまJoy.Incの話になり、あの会社は全部ペアでやってるらしく、ペアプロしたくなるという話をした。 そうしたら、…

application.ymlの値をJavaアプリケーション側で受け取る #SpringBoot

org.springframework.beans.factory.annotation.Value を使うとよい。 ただし、まとまった単位で管理したいときは @ConfigurationProperties を使うのがよさげ。 例 @Configuration public class AppConfig { @Value("${spring.datasource.schema}") private…

SpringBootでMybatisの設定を動的に書き換えられないか挑戦してみた(失敗した)

MyBatisのConfigをJava側で動的に書き換えられないか調べてみた。 結果できなかったんだけど、備忘録として。 stackoverflow.com org.apache.ibatis.session.Configuration に値を突っ込むことでどうにかなりそう? configuration.getVariables().put("globa…

JavaScriptのargumentsオブジェクトは配列じゃないのか。。 #javascript #js

JavaScriptでargumentsオブジェクトは配列っぽいけど配列ではないらしい。 なので配列のメソッド呼ぼうとしてもエラーになる。 ES2015以前 Array.prototype.slice.call で配列に変換してあげるのがよいっぽい。 var args = Array.prototype.slice.call(argum…

Mavenでコマンドライン引数を渡す

run.argumentsプロパティで渡してあげるとよい。 Sample: ./mvnw spring-boot:run -Drun.arguments="arg1, arg2" 参考 stackoverflow.com

Javaの文字列結合はどうしたものか #java

以前はStringBuilderかStringBufferがお約束だったけども、String#joinがJava8から追加されてどうしたらいいものか。 StringJoinerなんてのもある。 というかString#joinは内部的にはStringJoinerを使っているらしい。 色々記事を漁ってみたものの、パフォー…

SpringBootでH2の管理コンソールを使う #springboot

spring:h2:console:enabled をtrueにするだけ。 spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb;MODE=MYSQL username: sa password: h2: console: enabled: true SpringBoot起動後、下記にアクセスすると利用できる。 http:…

SpockでJavaの無名クラスを使ったらCircleCIがコケた #circleci #java #spock

CircleCIがテストの途中にタイムアウトでこけた。 command mvn test took more than 10 minutes since last output ログを見ても途中で止まっており、結果としてもタイムアウトなので検討つかない。 もちろんローカル環境では発生しない。 Revertなりなんな…

ジョイ・インクを読んだ #JoyInc #ポエム

「ジョイ・インク 役職も部署もない全員主役のマネジメント」を読んだ。 ある意味ぶっ飛んだ会社の話。 突拍子もないいくつもの仕組みが、「なぜ、そうするのか」次々に裏付けされていく。 どういう文化にしたいのか、どう向かっていくのか。 そして終盤、筆…

JavaのStreamで独自ソート #java

sortedにComparator Streamで独自ソートするにはsortedにComparatorを渡してやればOK。 List<Person> personsSortedByName = getPersons().stream() .sorted(new Comparator<Person>() { @Override public int compare(Person person1, Person person2) { return person1.get</person></person>…

SpockでオーバーロードされたメソッドをMockする #spock #groovy

JavaでオーバーロードされたメソッドをMockしようとしても、うまくMockできないことがある。 どちらのメソッドを呼べばいいかわからないからだと思う。(たぶん) 下記のようなメソッドをMockしたい場合の対応。 public String doSomething(String arg1) pub…

ORマッパーへの違和感が少し晴れた気がする

前からあった違和感 (リレーショナル)データベースのモデリングとドメインのモデリングは違うっていうのを前から思っていて、それからDBとドメインのオブジェクトをそのまま結びつけるようなORマッパーにはずっと違和感を覚えていたのだ。 だからMyBatisみ…

SpringBootのWebAPIでResponseのJSONをPretty Printにする #springboot

SpringBootでWeb APIを作ってる時に、ResponseのJSONをPretty Printにしたくなった時の対応。 やりたいこと こういうのを {"hoge":[123,456],"huga":"Yeah!","piyo":{"code":"AA1234","name":"Bob"}} こういう感じにしたい { "hoge" : [ 123, 456 ], "huga" …

Developers Summit 2017に行ってきた(2日目) #devsumi

デブサミ2日目も行ってきた。 参加したセッションのメモと感じたことなど。 codezine.jp 1日目はこちら。 su-kun1899.hatenablog.com No-Ops で大量データ処理を簡単に実現する - Google Cloud Platform で実現する次世代データ処理基盤 No-Ops で大量データ…

Developers Summit 2017に行ってきた(1日目) #devsumi

今年もデブサミに行ってきた。 一日目に参加したセッションのメモと感じたことなど。 codezine.jp 確実に良くするUX/UI設計 感じたこと・考えたこと コアコンセプトを決めて一貫性のあるポリシーでプロダクトを磨き上げていくことは大切だなと思った。 検証…

Visual Studio Codeがいい感じ

VSC

普段のちょっとしたメモ書きに使うエディタをVisual Studio Codeにしてみたのだが、これがどうして中々いい感じである。 code.visualstudio.com 普段ソースコードはほとんどIntelliJ IDEAで完結してしまうので、エディタで実装はほとんど行わない。 なので、…

「わかる!ドメイン駆動設計 」を読みました

DDD、ドメイン駆動設計という単語は耳にしていたものの、ご多分に漏れず例の分厚い本に臆してました。 「わかる!ドメイン駆動設計 」ならボリュームも少なそうだし、読みやすいかなって思って読んでみました。 techbooster.booth.pm つまみ食いしていた知識…

mysqldumpでROW_FORMATが出力されなくなった #mysql

現象 MySQLを5.5から5.6にしたら、mysqldumpした際のDDL( CREATE TABLE とか)に、ROW_FORMATが出力されなくなった。 importでこけたので調査してみたらCompactで作成されており、追いかけてみるとdumpした時点のDDLにROW_FORMATの出力がなかった。 エラーメ…

Collectors.toMapで、同一キーを処理する #java

streamでMapに詰める Javaのstreamを使ってMapにつめかえる場合、Collectors.toMapを使う。 Map<Long, String> fooMap = fooList.stream() .collect(Collectors.toMap( Foo::getId, Foo::getName ); しかし上記の場合だと、キーが重複していた場合に IllegalStateException</long,>…

GitHubで何か自動化するならdeploy keysが便利だ

GitHubで特定リポジトリに対して何かを自動化する時、専用のアカウント用意しないとダメかなー、なんて考えていたらDeploy Keyと言うものがあった。 Managing deploy keys | GitHub Developer Guide deployという名前だけど、deploy以外にも使える。 ReadOnl…

CircleCIでメモリ上限値越えエラー #circleci

現象 CircleCIのビルドが TIMED OUT で失敗して、見に行ってみたら下記のようなメッセージが表示されていた。 Your build has exceeded the memory limit of 4G on 1 container. The results of this build are likely invalid. We have taken a snapshot of…

IntelliJ IDEA でJavaScriptをデバッグ

前提 Chrome IntelliJ IDEA ULTIMATE 2016.3 拡張機能を入れる Chrome Extensionを導入する。 chrome.google.com ローカルデバッグ プロジェクト内にある HTML + js のような形であれば、HTMLファイルを右クリック→デバッグ実行でOK。 ビルトインサーバーが…

社内勉強会でライトニングトークしてきた

社内勉強会でライトニングトークしてきた。 フリーテーマだったので何話そうか迷っていたけれど、最近いい感じになってきたチームのコードレビューについて話してみた。 コードレビューを題材にしたものの、チーム開発が単なる個人の集合じゃなくて、コラボ…

QA勉強会に行ってきた #QAアーキ

12/20にQA勉強会に参加してきたので、印象に残ったことや思ったことなどを残しておく。 品質評価に焦点を当てた勉強会に参加したのは初めてだったかも。 connpass.com テスト観点は意図を明らかにする 仕様をなぞるのではなく、意図を明らかにするのがテスト…

iTunesで曲名がオンラインで見つからなくなった。。

どのタイミングでなったのか分からないけどiTunesでCDを読み込もうとしたら「このCDの曲名がオンラインで見つかりませんでした。曲を読み込みますか?」と言われて曲名が読み込めなくなった。 備忘のための解決策メモ。 発生した環境 iTunes 12.5.4.42 macOS Si…

au iphone6s を UQ mobile に乗り換えた

au との契約期間はまだまだ残っていたんだけども、解約金を払ってもすぐに回収できるくらい価格差あるなぁーと思って UQ mobile に乗り換えた。 ただ au版iPhone6sについてはまだもうしばらく使う予定なので、simロック解除して使うことにした。 あんまり詰…

Optional#orElseについて勘違いしていた #java

JavaでOptionalの値取り出しにorElseを利用すると思うんだけど、その動きについて勘違いしていた。 Optional<Long> getId(); こんな感じのメソッドがある時、orElseでの値取り出しは下記の用になると思う。 Long id = getId().orElse(createId()); 勘違いしてた所 </long>…

JJUG CCC 2016 FALL に参加してきた #jjug_ccc

12/3(土)にJJUG CCCに参加してきたので印象に残ったことや感想など。 #ccc_a1 Be a great engineer! speakerdeck.com 追いかけるべきトレンドを見抜くには、その本質を見極めることが大事という話だった。 結局これが一番おもしろかったかもしれない。 体物…

最近迷っていること: メンバーオブジェクトのアクセサを用意すべきか? #java #プログラミング

最近迷っていること。 クラスのメンバーオブジェクトのアクセサを直接定義するよりは、隠蔽してあげたほうがいいんじゃないかと思うこと。 最終的にケースバイケースだろうとは思いつつ、気にする観点やポリシーなどはまだまだ引き出しが少ない。 直接アクセ…

JavaScriptでUtilityっぽいものを作る

JavaScriptでUtilityっぽいものを作るには。 同僚に教えてもらったのでメモ。 // Utilityっぽいの var Sample = (function() { var pub = function() { console.log('publicだよ'); }; var prv = function() { console.log('privateだよ'); }; return { // …