Trailheadはじめました #salesforce

ずっと食わず嫌いで手を付けていなかった、というわけでもないのですが、ドラクエ11も裏ボスまで倒してやることがほぼなくなったということもあり、Trailheadをはじめました。 やってみると、結構楽しいw 今のところのスコアはこんな感じ。 ランク: Expedit…

【一休 × JapanTaxi】サービスを支えるデータ分析基盤に行ってきた #ikyu_japantaxi

8/17(木)に開催された「【一休 × JapanTaxi】サービスを支えるデータ分析基盤」というイベントに行ってきました。 ikyu.connpass.com 資料は上記ページに公開されていますが、一応メモ。 一休.comを支えるデータ分析基盤 実践的な内容でよかったです。 AWS…

Spring BootのRedisCacheManagerでJSONをいろんな型で利用する

Spring Bootのキャッシュ抽象化(Redis)でJSONを利用したい場合のメモです。 ■ 目次 そもそもなんでJSON? Configuration Jackson2JsonRedisSerializerとGenericJackson2JsonRedisSerializerの違いについて GenericJackson2JsonRedisSerializerを使うと、戻…

エラー処理を考慮したコールアウト機構としてプラットフォームイベントが使えないか? #salesforce

昨日の続き。 jappy.hatenablog.com 「Salesforce to 外部ソース」のデータ連携(HTTPコールアウト)時に、プラットフォームイベントが有効に使えないか?と、ふと考えました。 この手の話では、これまでは @future や Queueable Apexを使うのが常套手段だっ…

Summer '17で正式リリースされたプラットフォームイベントの有効な使い方を考えてみた #salesforce

Salesforce Summer ‘17でプラットフォームイベント(エンタープライズメッセージングプラットフォーム)なる機能が正式リリース されました。 新機能については、以下の動画で分かりやすく説明されてます。 Summer ‘17 開発者向け新機能 - YouTube 動画を見…

DynamoDBのTTL機能とLambdaを使ってサーバレスでのタイマー実行処理ができないか考えてみた

バッチ処理の中には、定期実行ではなく、特定の時刻に実行したい、みたいなものがあります。 例えば、今から5分後とか3日後の12:00とか。ジョブスケジューラでよくある感じのやつです。 AWSで、サーバレスなアーキテクチャ(実行基盤はAWS Lambda *1)でこの…

Visual Studio Codeを使いはじめた

今までテキストエディタはSublime Textを使っていたのですが、Visual Studio Codeを使い始めました。まだ使い始めたばかりですが、好感触なので、近いうちに完全に乗り換えようと思います。 感想 デフォルトでの使いやすさ インストールした段階で、ほぼほぼ…

アーカイブ済みの活動をクエリする時はFROM ActivityHistoriesではなくFROM Event ... ALL ROWSを使った方がよさそう #salesforce

あるオブジェクトに関連付いている活動履歴レコードをクエリする場合、SOQLで以下のようにクエリします(関連先のオブジェクトのIDが hogeId の場合) SELECT Id, Subject, Description, StartDateTime, EndDateTime FROM Event WHERE WhatId = :hogeId ORDE…

AWS CodeBuildで依存ライブラリのキャッシュを利用する

会社ブログに書きましたが、その続き、というかAWS CodeBuildのビルド時間を短縮するための小ネタです。 AWS CodeBuildはビルド時に新しく実行環境を起動するため、クリーンな環境でのビルドが行える一方、jarなりgemなりの依存ライブラリをビルドのたびにダ…

AWS SDK for Java (DynamoDBMapper)を使った条件付き書き込み

DynamoDBMapperの概要については以下に書かれています。 docs.aws.amazon.com DynamoDBMapper はタイプセーフに扱えて便利な反面、素のAWS API(オペレーション)が色々とラップされてしまっているので、以下によく使う利用法を逆引きリファレンスとして整理…

(続)活動を意図的にアーカイブしてテストしたい #salesforce

この前(というか日付的には昨日)、こんな記事を書きました。 jappy.hatenablog.com 「期日が1年以上前の活動を作ったら、そのうちアーカイブされると思ったが、1日待ってもアーカイブされなかった」というのが要旨ですが、改めて確認するとアーカイブされ…

活動を意図的にアーカイブしてテストしたい #salesforce

Salesforceにおける活動のアーカイブとしては、 期日が365日以上前の活動はアーカイブされる この365日という期限に関しては、サポートデスクに依頼することで(必要であれば)延長できる ことまでは書かれています。 さて、1件も活動が登録されていないクリ…

MyBatisのMapperをSpockで全自動テスト

MyBatisのSQLは2Way SQLではない上、動的SQLやスニペットなどによって可読性が損なわれがちということもあり、構文エラーは早めに検知する仕組みを用意した方がよいという印象です。 そこで、Mapperを全スキャンして、SpockでData Driven Testingを行う方法…

ApexでJSON.serializeした時のデータ型ごとの出力形式まとめ #salesforce

Apexでオブジェクト(SObject)を JSON.serialize した時に、データ型ごとの出力形式がどうなるのか、確認しました。 どこかにまとまっているのかもしれませんが…。 データ型が()付きのものは標準項目、それ以外はカスタム項目です。 データ型 出力時のフィ…

GradleでMyBatis Generatorを使う

MyBatisを使ったことがなかったので、評価中です。 MyBatis Generator用のGradleプラグインがあるみたいなので、試してみました。 Gradle - Plugin: com.arenagod.gradle.MybatisGenerator build.gradle build.gradle は以下のような感じです。 plugins { id…

Spring Bootでキャッシュ(Redis)からのデータ取得エラー時のカスタマイズ

(この前書いた以下の記事に近い話ですが、今回はSpring Sessionに限らない話です) Spring Bootでキャッシュ機構としてRedis( org.springframework.boot:spring-boot-starter-data-redis )を使っている場合、デフォルトでは Redis への書き込み、Redis から…

小ネタ) SpockのData Driven Testingでテスト観点をUnrollのメソッド名に記述するとよいかもしれないと思った話

Spockのデータ駆動テスト(Data Driven Testing)では、メソッド名としてデータ変数を含んだ文字列を使うことで、テスト結果を見た時にどこで失敗したか、わかりやすくすることができます。 データ駆動テスト — Spock 1.0-SNAPSHOT さて、この時に利用するデー…

マルチデータソースにおけるGradleでのFlywayタスク実行

マルチデータソース(2つのRDB)を使っている場合に、FlywayのGradle PluginでflywayMigrateなどのタスクを実行し、両方のDBにマイグレーションを実行したい場合。 flyway { user = 'user1' password = 'pass1' url = 'jdbc:xxx://host1/db1' } def flyway2 …

Spring Sessionのバージョンアップとデシリアライズエラー

Spring Security + Spring Sessionを使っている場合、通常、セッションの中身はシリアライズされてセッションストアに保存されます(実際に確認したのはRedisのみ)。 シリアライズされる org.springframework.security.core.context.SecurityContextImpl に…

正解が見えない課題を圧倒的に解決する超仮説思考 #書籍

正解が見えない課題を圧倒的に解決する 超仮説思考作者: 高野研一出版社/メーカー: かんき出版発売日: 2016/08/26メディア: Kindle版この商品を含むブログを見る 印象に残ったところを自分なりにまとめるとこんな感じでした。 5F, 3C, SWOT等のフレームワー…

Spring BootでJettyのログを少しカスタマイズする

Spring Bootでリクエストログを出力するための方法については、以下の記事で紹介されています。 qiita.com 以下の内容はSpring Boot 1.4.3で確認してます。また、Jetty以外のアプリケーションサーバの場合は当然ながら全く違った設定方法になります。 X-Forw…

Cloud First Architecture 設計ガイド #書籍

気が付いたら2017年も1週間が過ぎてしまいました。まさか7月のイベントが2016年の最後のエントリになるとは思いませんでした。 年々顕著にエントリが減ってきているので、今年は週1くらいのペースで書く習慣をつけていきないなと思います。 ネタが少ない時な…

Doma勉強会 in 東京に行ってきた #doma_tokyo

Doma勉強会に行ってきました。 eventdots.jp 最近はJPAを使っていてDomaを使えていないのですが、以前そこそこ長い間(3年以上)Doma(1, 2両方)を使ったシステム開発をしてたので、そのあたりからの進化とか色々知ることができました。 スライドは公開され…

Spring Bootでprototypeスコープを使う方法あれこれ&ベンチマーク

今更感はありますが…。 Spring Boot(というよりSpring)でインジェクションされるコンポーネントのデフォルトのスコープはSingletonになります。 そのため、Singletonスコープのコンポーネントに対して、Singletonより短いスコープであるPrototypeコンポー…

モダンJavaScript(ES6)で書いたコードがIEで動かなかったので対応ポイントをメモ

ES6で書いていたJavaScriptのコードがIE(※)で動かなかったので、その時に対応した内容のメモです。 ※ IEのバージョンは9以上を想定してます。IE8、あるいはそれ以前となるとさらに面倒さが増すので。 各ブラウザの対応状況を知る 各ブラウザの対応状況を調…

forcedotcom/wscにプルリクエストを送ってみた

先日Qiitaにこんな記事を書きました。その続きです。 qiita.com さて、変換仕様をwscを使ってアップロードするメソッドは2つあります。 void BulkConnection#createTransformationSpecFromStream(JobInfo, InputStream) TransformationSpecRequest BulkConne…

5分くらいでわかるSwagger

最近身の回りでSwaggerを聞くことが多くなってきたと感じます。 上記記事でも言及されていますが、AWS API Gateway Importerでも、APIをAPI GatewayにインポートするためのAPIの入力仕様としてSwaggerが使われています。 私もちょっと前から、AWS API Gatewa…

Google Maps API v3で任意のDOMをマーカーにしてアニメーションで移動させたい

なぜかGoogle Maps APIを使うことがここ最近は増えました。 さて、Google Maps API v3を使って地図上にマーカーを表示させる場合、標準APIだけだと少し不足感を感じることがあります。 まず、標準APIで使えるのはデフォルトのピン(画像データ)や、指定した…

Spring Session利用時、Redis上のセッション情報をデバッグするツールを作った

Spring Bootによるアプリケーションでは、Spring Sessionという仕組みでRedisにセッション情報を保持させることができ、複数サーバ間でセッション情報を共有する仕組みを簡単に実現できます。 さて、デバッグのために、Redis上のセッション情報の中身を確認…

developとトピックブランチだけで運用してたらmasterを作ってなかったので作った

GitHubを使った開発フローで、本流であるdevelopと、プルリクを送るためのトピックブランチを使ってサイクルを回していました。 しばらくコミットを重ね、ようやくリリースに至り、masterブランチにdevelopをマージしようとしたところ、masterブランチを作っ…