Septeni Engineer's Blog

セプテーニ・オリジナルのエンジニアが綴る技術ブログ

【2019年度版】セプテーニ技術読本の無料配布

こんにちは。セプテーニ ・オリジナルの池田です。

2019年残すところもあと少しになりましたが、やり残していたことが一つあります。

そうです。

セプテーニ技術読本2019」の公開です!

f:id:taketor:20191227171956j:plain

▲ 左から2019年、2018年、2017年、2016年度の技術読本

続きを読む

GraalVM for Scala ワークショップ開催レポート

こんにちは!GANMA! DevOps エンジニア兼、技術広報の青山です。

2019年もあと僅かですが、みなさん如何お過ごしでしょうか?

先日開催いたしました「GraalVM for Scala ワークショップ by Oracle & セプテーニ・オリジナル」の模様をお伝えします!

shinjuku-geek-lounge.connpass.com

なお、当日のスライドとワークショップ資料はご厚意により公開されておりますので、ご興味のある方はこちらも合わせてご参照ください。

www.slideshare.net

github.com

続きを読む

Terraformを使って複数のAWSアカウントにAWS Integrationを導入する

これは Datadog Advent Calendar 2019 13日目の記事です。

門脇(@blac_k_ey)です。

PYXISのデータ基盤チームでSREっぽいことを行っている傍ら、インフラチームとして横断的なインフラの管理・運用を行っています。

モチベーション

最近PYXISチームではモニタリングツールとしてDatadogの採用が進んでいます。
PYXISのインフラは主にAWSを利用しており、DatadogのAWS Integrationを導入することで各種サービスのメトリクスを取得することが可能になります。

ここで課題になるのが弊社のAWSのアカウント構成です。
PYXISチームのAWSアカウント管理は以下のような構成になっています。

f:id:Nomad_Blacky:20191212214328p:plain

このように、基幹となるAWSアカウントからAssumeRoleを使って、各プロジェクトで利用しているAWSアカウントにログインするという形を取っています。

続きを読む

お気に入りのScalaライブラリ・ツールをだらだら紹介する

この記事は Scala Advent Calendar 2019 の6日目です。

こんにちは。最近はPYXISのデータ基盤チームでSREっぽいことしている 門脇(@blac_k_ey)です。
TETRIS99の次はポケモンに進捗を奪われる日々を送っています。


締め切りギリギリまで ポケモンで忙しかった 「これ書きたい!」というテーマが思いつかなかったので、個人的に最近のScala開発でお世話になっているライブラリやツールなどを紹介していこうと思います。

詳細はあまり書かず、「ここが好き!」ぐらいのお気持ち表明ぐらいの文章でしかないので、ゆるく暖かい気持ちで読んでくれたら幸いです。

Ammonite

リッチなScalaREPL、Scalaスクリプト

自分のScala生活が豊かになっている大きな要因のひとつ。

Magic Importsを使って、ライブラリをちょっと試したいときにササッと使えるし、

$ amm
Loading...
Welcome to the Ammonite Repl 1.7.1
(Scala 2.12.10 Java 1.8.0_181)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
@ import $ivy.`com.typesafe.play::play-json:2.7.4`
https://repo1.maven.org/maven2/com/typesafe/play/play-json_2.12/2.7.4/play-json_2.12-2.7.4.pom
  100.0% [##########] 4.2 KiB (1.0 KiB / s)
https://repo1.maven.org/maven2/com/typesafe/play/play-functional_2.12/2.7.4/play-functional_2.12-2.7.4.pom
  100.0% [##########] 1.5 KiB (12.0 KiB / s)
https://repo1.maven.org/maven2/com/typesafe/play/play-functional_2.12/2.7.4/play-functional_2.12-2.7.4-sources.jar
  100.0% [##########] 9.7 KiB (79.4 KiB / s)
https://repo1.maven.org/maven2/com/typesafe/play/play-functional_2.12/2.7.4/play-functional_2.12-2.7.4.jar
  100.0% [##########] 175.5 KiB (389.2 KiB / s)
https://repo1.maven.org/maven2/com/typesafe/play/play-json_2.12/2.7.4/play-json_2.12-2.7.4-sources.jar
  100.0% [##########] 52.5 KiB (94.5 KiB / s)
https://repo1.maven.org/maven2/com/typesafe/play/play-json_2.12/2.7.4/play-json_2.12-2.7.4.jar
  100.0% [##########] 706.6 KiB (705.2 KiB / s)
import $ivy.$

@ import play.api.libs.json._
import play.api.libs.json._

@ val json = Json.parse("""{"language": "Scala", "repl": "Ammonite"}""")
json: JsValue = JsObject(Map("language" -> JsString("Scala"), "repl" -> JsString("Ammonite")))

スケジュール実行に対応したCIツールを使えば、手元で書いたちょっとしたスクリプトでささっと自動化できるし、

(esa.ioのメトリクスをDatadogに送信する例)

続きを読む

関数型ニキ達にインスパイアされた最近の Scala 開発の取り組み

こんにちは、中途三年目の堀越です。

近頃、Scalaのコミュニティにおいて Functional Programming による実装テクニックを紹介する記事や発表を見たり聞いたりすることは珍しいことではなくなってきました。弊社にもたくさんの関数型ニキ*1が在籍しており、わたしも日々影響を受けています。

ということで、本日はわたしが所属するチームでの日々の Scala 開発における取組みや戦略をサンプルコード*2と合わせて紹介していきます。

高カインド型によるEffect型の抽象化

私達はドメイン駆動設計を実践しています。なのでドメインロジックはドメインの関心事に集中できるのが理想です。ドメイン層を抽象化し、特定の実行環境や技術的関心事に依存しない戦略として 高カインド型 を用いてEffect型を抽象化します。

*1:関数型つよつよお兄さん

*2:import 文とか一部端折ってる部分あり。

続きを読む