プログラミングHHVM Hack 執筆しました

こんにちは、5月なのに真夏のように暑いですね🌞本日発売のプログラミングHHVM Hackという本を執筆しましたf:id:yone098:20170524160024p:plain:w50f:id:yone098:20170524160024p:plain:w50f:id:yone098:20170524160024p:plain:w50

以前、Hackがリリースされた直後に出した本よりもボリュームが多く300ページ近い量になっていますのでHHVM Hackに少しでも興味がある方は是非手にとって読んでみてください。 そして、そろそろPHPからHHVMに移行してみようかなという方は是非実践してみてください。

Amazon Kindle

プログラミングHHVM Hack

プログラミングHHVM Hack

Gihyo Degital Publishing

gihyo.jp

書籍目次

1章 プログラミングHackとその環境構築
1.1 プログラミングHackとは
1.2 環境構築


2章 Hackの特長と構文
2.1 Type Annotations(型注釈)
2.2 Type Inference(型推論)
2.3 Casting
2.4 Refining
2.5 Advanced Rules
2.6 Summary Table


3章 Hackの機能
3.1 Collection
3.2 Shapes
3.3 Tuples
3.4 Enums
3.5 Generics
3.6 Type Aliase
3.7 Lambda
3.8 Callable
3.9 Async
3.10 XHP
3.11 Attributes
3.12 終わりに


4章 ツール
4.1 hh_server
4.2 hackificator


5章 Extension
5.1 PHP and C++ extensions

おわりに

HHVM Hack

これからHHVM Hackがもっと盛り上がっていったら良いなと思っていますので、PHPの皆さんと一緒にHHVM Hackも盛り上げていきたいなと思います。よろしくお願いします。

Java開発におけるErrorProneのススメ

こんにちは、今シーズンのNBAもGSWの試合は全試合観てる米林です🏀 今年は毎試合満員御礼のOracleアリーナに行って観戦したいなぁと思いつつカリフォルニア州オークランドの人たちはOracleがデータベースの会社って知ってるのかどうか毎回気になっています🏀

うちの会社ではJavaの開発において、Error Prone を積極的に取り入れている。 その理由はCTOのmopemopeが入れろって怖いから、ただそれだけである。

実際のところ導入して損は無いので皆さんも是非導入を検討して頂きたい。

Error Prone とは

github.com

Error Prone とはGoogleが公開していて、githubに記載されている説明のとおり “Catch common Java mistakes as compile-time errors” そのままである。 コンパイル時にエラーが起きそうなところははじいてしまおうという素敵なものだ。 Error Prone は Bazel, Maven, Ant, Gradle で動作します。

Java開発者の方に馴染みのある FindBugs のようなものだと思ってもらえると理解は早いと思います。

現在、私が開発しているプロジェクトでは Gradle に組み込んで IntelliJ から実行していて Error Prone のエラーをクリアしないと実行が出来ないため、エラーを直さないと CTO に怒られる以前に実行出来ないためエラーがある状態では業務に支障をきたしてしまいますので強制的にエラーは排除する必要があります😢

インストールなどは公式ドキュメントを見てください。イマドキのJavaの開発であれば、ほぼ Gradle プロジェクトで開発されていると思うので、Gradleに組み込んで実行するまでは3分もあれば確認出来るかと思います。私が自身で作ったプロジェクトに組み込んだ際には既存の build.gradle に以下を追加しただけです。

apply plugin: 'net.ltgt.errorprone'

repositories {
    mavenCentral()
}

configurations.errorprone {
    resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.14'
}

bugpattern

バグパターンはエラーや警告などいくつかに分かれています。 こちらにバグパターンが一覧化されています。そこそこ数が多いですが、色々みていくと自身非常にためになったのでJava開発者の皆さんは是非みてみてください。

バグパターンは、それぞれのサンプル毎に Positive examplesNegative examples があります。英語って難しいですね、どっちが正しいのか最初理解に苦しみました。

バグパターンの一例ですが、ArrayToStringというものがあり、配列をそのまま toString している箇所はNGとなります。

githubexampleを置いておくのでcloneしてGradleでbuildしてみてください。エラーが以下のように表示されるので、Main.java を直しながら確認してみると分かりやすいと思います。

$ git clone https://github.com/yone098/error-prone-example.git
$ cd error-prone-example/
$ gradle clean run
:clean
:compileJava
/Users/yone098/p/error-prone-example/src/main/java/example/Main.java:17: エラー: [ArrayToString] Calling toString on an array does not provide useful information
        System.out.println(nameArray);
                           ^
    (see http://errorprone.info/bugpattern/ArrayToString)
  Did you mean 'System.out.println(Arrays.toString(nameArray));'?
エラー1:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed with exit code 1; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 5.081 secs

custom plugin

plugin としてカスタムチェックを追加することが可能です。 BugCheckerを継承して、MethodInvocationTreeMatcherを実装しプラグインを作成します。

@AutoService(BugChecker.class) // the service descriptor
@BugPattern(
  name = "MyCustomCheck",
  // ...
)
public class MyCustomCheck extends BugChecker implements MethodInvocationTreeMatcher {
  @Override
  public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) {
    // TODO:
  }
}

Gradleで利用するには

configurations {
  annotationProcessor
}

dependencies {
  annotationProcessor project(':custom-checks')
}

tasks.withType(JavaCompile) {
  options.compilerArgs += [ '-processorpath', configurations.annotationProcessor.asPath ]
}

詳しくは、Plugin Checksをチェックしてください。

最後に

Java開発している方には是非、自身のプログラムを ErrorProne で一度チェックしてみては如何でしょうか?

そして、株式会社Abbyでは絶賛開発者を募集しています。現在、募集しているプロジェクトでは CTO のもとで一緒に楽しく開発出来ますし、もちろん一緒に ErrorProne も見守ってくれます。

気軽にtwitterFacebookなどで声かけてください。そして一度弊社まで遊びにきてください!よろしくお願いします!

2016年 振り返り

クリスマスゲームでGSWが負けてイライラマックスのyone098です🏀 今年も残り僅かなので2016年を振り返ってみたいと思います。

9月

9月には最後の Seasar Conference が行なわれました。OSS を通じて多くの人と知り合えた Seasar には大変感謝しますし愛着があるプロダクトだっただけに寂しい思いもあります。ありがとう Seasar

seasar.connpass.com

10月

開発した新しい箱庭ゲームのリリースがありました🐻🐻🐻 クレジットに会社名やメンバーの名前を見ると毎回嬉しい気持ちになります。

今回もクライアントは JavalibGDX を採用し、サーバーは Go で作りました。

play.google.com

f:id:yone098:20161228110830p:plain:w300

会社

順調に優秀なメンバが増え平均年齢も年々下がり、とても嬉しく思っています。箱庭ゲーム開発のノウハウを生かして引き続き質の高い箱庭タイトルを開発しながら新しいチャレンジを続けていきたいと思います。

箱庭ゲーム開発以外では海外展開のシステム開発に携わっており、プロジェクトメンバが海外出張に行く機会が増えたことも新しいチェレンジにつながっています。こちらも引き続き頑張っていきたいです!

会社のメンバには今年も感謝の気持ちで一杯です。来年もよろしくお願いします!!!