SlideShare uma empresa Scribd logo
1 de 67
Mavenの真実とウソ
kawasima
#ccc_g3
JJUG CCC 2019 fall
Mavenに関する世間の印象
XMLを沢山かかなきゃいけない
既存のプラグインの組み合わせじゃやり
たいことができない。
主に使っているビルドツール2018
https://snyk.io/blog/jvm-ecosystem-report-2018-tools/
Javaビルドツールの歴史的な背景
2000年頃 2004年
依存管理をプラス
2004年
2007年
アンチテーゼ アンチテーゼ
XML Hell?
今どき(v3.6.2)、でこれだけ書いとけばOK
それでもXMLが嫌なら…
polyglot-mavenを使えば、YAMLでpom書くことができる
.mvn/extensions.xml に、これ書くだけ。
demo
polyglot-maven、Groovyで書くこともできちゃう…!
Gradle側から見たMaven
(Flexible)
https://gradle.org/maven-vs-gradle/
“GradleとMavenはどちらも、Convention
over Configurationを提供する。
ただMavenはカスタマイズが面倒でときには不
可能となる非常な厳格なモデルが用意されて
いる。これにより、特別な要件が無いのであ
ればビルドの理解が容易になりますが、多く
の自動化の問題に適さないことでしょう。”
柔軟性が無い?
Database Migrationを使ってテーブルを作る
用意したSQLファイルを実行して、テストデー
タを投入する。
作ったテーブル定義からマスタのEnumクラス
をジェネレートする。
プロセスをXMLで書くのは確かにしんどい…
だが、これはMaven-Wayではない!
flyway-maven-plugin
sql-maven-plugin
sql-maven-pluginでsrc/main/javaに出力する?
ってことはgenerate-sourcesフェーズで実行しないと…
例
Javaが少しでも書ける人ならば、
プラグインを作るのはとても簡単
異なるプラグインを組み合わせて、なんとか実現しよう
という発想をやめよう!
アドバイス
Gradle側から見たMaven
(Performance)
https://gradle.org/maven-vs-gradle/
Gradleの方が速いとしているが、一番時間のかかるテストの
フェーズで、mavenのsurefireプラグインのパラレルオプショ
ンが付けられていないのでフェアと言えなそう…
Mavenの基本構成
Plugin
Life cycle
Phase1
Phase2
Phase3
Phase4
Phase5
Goal A
Goal B
Plugin
Goal C
resourcesdefaultライフサイクル
process-resources
compile
test
package
install
resources
surefile
deploy
compiler
compile
test
jar
jar
install
install
deploy
deploy
デフォルトのライフサイクル
ライブラリのidentity
GroupId
ArtifactId
Version
世界で一意なグループの識別子
(いわゆるネームスペース)
グループの中で一意な識別子
バージョン
RELEASE
SNAPSHOT
※厳密にはpackagingとclassifierを加えて一意
SNAPSHOTの使い方
開発中はSNAPSHOTを使う
自チームのコントロール下にあるモ
ジュールを開発中にテストしたいと
きのみにSNAPSHOTを使う。
Icon made by Freepik from www.flaticon.com
リポジトリ
パッケージングされたライブラリ(Artifact)が
格納される場所
Local
Remote
ローカルのユーザ毎に格納される
デフォルトは$HOME/.m2/repository
ネットの向こう側に置いてみんなが使う
ビルトインなサブモジュール
サブモジュールの仕組みが標準なので、複数の
モジュールを簡単に扱える
Plexus Container
Sisu
Guice
Classworld Aether
DIの仕組み。コンフィグや
Maven自体のコンポーネントを
Mojoにインジェクションする。
ClassLoaderの
ロード順を変え
たり、なんだり
Dependencyを解決し、
Mavenリポジトリから
Artifactを取ってくる
Wagon
リモートからファイルを
取ってくるためのプロトコル
抽象レイヤ
MavenSession
RepositorySystemSessionMavenProject
LocalRepository
RemoteRepository
Maven
Lifecycle
Phase
Plugin(mojo) Mavenのしくみ
aetherを使えばこんなこともできる
https://github.com/kawasima/try-artifact
demo
よく使うプラグイン
標準プラグインでMustなもの
compiler
surefire
compiler
いわゆるjavacを実行するやつ。
コンパイラのバージョン指定に必須
デフォルトのJDKバージョン
3.8.0以降 1.6
3.8.0以前 1.5
いずれにせよ古い…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
JDK8以前
JDK8以降
surefire
MavenデフォルトのsurefireバージョンだとJunit5の
テストが認識されないなどの相性問題がよく起きる
ので、最新のものをバージョン指定する。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
知っておくと便利な標準プラグイン
dependency
assembly
dependency:purge-local-repository
「何か上手く依存ライブラリが更新されない」など
の問題にぶちあたったとき…
.m2/repositoryをゴッソリ消す
dependency:purge-local-repository を使って
そのプロジェクトの依存ライブラリを一度purgeする
dependency:analyze
使われていない依存ライブラリを検出する。
テストが無いのも一目瞭然
assembly
バッチなどで、シェルスクリプトなどをまとめて
アーカイブするときに使う
サードパーティ製おすすめプラグイン
frontend
versions
Jib
Github
frontend
nodeの環境がなくても、
自動的にインストールして、
npmやwebpack実行してくれる
elm用も作ってあります
versions
依存ライブラリのバージョン更新を調べたり、
プロジェクトのpom.xmlのバージョンを更新したり
versions
リリース作業は、maven-release-pluginを使うよりも
こっちを使った方が細やかでミスが少ない。(個人の感想)
% mvn versions:set -DremoveSnapshot=true
% mvn versions:revert
SNAPSHOTを外す
元に戻す
jib
Dockerイメージをシュッと作る
demo
GitHub
Maven siteをgh-pagesにプッシュする。GitHub製。
つかってみよう
Phaseに結び付けずに使う
ライフサイクルで動いてくれないので、
% mvn jib:dockerBuild
などのように、プラグイン名:ゴールを指定して動かす。
Phaseに結び付けて使う
Mavenのログ見るときに重宝する
ので一意で分かりやすい名前を
こうしておくと、mvn package実行すると、packageフェーズでこの
プライグインが自動的に動いてくれる
つくってみよう
ボイラープレート生成
アーキタイプでボイラープレート自動生成
% mvn archetype:generate 
-DarchetypeGroupId=org.apache.maven.archetypes 
-DarchetypeArtifactId=maven-archetype-plugin 
-DarchetypeVersion=1.4
プラグインの名前
[名前]-maven-plugin とする
こうしておけば、Mavenプラグインとアーティファクト名から一目瞭然だし、
実行時には[-maven-plugin]の部分を省略可能
% mvn プラグイン名:ゴール
maven-[名前]-plugin は、maven公式プラグイン用のネームスペースと
されているので注意!
example-maven-plugin/
├── pom.xml
└── src
├── it
│   ├── settings.xml
│   └── simple-it
│   ├── pom.xml
│   └── verify.groovy
├── main
│   └── java
│   └── [package]
│   └── MyMojo.java
└── test
├── java
│   └── [package]
│  └──MyMojoTest.java
└── resources
└── project-to-test
└── pom.xml
インテグレーションテスト用
プラグイン本体
ユニットテスト用
Mojo
maven pluginの1タスク。
引数なしのexecuteメソッドを実装するだけ
void execute() throws MojoExecutionException, MojoFailureException;
MojoFailureException: 予期する例外
プラグインの使い方が間違っている、前提条件を満たしてないなど、プラ
グインの利用者に伝えたいもの
MojoExecutionException: 予期しない例外
Mojoでハンドリングしないもの(ふつうはMojoからthrowする必要はない)
Mojoのクラスアノテーション
goalの名前
Executionsで実行フェーズを省略したときに
このゴールが実行されるフェーズ
設定値のインジェクション
引数で設定値を指定するときの名前
pomのconfigurationで設定値を指定するときの名前
executeの実装
プラグインのビルド、インストール
% mvn install
ふつうのMavenのプロジェクトと同じく、
mvn installするだけ。
テスト
Mojo単体でのテスト
JUnit使ってふつうに書く
プラグインを使うテスト用プロジェク
トを作って、プラグインを動かし、結
果をアサーションする
インテグレーションテスト
integration-test
もともとデフォルトのライフサイクルの1フェーズに存在する
AssertionはGroovyなどで書ける
verify.groovy
デプロイ
作ったプラグインをチームのリポジトリにデプロイすれば
チームみんなが使えるようになる
% mvn deploy
作ったプラグインを使う
実行する
% mvn install -Dmaven.test.skip=true
[WARNING]         ,、,,,、,,,
      _,,;' '" '' ;;,,
    (rヽ,;''""''゛゛;,  ノr)
    ,; i ___  、___iヽ゛;,    テストしないとかお前それ@t_wadaの前でも同じ事言えんの?
  ,;'''|ヽ・〉〈・ノ |゙ ';,
  ,;''"|    ▼    |゙゛';,
  ,;''  ヽ _人_ /  ,;'_
/シ、 ヽ ⌒⌒ /   リ \
|    "r,,`"'''゙´    ,,ミ|
|             リ、 ,    リ |
|    i   ゛r、ノ,,r" i _ |
|    ――`ー -----------┴ ´⌒ )
(ヽ _____________ ,, _´)
(_ _______________ ,,⌒ ィ
T |
| |
Centralデプロイ
作ったプラグインをCentralリポジトリにデプロイすれ
ば世界のみんなが使えるようになる
demo
プラグイン作例
EclipseLink static weave
開発動機:
EclipseLinkは、ビルドしたEntityクラスに対してWeavingという
バイナリ書き換えを行う。
このMavenプラグインは存在するが、persistence.xmlを必要とするので
無くてもWeavingする必要があった。
https://github.com/kawasima/staticweave-nopu-maven-plugin
DBAプラグイン
開発動機:
データベースのスキーマ(データ含む)のバージョンと、アプリケーションの
バージョンを同期をとりたい。
https://syobochim.hatenablog.com/entry/2015/12/12/232318
https://github.com/coastland/gsp-dba-maven-plugin
WAITT
開発動機:
Eclipseのtomcatプラグインのdependencies扱いまわりにバグが
あって、中々修正されないので、自前で開発した。
demo
サーバを選択し、Webアプリケー
ションを起動する
Webアプリケーションのカバレッジを取る
アプリケーションのダッシュボード
Springを使っていなくても、アクチュエイターみたいなのが付けれる
Executable jarを作る
seasar2でも、Strutsでも、struts1でもExecutable jarがア
プリケーションに何も手を加えず作れる!
そのほかご要望があれば作ります
まとめ
●
Mavenはプロジェクトの構成を書くもの。
プロセスを書きたければ、プラグインを作ろ
う。(簡単だよ)
●
作ったプラグインはCentralリポジトリにデ
プロイしてみよう!

Mais conteúdo relacionado

Mais procurados

IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)NTT DATA Technology & Innovation
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOpsMariOhbuchi
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方Recruit Lifestyle Co., Ltd.
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 

Mais procurados (20)

IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 

Semelhante a Mavenの真実とウソ

Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
19. camel tooling
19. camel tooling19. camel tooling
19. camel toolingJian Feng
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目大樹 小倉
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Taiji Miyabe
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)taskie
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 

Semelhante a Mavenの真実とウソ (20)

Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
19. camel tooling
19. camel tooling19. camel tooling
19. camel tooling
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
Silverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナーSilverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナー
 

Mais de Yoshitaka Kawashima

ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?Yoshitaka Kawashima
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?Yoshitaka Kawashima
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣Yoshitaka Kawashima
 
システムダウンのひみつ
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつYoshitaka Kawashima
 
アンチフラジャイルの世界
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界Yoshitaka Kawashima
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 FallYoshitaka Kawashima
 
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較Yoshitaka Kawashima
 
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1Yoshitaka Kawashima
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199Yoshitaka Kawashima
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?Yoshitaka Kawashima
 

Mais de Yoshitaka Kawashima (20)

ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
Are Design Patterns Dead?
Are Design Patterns Dead?Are Design Patterns Dead?
Are Design Patterns Dead?
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
 
本番障害に至る病
本番障害に至る病本番障害に至る病
本番障害に至る病
 
システムダウンのひみつ
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつ
 
アンチフラジャイルの世界
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界
 
Atomic Architecture
Atomic ArchitectureAtomic Architecture
Atomic Architecture
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
 
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
 
How to find tech books
How to find tech booksHow to find tech books
How to find tech books
 
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
 
Antifragile Clojure
Antifragile ClojureAntifragile Clojure
Antifragile Clojure
 

Mavenの真実とウソ