SlideShare una empresa de 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リポジトリにデ
プロイしてみよう!

Más contenido relacionado

La actualidad más candente

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 

La actualidad más candente (20)

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 

Similar 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
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 

Similar 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 版)
 
Silverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナーSilverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナー
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 

Más de Yoshitaka Kawashima

ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?Yoshitaka Kawashima
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?Yoshitaka Kawashima
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣Yoshitaka Kawashima
 
システムダウンのひみつ
システムダウンのひみつシステムダウンのひみつ
システムダウンのひみつYoshitaka Kawashima
 
アンチフラジャイルの世界
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界Yoshitaka Kawashima
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?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
 

Más 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
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
思考停止しないアーキテクチャ設計 ➖ 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の真実とウソ